1、xml导入订单修复可用;2、未排单订单分页支持pageSize=-1的查询全部;

This commit is contained in:
gaoqr
2026-06-09 17:31:12 +08:00
parent 9aeb56fc3a
commit 57f3fa6428
10 changed files with 75 additions and 132 deletions
@@ -44,6 +44,12 @@ public class OrderDO extends BaseDO {
* 父单号
*/
private Long parentId;
/**
* 根单号
*/
private Long rootId;
/**
* 源订单号
*/
@@ -100,5 +100,5 @@ public class OrderBodyDO extends BaseDO {
/**
* 成倍序号
*/
private int sort;
private int multiSort;
}
@@ -251,6 +251,5 @@ public class PlateDO extends BaseDO {
/**
* 造型数据
*/
@TableField(exist = false)
private String modelData;
}
@@ -28,12 +28,10 @@ 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.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.DefaultXmlOrderImportFactory;
import com.rabbitmq.client.Channel;
@@ -42,9 +40,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;
@@ -110,21 +108,17 @@ public class DefaultXmlOrderImportConsumer {
@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_XML_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("====================【订单默认xml导入收到消息:{}】====================", message);
Long organId = null;
@@ -153,16 +147,30 @@ public class DefaultXmlOrderImportConsumer {
if (ObjectUtil.isNull(orderImportTaskDO)) {
return;
}
// 创建订单
OrderDO orderDO = createOrder(taskId);
log.info("====================【订单默认xml导入处理临时数据开始】====================");
// 创建工厂
DefaultXmlOrderImportFactory defaultExcelOrderImportFactory = new DefaultXmlOrderImportFactory(taskId, orderDO, organId, orderImportTaskDO.getCreator(),
snowFlakeGenerator, idWorker, orderImportTaskMapper, orderImportTempDataMapper, orderMapper, goodsMapper, rawGoodsMapper, orderPartsMapper,
orderBodyMapper, orderGroupMapper, plateMapper, orderItemMapper, plateGoodMapper, orderInputProcessor, partsMapper, customPlateNoGenerateService);
// 解析临时数据
defaultExcelOrderImportFactory.analyzeTempData();
log.info("====================【订单默认xml导入处理临时数据结束】====================");
Long finalOrganId = organId;
String creator = orderImportTaskDO.getCreator();
transactionTemplate.execute(status -> {
try {
// 创建订单
OrderDO orderDO = createOrder(taskId);
log.info("====================【订单默认xml导入处理临时数据开始】====================");
// 创建工厂
DefaultXmlOrderImportFactory defaultExcelOrderImportFactory = new DefaultXmlOrderImportFactory(taskId, orderDO, finalOrganId, creator,
snowFlakeGenerator, idWorker, orderImportTaskMapper, orderImportTempDataMapper, orderMapper, goodsMapper, rawGoodsMapper, orderPartsMapper,
orderBodyMapper, orderGroupMapper, plateMapper, orderItemMapper, plateGoodMapper, customPlateNoGenerateService);
// 解析临时表数据
defaultExcelOrderImportFactory.analyzeTempData();
log.info("====================【订单默认xml导入处理临时数据结束】====================");
} catch (Exception e) {
status.setRollbackOnly();
throw e;
}
return null;
});
} catch (Exception e) {
log.error( ORDER_IMPORT_FAIL.getMsg(), e);
orderImportTaskService.updateImportTaskFail(orderImportTaskDO, e);
@@ -203,6 +211,8 @@ public class DefaultXmlOrderImportConsumer {
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>()
@@ -19,7 +19,6 @@ 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;
@@ -68,7 +67,6 @@ import com.cf.imes.module.plan.dal.elasticsearch.IContourData;
import com.cf.imes.module.plan.dal.elasticsearch.IOriginModelingData;
import com.cf.imes.module.plan.dal.elasticsearch.ModelDetail;
import com.cf.imes.module.plan.dal.elasticsearch.OffSetList;
import com.cf.imes.module.plan.dal.elasticsearch.OrderPartsRemark;
import com.cf.imes.module.plan.dal.elasticsearch.PartsInfo;
import com.cf.imes.module.plan.dal.elasticsearch.Point;
import com.cf.imes.module.plan.dal.elasticsearch.PointDetail;
@@ -81,14 +79,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 lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.session.ResultContext;
import org.apache.ibatis.session.ResultHandler;
@@ -106,8 +102,6 @@ import java.util.stream.Collectors;
import static com.cf.imes.module.executor.enums.OrderImportConstants.NOT_ASSIGNED;
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;
/**
* 默认xml导入订单工厂服务
@@ -146,9 +140,6 @@ public class DefaultXmlOrderImportFactory {
private List<PlateDO> plateDOS = ListUtils.newArrayListWithExpectedSize(BATCH_THRESHOLD_NUMBER);
private List<OrderItemDO> orderItemDOS = ListUtils.newArrayListWithExpectedSize(BATCH_THRESHOLD_NUMBER);
private List<PlateGoodDO> plateGoodDOS = ListUtils.newArrayListWithExpectedSize(BATCH_THRESHOLD_NUMBER);
private List<OrderModelDO> orderModelDOS = ListUtils.newArrayListWithExpectedSize(BATCH_THRESHOLD_NUMBER);
private List<OrderPartsRemark> orderPartsRemarks = ListUtils.newArrayListWithExpectedSize(BATCH_THRESHOLD_NUMBER);
// private List<PartsDO> partsDOS = ListUtils.newArrayListWithExpectedSize(BATCH_THRESHOLD_NUMBER);
private static final String EMPTY_STRING = new String();
private static final BigDecimal BIG_ZERO = new BigDecimal(0);
@@ -194,10 +185,6 @@ public class DefaultXmlOrderImportFactory {
private PlateGoodMapper plateGoodMapper;
private OrderInputProcessor orderInputProcessor;
private PartsMapper partsMapper;
private String operatorName;
private CustomPlateNoGenerateService customPlateNoGenerateService;
@@ -219,8 +206,6 @@ public class DefaultXmlOrderImportFactory {
PlateMapper plateMapper,
OrderItemMapper orderItemMapper,
PlateGoodMapper plateGoodMapper,
OrderInputProcessor orderInputProcessor,
PartsMapper partsMapper,
CustomPlateNoGenerateService customPlateNoGenerateService) {
this.taskId = taskId;
this.orderDO = orderDO;
@@ -240,8 +225,6 @@ public class DefaultXmlOrderImportFactory {
this.plateMapper = plateMapper;
this.orderItemMapper = orderItemMapper;
this.plateGoodMapper = plateGoodMapper;
this.orderInputProcessor = orderInputProcessor;
this.partsMapper = partsMapper;
this.customPlateNoGenerateService = customPlateNoGenerateService;
batchId = (Long) snowFlakeGenerator.nextId(null);
}
@@ -299,9 +282,6 @@ public class DefaultXmlOrderImportFactory {
// 完成所有流程后更新任务为导入成功
updateTaskSuccess();
} catch (Exception e) {
// 数据库数据回滚,此时删除 ES 里的数据
orderInputProcessor.deleteByOrderIdBatch(orderId, batchId, ORDER_PLATE_MODEL);
orderInputProcessor.deleteByOrderIdBatch(orderId, batchId, ORDER_PARTS_REMARK_MODEL);
throw e;
} finally {
clearAll();
@@ -320,6 +300,7 @@ public class DefaultXmlOrderImportFactory {
String bodyCode = bodyDO.getBodyCode();
Map<String, OrderImportTempDataDO> bodyTempMap = roomBodyMap.get(roomCode);
int bodySort = 1;
if (MapUtil.isNotEmpty(bodyTempMap)) {
OrderImportTempDataDO bodyTempData = bodyTempMap.get(bodyCode);
if (ObjectUtil.isNotNull(bodyTempData)) {
@@ -329,10 +310,13 @@ public class DefaultXmlOrderImportFactory {
// 有房间没柜体,取房间id,后续操作增加房间下柜体
Map.Entry<String, OrderImportTempDataDO> anyBody = bodyTempMap.entrySet().iterator().next();
bodyDO.setInnerRoomId(anyBody.getValue().getInnerRoomId());
bodySort = bodyTempMap.size() + 1;
}
// 创建order_body
OrderBodyDO orderBodyDO = createOrderBodyDO(bodyDO);
// 设置序号
orderBodyDO.setMultiSort(bodySort);
orderBodyDOS.add(orderBodyDO);
// 批量插入orderGroup
orderInfoBatchInsertWithinThreshold(orderBodyMapper, orderBodyDOS, false);
@@ -511,6 +495,7 @@ public class DefaultXmlOrderImportFactory {
bodyBasePoint = roomBodyTempDataDO.getBodyPosition();
} else {
roomBodyTempDataDO.setPlateNum(roomBodyTempDataDO.getPlateNum() + 1);
roomBodyTempDataDO.setArea(roomBodyTempDataDO.getArea().add(area));
}
}
}
@@ -666,20 +651,18 @@ public class DefaultXmlOrderImportFactory {
orderModelDO.setOrganId(organId);
orderModelDO.setCreator(operatorName);
orderModelDO.setUpdater(operatorName);
orderModelDOS.add(orderModelDO);
// 创建造型数据
plateDO.setModelData(JsonUtils.zipString(JsonUtils.toJsonString(orderModelDO)));
// 批量插入order_plate
plateDOS.add(plateDO);
orderInfoBatchInsertWithinThreshold(plateMapper, plateDOS, false);
// 批量插入造型数据
orderModelsBatchInsertWithinThreshold(false);
}
}
);
//最后批量插入一次,避免最后一页小于BATCH_THRESHOLD_NUMBER漏插入
orderInfoBatchInsertWithinThreshold(plateMapper, plateDOS, true);
// 批量插入造型数据
orderModelsBatchInsertWithinThreshold(true);
// 所有自定义板编号生成完成后更新配置到订单
customPlateNoGenerateService.updateCustomPlateNoGenerateConfig(plateNoGenerateConfigVO, orderDO);
@@ -1271,8 +1254,6 @@ public class DefaultXmlOrderImportFactory {
// 最后批量插入一次,避免最后一页小于BATCH_THRESHOLD_NUMBER漏插入
orderInfoBatchInsertWithinThreshold(orderPartsMapper, orderPartsDOS, true);
orderInfoBatchInsertWithinThreshold(orderItemMapper, orderItemDOS, true);
// 批量插入配件备注
orderPartsRemarksBatchInsertWithinThreshold(true);
}
/**
@@ -1392,14 +1373,6 @@ public class DefaultXmlOrderImportFactory {
// 缓存配件
orderPartsDOMap.put(itemCode, orderPartsDO);
orderInfoBatchInsertWithinThreshold(orderPartsMapper, orderPartsDOS, false);
// 批量插入配件备注
orderPartsRemarks.add(OrderPartsRemark.builder()
.partsId(partId)
.batchId(batchId)
.orderId(orderId)
.remark(partRemarkXmlVOList.toString())
.build());
orderPartsRemarksBatchInsertWithinThreshold(false);
}
/**
@@ -1519,13 +1492,6 @@ public class DefaultXmlOrderImportFactory {
// 缓存配件
orderPartsDOMap.put(itemCode, orderPartsDO);
orderInfoBatchInsertWithinThreshold(orderPartsMapper, orderPartsDOS, false);
// 批量插入配件备注
orderPartsRemarks.add(OrderPartsRemark.builder()
.partsId(partId)
.orderId(orderId)
.remark(partRemarkXmlVOList.toString())
.build());
orderPartsRemarksBatchInsertWithinThreshold(false);
}
/**
@@ -1644,14 +1610,6 @@ public class DefaultXmlOrderImportFactory {
// 缓存配件
orderPartsDOMap.put(itemCode, orderPartsDO);
orderInfoBatchInsertWithinThreshold(orderPartsMapper, orderPartsDOS, false);
// 批量插入配件备注
orderPartsRemarks.add(OrderPartsRemark.builder()
.partsId(partId)
.batchId(batchId)
.orderId(orderId)
.remark(partRemarkXmlVOList.toString())
.build());
orderPartsRemarksBatchInsertWithinThreshold(false);
}
private void writeBackToOrders() {
@@ -1730,7 +1688,7 @@ public class DefaultXmlOrderImportFactory {
.width(NumberUtil.parseDouble(roomBoxXmlVO.getWidth()))
.height(NumberUtil.parseDouble(roomBoxXmlVO.getHeight()))
.depth(NumberUtil.parseDouble(roomBoxXmlVO.getLength()))
.multiNum(0)
.multiNum(1)
.unregularNum(0)
.filename("")
.remark("")
@@ -1802,39 +1760,6 @@ public class DefaultXmlOrderImportFactory {
}
}
/**
* 每达到阈值就批量插入一次订单造型数据和压缩数据
*
* @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.clear();
}
}
}
/**
* 每达到阈值就批量插入一次订单造型数据和压缩数据
*
* @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 = ListUtils.newArrayListWithExpectedSize(BATCH_THRESHOLD_NUMBER);
}
}
}
/**
* 长度面积数值按单位转换
*
@@ -1930,9 +1855,6 @@ public class DefaultXmlOrderImportFactory {
plateDOS.clear();
orderItemDOS.clear();
plateGoodDOS.clear();
orderModelDOS.clear();
orderPartsRemarks.clear();
// partsDOS.clear();
}
/**
@@ -1964,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()));
}
}
@@ -709,7 +709,7 @@ public class WebCadOrderImportAsyncFactory {
Long bodyId = (Long) snowFlakeGenerator.nextId(null);
orderBodyDO = OrderBodyDO.builder().id(bodyId).orderId(orderId).organId(organId)
.roomId(roomId).roomName(roomName).name(boxName).width(0.0).height(0.0)
.depth(0.0).multiNum(count).sort(i+1).plateNum(0).unregularNum(0).filename("").remark("").deleted(false).build();
.depth(0.0).multiNum(count).multiSort(i+1).plateNum(0).unregularNum(0).filename("").remark("").deleted(false).build();
orderBodyDO.setCreator(operatorName);
orderBodyDO.setUpdater(operatorName);
orderBodyDO.setCreateTime(now);
@@ -1478,7 +1478,7 @@ public class WebCadOrderImportAsyncFactory {
Long bodyId = (Long) snowFlakeGenerator.nextId(null);
orderBodyDO = OrderBodyDO.builder().id(bodyId).orderId(orderId).organId(organId)
.roomId(roomId).roomName(roomName).name(bodyName).width(0.0).height(0.0)
.depth(0.0).multiNum(1).sort(1).plateNum(0).unregularNum(0).filename("").remark("").deleted(false).build();
.depth(0.0).multiNum(1).multiSort(1).plateNum(0).unregularNum(0).filename("").remark("").deleted(false).build();
orderBodyDO.setCreator(operatorName);
orderBodyDO.setUpdater(operatorName);
orderBodyDO.setCreateTime(now);
@@ -2667,7 +2667,7 @@ public class WebCadOrderImportAsyncFactory {
ps.setString(18, orderBodyDO.getCreator());
ps.setString(19, orderBodyDO.getUpdater());
ps.setLong(20, cadViewFileId);
ps.setInt(21, orderBodyDO.getSort());
ps.setInt(21, orderBodyDO.getMultiSort());
}
@Override
@@ -893,7 +893,7 @@ public class WebCadOrderImportFactory {
Long bodyId = (Long) snowFlakeGenerator.nextId(null);
OrderBodyDO orderBodyDO = OrderBodyDO.builder().id(bodyId).orderId(orderId).organId(organId)
.roomId(roomId).roomName(roomName).name(boxName).width(0.0).height(0.0)
.depth(0.0).multiNum(count).sort(i + 1).plateNum(0).unregularNum(0).filename("").remark("").deleted(false).build();
.depth(0.0).multiNum(count).multiSort(i + 1).plateNum(0).unregularNum(0).filename("").remark("").deleted(false).build();
orderBodyDO.setCreator(operatorName);
orderBodyDO.setUpdater(operatorName);
orderBodyDO.setCreateTime(now);
@@ -1682,7 +1682,7 @@ public class WebCadOrderImportFactory {
Long bodyId = (Long) snowFlakeGenerator.nextId(null);
orderBodyDO = OrderBodyDO.builder().id(bodyId).orderId(orderId).organId(organId)
.roomId(roomId).roomName(roomName).name(bodyName).width(0.0).height(0.0)
.depth(0.0).multiNum(1).sort(1).plateNum(0).unregularNum(0).filename("").remark("").deleted(false).build();
.depth(0.0).multiNum(1).multiSort(1).plateNum(0).unregularNum(0).filename("").remark("").deleted(false).build();
orderBodyDO.setCreator(operatorName);
orderBodyDO.setUpdater(operatorName);
orderBodyDO.setCreateTime(now);
@@ -2443,7 +2443,7 @@ public class WebCadOrderImportFactory {
ps.setString(18, orderBodyDO.getCreator());
ps.setString(19, orderBodyDO.getUpdater());
ps.setLong(20, cadViewFileId);
ps.setInt(21, orderBodyDO.getSort());
ps.setInt(21, orderBodyDO.getMultiSort());
}
@Override