feat(wms): 钢卷加工必须绑定合同

- 在 WmsMaterialCoilBo 中新增 contractId 字段
- 添加 IWmsCoilContractRelService 依赖注入
- 实现加工操作必须绑定合同的验证逻辑
- 添加分卷、合卷、单个更新等操作的合同验证
- 实现插入钢卷合同关联记录的功能
- 在各种钢卷操作完成后自动插入合同关联记录
This commit is contained in:
2026-06-18 13:25:16 +08:00
parent 5b0cb314e4
commit 759bbbed63
2 changed files with 53 additions and 1 deletions

View File

@@ -392,6 +392,11 @@ public class WmsMaterialCoilBo extends BaseEntity {
*/ */
private BigDecimal theoreticalThickness; private BigDecimal theoreticalThickness;
/**
* 合同ID
*/
private Long contractId;
/** /**
* 排产厚度(单位:毫米) * 排产厚度(单位:毫米)
*/ */

View File

@@ -82,6 +82,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
private final WmsDeliveryWaybillDetailMapper deliveryWaybillDetailMapper; private final WmsDeliveryWaybillDetailMapper deliveryWaybillDetailMapper;
private final WmsCoilWarehouseOperationLogMapper wmsCoilWarehouseOperationLogMapper; private final WmsCoilWarehouseOperationLogMapper wmsCoilWarehouseOperationLogMapper;
private final IWmsCoilAbnormalService coilAbnormalService; private final IWmsCoilAbnormalService coilAbnormalService;
private final IWmsCoilContractRelService coilContractRelService;
private final WmsCoilContractRelMapper coilContractRelMapper; private final WmsCoilContractRelMapper coilContractRelMapper;
private final WmsCoilQualityRejudgeMapper wmsCoilQualityRejudgeMapper; private final WmsCoilQualityRejudgeMapper wmsCoilQualityRejudgeMapper;
private final WmsCoilAbnormalMapper coilAbnormalMapper; private final WmsCoilAbnormalMapper coilAbnormalMapper;
@@ -2042,6 +2043,11 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
// validateCoilOperationPermission(bo.getCoilId(), "单个更新"); // validateCoilOperationPermission(bo.getCoilId(), "单个更新");
// } // }
// 加工操作必须绑定合同
if (bo.getContractId() == null && StringUtils.isBlank(qrcodeStepType)) {
throw new RuntimeException("未填写合同");
}
// 查询原钢卷 // 查询原钢卷
WmsMaterialCoil oldCoil = baseMapper.selectById(bo.getCoilId()); WmsMaterialCoil oldCoil = baseMapper.selectById(bo.getCoilId());
if (oldCoil == null) { if (oldCoil == null) {
@@ -2105,6 +2111,9 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
throw new RuntimeException("创建新钢卷失败"); throw new RuntimeException("创建新钢卷失败");
} }
// 插入合同关联记录
insertCoilContractRel(newCoil.getCoilId(), bo.getContractId());
// 检查长度/厚度偏差并插入告警 // 检查长度/厚度偏差并插入告警
// 退火工序没有actionId不创建代操作记录直接设置actionType=600 // 退火工序没有actionId不创建代操作记录直接设置actionType=600
if ("annealing".equals(qrcodeStepType)) { if ("annealing".equals(qrcodeStepType)) {
@@ -2268,7 +2277,6 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
throw new RuntimeException("钢卷已被独占(状态码:" + status + "),无法执行" + operation + "操作"); throw new RuntimeException("钢卷已被独占(状态码:" + status + "),无法执行" + operation + "操作");
} }
/** /**
* 批量更新(分卷/合卷) * 批量更新(分卷/合卷)
* @return 分卷时返回逗号分隔的新钢卷ID字符串合卷时返回单个新钢卷ID字符串 * @return 分卷时返回逗号分隔的新钢卷ID字符串合卷时返回单个新钢卷ID字符串
@@ -2333,6 +2341,14 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
throw new RuntimeException("分卷操作需要原钢卷信息"); throw new RuntimeException("分卷操作需要原钢卷信息");
} }
// 加工操作必须绑定合同:检查每个子钢卷是否填写了合同
for (int i = 0; i < bo.getNewCoils().size(); i++) {
WmsMaterialCoilBo newCoilBo = bo.getNewCoils().get(i);
if (newCoilBo.getContractId() == null) {
throw new RuntimeException("未填写合同:第" + (i + 1) + "个子钢卷[" + newCoilBo.getCurrentCoilNo() + "]未绑定合同");
}
}
// 检查每个子钢卷的当前钢卷号是否重复 // 检查每个子钢卷的当前钢卷号是否重复
for (WmsMaterialCoilBo newCoilBo : bo.getNewCoils()) { for (WmsMaterialCoilBo newCoilBo : bo.getNewCoils()) {
Map<String, Object> duplicateCheck = checkCoilNoDuplicate(null, null, newCoilBo.getCurrentCoilNo(), null); Map<String, Object> duplicateCheck = checkCoilNoDuplicate(null, null, newCoilBo.getCurrentCoilNo(), null);
@@ -2402,6 +2418,9 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
newCoil.setParentCoilId(String.valueOf(oldCoil.getCoilId())); newCoil.setParentCoilId(String.valueOf(oldCoil.getCoilId()));
baseMapper.insert(newCoil); baseMapper.insert(newCoil);
// 插入合同关联记录
insertCoilContractRel(newCoil.getCoilId(), newCoilBo.getContractId());
// 检查长度/厚度偏差并插入告警 // 检查长度/厚度偏差并插入告警
newCoilBo.setActionId(bo.getCoilId()); newCoilBo.setActionId(bo.getCoilId());
materialWarningService.checkAndInsertWarnings(newCoil, newCoilBo); materialWarningService.checkAndInsertWarnings(newCoil, newCoilBo);
@@ -2463,6 +2482,11 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
//在合卷之前需要判断前端传来的bo.getNewCoils()中的所有原始钢卷的coilId是否已经是历史卷 //在合卷之前需要判断前端传来的bo.getNewCoils()中的所有原始钢卷的coilId是否已经是历史卷
validateOriginalCoilsForMerge(bo.getNewCoils()); validateOriginalCoilsForMerge(bo.getNewCoils());
// 加工操作必须绑定合同
if (bo.getContractId() == null) {
throw new RuntimeException("未填写合同");
}
// 检查合卷后新钢卷的当前钢卷号是否重复 // 检查合卷后新钢卷的当前钢卷号是否重复
if (StringUtils.isNotBlank(bo.getCurrentCoilNo())) { if (StringUtils.isNotBlank(bo.getCurrentCoilNo())) {
Map<String, Object> duplicateCheck = checkCoilNoDuplicate(null, null, bo.getCurrentCoilNo(), null); Map<String, Object> duplicateCheck = checkCoilNoDuplicate(null, null, bo.getCurrentCoilNo(), null);
@@ -2553,6 +2577,9 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
baseMapper.insert(newCoil); baseMapper.insert(newCoil);
// 插入合同关联记录
insertCoilContractRel(newCoil.getCoilId(), bo.getContractId());
// 检查长度/厚度偏差并插入告警 // 检查长度/厚度偏差并插入告警
bo.setActionId(bo.getNewCoils().get(0).getActionId()); bo.setActionId(bo.getNewCoils().get(0).getActionId());
materialWarningService.checkAndInsertWarnings(newCoil, bo); materialWarningService.checkAndInsertWarnings(newCoil, bo);
@@ -3029,6 +3056,18 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
} }
} }
/**
* 插入钢卷合同关联记录
*/
private void insertCoilContractRel(Long coilId, Long contractId) {
if (contractId != null) {
WmsCoilContractRelBo relBo = new WmsCoilContractRelBo();
relBo.setCoilId(coilId);
relBo.setContractId(contractId);
coilContractRelService.insertByBo(relBo);
}
}
/** /**
* 保存前的数据校验 * 保存前的数据校验
*/ */
@@ -5344,6 +5383,11 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
throw new RuntimeException("钢卷不存在"); throw new RuntimeException("钢卷不存在");
} }
// 加工操作必须绑定合同
if (childCoilBo.getContractId() == null) {
throw new RuntimeException("未填写合同");
}
// 2. 验证独占状态 // 2. 验证独占状态
if (parentCoil.getExclusiveStatus() == null || parentCoil.getExclusiveStatus() != 1) { if (parentCoil.getExclusiveStatus() == null || parentCoil.getExclusiveStatus() != 1) {
throw new RuntimeException("钢卷未处于分卷状态"); throw new RuntimeException("钢卷未处于分卷状态");
@@ -5422,6 +5466,9 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
childCoil.setParentCoilId(String.valueOf(parentCoilId)); childCoil.setParentCoilId(String.valueOf(parentCoilId));
baseMapper.insert(childCoil); baseMapper.insert(childCoil);
// 插入合同关联记录
insertCoilContractRel(childCoil.getCoilId(), childCoilBo.getContractId());
// 检查长度/厚度偏差并插入告警 // 检查长度/厚度偏差并插入告警
childCoilBo.setActionId(pendingActionId); childCoilBo.setActionId(pendingActionId);
materialWarningService.checkAndInsertWarnings(childCoil, childCoilBo); materialWarningService.checkAndInsertWarnings(childCoil, childCoilBo);