feat(wms): 在操作记录中添加合卷之后的钢卷

- 在 IWmsMaterialCoilService 中新增 mergeCoils 方法实现合卷操作
- 扩展 WmsMaterialCoilBo 类添加 actionId、actionType 和 mergedCoilId 字段
- 在 WmsMaterialCoilController 中添加 /merge 接口支持合卷新功能
- 实现合卷逻辑为 newCoils 中每个被合的卷添加 actionId 和 actionType
- 支持通过 actionId 更新操作记录状态并设置完成时间
- 实现合卷后新钢卷 ID 的返回和操作记录的自动创建更新
This commit is contained in:
2026-03-16 14:10:17 +08:00
parent 58653da48b
commit 275f6181ce
4 changed files with 110 additions and 0 deletions

View File

@@ -163,6 +163,19 @@ public class WmsMaterialCoilController extends BaseController {
return toAjax(iWmsMaterialCoilService.updateByBo(bo));
}
/**
* 合卷操作
* 在批量更新逻辑的基础上为newCoils中的每个被合的卷加入actionId和actionType
* 如果传递了actionId则更新操作记录状态为已完成并设置完成时间和合卷后的钢卷ID到processedCoilIds
* 如果未传actionId则创建新的操作记录
*/
@Log(title = "钢卷物料表-合卷", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PostMapping("/merge")
public R<Void> mergeCoils(@Validated(EditGroup.class) @RequestBody WmsMaterialCoilBo bo) {
return toAjax(iWmsMaterialCoilService.mergeCoils(bo));
}
/**
* 简单更新钢卷物料表
* 直接更新属性内容,不进行历史记录处理

View File

@@ -126,6 +126,21 @@ public class WmsMaterialCoilBo extends BaseEntity {
*/
private List<WmsMaterialCoilBo> newCoils;
/**
* 操作记录ID用于合卷操作关联
*/
private Long actionId;
/**
* 操作类型1=分卷2=合卷3=更新)
*/
private Integer actionType;
/**
* 合卷后的新钢卷ID用于返回
*/
private Long mergedCoilId;
//时间格式化
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")

View File

@@ -48,6 +48,14 @@ public interface IWmsMaterialCoilService {
*/
Boolean updateByBo(WmsMaterialCoilBo bo);
/**
* 合卷操作
* 在批量更新逻辑的基础上为newCoils中的每个被合的卷加入actionId和actionType
* 如果传递了actionId则更新操作记录状态为已完成并设置完成时间和合卷后的钢卷ID到processedCoilIds
* 如果未传actionId则创建新的操作记录
*/
Boolean mergeCoils(WmsMaterialCoilBo bo);
/**
* 简单更新钢卷物料表
* 直接更新属性内容,不进行历史记录处理

View File

@@ -47,6 +47,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.*;
import java.util.stream.Collectors;
import java.math.BigDecimal;
import java.util.Arrays;
/**
* 钢卷物料表Service业务层处理
@@ -1673,6 +1674,8 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
if (mergeNewActualWarehouseId != null && mergeNewActualWarehouseId != -1L) {
recordWarehouseOperationLog(newCoil.getCoilId(), mergeNewActualWarehouseId, 2, 1, "合卷操作-加工入库");
}
// 合卷完成后设置新钢卷ID到bo对象中方便外部获取
bo.setMergedCoilId(newCoil.getCoilId());
}
return true;
@@ -2553,6 +2556,77 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
log.warn("记录钢卷库区操作日志失败:{}", e.getMessage());
}
}
/**
* 合卷操作
* 在批量更新逻辑的基础上为newCoils中的每个被合的卷加入actionId和actionType
* 如果传递了actionId则更新操作记录状态为已完成并设置完成时间和合卷后的钢卷ID到processedCoilIds
* 如果未传actionId则创建新的操作记录
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean mergeCoils(WmsMaterialCoilBo bo) {
if (bo.getNewCoils() == null || bo.getNewCoils().isEmpty()) {
throw new RuntimeException("合卷操作需要提供参与合卷的钢卷列表");
}
// 先执行批量更新逻辑(分卷/合卷)
Boolean batchResult = updateByBatch(bo);
if (!Boolean.TRUE.equals(batchResult)) {
throw new RuntimeException("合卷操作失败");
}
// 直接从bo中获取合卷后的新钢卷ID
Long mergedCoilId = bo.getMergedCoilId();
if (mergedCoilId == null) {
throw new RuntimeException("未找到合卷后的新钢卷ID");
}
Date now = new Date();
// 为newCoils中的每个被合的卷处理操作记录
for (WmsMaterialCoilBo originalCoilBo : bo.getNewCoils()) {
Long coilId = originalCoilBo.getCoilId();
Integer actionType = originalCoilBo.getActionType();
Long actionId = originalCoilBo.getActionId();
if (coilId == null) {
continue;
}
// 获取原始钢卷信息
WmsMaterialCoil originalCoil = baseMapper.selectById(coilId);
if (originalCoil == null) {
continue;
}
if (actionId != null) {
// 如果传递了actionId则更新操作记录状态为已完成
WmsCoilPendingActionBo pendingActionBo = new WmsCoilPendingActionBo();
pendingActionBo.setActionId(actionId);
pendingActionBo.setActionStatus(2);
pendingActionBo.setCompleteTime(now);
// 将合卷后的钢卷ID添加到processedCoilIds
pendingActionBo.setProcessedCoilIds(mergedCoilId.toString());
coilPendingActionService.updateByBo(pendingActionBo);
} else if (actionType != null) {
// 如果未传actionId则创建新的操作记录
WmsCoilPendingActionBo pendingActionBo = new WmsCoilPendingActionBo();
pendingActionBo.setCoilId(coilId);
pendingActionBo.setCurrentCoilNo(originalCoil.getCurrentCoilNo());
pendingActionBo.setActionType(actionType);
pendingActionBo.setActionStatus(2);
pendingActionBo.setSourceType("manual");
pendingActionBo.setPriority(0);
pendingActionBo.setCompleteTime(now);
pendingActionBo.setProcessedCoilIds(mergedCoilId.toString());
coilPendingActionService.insertByBo(pendingActionBo);
}
}
return true;
}
/**
* 钢卷发货撤回
* @param coilId