diff --git a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java
index e8846bdad..8ee8bdfbe 100644
--- a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java
+++ b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java
@@ -210,6 +210,7 @@ public class ErrorCodeConstants {
public static final ErrorCode VENEER_PLAN_PLATE_RECORD_REQUIRED = new ErrorCode(1_003_009_048, "veneer.plan.plate.record.required");
public static final ErrorCode VENEER_PLAN_PLATE_SOURCE_MISMATCH = new ErrorCode(1_003_009_049, "veneer.plan.plate.source.mismatch");
public static final ErrorCode VENEER_PLAN_PLATE_STATUS_CHANGED = new ErrorCode(1_003_009_050, "veneer.plan.plate.status.changed");
+ public static final ErrorCode VENEER_DECOMPOSE_RECORD_INSERT_FAILED = new ErrorCode(1_003_009_051, "veneer.decompose.record.insert.failed");
//=========== 部件管理 1-003-010-000 ============
public static final ErrorCode ORDER_COMPONENT_NOT_EXIST = new ErrorCode(1_003_010_000, "order.component.not.exist");
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/veneer/OrderPlateVeneerBatchMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/veneer/OrderPlateVeneerBatchMapper.java
new file mode 100644
index 000000000..fd081619b
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/veneer/OrderPlateVeneerBatchMapper.java
@@ -0,0 +1,14 @@
+package com.cf.imes.module.executor.dal.mysql.veneer;
+
+import com.cf.imes.framework.mybatis.core.injector.BaseBatchMapper;
+import com.cf.imes.module.executor.dal.dataobject.veneer.OrderPlateVeneerDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 订单板件贴皮记录批量 Mapper。
+ *
+ *
使用单条 {@code INSERT ... VALUES (...), (...)} SQL 批量写入。
+ */
+@Mapper
+public interface OrderPlateVeneerBatchMapper extends BaseBatchMapper {
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/veneer/OrderVeneerPlanBatchMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/veneer/OrderVeneerPlanBatchMapper.java
new file mode 100644
index 000000000..f784ba093
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/veneer/OrderVeneerPlanBatchMapper.java
@@ -0,0 +1,14 @@
+package com.cf.imes.module.executor.dal.mysql.veneer;
+
+import com.cf.imes.framework.mybatis.core.injector.BaseBatchMapper;
+import com.cf.imes.module.executor.dal.dataobject.veneer.OrderVeneerPlanDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 贴皮排单批量 Mapper。
+ *
+ * 使用单条 {@code INSERT ... VALUES (...), (...)} SQL 批量写入。
+ */
+@Mapper
+public interface OrderVeneerPlanBatchMapper extends BaseBatchMapper {
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/veneer/VeneerDecomposeServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/veneer/VeneerDecomposeServiceImpl.java
index e88f0f953..f8b7adfe1 100644
--- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/veneer/VeneerDecomposeServiceImpl.java
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/veneer/VeneerDecomposeServiceImpl.java
@@ -28,7 +28,7 @@ import com.cf.imes.module.executor.dal.dataobject.veneer.VeneerDecomposedPlateCo
import com.cf.imes.module.executor.dal.dataobject.veneer.VeneerDO;
import com.cf.imes.module.executor.dal.mysql.goods.GoodsMapper;
import com.cf.imes.module.executor.dal.mysql.order.OrderMapper;
-import com.cf.imes.module.executor.dal.mysql.veneer.OrderPlateVeneerMapper;
+import com.cf.imes.module.executor.dal.mysql.veneer.OrderPlateVeneerBatchMapper;
import com.cf.imes.module.executor.dal.mysql.veneer.VeneerDecomposeMapper;
import com.cf.imes.module.executor.dal.mysql.veneer.VeneerMapper;
import com.cf.imes.module.executor.enums.VeneerPlateSurfaceEnum;
@@ -51,6 +51,7 @@ import static com.cf.imes.framework.common.pojo.PageParam.PAGE_SIZE_NONE;
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.GOODS_PLATE_UPDATE_CONCURRENCY_ERROR;
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.ORDER_PLATE_UPDATE_CONCURRENCY_ERROR;
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.VENEER_DECOMPOSE_PLATE_STATUS_CHANGED;
+import static com.cf.imes.module.executor.enums.ErrorCodeConstants.VENEER_DECOMPOSE_RECORD_INSERT_FAILED;
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.VENEER_DECOMPOSE_SCOPE_REQUIRED;
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.VENEER_DECOMPOSE_SIDE_REQUIRED;
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.VENEER_NOT_EXIST;
@@ -75,7 +76,7 @@ public class VeneerDecomposeServiceImpl implements VeneerDecomposeService {
private VeneerDecomposeMapper veneerDecomposeMapper;
@Resource
- private OrderPlateVeneerMapper orderPlateVeneerMapper;
+ private OrderPlateVeneerBatchMapper orderPlateVeneerBatchMapper;
@Resource
private VeneerMapper veneerMapper;
@@ -276,7 +277,10 @@ public class VeneerDecomposeServiceImpl implements VeneerDecomposeService {
// A/B 贴皮记录分批插入,控制单条 INSERT 的参数数量和报文大小。
for (List plateVeneerBatch
: CollUtil.split(plateVeneers, DECOMPOSE_BATCH_SIZE)) {
- orderPlateVeneerMapper.insertBatch(plateVeneerBatch);
+ int inserted = orderPlateVeneerBatchMapper.insertBatchSomeColumn(plateVeneerBatch);
+ if (inserted != plateVeneerBatch.size()) {
+ throw new ServiceException(VENEER_DECOMPOSE_RECORD_INSERT_FAILED);
+ }
}
// 以 order_plate 当前状态重新统计,不使用本次请求数量做增量计算。
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/veneer/VeneerPlanServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/veneer/VeneerPlanServiceImpl.java
index 671ea96b2..7010d260a 100644
--- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/veneer/VeneerPlanServiceImpl.java
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/veneer/VeneerPlanServiceImpl.java
@@ -32,6 +32,7 @@ import com.cf.imes.module.executor.dal.dataobject.veneer.VeneerPlannedPlateCount
import com.cf.imes.module.executor.dal.dataobject.veneer.VeneerPlanStatisticsDO;
import com.cf.imes.module.executor.dal.mysql.goods.GoodsMapper;
import com.cf.imes.module.executor.dal.mysql.order.OrderMapper;
+import com.cf.imes.module.executor.dal.mysql.veneer.OrderVeneerPlanBatchMapper;
import com.cf.imes.module.executor.dal.mysql.veneer.VeneerPlanMapper;
import com.cf.imes.module.executor.dal.mysql.veneer.VeneerMapper;
import com.cf.imes.module.executor.enums.VeneerPlanStatusEnum;
@@ -130,6 +131,9 @@ public class VeneerPlanServiceImpl implements VeneerPlanService {
@Resource
private VeneerPlanMapper veneerPlanMapper;
+ @Resource
+ private OrderVeneerPlanBatchMapper orderVeneerPlanBatchMapper;
+
@Resource
private IdentifierGenerator identifierGenerator;
@@ -211,8 +215,13 @@ public class VeneerPlanServiceImpl implements VeneerPlanService {
.build());
}
- if (Boolean.FALSE.equals(veneerPlanMapper.insertBatch(plans, PLAN_INSERT_BATCH_SIZE))) {
- throw new ServiceException(VENEER_PLAN_CREATE_FAILED);
+ // 使用多值 INSERT 分批写入,并校验每批实际插入数量。
+ for (List planBatch
+ : CollUtil.split(plans, PLAN_INSERT_BATCH_SIZE)) {
+ int inserted = orderVeneerPlanBatchMapper.insertBatchSomeColumn(planBatch);
+ if (inserted != planBatch.size()) {
+ throw new ServiceException(VENEER_PLAN_CREATE_FAILED);
+ }
}
// 排单完成后以数据库当前状态重新统计,避免使用本次请求数量增量更新导致计数漂移。
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_errorcode_cht.properties b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_errorcode_cht.properties
index 93fc67c16..a9478044b 100644
--- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_errorcode_cht.properties
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_errorcode_cht.properties
@@ -73,6 +73,7 @@ veneer.not.exist=貼皮不存在
veneer.decompose.scope.required=訂單ID列表和板材商品編碼不能同時為空
veneer.decompose.side.required=A面和B面貼皮至少選擇一個
veneer.decompose.plate.status.changed=板件分解狀態已變更,請重新整理後再試
+veneer.decompose.record.insert.failed=貼皮分解記錄生成失敗,請重新整理後再試
veneer.decompose.plate.no.required=板件編號不能為空
veneer.decompose.outer.margin.min=外擴餘量不能小於0
veneer.reselect.record.required=請選擇需要重選貼皮的資料
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_errorcode_en.properties b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_errorcode_en.properties
index 68bb66a3e..4f24cc4f4 100644
--- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_errorcode_en.properties
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_errorcode_en.properties
@@ -73,6 +73,7 @@ veneer.not.exist=veneer not exist
veneer.decompose.scope.required=Order ID list and goods code cannot both be empty
veneer.decompose.side.required=At least one veneer must be selected for side A or B
veneer.decompose.plate.status.changed=Plate decomposition status has changed. Please refresh and retry
+veneer.decompose.record.insert.failed=Failed to create veneer decomposition records. Please refresh and retry
veneer.decompose.plate.no.required=Plate numbers cannot be empty
veneer.decompose.outer.margin.min=Outer margin cannot be less than 0
veneer.reselect.record.required=Please select records for veneer reselection
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_errorcode_zh.properties b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_errorcode_zh.properties
index 7c89d0ac6..b05f7baf9 100644
--- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_errorcode_zh.properties
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_errorcode_zh.properties
@@ -73,6 +73,7 @@ veneer.not.exist=贴皮不存在
veneer.decompose.scope.required=订单ID列表和板材商品编码不能同时为空
veneer.decompose.side.required=A面和B面贴皮至少选择一个
veneer.decompose.plate.status.changed=板件分解状态已变更,请刷新后重试
+veneer.decompose.record.insert.failed=贴皮分解记录生成失败,请刷新后重试
veneer.decompose.plate.no.required=板件编号不能为空
veneer.decompose.outer.margin.min=外扩余量不能小于0
veneer.reselect.record.required=请选择需要重选贴皮的数据