feat(wms): 添加钢卷单步分卷功能

- 在WmsMaterialCoil实体中新增exclusiveStatus字段用于标识独占状态
- 在WmsCoilPendingActionBo中新增remark字段用于存储操作备注
- 实现特殊分卷三步流程:startSpecialSplit锁定钢卷、createChildCoilInSpecialSplit创建子钢卷、completeSpecialSplit完成分卷
- 添加validateCoilOperationPermission方法验证钢卷操作权限防止并发冲突
- 在WmsMaterialCoilService中实现完整的特殊分卷业务逻辑
- 新增三个API接口分别对应特殊分卷的三个步骤
- 在查询条件中增加对exclusiveStatus字段的支持
- 完善错误处理和日志记录机制
This commit is contained in:
2026-01-22 10:23:30 +08:00
parent a82c8ea825
commit ef1d56dce3
9 changed files with 402 additions and 0 deletions

View File

@@ -323,6 +323,78 @@ public class WmsMaterialCoilController extends BaseController {
}
/**
* 特殊分卷 - 第一步:锁定钢卷
* 设置钢卷独占状态
*/
@Log(title = "钢卷物料表", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PostMapping("/specialSplit/start")
public R<Long> startSpecialSplit(
@NotNull(message = "钢卷ID不能为空")
@RequestParam Long coilId) {
try {
Boolean result = iWmsMaterialCoilService.startSpecialSplit(coilId);
if (Boolean.TRUE.equals(result)) {
return R.ok();
}
return R.fail("钢卷锁定失败");
} catch (RuntimeException e) {
return R.fail(e.getMessage());
}
}
/**
* 特殊分卷 - 第二步:逐个创建子钢卷
* 生成单个子钢卷并更新二维码信息
*/
@Log(title = "钢卷物料表", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/specialSplit/createChild")
public R<WmsMaterialCoilVo> createChildCoilInSpecialSplit(
@NotNull(message = "母卷ID不能为空")
@RequestParam Long parentCoilId,
@NotNull(message = "待操作记录ID不能为空")
@RequestParam Long pendingActionId,
@RequestBody @NotNull(message = "子钢卷数据不能为空")
WmsMaterialCoilBo childCoilBo) {
try {
WmsMaterialCoilVo result =
iWmsMaterialCoilService.createChildCoilInSpecialSplit(
parentCoilId, childCoilBo, pendingActionId
);
return R.ok(result);
} catch (RuntimeException e) {
return R.fail("创建子钢卷失败:" + e.getMessage());
}
}
/**
* 特殊分卷 - 第三步:完成分卷操作
* 批量更新二维码追溯信息,设置母卷为历史数据,解除独占状态
*/
@Log(title = "钢卷物料表", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PostMapping("/specialSplit/complete")
public R<Map<String, Object>> completeSpecialSplit(
@NotNull(message = "待操作记录ID不能为空")
@RequestParam Long pendingActionId) {
try {
Map<String, Object> result =
iWmsMaterialCoilService.completeSpecialSplit(pendingActionId);
return R.ok(result);
} catch (RuntimeException e) {
return R.fail("完成分卷失败:" + e.getMessage());
}
}
}