贴皮相关批量插入改真实批量插入

This commit is contained in:
gaoqr
2026-07-24 11:46:21 +08:00
parent 29e57b1b8b
commit 445cc9b4fa
8 changed files with 50 additions and 5 deletions
@@ -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_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_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_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 ============ //=========== 部件管理 1-003-010-000 ============
public static final ErrorCode ORDER_COMPONENT_NOT_EXIST = new ErrorCode(1_003_010_000, "order.component.not.exist"); public static final ErrorCode ORDER_COMPONENT_NOT_EXIST = new ErrorCode(1_003_010_000, "order.component.not.exist");
@@ -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。
*
* <p>使用单条 {@code INSERT ... VALUES (...), (...)} SQL 批量写入。</p>
*/
@Mapper
public interface OrderPlateVeneerBatchMapper extends BaseBatchMapper<OrderPlateVeneerDO> {
}
@@ -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。
*
* <p>使用单条 {@code INSERT ... VALUES (...), (...)} SQL 批量写入。</p>
*/
@Mapper
public interface OrderVeneerPlanBatchMapper extends BaseBatchMapper<OrderVeneerPlanDO> {
}
@@ -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.dataobject.veneer.VeneerDO;
import com.cf.imes.module.executor.dal.mysql.goods.GoodsMapper; 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.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.VeneerDecomposeMapper;
import com.cf.imes.module.executor.dal.mysql.veneer.VeneerMapper; import com.cf.imes.module.executor.dal.mysql.veneer.VeneerMapper;
import com.cf.imes.module.executor.enums.VeneerPlateSurfaceEnum; 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.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.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_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_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_DECOMPOSE_SIDE_REQUIRED;
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.VENEER_NOT_EXIST; import static com.cf.imes.module.executor.enums.ErrorCodeConstants.VENEER_NOT_EXIST;
@@ -75,7 +76,7 @@ public class VeneerDecomposeServiceImpl implements VeneerDecomposeService {
private VeneerDecomposeMapper veneerDecomposeMapper; private VeneerDecomposeMapper veneerDecomposeMapper;
@Resource @Resource
private OrderPlateVeneerMapper orderPlateVeneerMapper; private OrderPlateVeneerBatchMapper orderPlateVeneerBatchMapper;
@Resource @Resource
private VeneerMapper veneerMapper; private VeneerMapper veneerMapper;
@@ -276,7 +277,10 @@ public class VeneerDecomposeServiceImpl implements VeneerDecomposeService {
// A/B 贴皮记录分批插入,控制单条 INSERT 的参数数量和报文大小。 // A/B 贴皮记录分批插入,控制单条 INSERT 的参数数量和报文大小。
for (List<OrderPlateVeneerDO> plateVeneerBatch for (List<OrderPlateVeneerDO> plateVeneerBatch
: CollUtil.split(plateVeneers, DECOMPOSE_BATCH_SIZE)) { : 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 当前状态重新统计,不使用本次请求数量做增量计算。 // 以 order_plate 当前状态重新统计,不使用本次请求数量做增量计算。
@@ -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.dataobject.veneer.VeneerPlanStatisticsDO;
import com.cf.imes.module.executor.dal.mysql.goods.GoodsMapper; 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.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.VeneerPlanMapper;
import com.cf.imes.module.executor.dal.mysql.veneer.VeneerMapper; import com.cf.imes.module.executor.dal.mysql.veneer.VeneerMapper;
import com.cf.imes.module.executor.enums.VeneerPlanStatusEnum; import com.cf.imes.module.executor.enums.VeneerPlanStatusEnum;
@@ -130,6 +131,9 @@ public class VeneerPlanServiceImpl implements VeneerPlanService {
@Resource @Resource
private VeneerPlanMapper veneerPlanMapper; private VeneerPlanMapper veneerPlanMapper;
@Resource
private OrderVeneerPlanBatchMapper orderVeneerPlanBatchMapper;
@Resource @Resource
private IdentifierGenerator identifierGenerator; private IdentifierGenerator identifierGenerator;
@@ -211,8 +215,13 @@ public class VeneerPlanServiceImpl implements VeneerPlanService {
.build()); .build());
} }
if (Boolean.FALSE.equals(veneerPlanMapper.insertBatch(plans, PLAN_INSERT_BATCH_SIZE))) { // 使用多值 INSERT 分批写入,并校验每批实际插入数量。
throw new ServiceException(VENEER_PLAN_CREATE_FAILED); for (List<OrderVeneerPlanDO> planBatch
: CollUtil.split(plans, PLAN_INSERT_BATCH_SIZE)) {
int inserted = orderVeneerPlanBatchMapper.insertBatchSomeColumn(planBatch);
if (inserted != planBatch.size()) {
throw new ServiceException(VENEER_PLAN_CREATE_FAILED);
}
} }
// 排单完成后以数据库当前状态重新统计,避免使用本次请求数量增量更新导致计数漂移。 // 排单完成后以数据库当前状态重新统计,避免使用本次请求数量增量更新导致计数漂移。
@@ -73,6 +73,7 @@ veneer.not.exist=貼皮不存在
veneer.decompose.scope.required=訂單ID列表和板材商品編碼不能同時為空 veneer.decompose.scope.required=訂單ID列表和板材商品編碼不能同時為空
veneer.decompose.side.required=A面和B面貼皮至少選擇一個 veneer.decompose.side.required=A面和B面貼皮至少選擇一個
veneer.decompose.plate.status.changed=板件分解狀態已變更,請重新整理後再試 veneer.decompose.plate.status.changed=板件分解狀態已變更,請重新整理後再試
veneer.decompose.record.insert.failed=貼皮分解記錄生成失敗,請重新整理後再試
veneer.decompose.plate.no.required=板件編號不能為空 veneer.decompose.plate.no.required=板件編號不能為空
veneer.decompose.outer.margin.min=外擴餘量不能小於0 veneer.decompose.outer.margin.min=外擴餘量不能小於0
veneer.reselect.record.required=請選擇需要重選貼皮的資料 veneer.reselect.record.required=請選擇需要重選貼皮的資料
@@ -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.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.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.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.plate.no.required=Plate numbers cannot be empty
veneer.decompose.outer.margin.min=Outer margin cannot be less than 0 veneer.decompose.outer.margin.min=Outer margin cannot be less than 0
veneer.reselect.record.required=Please select records for veneer reselection veneer.reselect.record.required=Please select records for veneer reselection
@@ -73,6 +73,7 @@ veneer.not.exist=贴皮不存在
veneer.decompose.scope.required=订单ID列表和板材商品编码不能同时为空 veneer.decompose.scope.required=订单ID列表和板材商品编码不能同时为空
veneer.decompose.side.required=A面和B面贴皮至少选择一个 veneer.decompose.side.required=A面和B面贴皮至少选择一个
veneer.decompose.plate.status.changed=板件分解状态已变更,请刷新后重试 veneer.decompose.plate.status.changed=板件分解状态已变更,请刷新后重试
veneer.decompose.record.insert.failed=贴皮分解记录生成失败,请刷新后重试
veneer.decompose.plate.no.required=板件编号不能为空 veneer.decompose.plate.no.required=板件编号不能为空
veneer.decompose.outer.margin.min=外扩余量不能小于0 veneer.decompose.outer.margin.min=外扩余量不能小于0
veneer.reselect.record.required=请选择需要重选贴皮的数据 veneer.reselect.record.required=请选择需要重选贴皮的数据