mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-12 21:02:08 +08:00
禅道bug#1590修复
This commit is contained in:
-1
@@ -537,7 +537,6 @@ public class DefaultOrderImportXmlParserHandler {
|
||||
.createTime(LocalDateTime.now())
|
||||
.detail(JsonUtils.zipString(JSON.toJSONString(boxXmlVO)))
|
||||
.sort(sort++)
|
||||
.area(BigDecimal.ZERO)
|
||||
.build());
|
||||
}
|
||||
|
||||
|
||||
+22
-12
@@ -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,17 +150,31 @@ public class DefaultExcelOrderImportConsumer {
|
||||
if (ObjectUtil.isNull(orderImportTaskDO)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Long finalOrganId = organId;
|
||||
String creator = orderImportTaskDO.getCreator();
|
||||
transactionTemplate.execute(status -> {
|
||||
try {
|
||||
// 创建订单
|
||||
OrderDO orderDO = createOrder(taskId);
|
||||
// 创建工厂
|
||||
log.info("====================【订单默认excel导入处理临时数据开始】====================");
|
||||
DefaultExcelOrderImportFactory defaultExcelOrderImportFactory = new DefaultExcelOrderImportFactory(taskId, orderDO, organId, orderImportTaskDO.getCreator(),
|
||||
DefaultExcelOrderImportFactory defaultExcelOrderImportFactory = new DefaultExcelOrderImportFactory(taskId, orderDO, finalOrganId, creator,
|
||||
snowFlakeGenerator, idWorker, orderImportTaskMapper, orderImportTempDataMapper, dictDataApi, orderMapper, goodsMapper, rawGoodsMapper, orderPartsMapper,
|
||||
orderBodyMapper, orderGroupMapper, plateMapper, orderItemMapper, plateGoodMapper, orderInputProcessor, partsMapper, customPlateNoGenerateService);
|
||||
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);
|
||||
throw 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<OrderImportTaskDO>()
|
||||
|
||||
+12
-65
@@ -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<OrderImportTempDataGoodsGroupDO> 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("无")
|
||||
|
||||
+6
-6
@@ -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<OrderImportTaskDO>().eq(OrderImportTaskDO::getId, taskId).set(OrderImportTaskDO::getImportStatus, OrderImportStatusEnum.IMPORT_SUCCESS.getStatus()));
|
||||
orderImportTaskMapper.update(new LambdaUpdateWrapper<OrderImportTaskDO>().eq(OrderImportTaskDO::getId, taskId).set(OrderImportTaskDO::getImportStatus, OrderImportStatusEnum.IMPORT_SUCCESS.getStatus()));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user