订单新增来源组件订单列表

This commit is contained in:
gaoqr
2026-07-29 18:07:02 +08:00
parent 2fe41de27c
commit a525540f5b
4 changed files with 51 additions and 4 deletions
@@ -27,6 +27,9 @@ public class OrderRespVO {
@ExcelProperty("父单号")
private String apiOrderId;
@Schema(description = "组件生产系统来源订单 ID 列表")
private List<String> sourceOrderIds;
@Schema(description = "订单日期", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("订单日期")
private LocalDateTime orderDate;
@@ -1,6 +1,7 @@
package com.cf.imes.module.executor.dal.dataobject.order;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.cf.imes.framework.mybatis.core.dataobject.BaseDO;
import com.cf.imes.framework.mybatis.core.type.CompressStringTypeHandler;
import lombok.*;
@@ -46,6 +47,13 @@ public class OrderDO extends BaseDO {
* 源订单号
*/
private String apiOrderId;
/**
* 组件生产系统来源订单 ID 列表。
*/
@TableField(value = "source_order_ids", typeHandler = JacksonTypeHandler.class)
private List<String> sourceOrderIds;
/**
* 订单日期
*/
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.cf.imes.framework.mybatis.core.dataobject.BaseDO;
import com.cf.imes.framework.mybatis.core.type.CompressStringTypeHandler;
import lombok.AllArgsConstructor;
@@ -15,6 +16,7 @@ import lombok.NoArgsConstructor;
import lombok.ToString;
import java.time.LocalDateTime;
import java.util.List;
/**
* 订单表 order_{N} DO
@@ -54,6 +56,15 @@ public class OrderDO extends BaseDO {
* 源订单号
*/
private String apiOrderId;
/**
* 组件生产系统来源订单 ID 列表。
*
* <p>同一个 iMES 订单可以接收多个组件生产订单的拆单数据。</p>
*/
@TableField(value = "source_order_ids", typeHandler = JacksonTypeHandler.class)
private List<String> sourceOrderIds;
/**
* 订单日期
*/
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.cf.imes.framework.common.enums.OrderPackageStatusEnum;
import com.cf.imes.framework.common.exception.ServiceException;
import com.cf.imes.framework.common.util.json.JsonUtils;
import com.cf.imes.framework.id.core.util.SnowflakeIdWorker3rd;
import com.cf.imes.framework.mybatis.core.generator.SnowFlakeGenerator;
import com.cf.imes.module.executor.enums.DataTypeEnum;
@@ -30,6 +31,10 @@ import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import static com.cf.imes.module.plan.enums.ErrorCodeConstants.WEBCAD_ORDER_IMPORT_ORDER_PLATENUM_REACH_THRESHOLD_ERROR;
import static com.cf.imes.module.plan.enums.ErrorCodeConstants.WEBCAD_ORDER_NOT_EXISTS_ERROR;
@@ -97,7 +102,7 @@ public class ProducingOrderImportTransactionalService {
logStage(request, "convert", stageStartedAt);
stageStartedAt = System.nanoTime();
updateOrderForImport(order);
updateOrderForImport(order, request.getSourceOrderId());
logStage(request, "update-order-state", stageStartedAt);
ProducingOrderImportFactory factory = new ProducingOrderImportFactory(
@@ -162,13 +167,17 @@ public class ProducingOrderImportTransactionalService {
/**
* 沿用原拆单规则调整订单数据来源、生产状态和打包状态。
*/
private void updateOrderForImport(OrderDO order) {
private void updateOrderForImport(OrderDO order, String sourceOrderId) {
Integer status = order.getStatus();
List<String> sourceOrderIds = mergeSourceOrderId(order.getSourceOrderIds(), sourceOrderId);
order.setSourceOrderIds(sourceOrderIds);
LambdaUpdateWrapper<OrderDO> update = new LambdaUpdateWrapper<OrderDO>()
.eq(OrderDO::getId, order.getId())
.eq(OrderDO::getOrganId, order.getOrganId())
.eq(OrderDO::getDeleted, false)
.set(OrderDO::getDataType, DataTypeEnum.API_IMPORT.getStatus());
.set(OrderDO::getDataType, DataTypeEnum.API_IMPORT.getStatus())
// setSql 的参数仍由 MyBatis 绑定,避免直接拼接 JSON 字符串。
.setSql("source_order_ids = {0}", JsonUtils.toJsonString(sourceOrderIds));
if (OrderStatusEnum.EMPTY.getStatus().equals(status)) {
update.set(OrderDO::getStatus, OrderStatusEnum.NEW_ORDER.getStatus());
}
@@ -180,4 +189,20 @@ public class ProducingOrderImportTransactionalService {
}
orderMapper.update(update);
}
/**
* 将本次来源订单加入目标订单的来源集合。
*
* <p>使用 {@link LinkedHashSet} 保留首次导入顺序,同时避免同一来源订单重复导入时
* 在列表中产生重复 ID。</p>
*/
private List<String> mergeSourceOrderId(List<String> currentSourceOrderIds,
String sourceOrderId) {
LinkedHashSet<String> merged = new LinkedHashSet<>();
if (currentSourceOrderIds != null) {
merged.addAll(currentSourceOrderIds);
}
merged.add(sourceOrderId);
return new ArrayList<>(merged);
}
}