mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-12 21:02:08 +08:00
api配件新增、excel导入检查修改
This commit is contained in:
+23
@@ -0,0 +1,23 @@
|
||||
package com.cf.imes.module.executor.enums;
|
||||
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 配件主类的枚举值
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum CategoryEnum {
|
||||
|
||||
ASSEMBLY("组件"),
|
||||
HARDWARE("五金"),
|
||||
EDGING("封边条");
|
||||
|
||||
/**
|
||||
* 类别名称
|
||||
*/
|
||||
private final String value;
|
||||
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
package com.cf.imes.module.executor.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum IsHavaeEnum {
|
||||
|
||||
HAVE_ITEM(0, "有"),
|
||||
BI_ITEM(1, "无");
|
||||
|
||||
|
||||
private final Integer status;
|
||||
private final String value;
|
||||
|
||||
public Integer getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
public String getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public boolean equals(Integer status) {
|
||||
return this.status .equals(status) ;
|
||||
}
|
||||
|
||||
public boolean equals(IsHavaeEnum quarrelEnum) {
|
||||
return quarrelEnum != null && quarrelEnum.status .equals(this.getStatus()) ;
|
||||
}
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
package com.cf.imes.module.executor.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum QuarrelEnum {
|
||||
PLATE_ITEM(0, "是"),
|
||||
OTHER_ITEM(1, "否");
|
||||
|
||||
private final Integer status;
|
||||
private String value;
|
||||
|
||||
public boolean equals(Integer status) {
|
||||
return this.status .equals(status) ;
|
||||
}
|
||||
|
||||
public boolean equals(QuarrelEnum quarrelEnum) {
|
||||
return quarrelEnum != null && quarrelEnum.status .equals(this.getStatus()) ;
|
||||
}
|
||||
}
|
||||
+11
@@ -8,6 +8,7 @@ import com.cf.imes.framework.common.pojo.PageResult;
|
||||
import com.cf.imes.framework.common.util.object.BeanUtils;
|
||||
import com.cf.imes.framework.mybatis.core.generator.SnowFlakeGenerator;
|
||||
import com.cf.imes.framework.operatelog.core.annotations.OperateLog;
|
||||
import com.cf.imes.framework.redis.util.RedisLockUtil;
|
||||
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
|
||||
import com.cf.imes.module.executor.controller.admin.order.vo.order.*;
|
||||
import com.cf.imes.module.executor.controller.admin.order.vo.product.OrderBodyRespVO;
|
||||
@@ -94,6 +95,10 @@ public class OrderController {
|
||||
|
||||
@Resource
|
||||
private XmlTypeRealize xmlTypeRealize;
|
||||
|
||||
@Resource
|
||||
private RedisLockUtil redisLockUtil;
|
||||
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "更新生产单")
|
||||
@PreAuthorize("@ss.hasPermission('production:manager-list:edit')")
|
||||
@@ -195,6 +200,7 @@ public class OrderController {
|
||||
@PreAuthorize("@ss.hasPermission('production:manager-list:create')")
|
||||
public CommonResult<String> getApiData(@RequestParam(value = "orderNo") String orderNo){
|
||||
|
||||
redisLockUtil.lock(orderNo);
|
||||
try {
|
||||
Long orderId = (Long) identifierGenerator.nextId(null);
|
||||
Long organId = getUserOrganId();
|
||||
@@ -232,6 +238,8 @@ public class OrderController {
|
||||
} catch (Exception e) {
|
||||
log.error("api数据导入异常", e);
|
||||
return success(e.getMessage());
|
||||
} finally {
|
||||
redisLockUtil.unlock(orderNo);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -260,6 +268,7 @@ public class OrderController {
|
||||
|
||||
Boolean flag = true;
|
||||
String customOrderNoKey = "自定义单号";
|
||||
redisLockUtil.lock(file.getOriginalFilename());
|
||||
try {
|
||||
if (type == 0) { //excel
|
||||
excelReadUtil.setErr(0);
|
||||
@@ -365,6 +374,8 @@ public class OrderController {
|
||||
String xmlStr = XmlBuilder.objectToXmlStr(orderXmlVO);
|
||||
XMLUtil.writeErr(response, xmlStr, " order_add_xml_err.xml");
|
||||
}
|
||||
} finally {
|
||||
redisLockUtil.unlock(file.getOriginalFilename());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+24
@@ -38,6 +38,10 @@ public class OrderPartsDO extends BaseDO {
|
||||
* 配件名称
|
||||
*/
|
||||
private String name;
|
||||
/**
|
||||
* 颜色
|
||||
*/
|
||||
private String color;
|
||||
/**
|
||||
* 材质
|
||||
*/
|
||||
@@ -45,7 +49,23 @@ public class OrderPartsDO extends BaseDO {
|
||||
/**
|
||||
* 配件类型
|
||||
*/
|
||||
private String category;
|
||||
/**
|
||||
* 配件子类
|
||||
*/
|
||||
private String type;
|
||||
/**
|
||||
* 宽度
|
||||
*/
|
||||
private Double width;
|
||||
/**
|
||||
* 长度
|
||||
*/
|
||||
private Double length;
|
||||
/**
|
||||
* 厚度
|
||||
*/
|
||||
private Double thickness;
|
||||
/**
|
||||
* 型号
|
||||
*/
|
||||
@@ -74,6 +94,10 @@ public class OrderPartsDO extends BaseDO {
|
||||
* 是否复合部件:0 否 1 是
|
||||
*/
|
||||
private Boolean isComposite;
|
||||
/**
|
||||
* 子配件ID列表,复合部件时记录子配件ID,半角逗号分隔
|
||||
*/
|
||||
private String subparts;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
|
||||
+101
@@ -0,0 +1,101 @@
|
||||
package com.cf.imes.module.executor.dal.dataobject.orderParts;
|
||||
|
||||
import lombok.*;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.cf.imes.framework.mybatis.core.dataobject.BaseDO;
|
||||
|
||||
/**
|
||||
* 配件表 parts_{N} DO
|
||||
*
|
||||
* @author 晨丰科技
|
||||
*/
|
||||
@TableName("parts")
|
||||
@KeySequence("parts_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class PartsDO extends BaseDO {
|
||||
|
||||
/**
|
||||
* 配件 ID
|
||||
*/
|
||||
@TableId
|
||||
private Long id;
|
||||
/**
|
||||
* 组织id
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Long organId;
|
||||
/**
|
||||
* 设计端商品ID
|
||||
*/
|
||||
private String goodsId;
|
||||
/**
|
||||
* 配件名称
|
||||
*/
|
||||
private String name;
|
||||
/**
|
||||
* 材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板
|
||||
*/
|
||||
private String material;
|
||||
/**
|
||||
* 颜色
|
||||
*/
|
||||
private String color;
|
||||
/**
|
||||
* 配件类型
|
||||
*/
|
||||
private String type;
|
||||
/**
|
||||
* 配件主类
|
||||
*/
|
||||
private String category;
|
||||
/**
|
||||
* 型号
|
||||
*/
|
||||
private String model;
|
||||
/**
|
||||
* 宽度
|
||||
*/
|
||||
private Double width;
|
||||
/**
|
||||
* 长度
|
||||
*/
|
||||
private Double length;
|
||||
/**
|
||||
* 厚度
|
||||
*/
|
||||
private Double thickness;
|
||||
/**
|
||||
* 规格
|
||||
*/
|
||||
private String spec;
|
||||
/**
|
||||
* 品牌
|
||||
*/
|
||||
private String brand;
|
||||
/**
|
||||
* 厂家
|
||||
*/
|
||||
private String factory;
|
||||
/**
|
||||
* 单位
|
||||
*/
|
||||
private String unit;
|
||||
/**
|
||||
* 是否复合部件:0 否 1 是
|
||||
*/
|
||||
private Boolean isComposite;
|
||||
/**
|
||||
* 子配件ID列表,复合部件时记录子配件ID,半角逗号分隔
|
||||
*/
|
||||
private String subparts;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
package com.cf.imes.module.executor.dal.mysql.orderParts;
|
||||
|
||||
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.cf.imes.module.executor.dal.dataobject.orderParts.PartsDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* 配件表 parts_{N} Mapper
|
||||
*
|
||||
* @author 晨丰科技
|
||||
*/
|
||||
@Mapper
|
||||
public interface PartsMapper extends BaseMapperX<PartsDO> {
|
||||
|
||||
default PartsDO selectByGoodID(String goodId , Long organId) {
|
||||
return selectOne(PartsDO::getGoodsId, goodId, PartsDO::getOrganId, organId);
|
||||
}
|
||||
|
||||
}
|
||||
+8
-1
@@ -16,6 +16,7 @@ import com.cf.imes.module.executor.dal.dataobject.orderGroup.OrderGroupDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.orderModuleExtra.OrderModuleExtraDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.orderParts.OrderPartsDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.orderParts.PartsDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.plate.PlateGoodDO;
|
||||
@@ -27,6 +28,7 @@ import com.cf.imes.module.executor.dal.mysql.orderGroup.OrderGroupMapper;
|
||||
import com.cf.imes.module.executor.dal.mysql.orderItem.OrderItemMapper;
|
||||
import com.cf.imes.module.executor.dal.mysql.orderModuleExtra.OrderModuleExtraMapper;
|
||||
import com.cf.imes.module.executor.dal.mysql.orderParts.OrderPartsMapper;
|
||||
import com.cf.imes.module.executor.dal.mysql.orderParts.PartsMapper;
|
||||
import com.cf.imes.module.executor.dal.mysql.plate.PlateGoodMapper;
|
||||
import com.cf.imes.module.executor.dal.mysql.plate.PlateMapper;
|
||||
import com.cf.imes.module.executor.dal.mysql.rawgoods.RawGoodsMapper;
|
||||
@@ -85,6 +87,9 @@ public class OrderInputProcessor {
|
||||
@Resource
|
||||
private ESDocumentService esDocumentService;
|
||||
|
||||
@Resource
|
||||
private PartsMapper partsMapper;
|
||||
|
||||
@Resource
|
||||
private ElasticsearchClient elasticsearchClient;
|
||||
|
||||
@@ -112,7 +117,8 @@ public class OrderInputProcessor {
|
||||
Collection<PlateDO> plateDOS,
|
||||
Collection<OrderItemDO> itemDOS,
|
||||
Collection<GoodsDO> goodsDOS,
|
||||
Collection<PlateGoodDO> plateGoodDOS) {
|
||||
Collection<PlateGoodDO> plateGoodDOS,
|
||||
Collection<PartsDO> partsDOS) {
|
||||
|
||||
|
||||
// if (rawGoodsDOS != null)
|
||||
@@ -159,6 +165,7 @@ public class OrderInputProcessor {
|
||||
insertInBatches(itemDOS, 1000, (batch, index) -> orderItemMapper.insertBatch((Collection<OrderItemDO>) batch));
|
||||
insertInBatches(goodsDOS, 1000, (batch, index) -> goodsMapper.insertBatch((Collection<GoodsDO>) batch));
|
||||
insertInBatches(plateGoodDOS, 1000, (batch, index) -> plateGoodMapper.insertBatch((Collection<PlateGoodDO>) batch));
|
||||
insertInBatches(partsDOS, 1000, (batch, index) -> partsMapper.insertBatch((Collection<PartsDO>) batch));
|
||||
}
|
||||
|
||||
private void insertInBatches(Collection<?> entities, int batchSize, BiConsumer<Collection<?>, Integer> insertFunction) {
|
||||
|
||||
+29
-5
@@ -28,6 +28,7 @@ import com.cf.imes.module.executor.dal.dataobject.orderBody.OrderBodyDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.orderGroup.OrderGroupDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.orderParts.OrderPartsDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.orderParts.PartsDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.pack.OrderPackageDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.plan.PlanDO;
|
||||
@@ -40,6 +41,7 @@ import com.cf.imes.module.executor.dal.mysql.orderBody.OrderBodyMapper;
|
||||
import com.cf.imes.module.executor.dal.mysql.orderGroup.OrderGroupMapper;
|
||||
import com.cf.imes.module.executor.dal.mysql.orderItem.OrderItemMapper;
|
||||
import com.cf.imes.module.executor.dal.mysql.orderParts.OrderPartsMapper;
|
||||
import com.cf.imes.module.executor.dal.mysql.orderParts.PartsMapper;
|
||||
import com.cf.imes.module.executor.dal.mysql.pack.OrderPackageMapper;
|
||||
import com.cf.imes.module.executor.dal.mysql.pack.OrderPrepackagedMapper;
|
||||
import com.cf.imes.module.executor.dal.mysql.plan.PlanMapper;
|
||||
@@ -130,6 +132,9 @@ public class OrderServiceImpl implements OrderService {
|
||||
@Resource
|
||||
private SnowflakeIdWorker3rd idWorker;
|
||||
|
||||
@Resource
|
||||
private PartsMapper partsMapper;
|
||||
|
||||
|
||||
private static final String SUBMIT_STATE = "1"; // 空订单 原生产系统
|
||||
|
||||
@@ -391,9 +396,11 @@ public class OrderServiceImpl implements OrderService {
|
||||
Map<String, List<?>> map = getPlateGoods(goodsDO);// 检验商品板材信息是否存在
|
||||
goodsDO = (List<GoodsDO>) map.get(GOODSDO_KEY);
|
||||
List<PlateGoodDO> plateGoodDOS = (List<PlateGoodDO>) map.get(PLATE_GOODS_LIST_KEY);
|
||||
// 配件信息
|
||||
List<PartsDO> partsDOS = getPartsGoods(partsDO);
|
||||
|
||||
|
||||
orderInputProcessor.batchInsert(rawGoodsDO, bodyDO, groupDO, partsDO, plateDO, itemDO, goodsDO, plateGoodDOS);
|
||||
orderInputProcessor.batchInsert(rawGoodsDO, bodyDO, groupDO, partsDO, plateDO, itemDO, goodsDO, plateGoodDOS, partsDOS);
|
||||
List<OrderModelDO> orderModelDOs = BeanUtils.toBean(plateDetail, OrderModelDO.class);
|
||||
|
||||
if (!orderModelDOs.isEmpty()) {
|
||||
@@ -446,7 +453,8 @@ public class OrderServiceImpl implements OrderService {
|
||||
Map<String, List<?>> map = getPlateGoods(goodsDO);// 检验商品板材信息是否存在 excel
|
||||
goodsDO = (List<GoodsDO>) map.get(GOODSDO_KEY);
|
||||
List<PlateGoodDO> plateGoodDOS = (List<PlateGoodDO>) map.get(PLATE_GOODS_LIST_KEY);
|
||||
|
||||
// 配件库匹配
|
||||
List<PartsDO> partsDOList = getPartsGoods(partsDO);
|
||||
|
||||
if (index != 0) {
|
||||
roomCabinetProcessGroupMatch(orderDO.getId(), bodyDO, itemDO);
|
||||
@@ -463,7 +471,7 @@ public class OrderServiceImpl implements OrderService {
|
||||
updateOrder(BeanUtils.toBean(orderDO, OrderSaveReqVO.class));
|
||||
}
|
||||
}
|
||||
orderInputProcessor.batchInsert(rawGoodsDO, bodyDO, groupDO, partsDO, plateDO, itemDO, goodsDO, plateGoodDOS);
|
||||
orderInputProcessor.batchInsert(rawGoodsDO, bodyDO, groupDO, partsDO, plateDO, itemDO, goodsDO, plateGoodDOS, partsDOList);
|
||||
if (orderModelDOS != null && !orderModelDOS.isEmpty()) {
|
||||
orderInputProcessor.batchSaveModel(orderModelDOS);
|
||||
}
|
||||
@@ -693,12 +701,28 @@ public class OrderServiceImpl implements OrderService {
|
||||
|
||||
private PlateGoodDO getPlateGood(String goodsId, Long organId) {
|
||||
List<PlateGoodDO> plateGoodDOs = plateGoodMapper.selectGoodOne(goodsId, organId);
|
||||
if (plateGoodDOs.size() > 0) {
|
||||
if (!plateGoodDOs.isEmpty()) {
|
||||
return plateGoodDOs.get(0);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// 配件匹配
|
||||
private List<PartsDO> getPartsGoods(List<OrderPartsDO> partsLists) {
|
||||
List<PartsDO> partsDOS = new ArrayList<>();
|
||||
|
||||
for (OrderPartsDO partsDO : partsLists) {
|
||||
if (partsDO.getGoodsId() != null) { // 有goodsId
|
||||
PartsDO part = partsMapper.selectByGoodID(partsDO.getGoodsId(), OrganContextHolder.getOrganId());
|
||||
if (part == null) { // 不存在记录,存入数据库
|
||||
partsDOS.add(BeanUtils.toBean(partsDO, PartsDO.class).setOrganId(OrganContextHolder.getOrganId()));
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
return partsDOS;
|
||||
}
|
||||
|
||||
private Map<String, List<?>> getPlateGoods(List<GoodsDO> goodsLists) {
|
||||
Map<String, List<?>> map = new HashMap<>();
|
||||
List<PlateGoodDO> plateGoodLists = new ArrayList<>();
|
||||
@@ -717,7 +741,7 @@ public class OrderServiceImpl implements OrderService {
|
||||
goodsDO.setGoodsId((obtainingTime) + Long.toString(plateNo).substring(2));
|
||||
}
|
||||
|
||||
if (plateGoodDOS != null && plateGoodDOS.size() > 0) {//存在板材
|
||||
if (plateGoodDOS != null && !plateGoodDOS.isEmpty()) {//存在板材
|
||||
goodsDO.setGoodsId(plateGoodDOS.get(0).getGoodsId());
|
||||
} else if (plateGoodDO != null) { // 存在板材
|
||||
goodsDO.setGoodsId(plateGoodDO.getGoodsId());
|
||||
|
||||
+260
-302
@@ -6,12 +6,10 @@ import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.nacos.common.utils.StringUtils;
|
||||
import com.cf.imes.framework.organ.core.context.OrganContextHolder;
|
||||
import com.cf.imes.module.executor.dal.dataobject.order.OrderDO;
|
||||
import com.cf.imes.module.executor.enums.DataTypeEnum;
|
||||
import com.cf.imes.module.executor.enums.OrderTypeEnum;
|
||||
import com.cf.imes.module.executor.enums.*;
|
||||
import com.cf.imes.module.executor.util.fileConversion.admin.ToolUtil;
|
||||
import com.cf.imes.module.system.api.dict.DictDataApi;
|
||||
import com.cf.imes.module.system.api.dict.dto.DictDataRespDTO;
|
||||
import com.cf.imes.module.executor.enums.DictTypeConstants;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.MapUtils;
|
||||
import org.springframework.stereotype.Component;
|
||||
@@ -19,6 +17,7 @@ import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.*;
|
||||
import java.lang.reflect.Field;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
@@ -27,8 +26,6 @@ import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import static com.mysql.cj.util.TimeUtil.DATE_FORMATTER;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
public class ExcelReadUtil { // 文件读取
|
||||
@@ -40,6 +37,11 @@ public class ExcelReadUtil { // 文件读取
|
||||
private static final String ERR = "error";
|
||||
private static final String DEALER_PHONE = "dealerPhoneNumber";
|
||||
private static final String NUMBER_TYPE_ERR = "数量类型错误";
|
||||
private static final String NOT_EMPTY= "不可为空";
|
||||
private static final String NUMBER_ERR = "数量错误";
|
||||
private static final String ACCORD_ENUM = "请按照提示词语选择填入";
|
||||
private static final String POSITIVE_ERR = "数据需为正数";
|
||||
private static final String NUMBER_LENGTH_ERR = "数据长度过长";
|
||||
// 读excel
|
||||
public Map<String, Object> read(MultipartFile file) throws IOException {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
@@ -64,35 +66,39 @@ public class ExcelReadUtil { // 文件读取
|
||||
|
||||
if (index.get()) {
|
||||
orderMap.put(item.get(0), item.get(1));
|
||||
orderMap.put(item.get(16), item.get(17));
|
||||
orderMap.put(item.get(19), item.get(20));
|
||||
i.getAndIncrement();
|
||||
} else {
|
||||
if (i.getAndIncrement() > 6){
|
||||
list.add(changeValue(item));
|
||||
}
|
||||
// if (item.get(1).equals("配件") || item.get(1).equals("板材")) {
|
||||
// list.add(changeValue(item));
|
||||
// }
|
||||
|
||||
}
|
||||
}
|
||||
);
|
||||
index.set(true);
|
||||
// if (MapUtil.isEmpty(orderMap) || CollectionUtil.isEmpty(list)) {
|
||||
// isErr.set(-1);
|
||||
// }
|
||||
map.put("orderPri", orderMap);
|
||||
map.put("plate", list);
|
||||
return map;
|
||||
|
||||
}
|
||||
|
||||
private void setIfInvalid(String key, String errValue, Map<String, Object> orderMap, AtomicBoolean error) {
|
||||
if (orderMap.get(key) == null) {
|
||||
orderMap.put(key, errValue);
|
||||
//
|
||||
private void setIfInvalid(String key, String errValue, Map<String, Object> orderMap,int length, AtomicBoolean error) {
|
||||
orderMap.compute(key, (k, v) -> {
|
||||
if (v == null) {
|
||||
error.set(false);
|
||||
return errValue;
|
||||
} else {
|
||||
int size = ((String) v).length();
|
||||
if (size > length) {
|
||||
error.set(false);
|
||||
return NUMBER_LENGTH_ERR;
|
||||
}
|
||||
}
|
||||
return v;
|
||||
});
|
||||
}
|
||||
|
||||
private void setPhone(String key, String errValue, Map<String, Object> orderMap, AtomicBoolean error) {
|
||||
if (!ToolUtil.validatePhoneNumber((String) orderMap.get(key))) {
|
||||
@@ -111,10 +117,10 @@ public class ExcelReadUtil { // 文件读取
|
||||
|
||||
AtomicBoolean error = new AtomicBoolean(true);
|
||||
|
||||
setIfInvalid("客户", "---< 客户不能为空 >---", orderMap, error);
|
||||
setIfInvalid("经销商", "---< 经销商不能为空 >---", orderMap, error);
|
||||
setIfInvalid("客户地址", "---< 客户地址不能为空 >---", orderMap, error);
|
||||
setIfInvalid("客户地址", "---< 客户地址不能为空 >---", orderMap, error);
|
||||
setIfInvalid("客户", "---< 客户不能为空 >---", orderMap, 255, error);
|
||||
setIfInvalid("经销商", "---< 经销商不能为空 >---", orderMap, 255, error);
|
||||
setIfInvalid("客户地址", "---< 客户地址不能为空 >---", orderMap, 255, error);
|
||||
setIfInvalid("客户地址", "---< 客户地址不能为空 >---", orderMap, 255, error);
|
||||
|
||||
if (orderMap.get("客户电话") == null) {
|
||||
orderMap.put("客户电话", "---< 客户电话不能为空 >---");
|
||||
@@ -198,115 +204,124 @@ public class ExcelReadUtil { // 文件读取
|
||||
case 6:// 颜色
|
||||
vo.setColor(value);
|
||||
break;
|
||||
case 7:// 厂家
|
||||
case 7:// 复合部件
|
||||
vo.setIsComposite(value);
|
||||
break;
|
||||
case 8:// 配件类型
|
||||
vo.setCategory(value);
|
||||
break;
|
||||
case 9:// 子类
|
||||
vo.setType(value);
|
||||
break;
|
||||
case 10:// 厂家
|
||||
vo.setFactory(value);
|
||||
break;
|
||||
case 8:// 品牌
|
||||
case 11:// 品牌
|
||||
vo.setBrand(value);
|
||||
break;
|
||||
case 9:// 型号
|
||||
case 12:// 型号
|
||||
vo.setModel(value);
|
||||
break;
|
||||
case 10:// 板材长
|
||||
case 13:// 板材/配件长
|
||||
vo.setGoodsHeight(value);
|
||||
break;
|
||||
case 11:// 板材宽
|
||||
case 14:// 板材/配件宽
|
||||
vo.setGoodsWidth(value);
|
||||
break;
|
||||
case 12:// 板材厚
|
||||
case 15:// 板材/配件厚
|
||||
vo.setGoodsThickness(value);
|
||||
break;
|
||||
case 13:// 规格
|
||||
case 16:// 规格
|
||||
vo.setSpec(value);
|
||||
break;
|
||||
case 14:// 单位
|
||||
case 17:// 单位
|
||||
vo.setUnit(value);
|
||||
break;
|
||||
case 15:// 数量
|
||||
case 18:// 数量
|
||||
vo.setGoodsNumber(value);
|
||||
break;
|
||||
case 16:// 房间
|
||||
case 19:// 房间
|
||||
vo.setRoomsName(value);
|
||||
break;
|
||||
case 17:// 柜体
|
||||
case 20:// 柜体
|
||||
vo.setCabinetsName(value);
|
||||
break;
|
||||
case 18:// 加工组类型
|
||||
case 21:// 加工组类型
|
||||
vo.setSynthesisTypeName(value);
|
||||
break;
|
||||
case 19:// 加工组名称
|
||||
case 22:// 加工组名称
|
||||
vo.setCombinationName(value);
|
||||
break;
|
||||
case 20://板名称
|
||||
case 23://板名称
|
||||
vo.setName(value);
|
||||
break;
|
||||
case 21:// 自定义板编号
|
||||
case 24:// 自定义板编号
|
||||
vo.setPlateNo(value);
|
||||
break;
|
||||
case 22:// 成品长
|
||||
case 25:// 成品长
|
||||
vo.setHeight(value);
|
||||
break;
|
||||
case 23:// 成品宽
|
||||
case 26:// 成品宽
|
||||
vo.setWidth(value);
|
||||
break;
|
||||
case 24:// 拆单长
|
||||
case 27:// 拆单长
|
||||
vo.setSplitHeight(value);
|
||||
break;
|
||||
case 25:// 拆单宽
|
||||
case 28:// 拆单宽
|
||||
vo.setSplitWidth(value);
|
||||
break;
|
||||
case 26:// 厚
|
||||
case 29:// 厚
|
||||
vo.setThickness(value);
|
||||
break;
|
||||
case 27:// 左封边
|
||||
case 30:// 左封边
|
||||
vo.setSealLeft(value);
|
||||
break;
|
||||
case 28:// 右封边
|
||||
case 31:// 右封边
|
||||
vo.setSealRight(value);
|
||||
break;
|
||||
case 29:// 上封边
|
||||
case 32:// 上封边
|
||||
vo.setSealUp(value);
|
||||
break;
|
||||
case 30:// 下封边
|
||||
case 33:// 下封边
|
||||
vo.setSealDown(value);
|
||||
break;
|
||||
case 31:// 排版面
|
||||
case 34:// 排版面
|
||||
vo.setTypographicFace(value);
|
||||
break;
|
||||
case 32:// 纹路
|
||||
case 35:// 纹路
|
||||
vo.setTexture(value);
|
||||
break;
|
||||
case 33:// 开门方向
|
||||
case 36:// 开门方向
|
||||
vo.setOpenDoorType(value);
|
||||
break;
|
||||
case 34://备注1
|
||||
case 37://备注1
|
||||
vo.setRemark1(value);
|
||||
break;
|
||||
case 35://备注2
|
||||
case 38://备注2
|
||||
vo.setRemark2(value);
|
||||
break;
|
||||
case 36://备注3
|
||||
case 39://备注3
|
||||
vo.setRemark3(value);
|
||||
break;
|
||||
case 37://备注4
|
||||
case 40://备注4
|
||||
vo.setRemark4(value);
|
||||
break;
|
||||
case 38://备注5
|
||||
case 41://备注5
|
||||
vo.setRemark5(value);
|
||||
break;
|
||||
case 39://备注6
|
||||
case 42://备注6
|
||||
vo.setRemark6(value);
|
||||
break;
|
||||
case 40://备注7
|
||||
case 43://备注7
|
||||
vo.setRemark7(value);
|
||||
break;
|
||||
case 41://备注8
|
||||
case 44://备注8
|
||||
vo.setRemark8(value);
|
||||
break;
|
||||
case 42://备注9
|
||||
case 45://备注9
|
||||
vo.setRemark9(value);
|
||||
break;
|
||||
case 43://备注10
|
||||
case 46://备注10
|
||||
vo.setRemark10(value);
|
||||
break;
|
||||
default:
|
||||
@@ -318,272 +333,215 @@ public class ExcelReadUtil { // 文件读取
|
||||
return vo;
|
||||
}
|
||||
|
||||
// 错误判断通用方法
|
||||
// 判断非零,错误返回;不为空时,判断是否符合枚举类
|
||||
private void isNotEmptyAndBack(String value, Class<? extends Enum<?>> enumClass, List<String> errList, String errValue, int length , AtomicBoolean flag) {
|
||||
if (StringUtils.isEmpty(value)) {
|
||||
errList.add(errValue + NOT_EMPTY);
|
||||
flag.set(false);
|
||||
} else {
|
||||
isEmptyAndSize(value, length, errList, errValue, flag);
|
||||
try {
|
||||
// 获取枚举类的所有值
|
||||
Enum<?>[] enums = enumClass.getEnumConstants();
|
||||
boolean isValid = false;
|
||||
for (Enum<?> enumValue : enums) {
|
||||
Field valueField = enumValue.getClass().getDeclaredField("value");
|
||||
valueField.setAccessible(true);
|
||||
String enumValueStr = (String) valueField.get(enumValue);
|
||||
if (enumValueStr.equals(value)) {
|
||||
isValid = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!isValid) {
|
||||
errList.add(errValue + ACCORD_ENUM);
|
||||
flag.set(false);
|
||||
}
|
||||
} catch (IllegalArgumentException e) {
|
||||
errList.add(errValue + ACCORD_ENUM);
|
||||
flag.set(false);
|
||||
} catch (NoSuchFieldException | IllegalAccessException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 非零判断,有值判断---判断数值类型,数值长度
|
||||
private void isEmptyAndPositiveNumberSize(String value, Class<?> targetType, Integer length, Integer decimalLength, List<String> errList, String errValue, AtomicBoolean flag) {
|
||||
if (StringUtils.isNotEmpty(value)) {
|
||||
if (Boolean.TRUE.equals(ToolUtil.convertToType(value, targetType))) {
|
||||
if (Boolean.TRUE.equals(ToolUtil.checkNumber(value))) {
|
||||
if (!ToolUtil.checkPrecision(value, length, decimalLength)) {
|
||||
errList.add(errValue + NUMBER_LENGTH_ERR);
|
||||
flag.set(false);
|
||||
}
|
||||
} else {
|
||||
errList.add(errValue + POSITIVE_ERR);
|
||||
flag.set(false);
|
||||
}
|
||||
} else {
|
||||
errList.add(errValue + NUMBER_TYPE_ERR);
|
||||
flag.set(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 判断非零,错误返回
|
||||
private void isNotEmptyAndBack(String value, List<String> errList, String errValue, AtomicBoolean flag) {
|
||||
if (StringUtils.isEmpty(value)) {
|
||||
errList.add(errValue + NOT_EMPTY);
|
||||
flag.set(false);
|
||||
}
|
||||
}
|
||||
|
||||
// 判断非空,有值判断字符串的长度
|
||||
private void isEmptyAndSize(String value, Integer length, List<String> errList, String errValue, AtomicBoolean flag) {
|
||||
if (StringUtils.isNotEmpty(value)) {
|
||||
int size = value.length();
|
||||
if (size > length) {
|
||||
errList.add(errValue + NUMBER_LENGTH_ERR);
|
||||
flag.set(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 非空判断,错误填入
|
||||
private void isEmpty(String value, List<String> errList, String errValue, int length, AtomicBoolean flag) {
|
||||
if (StringUtils.isEmpty(value)) {
|
||||
errList.add(errValue + NOT_EMPTY);
|
||||
flag.set(false);
|
||||
} else {
|
||||
// 字符串长度检查
|
||||
int size = value.length();
|
||||
if (size > length) {
|
||||
errList.add(errValue + NUMBER_LENGTH_ERR);
|
||||
flag.set(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 判断非空,大于零判断
|
||||
public void isEmptyAndPositiveNumber(String value, Class<?> targetType, List<String> errList, String errValue, AtomicBoolean flag) {
|
||||
if (StringUtils.isNotEmpty(value)) {
|
||||
if (Boolean.FALSE.equals(ToolUtil.convertToType(value, targetType))) {
|
||||
errList.add(errValue + NUMBER_TYPE_ERR);
|
||||
flag.set(false);
|
||||
}else {
|
||||
if (Boolean.FALSE.equals(checkNumber(value))) {
|
||||
errList.add(errValue + "数量不能为0");
|
||||
flag.set(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 判断非空,字典值判断
|
||||
public void isNotEmptyAndDict(String value, String dictType, List<String> errList, String errValue, AtomicBoolean flag) {
|
||||
if (StringUtils.isEmpty(value)) {
|
||||
errList.add(errValue + NOT_EMPTY);
|
||||
flag.set(false);
|
||||
} else {
|
||||
DictDataRespDTO dictDataRespDTO = dictDataApi.parseDictData(dictType, value).getData();
|
||||
if (dictDataRespDTO == null) {
|
||||
errList.add(errValue + ACCORD_ENUM);
|
||||
flag.set(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 板材的数据以及长度的检验
|
||||
public void checkPlate(OrderPlateImportExcelVO vo, List<String> errList , AtomicBoolean flag) {
|
||||
// 数量类型判断
|
||||
isEmptyAndPositiveNumber(vo.getGoodsNumber(), Integer.class, errList, "板材数量", flag);
|
||||
// 板材纹理
|
||||
isNotEmptyAndBack(vo.getWave(), IsHavaeEnum.class, errList, "板材纹理", 4, flag);
|
||||
// 大板的长宽厚存在以及是否符合数个
|
||||
isNotEmptyAndBack(vo.getGoodsWidth(), errList, "板材长度", flag);
|
||||
isEmptyAndPositiveNumberSize(vo.getGoodsWidth(), Double.class, 5, 3, errList, "板材长度", flag);
|
||||
isNotEmptyAndBack(vo.getGoodsHeight(), errList, "板材宽度", flag);
|
||||
isEmptyAndPositiveNumberSize(vo.getGoodsHeight(), Double.class, 5, 3, errList, "板材宽度", flag);
|
||||
isNotEmptyAndBack(vo.getGoodsThickness(), errList, "板材厚度", flag);
|
||||
isEmptyAndPositiveNumberSize(vo.getGoodsThickness(), Double.class, 5, 3, errList, "板材厚度", flag);
|
||||
// 房间、柜体、板名称 不可以为空
|
||||
isEmpty(vo.getRoomsName(), errList, "房间名称", 64, flag);
|
||||
isEmpty(vo.getCabinetsName(), errList, "柜体名称", 64, flag);
|
||||
isEmpty(vo.getName(), errList, "板材名称", 64, flag);
|
||||
//成品长、成品宽、拆单长、拆单宽、厚、左封边、右封边、上封边、下封边 不能为空
|
||||
isNotEmptyAndBack(vo.getHeight(), errList, "成品长度", flag);
|
||||
isEmptyAndPositiveNumberSize(vo.getHeight(), Double.class, 5, 3, errList, "成品长度", flag);
|
||||
isNotEmptyAndBack(vo.getWidth(), errList, "成品宽度", flag);
|
||||
isEmptyAndPositiveNumberSize(vo.getWidth(), Double.class, 5, 3, errList, "成品宽度", flag);
|
||||
isNotEmptyAndBack(vo.getSplitHeight(), errList, "拆单长度", flag);
|
||||
isEmptyAndPositiveNumberSize(vo.getSplitHeight(), Double.class, 5, 3, errList, "拆单长度", flag);
|
||||
isNotEmptyAndBack(vo.getSplitWidth(), errList, "拆单宽度", flag);
|
||||
isEmptyAndPositiveNumberSize(vo.getSplitWidth(), Double.class, 5, 3, errList, "拆单宽度", flag);
|
||||
isNotEmptyAndBack(vo.getThickness(), errList, "厚度", flag);
|
||||
isEmptyAndPositiveNumberSize(vo.getThickness(), Double.class, 5, 3, errList, "厚度", flag);
|
||||
isNotEmptyAndBack(vo.getSealLeft(), errList, "左封边", flag);
|
||||
isEmptyAndPositiveNumberSize(vo.getSealLeft(), Double.class, 5, 3, errList, "左封边", flag);
|
||||
isNotEmptyAndBack(vo.getSealRight(), errList, "右封边", flag);
|
||||
isEmptyAndPositiveNumberSize(vo.getSealRight(), Double.class, 5, 3, errList, "右封边", flag);
|
||||
isNotEmptyAndBack(vo.getSealUp(), errList, "上封边", flag);
|
||||
isEmptyAndPositiveNumberSize(vo.getSealUp(), Double.class, 5, 3, errList, "上封边", flag);
|
||||
isNotEmptyAndBack(vo.getSealDown(), errList, "下封边", flag);
|
||||
isEmptyAndPositiveNumberSize(vo.getSealDown(), Double.class, 5, 3, errList, "下封边", flag);
|
||||
// 排版面、纹路、开门方向
|
||||
isNotEmptyAndDict(vo.getTypographicFace(), DictTypeConstants.TYPOGRAPHY_TYPE, errList, "排版面", flag);
|
||||
isNotEmptyAndDict(vo.getTexture(), DictTypeConstants.GRAIN_TYPE, errList, "纹路", flag);
|
||||
isNotEmptyAndDict(vo.getOpenDoorType(), DictTypeConstants.DOOR_OPENING_DIRECTIONS, errList, "开门方向", flag);
|
||||
|
||||
}
|
||||
// OrderPlateImportExcelVO 数据验证
|
||||
private Boolean checkVO(OrderPlateImportExcelVO vo) {
|
||||
List<String> errList = new ArrayList<>();
|
||||
Boolean flag = true;
|
||||
AtomicBoolean flag = new AtomicBoolean(true);
|
||||
|
||||
// 全部需要值的字段
|
||||
// 检查非空 类型、数量
|
||||
if (StringUtils.isEmpty(vo.getGoodType())) {
|
||||
errList.add("类型不能为空");
|
||||
flag = false;
|
||||
}
|
||||
if (StringUtils.isEmpty(vo.getGoodsNumber())) {
|
||||
errList.add("数量不能为空");
|
||||
flag = false;
|
||||
}else {
|
||||
if (!convertToDouble(vo.getGoodsNumber())) {
|
||||
flag = false;
|
||||
errList.add(NUMBER_TYPE_ERR);
|
||||
}else {
|
||||
if (!checkNumber(vo.getGoodsNumber())) {
|
||||
flag = false;
|
||||
errList.add("数量不能为0");
|
||||
}
|
||||
}
|
||||
}
|
||||
isEmpty(vo.getGoodType(), errList, "类型",32, flag);
|
||||
isEmpty(vo.getGoodsNumber(), errList, "数量", 10000000 ,flag);
|
||||
|
||||
// 检查商品物料编码或是商品名称、规格、材质、颜色不可全为空
|
||||
if (StringUtils.isEmpty(vo.getGoodsName()) || StringUtils.isEmpty(vo.getSpec())
|
||||
|| StringUtils.isEmpty(vo.getMaterial()) || StringUtils.isEmpty(vo.getColor()) || StringUtils.isEmpty(vo.getUnit())) {
|
||||
errList.add("商品商品名称、规格、材质、颜色、单位不可为空");
|
||||
flag = false;
|
||||
flag.set(false);
|
||||
}
|
||||
|
||||
|
||||
if (StringUtils.equals(vo.getGoodType(), "配件")) {
|
||||
// 复合部件必填
|
||||
isNotEmptyAndBack(vo.getIsComposite(), QuarrelEnum.class, errList, "是否复合部件", 1, flag); // 判断传入的值,是否符合字典中的枚举类
|
||||
// 配件类型必填
|
||||
isNotEmptyAndBack(vo.getCategory(), CategoryEnum.class, errList, "配件类型", 32, flag);
|
||||
// 配件长宽厚,存在判断是否可以转义
|
||||
isEmptyAndPositiveNumberSize(vo.getGoodsWidth(), Double.class, 5, 3, errList, "配件宽", flag);
|
||||
isEmptyAndPositiveNumberSize(vo.getGoodsHeight(), Double.class, 5, 3, errList, "配件高", flag);
|
||||
isEmptyAndPositiveNumberSize(vo.getGoodsThickness(), Double.class, 5, 3, errList, "配件厚", flag);
|
||||
// 配件类型为封边条的时候,需要填写配件宽厚
|
||||
if (StringUtils.equals(vo.getCategory(), CategoryEnum.EDGING.getValue())) { // 封边条必须有宽高
|
||||
isNotEmptyAndBack(vo.getGoodsWidth(), errList, "封边条宽", flag);
|
||||
isNotEmptyAndBack(vo.getGoodsThickness(), errList, "封边条厚", flag);
|
||||
}
|
||||
// 配件数量判断
|
||||
isEmptyAndPositiveNumber(vo.getGoodsNumber(), Double.class, errList, "配件数量", flag);
|
||||
}
|
||||
// 若商品类型为板材,需检查房间、柜体、板名称、成品长、成品宽、拆单长、拆单宽、厚、左封边、右封边、上封边、下封边、排版面、纹路、开门方向不能为空
|
||||
if (StringUtils.equals(vo.getGoodType(), "板材")) {
|
||||
// 数量类型判断
|
||||
if (!convertToInteger(vo.getGoodsNumber())) {
|
||||
flag = false;
|
||||
if (errList.contains(NUMBER_TYPE_ERR)){
|
||||
Iterator<String> iterator = errList.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
String element = iterator.next();
|
||||
if (NUMBER_TYPE_ERR.equals(element)) {
|
||||
iterator.remove();
|
||||
}
|
||||
}
|
||||
errList.add("板材数量类型需为整数");
|
||||
}else {
|
||||
errList.add(NUMBER_TYPE_ERR);
|
||||
checkPlate(vo, errList, flag);
|
||||
}
|
||||
|
||||
}
|
||||
// 纹理有效性判断
|
||||
if (StringUtils.isEmpty(vo.getWave())) {
|
||||
errList.add("板材纹理不可为空");
|
||||
flag = false;
|
||||
} else {
|
||||
if (!StringUtils.equals(vo.getWave().trim(), "无") && !StringUtils.equals(vo.getWave().trim(), "有")) {
|
||||
flag = false;
|
||||
errList.add("纹理无效");
|
||||
}
|
||||
}
|
||||
// 大板长宽厚数据不可为空
|
||||
if (StringUtils.isEmpty(vo.getGoodsHeight()) && StringUtils.isEmpty(vo.getGoodsWidth()) && StringUtils.isEmpty(vo.getGoodsThickness())) {
|
||||
flag = false;
|
||||
errList.add("板材长宽厚数据不能为空");
|
||||
} else {
|
||||
// 大板长宽厚数据不为空,检查数据格式
|
||||
if (!convertToDouble(vo.getGoodsHeight())) {
|
||||
flag = false;
|
||||
errList.add("板材长数据类型错误");
|
||||
} else {
|
||||
if (!checkPrecision(vo.getGoodsHeight())) {
|
||||
flag = false;
|
||||
errList.add("板材长数据长度错误");
|
||||
}
|
||||
}
|
||||
if (!convertToDouble(vo.getGoodsWidth())) {
|
||||
flag = false;
|
||||
errList.add("板材宽数据类型错误");
|
||||
} else {
|
||||
if (!checkPrecision(vo.getGoodsWidth())) {
|
||||
flag = false;
|
||||
errList.add("板材宽数据长度错误");
|
||||
}
|
||||
}
|
||||
if (!convertToDouble(vo.getGoodsThickness())) {
|
||||
flag = false;
|
||||
errList.add("板材厚数据类型错误");
|
||||
} else {
|
||||
if (!checkPrecision(vo.getGoodsThickness())) {
|
||||
flag = false;
|
||||
errList.add("板材厚数据长度错误");
|
||||
}
|
||||
}
|
||||
}
|
||||
if (StringUtils.isEmpty(vo.getRoomsName()) && StringUtils.isEmpty(vo.getCabinetsName()) && StringUtils.isEmpty(vo.getName())) {
|
||||
flag = false;
|
||||
errList.add("房间、柜体、板名称不能为空");
|
||||
}
|
||||
//成品长、成品宽、拆单长、拆单宽、厚、左封边、右封边、上封边、下封边 不能为空
|
||||
if (StringUtils.isEmpty(vo.getHeight()) || StringUtils.isEmpty(vo.getWidth()) || StringUtils.isEmpty(vo.getSplitHeight())
|
||||
|| StringUtils.isEmpty(vo.getSplitWidth()) || StringUtils.isEmpty(vo.getThickness()) || StringUtils.isEmpty(vo.getSealLeft())
|
||||
|| StringUtils.isEmpty(vo.getSealRight()) || StringUtils.isEmpty(vo.getSealUp()) || StringUtils.isEmpty(vo.getSealDown())) {
|
||||
|
||||
flag = false;
|
||||
errList.add("小板轮廓数据不能为空");
|
||||
} else { // 成品长、成品宽、拆单长、拆单宽、厚、左封边、右封边、上封边、下封边 数据类型以及长度验证
|
||||
if (!convertToDouble(vo.getHeight())) {
|
||||
flag = false;
|
||||
errList.add("成品长数据类型错误");
|
||||
} else {
|
||||
if (!checkPrecision(vo.getHeight())) {
|
||||
flag = false;
|
||||
errList.add("成品长数据长度错误");
|
||||
}
|
||||
}
|
||||
if (!convertToDouble(vo.getWidth())) {
|
||||
flag = false;
|
||||
errList.add("成品宽数据类型错误");
|
||||
} else {
|
||||
if (!checkPrecision(vo.getWidth())) {
|
||||
flag = false;
|
||||
errList.add("成品宽数据长度错误");
|
||||
}
|
||||
}
|
||||
|
||||
if (flag) {
|
||||
Double plateHeight = Double.parseDouble(vo.getHeight());
|
||||
Double plateWidth = Double.parseDouble(vo.getWidth());
|
||||
vo.setArea(plateHeight * plateWidth * 0.000001);
|
||||
}
|
||||
|
||||
if (!convertToDouble(vo.getSplitHeight())) {
|
||||
flag = false;
|
||||
errList.add("拆单长数据类型错误");
|
||||
} else {
|
||||
if (!checkPrecision(vo.getSplitHeight())) {
|
||||
flag = false;
|
||||
errList.add("拆单长数据长度错误");
|
||||
}
|
||||
}
|
||||
if (!convertToDouble(vo.getSplitWidth())) {
|
||||
flag = false;
|
||||
errList.add("拆单宽数据类型错误");
|
||||
} else {
|
||||
if (!checkPrecision(vo.getSplitWidth())) {
|
||||
flag = false;
|
||||
errList.add("拆单宽数据长度错误");
|
||||
}
|
||||
}
|
||||
if (!convertToDouble(vo.getThickness())) {
|
||||
flag = false;
|
||||
errList.add("厚数据类型错误");
|
||||
} else {
|
||||
if (!checkPrecision(vo.getThickness())) {
|
||||
flag = false;
|
||||
errList.add("厚数据长度错误");
|
||||
}
|
||||
}
|
||||
if (!convertToDouble(vo.getSealLeft())) {
|
||||
flag = false;
|
||||
errList.add("左封边数据类型错误");
|
||||
} else {
|
||||
if (!checkPrecision(vo.getSealLeft())) {
|
||||
flag = false;
|
||||
errList.add("左封边数据长度错误");
|
||||
}
|
||||
}
|
||||
if (!convertToDouble(vo.getSealRight())) {
|
||||
flag = false;
|
||||
errList.add("右封边数据类型错误");
|
||||
} else {
|
||||
if (!checkPrecision(vo.getSealRight())) {
|
||||
flag = false;
|
||||
errList.add("右封边数据长度错误");
|
||||
}
|
||||
}
|
||||
if (!convertToDouble(vo.getSealUp())) {
|
||||
flag = false;
|
||||
errList.add("上封边数据类型错误");
|
||||
} else {
|
||||
if (!checkPrecision(vo.getSealUp())) {
|
||||
flag = false;
|
||||
errList.add("上封边数据长度错误");
|
||||
}
|
||||
}
|
||||
if (!convertToDouble(vo.getSealDown())) {
|
||||
flag = false;
|
||||
errList.add("下封边数据类型错误");
|
||||
} else {
|
||||
if (!checkPrecision(vo.getSealDown())) {
|
||||
flag = false;
|
||||
errList.add("下封边数据长度错误");
|
||||
}
|
||||
}
|
||||
}
|
||||
// 排版面、纹路、开门方向
|
||||
if (StringUtils.isEmpty(vo.getTypographicFace()) && StringUtils.isEmpty(vo.getTexture()) && StringUtils.isEmpty(vo.getOpenDoorType())) {
|
||||
flag = false;
|
||||
errList.add("排版面、纹路、开门方向不能为空");
|
||||
} else {
|
||||
DictDataRespDTO typographyDTO = dictDataApi.parseDictData(DictTypeConstants.TYPOGRAPHY_TYPE, vo.getTypographicFace()).getData();// 排版面
|
||||
if (typographyDTO == null) {
|
||||
flag = false;
|
||||
errList.add("排版面数据不存在");
|
||||
}
|
||||
DictDataRespDTO grainDTO = dictDataApi.parseDictData(DictTypeConstants.GRAIN_TYPE, vo.getTexture()).getData();// 纹路
|
||||
if (grainDTO == null) {
|
||||
flag = false;
|
||||
errList.add("纹路数据不存在");
|
||||
}
|
||||
DictDataRespDTO doorDTO = dictDataApi.parseDictData(DictTypeConstants.DOOR_OPENING_DIRECTIONS, vo.getOpenDoorType()).getData();
|
||||
if (doorDTO == null) {
|
||||
flag = false;
|
||||
errList.add("开门方向数据不存在");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!flag) {
|
||||
if (!flag.get()) {
|
||||
isErr.getAndIncrement();
|
||||
}
|
||||
JSONArray jsonArray = JSON.parseArray(JSON.toJSONString(errList));// 错误列表
|
||||
vo.setResult(String.valueOf(jsonArray));
|
||||
return flag;
|
||||
return flag.get();
|
||||
|
||||
}
|
||||
|
||||
// 数据类型可否转换判断
|
||||
public Boolean convertToDouble(String str) {
|
||||
try {
|
||||
Double.parseDouble(str);
|
||||
} catch (NumberFormatException e) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// 数据类型可否转换判断
|
||||
public Boolean convertToInteger(String str) {
|
||||
try {
|
||||
Integer.parseInt(str);
|
||||
} catch (NumberFormatException e) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// 数据长度判断
|
||||
public boolean checkPrecision(String numberStr) {
|
||||
if (numberStr == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// 分割整数部分和小数部分
|
||||
String[] parts = numberStr.split("\\.");
|
||||
String integerPart = parts[0];
|
||||
String decimalPart = parts.length > 1 ? parts[1] : "";
|
||||
|
||||
// 检查整数部分位数
|
||||
if (integerPart.length() > 5) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// 检查小数部分位数
|
||||
if (decimalPart.length() > 3) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public int isErr() {
|
||||
return isErr.get();
|
||||
|
||||
+6
@@ -238,8 +238,14 @@ public class ExcelTypeRealize {
|
||||
|
||||
} else {
|
||||
//配件
|
||||
|
||||
Long partsId = (Long) snowFlakeGenerator.nextId(null);
|
||||
OrderPartsDO orderPartsDO = OrderPartsDO.builder().id(partsId).orderId(orderId).goodsId(combination.getGoodsId())
|
||||
.color(combination.getColor()).category(combination.getCategory()).type(combination.getType())
|
||||
.length(Double.valueOf(StringUtils.isEmpty(combination.getGoodsHeight()) ? "0" : combination.getGoodsHeight()))
|
||||
.width(Double.valueOf(StringUtils.isEmpty(combination.getGoodsWidth()) ? "0" : combination.getGoodsWidth()))
|
||||
.thickness(Double.valueOf(StringUtils.isEmpty(combination.getGoodsThickness()) ? "0" : combination.getGoodsThickness()))
|
||||
.isComposite(Boolean.valueOf(combination.getIsComposite()))
|
||||
.name(combination.getGoodsName()).material(combination.getMaterial()).type(combination.getGoodType())
|
||||
.model(combination.getModel()).spec(combination.getSpec()).brand(combination.getBrand()).factory(combination.getFactory())
|
||||
.unit(combination.getUnit()).price(0.0).isComposite(false).remark(remarkExtract(combination.remarkJSON())).isComposite(false).build();
|
||||
|
||||
+15
-3
@@ -60,6 +60,18 @@ public class OrderPlateImportExcelVO {
|
||||
@JsonIgnore
|
||||
private String color;
|
||||
|
||||
@ExcelProperty(value = "复合部件")
|
||||
@JsonIgnore
|
||||
private String isComposite;
|
||||
|
||||
@ExcelProperty(value = "配件类型")
|
||||
@JsonIgnore
|
||||
private String category;
|
||||
|
||||
@ExcelProperty(value = "配件子类")
|
||||
@JsonIgnore
|
||||
private String type;
|
||||
|
||||
@ExcelProperty(value = "厂家")
|
||||
@JsonIgnore
|
||||
private String factory;
|
||||
@@ -72,15 +84,15 @@ public class OrderPlateImportExcelVO {
|
||||
@JsonIgnore
|
||||
private String model;
|
||||
|
||||
@ExcelProperty(value = "板材长")
|
||||
@ExcelProperty(value = "板材/配件长")
|
||||
@JsonIgnore
|
||||
private String goodsHeight;
|
||||
|
||||
@ExcelProperty(value = "板材宽")
|
||||
@ExcelProperty(value = "板材/配件宽")
|
||||
@JsonIgnore
|
||||
private String goodsWidth;
|
||||
|
||||
@ExcelProperty(value = "板材厚")
|
||||
@ExcelProperty(value = "板材/配件厚")
|
||||
@JsonIgnore
|
||||
private String goodsThickness;
|
||||
|
||||
|
||||
+5
-6
@@ -225,12 +225,9 @@
|
||||
g.thickness,
|
||||
g.remark,
|
||||
g.spec,
|
||||
sub.order_id,
|
||||
sub.totalPlates AS number,
|
||||
sub.totalArea AS area,
|
||||
sub.room_id,
|
||||
sub.body_id,
|
||||
sub.group_id
|
||||
SUM(sub.totalPlates) AS number,
|
||||
SUM(sub.totalArea) AS area
|
||||
|
||||
FROM (
|
||||
SELECT
|
||||
i.room_id,
|
||||
@@ -277,6 +274,8 @@
|
||||
) sub
|
||||
LEFT JOIN
|
||||
order_goods g ON sub.organ_id = g.organ_id AND sub.order_id = g.order_id AND sub.goods_id = g.id
|
||||
GROUP BY
|
||||
g.id, g.order_id, g.brand, g.goods_id, g.goods_name, g.material, g.texture, g.color, g.color_black, g.width, g.height, g.thickness, g.remark, g.spec;
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
Reference in New Issue
Block a user