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=请选择需要重选贴皮的数据