贴皮排单异常修复

This commit is contained in:
gaoqr
2026-07-29 15:24:15 +08:00
parent 2636df41af
commit d3865247e3
3 changed files with 63 additions and 2 deletions
@@ -11,6 +11,8 @@ import com.cf.imes.framework.common.exception.ServiceException;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.common.util.date.LocalDateTimeUtils;
import com.cf.imes.framework.common.util.json.JsonUtils;
import com.cf.imes.framework.security.core.LoginUser;
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerDecomposeCreateReqVO;
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerDecomposeGoodsPageReqVO;
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerDecomposeGoodsRespVO;
@@ -39,6 +41,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
@@ -46,6 +49,7 @@ import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import static com.cf.imes.framework.common.pojo.PageParam.PAGE_SIZE_NONE;
@@ -293,6 +297,8 @@ public class VeneerDecomposeServiceImpl implements VeneerDecomposeService {
// 从贴皮库加载 A/B 面贴皮,并将贴皮属性以快照形式写入板件贴皮表。
Map<Long, VeneerDO> sourceVeneerMap = loadSourceVeneers(req);
List<OrderPlateVeneerDO> plateVeneers = new ArrayList<>();
LoginUser loginUser = Objects.requireNonNull(SecurityFrameworkUtils.getLoginUser());
LocalDateTime createTime = LocalDateTime.now();
for (PlateDO plate : plates) {
if (req.getAVeneerId() != null) {
plateVeneers.add(buildPlateVeneer(
@@ -305,6 +311,11 @@ public class VeneerDecomposeServiceImpl implements VeneerDecomposeService {
VeneerSideEnum.B, req.getOuterMargin()));
}
}
// BaseBatchMapper 会显式写入 BaseDO 字段,数据库默认值不会对这些列生效。
for (OrderPlateVeneerDO plateVeneer : plateVeneers) {
initializeBatchInsertFields(
plateVeneer, createTime, loginUser.getNickname());
}
// 原板状态分批更新;租户插件追加 organ_id 后由 MyCat 按组织路由。
List<Long> plateIds = plates.stream().map(PlateDO::getId).toList();
@@ -331,6 +342,23 @@ public class VeneerDecomposeServiceImpl implements VeneerDecomposeService {
refreshDecomposedPlateCount(affectedOrderIds, affectedOrderGoodsIds);
}
/**
* 初始化板件贴皮批量新增所需的公共审计字段。
*
* @param plateVeneer 待新增的板件贴皮
* @param createTime 创建时间
* @param operator 当前操作人
*/
private void initializeBatchInsertFields(OrderPlateVeneerDO plateVeneer,
LocalDateTime createTime,
String operator) {
plateVeneer.setCreateTime(createTime);
plateVeneer.setUpdateTime(createTime);
plateVeneer.setCreator(operator);
plateVeneer.setUpdater(operator);
plateVeneer.setDeleted(false);
}
/**
* 根据原板件当前分解状态重新统计订单和订单板材的已分解板件数量。
*
@@ -196,7 +196,7 @@ public class VeneerPlanServiceImpl implements VeneerPlanService {
}
}
plans.add(OrderVeneerPlanDO.builder()
OrderVeneerPlanDO plan = OrderVeneerPlanDO.builder()
.id(planId)
.organId(loginUser.getOrganId())
.status(VeneerPlanStatusEnum.NOCUTTING.getStatus())
@@ -209,7 +209,10 @@ public class VeneerPlanServiceImpl implements VeneerPlanService {
.veneerArea(calculateVeneerArea(group))
.operator(loginUser.getNickname())
.version(0)
.build());
.build();
// BaseBatchMapper 会显式写入 BaseDO 字段,需在批量插入前主动初始化。
initializeBatchInsertFields(plan, planTime, loginUser.getNickname());
plans.add(plan);
}
// 使用多值 INSERT 分批写入,并校验每批实际插入数量。
@@ -235,6 +238,23 @@ public class VeneerPlanServiceImpl implements VeneerPlanService {
refreshPlannedVeneerPlateCount(affectedOrderIds, affectedOrderGoodsIds);
}
/**
* 初始化贴皮排单批量新增所需的公共审计字段。
*
* @param plan 待新增的贴皮排单
* @param createTime 创建时间
* @param operator 当前操作人
*/
private void initializeBatchInsertFields(OrderVeneerPlanDO plan,
LocalDateTime createTime,
String operator) {
plan.setCreateTime(createTime);
plan.setUpdateTime(createTime);
plan.setCreator(operator);
plan.setUpdater(operator);
plan.setDeleted(false);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updatePlan(VeneerPlanUpdateReqVO req) {
@@ -217,6 +217,19 @@ public class VeneerServiceImpl implements VeneerService {
@Override
public void batchInsert(List<VeneerDO> list) {
LocalDateTime createTime = LocalDateTime.now();
// BaseBatchMapper 不触发逐实体自动填充,批量新增前补齐非空公共字段。
for (VeneerDO veneer : list) {
if (veneer.getCreateTime() == null) {
veneer.setCreateTime(createTime);
}
if (veneer.getUpdateTime() == null) {
veneer.setUpdateTime(createTime);
}
if (veneer.getDeleted() == null) {
veneer.setDeleted(false);
}
}
veneerBatchMapper.insertBatchSomeColumn(list);
}