diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/DefaultOrderImportXmlParserHandler.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/DefaultOrderImportXmlParserHandler.java index 608fa6425..0f71a501f 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/DefaultOrderImportXmlParserHandler.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/DefaultOrderImportXmlParserHandler.java @@ -537,7 +537,6 @@ public class DefaultOrderImportXmlParserHandler { .createTime(LocalDateTime.now()) .detail(JsonUtils.zipString(JSON.toJSONString(boxXmlVO))) .sort(sort++) - .area(BigDecimal.ZERO) .build()); } diff --git a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/consumer/DefaultExcelOrderImportConsumer.java b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/consumer/DefaultExcelOrderImportConsumer.java index 662bfa496..ec1224205 100644 --- a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/consumer/DefaultExcelOrderImportConsumer.java +++ b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/consumer/DefaultExcelOrderImportConsumer.java @@ -11,10 +11,8 @@ import com.cf.imes.framework.common.util.json.JsonUtils; import com.cf.imes.framework.id.core.util.SnowflakeIdWorker3rd; import com.cf.imes.framework.redis.config.ChenfengCacheProperties; import com.cf.imes.module.executor.enums.OrderStatusEnum; -import com.cf.imes.module.plan.dal.mysql.orderParts.PartsMapper; import com.cf.imes.module.plan.dal.mysql.plate.PlateGoodMapper; import com.cf.imes.module.plan.service.customplateno.CustomPlateNoGenerateService; -import com.cf.imes.module.plan.service.order.OrderInputProcessor; import com.cf.imes.module.plan.service.orderImport.OrderImportTaskService; import com.cf.imes.module.plan.service.orderImport.factory.DefaultExcelOrderImportFactory; import com.cf.imes.framework.mq.rabbitmq.constant.RabbitMqConstants; @@ -43,9 +41,9 @@ import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.amqp.support.AmqpHeaders; import org.springframework.messaging.handler.annotation.Header; import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Transactional; import jakarta.annotation.Resource; +import org.springframework.transaction.support.TransactionTemplate; import java.time.LocalDate; import java.util.Objects; @@ -113,21 +111,17 @@ public class DefaultExcelOrderImportConsumer { @Resource private PlateGoodMapper plateGoodMapper; - @Resource - private OrderInputProcessor orderInputProcessor; - - @Resource - private PartsMapper partsMapper; - @Resource private CustomPlateNoGenerateService customPlateNoGenerateService; @Resource private ChenfengCacheProperties chenfengCacheProperties; + @Resource + private TransactionTemplate transactionTemplate; + @RabbitListener(queues = RabbitMqConstants.ORDER_IMPORT_DEFAULT_EXCEL_QUEUE) @DS("imes_prod") - @Transactional(rollbackFor = Exception.class) public void orderImport(String message, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag) throws Exception { log.info("====================【订单默认excel导入收到消息:{}】====================", message); Long organId = null; @@ -156,16 +150,30 @@ public class DefaultExcelOrderImportConsumer { if (ObjectUtil.isNull(orderImportTaskDO)) { return; } - // 创建订单 - OrderDO orderDO = createOrder(taskId); - // 创建工厂 - log.info("====================【订单默认excel导入处理临时数据开始】===================="); - DefaultExcelOrderImportFactory defaultExcelOrderImportFactory = new DefaultExcelOrderImportFactory(taskId, orderDO, organId, orderImportTaskDO.getCreator(), - snowFlakeGenerator, idWorker, orderImportTaskMapper, orderImportTempDataMapper, dictDataApi, orderMapper, goodsMapper, rawGoodsMapper, orderPartsMapper, - orderBodyMapper, orderGroupMapper, plateMapper, orderItemMapper, plateGoodMapper, orderInputProcessor, partsMapper, customPlateNoGenerateService); - // 解析临时表数据 - defaultExcelOrderImportFactory.analyzeTempData(); - log.info("====================【订单默认excel导入处理临时数据结束】===================="); + + Long finalOrganId = organId; + String creator = orderImportTaskDO.getCreator(); + transactionTemplate.execute(status -> { + try { + // 创建订单 + OrderDO orderDO = createOrder(taskId); + // 创建工厂 + log.info("====================【订单默认excel导入处理临时数据开始】===================="); + DefaultExcelOrderImportFactory defaultExcelOrderImportFactory = new DefaultExcelOrderImportFactory(taskId, orderDO, finalOrganId, creator, + snowFlakeGenerator, idWorker, orderImportTaskMapper, orderImportTempDataMapper, dictDataApi, orderMapper, goodsMapper, rawGoodsMapper, orderPartsMapper, + orderBodyMapper, orderGroupMapper, plateMapper, orderItemMapper, plateGoodMapper, customPlateNoGenerateService); + // 解析临时表数据 + defaultExcelOrderImportFactory.analyzeTempData(); + log.info("====================【订单默认excel导入处理临时数据结束】===================="); + } catch (Exception e) { + + status.setRollbackOnly(); + + throw e; + } + + return null; + }); } catch (Exception e) { log.error(ORDER_IMPORT_FAIL.getMsg(), e); orderImportTaskService.updateImportTaskFail(orderImportTaskDO, e); @@ -206,6 +214,8 @@ public class DefaultExcelOrderImportConsumer { OrderDO newOrder = JSON.parseObject(orderTempDetail, OrderDO.class); Long orderId = (Long) snowFlakeGenerator.nextId(null); newOrder.setId(orderId); + // todo 后续可能有子单需求?目前只创建主单 + newOrder.setRootId(orderId); orderMapper.insert(newOrder); // 订单id更新到导入任务表 orderImportTaskMapper.update(new LambdaUpdateWrapper() diff --git a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/DefaultExcelOrderImportFactory.java b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/DefaultExcelOrderImportFactory.java index 9461d5c38..d8e54fd82 100644 --- a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/DefaultExcelOrderImportFactory.java +++ b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/DefaultExcelOrderImportFactory.java @@ -49,14 +49,12 @@ import com.cf.imes.module.plan.dal.mysql.orderImport.OrderImportTaskMapper; import com.cf.imes.module.plan.dal.mysql.orderImport.OrderImportTempDataMapper; import com.cf.imes.module.plan.dal.mysql.orderItem.OrderItemMapper; import com.cf.imes.module.plan.dal.mysql.orderParts.OrderPartsMapper; -import com.cf.imes.module.plan.dal.mysql.orderParts.PartsMapper; import com.cf.imes.module.plan.dal.mysql.plate.PlateGoodMapper; import com.cf.imes.module.plan.dal.mysql.plate.PlateMapper; import com.cf.imes.module.plan.dal.mysql.rawgoods.RawGoodsMapper; import com.cf.imes.module.plan.enums.ErrorCodeConstants; import com.cf.imes.module.plan.service.customplateno.CustomPlateNoGenerateService; import com.cf.imes.module.plan.service.customplateno.vo.CustomPlateNoGenerateConfigVO; -import com.cf.imes.module.plan.service.order.OrderInputProcessor; import com.cf.imes.module.system.api.dict.DictDataApi; import com.cf.imes.module.system.api.dict.dto.DictDataRespDTO; import lombok.extern.slf4j.Slf4j; @@ -70,8 +68,6 @@ import java.util.List; import static com.cf.imes.module.plan.enums.ErrorCodeConstants.ORDER_IMPORT_PLATE_GOODS_NOMATCH_ERROR; import static com.cf.imes.module.plan.enums.ErrorCodeConstants.ORDER_IMPORT_PLATE_GOODS_NOT_EXISTS; -import static com.cf.imes.module.plan.service.order.OrderInputProcessor.ORDER_PARTS_REMARK_MODEL; -import static com.cf.imes.module.plan.service.order.OrderInputProcessor.ORDER_PLATE_MODEL; /** * 默认excel导入订单工厂服务 @@ -154,10 +150,6 @@ public class DefaultExcelOrderImportFactory { private PlateGoodMapper plateGoodMapper; - private OrderInputProcessor orderInputProcessor; - - private PartsMapper partsMapper; - private String operatorName; private CustomPlateNoGenerateService customPlateNoGenerateService; @@ -180,8 +172,6 @@ public class DefaultExcelOrderImportFactory { PlateMapper plateMapper, OrderItemMapper orderItemMapper, PlateGoodMapper plateGoodMapper, - OrderInputProcessor orderInputProcessor, - PartsMapper partsMapper, CustomPlateNoGenerateService customPlateNoGenerateService) { this.taskId = taskId; this.orderDO = orderDO; @@ -202,8 +192,6 @@ public class DefaultExcelOrderImportFactory { this.plateMapper = plateMapper; this.orderItemMapper = orderItemMapper; this.plateGoodMapper = plateGoodMapper; - this.orderInputProcessor = orderInputProcessor; - this.partsMapper = partsMapper; this.customPlateNoGenerateService = customPlateNoGenerateService; batchId = (Long) snowFlakeGenerator.nextId(null); } @@ -242,9 +230,6 @@ public class DefaultExcelOrderImportFactory { // 完成所有流程后更新任务为导入成功 updateTaskSuccess(); } catch (Exception e) { - // 数据库数据回滚,此时删除 ES 里的数据 - orderInputProcessor.deleteByOrderIdBatch(orderId, batchId, ORDER_PLATE_MODEL); - orderInputProcessor.deleteByOrderIdBatch(orderId, batchId, ORDER_PARTS_REMARK_MODEL); throw e; } finally { // 解析结束后清理所有list @@ -398,9 +383,6 @@ public class DefaultExcelOrderImportFactory { } // 最后批量插入orderParts一次,避免最后一页小于BATCH_THRESHOLD_NUMBER漏插入 orderInfoBatchInsertWithinThreshold(orderPartsMapper, orderPartsDOS, true); -// orderInfoBatchInsertWithinThreshold(partsMapper, partsDOS, true); - // 批量插入配件备注 - orderPartsRemarksBatchInsertWithinThreshold(true); } /** @@ -490,23 +472,6 @@ public class DefaultExcelOrderImportFactory { orderPartsRemark.setOrganId(organId); // 批量插入配件备注 orderPartsRemarks.add(orderPartsRemark); - orderPartsRemarksBatchInsertWithinThreshold(false); - } - - /** - * 每达到阈值就批量插入一次订单造型数据和压缩数据 - * - * @param isLast 是否最后一次插入,不是就需要清理list - */ - private void orderPartsRemarksBatchInsertWithinThreshold(boolean isLast) { - // 达到批量的阈值就做一次插入 - if (CollUtil.isNotEmpty(orderPartsRemarks) && (orderPartsRemarks.size() >= BATCH_THRESHOLD_NUMBER || isLast)) { - orderInputProcessor.batchSaveOrderPartsModel(orderPartsRemarks); - if (!isLast) { - // 存储完成清理 list - orderPartsRemarks.clear(); - } - } } /** @@ -528,8 +493,6 @@ public class DefaultExcelOrderImportFactory { orderInfoBatchInsertWithinThreshold(orderGroupMapper, orderGroupDOS, true); orderInfoBatchInsertWithinThreshold(plateMapper, plateDOS, true); orderInfoBatchInsertWithinThreshold(orderItemMapper, orderItemDOS, true); - // 批量插入造型数据 - orderModelsBatchInsertWithinThreshold(true); } /** @@ -574,9 +537,10 @@ public class DefaultExcelOrderImportFactory { List bodyNameGroup = orderImportTempDataMapper.selectBodyGroup(bodyNameGroupReqVO); // 生成房间id Long roomId = (Long) snowFlakeGenerator.nextId(null); + int bodySort = 1; for (OrderImportTempDataGoodsGroupDO bodyNameGroupDO : bodyNameGroup) { // 创建orderBodyDO - OrderBodyDO orderBodyDO = createOrderBodyDO(roomName, roomId, bodyNameGroupDO); + OrderBodyDO orderBodyDO = createOrderBodyDO(roomName, roomId, bodyNameGroupDO, bodySort + 1); // 批量插入orderBody orderBodyDOS.add(orderBodyDO); orderInfoBatchInsertWithinThreshold(orderBodyMapper, orderBodyDOS, false); @@ -782,10 +746,6 @@ public class DefaultExcelOrderImportFactory { // 生成自定义板编号 generateCustomPlateNo(plateDO); - // 批量插入order_plate - plateDOS.add(plateDO); - orderInfoBatchInsertWithinThreshold(plateMapper, plateDOS, false); - OrderItemDO orderItemDO = OrderItemDO.builder() .orderId(orderId) .type(OrderItemTypeEnum.PLATE_ITEM.getStatus()) @@ -793,7 +753,7 @@ public class DefaultExcelOrderImportFactory { .bodyId(orderBodyDO.getId()) .plateId(plateId) .num(1.0) - .groupId(StringUtils.isNotEmpty(groupTypeName) ? groupId : 0L) + .groupId(StringUtils.isNotEmpty(groupTypeName) ? groupId : null) .organId(organId) .packageId(0L) .partsId(0L) @@ -823,9 +783,12 @@ public class DefaultExcelOrderImportFactory { orderModelDO.setCreator(operatorName); orderModelDO.setUpdater(operatorName); orderModelDOS.add(orderModelDO); + // 创建造型数据 + plateDO.setModelData(JsonUtils.zipString(JsonUtils.toJsonString(orderModelDO))); - // 批量插入造型数据 - orderModelsBatchInsertWithinThreshold(false); + // 批量插入order_plate + plateDOS.add(plateDO); + orderInfoBatchInsertWithinThreshold(plateMapper, plateDOS, false); } } }); @@ -985,23 +948,6 @@ public class DefaultExcelOrderImportFactory { } } - /** - * 每达到阈值就批量插入一次订单造型数据和压缩数据 - * - * @param isLast 是否最后一次插入,不是就需要清理list - */ - private void orderModelsBatchInsertWithinThreshold(boolean isLast) { - // 达到批量的阈值就做一次插入 - if (CollUtil.isNotEmpty(orderModelDOS) && (orderModelDOS.size() >= BATCH_THRESHOLD_NUMBER || isLast)) { - // 保存订单造型数据 - orderInputProcessor.batchSaveModel(orderModelDOS); - if (!isLast) { - // 存储完成清理 list - orderModelDOS = ListUtils.newArrayListWithExpectedSize(BATCH_THRESHOLD_NUMBER); - } - } - } - /** * 分页解析配件orderItem * @@ -1013,7 +959,7 @@ public class DefaultExcelOrderImportFactory { private void analyzePart(OrderBodyDO orderBodyDO, String groupTypeName, String groupName, Long groupId) { String roomName = orderBodyDO.getRoomName(); String bodyName = orderBodyDO.getName(); - Long itemGroupId = StringUtils.isNotEmpty(groupTypeName) ? groupId : 0L; + Long itemGroupId = StringUtils.isNotEmpty(groupTypeName) ? groupId : null; Long roomId = StringUtils.isNotEmpty(roomName) ? orderBodyDO.getRoomId() : 0L; Long bodyId = StringUtils.isNotEmpty(bodyName) ? orderBodyDO.getId() : 0L; OrderImportTempDataReqVO groupNameListReqVO = OrderImportTempDataReqVO.builder().type(PART_TYPE).taskId(taskId).roomName(roomName).bodyName(bodyName).groupTypeName(groupTypeName).groupName(groupName).build(); @@ -1072,7 +1018,7 @@ public class DefaultExcelOrderImportFactory { * @param groupDO * @return */ - private OrderBodyDO createOrderBodyDO(String roomName, Long roomId, OrderImportTempDataGoodsGroupDO groupDO) { + private OrderBodyDO createOrderBodyDO(String roomName, Long roomId, OrderImportTempDataGoodsGroupDO groupDO, int bodySort) { OrderBodyDO orderBodyDO = OrderBodyDO.builder() .id((Long) snowFlakeGenerator.nextId(null)) .orderId(orderId) @@ -1082,7 +1028,8 @@ public class DefaultExcelOrderImportFactory { .width(0.0) .height(0.0) .depth(0.0) - .multiNum(0) + .multiNum(1) + .multiSort(bodySort) .unregularNum(0) .filename("无") .remark("无") diff --git a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/DefaultXmlOrderImportFactory.java b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/DefaultXmlOrderImportFactory.java index 7cb666d8e..c7c76cb61 100644 --- a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/DefaultXmlOrderImportFactory.java +++ b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/DefaultXmlOrderImportFactory.java @@ -19,6 +19,7 @@ import com.cf.imes.framework.id.core.util.SnowflakeIdWorker3rd; import com.cf.imes.framework.mybatis.core.generator.SnowFlakeGenerator; import com.cf.imes.framework.mybatis.core.injector.BaseBatchMapper; import com.cf.imes.module.executor.enums.DictTypeConstants; +import com.cf.imes.module.executor.enums.OrderImportStatusEnum; import com.cf.imes.module.executor.enums.OrderImportTmpDataTypeEnum; import com.cf.imes.module.executor.enums.OrderItemTypeEnum; import com.cf.imes.module.plan.controller.admin.orderimport.vo.OrderImportTempDataReqVO; @@ -495,7 +496,6 @@ public class DefaultXmlOrderImportFactory { bodyBasePoint = roomBodyTempDataDO.getBodyPosition(); } else { roomBodyTempDataDO.setPlateNum(roomBodyTempDataDO.getPlateNum() + 1); - roomBodyTempDataDO.setArea(roomBodyTempDataDO.getArea().add(area)); } } } @@ -578,7 +578,7 @@ public class DefaultXmlOrderImportFactory { .orderId(orderId) .type(OrderItemTypeEnum.PLATE_ITEM.getStatus()) .plateId(plateId) - .groupId(Optional.ofNullable(groupTempDataDO).map(OrderImportTempDataDO::getInnerGroupId).orElse(0L)) + .groupId(Optional.ofNullable(groupTempDataDO).map(OrderImportTempDataDO::getInnerGroupId).orElse(null)) .roomId(roomBodyTempDataDO.getInnerRoomId()) .bodyId(roomBodyTempDataDO.getInnerBodyId()) .num(1.0) @@ -1336,7 +1336,7 @@ public class DefaultXmlOrderImportFactory { .orderId(orderId) .type(OrderItemTypeEnum.PARTS_ITEM.getStatus()) .partsId(partId) - .groupId(ObjectUtil.isNotNull(groupTempDataDO) ? groupTempDataDO.getInnerGroupId() : 0L) + .groupId(ObjectUtil.isNotNull(groupTempDataDO) ? groupTempDataDO.getInnerGroupId() : null) .roomId(roomBodyTempDataDO.getInnerRoomId()) .bodyId(roomBodyTempDataDO.getInnerBodyId()) .num(NumberUtil.toDouble(partRoomBodyGroupGroupDO.getPartsNum())) @@ -1455,7 +1455,7 @@ public class DefaultXmlOrderImportFactory { .orderId(orderId) .type(OrderItemTypeEnum.PARTS_ITEM.getStatus()) .partsId(partId) - .groupId(ObjectUtil.isNotNull(groupTempDataDO) ? groupTempDataDO.getInnerGroupId() : 0L) + .groupId(ObjectUtil.isNotNull(groupTempDataDO) ? groupTempDataDO.getInnerGroupId() : null) .roomId(roomBodyTempDataDO.getInnerRoomId()) .bodyId(roomBodyTempDataDO.getInnerBodyId()) .num(NumberUtil.toDouble(partRoomBodyGroupGroupDO.getPartsNum())) @@ -1573,7 +1573,7 @@ public class DefaultXmlOrderImportFactory { .orderId(orderId) .type(OrderItemTypeEnum.PARTS_ITEM.getStatus()) .partsId(partId) - .groupId(ObjectUtil.isNotNull(groupTempDataDO) ? groupTempDataDO.getInnerGroupId() : 0L) + .groupId(ObjectUtil.isNotNull(groupTempDataDO) ? groupTempDataDO.getInnerGroupId() : null) .roomId(roomBodyTempDataDO.getInnerRoomId()) .bodyId(roomBodyTempDataDO.getInnerBodyId()) .num(NumberUtil.toDouble(partRoomBodyGroupGroupDO.getPartsNum())) @@ -1886,6 +1886,6 @@ public class DefaultXmlOrderImportFactory { * 更新为导入成功 */ private void updateTaskSuccess() { -// orderImportTaskMapper.update(new LambdaUpdateWrapper().eq(OrderImportTaskDO::getId, taskId).set(OrderImportTaskDO::getImportStatus, OrderImportStatusEnum.IMPORT_SUCCESS.getStatus())); + orderImportTaskMapper.update(new LambdaUpdateWrapper().eq(OrderImportTaskDO::getId, taskId).set(OrderImportTaskDO::getImportStatus, OrderImportStatusEnum.IMPORT_SUCCESS.getStatus())); } }