diff --git a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/CategoryEnum.java b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/CategoryEnum.java new file mode 100644 index 000000000..11415888f --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/CategoryEnum.java @@ -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; + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/IsHavaeEnum.java b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/IsHavaeEnum.java new file mode 100644 index 000000000..5ac70416b --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/IsHavaeEnum.java @@ -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()) ; + } +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/QuarrelEnum.java b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/QuarrelEnum.java new file mode 100644 index 000000000..99b257a96 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/QuarrelEnum.java @@ -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()) ; + } +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java index 6d2db10a9..e3dcdb2c1 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java @@ -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 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()); } } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderParts/OrderPartsDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderParts/OrderPartsDO.java index db717429e..7f0efe4b1 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderParts/OrderPartsDO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderParts/OrderPartsDO.java @@ -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; /** * 备注 */ diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderParts/PartsDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderParts/PartsDO.java new file mode 100644 index 000000000..584a3cb39 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderParts/PartsDO.java @@ -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; + +} \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderParts/PartsMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderParts/PartsMapper.java new file mode 100644 index 000000000..84436426b --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderParts/PartsMapper.java @@ -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 { + + default PartsDO selectByGoodID(String goodId , Long organId) { + return selectOne(PartsDO::getGoodsId, goodId, PartsDO::getOrganId, organId); + } + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderInputProcessor.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderInputProcessor.java index 184e6201d..8b369b3e1 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderInputProcessor.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderInputProcessor.java @@ -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 plateDOS, Collection itemDOS, Collection goodsDOS, - Collection plateGoodDOS) { + Collection plateGoodDOS, + Collection partsDOS) { // if (rawGoodsDOS != null) @@ -159,6 +165,7 @@ public class OrderInputProcessor { insertInBatches(itemDOS, 1000, (batch, index) -> orderItemMapper.insertBatch((Collection) batch)); insertInBatches(goodsDOS, 1000, (batch, index) -> goodsMapper.insertBatch((Collection) batch)); insertInBatches(plateGoodDOS, 1000, (batch, index) -> plateGoodMapper.insertBatch((Collection) batch)); + insertInBatches(partsDOS, 1000, (batch, index) -> partsMapper.insertBatch((Collection) batch)); } private void insertInBatches(Collection entities, int batchSize, BiConsumer, Integer> insertFunction) { diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java index 60b210ed0..41bd8cf41 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java @@ -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> map = getPlateGoods(goodsDO);// 检验商品板材信息是否存在 goodsDO = (List) map.get(GOODSDO_KEY); List plateGoodDOS = (List) map.get(PLATE_GOODS_LIST_KEY); + // 配件信息 + List 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 orderModelDOs = BeanUtils.toBean(plateDetail, OrderModelDO.class); if (!orderModelDOs.isEmpty()) { @@ -446,7 +453,8 @@ public class OrderServiceImpl implements OrderService { Map> map = getPlateGoods(goodsDO);// 检验商品板材信息是否存在 excel goodsDO = (List) map.get(GOODSDO_KEY); List plateGoodDOS = (List) map.get(PLATE_GOODS_LIST_KEY); - + // 配件库匹配 + List 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 plateGoodDOs = plateGoodMapper.selectGoodOne(goodsId, organId); - if (plateGoodDOs.size() > 0) { + if (!plateGoodDOs.isEmpty()) { return plateGoodDOs.get(0); } return null; } + // 配件匹配 + private List getPartsGoods(List partsLists) { + List 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> getPlateGoods(List goodsLists) { Map> map = new HashMap<>(); List 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()); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/ExcelReadUtil.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/ExcelReadUtil.java index f845fa1f5..732afa425 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/ExcelReadUtil.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/ExcelReadUtil.java @@ -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 read(MultipartFile file) throws IOException { Map map = new HashMap<>(); @@ -64,34 +66,38 @@ 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 orderMap, AtomicBoolean error) { - if (orderMap.get(key) == null) { - orderMap.put(key, errValue); - error.set(false); - } + // + private void setIfInvalid(String key, String errValue, Map 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 orderMap, AtomicBoolean error) { @@ -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; } - // OrderPlateImportExcelVO 数据验证 - private Boolean checkVO(OrderPlateImportExcelVO vo) { - List errList = new ArrayList<>(); - Boolean flag = true; - // 检查非空 类型、数量 - if (StringUtils.isEmpty(vo.getGoodType())) { - errList.add("类型不能为空"); - flag = false; + // 错误判断通用方法 + // 判断非零,错误返回;不为空时,判断是否符合枚举类 + private void isNotEmptyAndBack(String value, Class> enumClass, List 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); + } } - if (StringUtils.isEmpty(vo.getGoodsNumber())) { - errList.add("数量不能为空"); - flag = false; - }else { - if (!convertToDouble(vo.getGoodsNumber())) { - flag = false; - errList.add(NUMBER_TYPE_ERR); + } + + // 非零判断,有值判断---判断数值类型,数值长度 + private void isEmptyAndPositiveNumberSize(String value, Class targetType, Integer length, Integer decimalLength, List 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 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 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 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 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 (!checkNumber(vo.getGoodsNumber())) { - flag = false; - errList.add("数量不能为0"); + if (Boolean.FALSE.equals(checkNumber(value))) { + errList.add(errValue + "数量不能为0"); + flag.set(false); } } } + } + + // 判断非空,字典值判断 + public void isNotEmptyAndDict(String value, String dictType, List 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 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 errList = new ArrayList<>(); + AtomicBoolean flag = new AtomicBoolean(true); + + // 全部需要值的字段 + // 检查非空 类型、数量 + 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 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); - } - - } - // 纹理有效性判断 - 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("开门方向数据不存在"); - } - } + checkPlate(vo, errList, flag); } - 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(); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/ExcelTypeRealize.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/ExcelTypeRealize.java index b43fdc805..0df206bef 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/ExcelTypeRealize.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/ExcelTypeRealize.java @@ -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(); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/OrderPlateImportExcelVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/OrderPlateImportExcelVO.java index 02b9f592f..64fc3355e 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/OrderPlateImportExcelVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/OrderPlateImportExcelVO.java @@ -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; diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderItem/OrderItemMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderItem/OrderItemMapper.xml index c34ad5f49..5f5f36656 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderItem/OrderItemMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderItem/OrderItemMapper.xml @@ -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, @@ -243,7 +240,7 @@ SUM(p.area) AS totalArea FROM order_item i - RIGHT JOIN + RIGHT JOIN order_plate p ON i.organ_id = p.organ_id AND i.order_id = p.order_id AND i.plate_id = p.id WHERE i.organ_id = #{organId} AND i.order_id = #{orderId} AND p.deleted = #{deleted} @@ -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; \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/type/order_add_excel.xlsx b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/type/order_add_excel.xlsx index 0778999da..52cf7b4d4 100644 Binary files a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/type/order_add_excel.xlsx and b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/type/order_add_excel.xlsx differ diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/type/order_add_excel_err.xlsx b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/type/order_add_excel_err.xlsx index f171ef9a6..4a9f64c53 100644 Binary files a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/type/order_add_excel_err.xlsx and b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/type/order_add_excel_err.xlsx differ