refactor(wms): 统一钢卷质量状态更新逻辑,集中管理改判记录

1. 新增统一的updateQualityStatus方法,封装钢卷质量状态更新和改判日志记录逻辑
2. 替换mes模块中直接更新钢卷状态和插入改判日志的代码,改用统一服务方法
3. 移除冗余的改判日志Mapper注入和手动插入代码
This commit is contained in:
王文昊
2026-07-04 10:54:41 +08:00
parent 827555aa43
commit 32455daf42
3 changed files with 51 additions and 16 deletions

View File

@@ -194,6 +194,16 @@ public interface IWmsMaterialCoilService {
*/
String queryQualityStatusByWarehouseIdAndCurrentCoilNo(Long warehouseId, String currentCoilNo);
/**
* 统一更新钢卷质量状态(自动记录改判日志)
* 所有修改 quality_status 的地方都应当通过此方法,确保改判记录完整可追溯
*
* @param coilId 钢卷ID
* @param newQuality 新质量状态
* @param reason 变更原因
*/
void updateQualityStatus(Long coilId, String newQuality, String reason);
int exportCoil(@NotEmpty(message = "主键不能为空") Long coilId);

View File

@@ -1823,6 +1823,40 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
return qw;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateQualityStatus(Long coilId, String newQuality, String reason) {
if (coilId == null || StringUtils.isBlank(newQuality)) {
log.warn("updateQualityStatus 参数不足: coilId={}, newQuality={}", coilId, newQuality);
return;
}
// 查询当前钢卷
WmsMaterialCoil coil = baseMapper.selectById(coilId);
if (coil == null) {
throw new RuntimeException("钢卷不存在:" + coilId);
}
String oldQuality = coil.getQualityStatus();
// 状态没变,不处理
if (StringUtils.equals(oldQuality, newQuality)) {
log.info("钢卷质量状态未变化,跳过: coilId={}, quality={}", coilId, oldQuality);
return;
}
// 1. 更新钢卷质量状态
baseMapper.update(null, Wrappers.<WmsMaterialCoil>lambdaUpdate()
.eq(WmsMaterialCoil::getCoilId, coilId)
.set(WmsMaterialCoil::getQualityStatus, newQuality));
// 2. 记录改判记录
WmsCoilQualityRejudge rejudge = new WmsCoilQualityRejudge();
rejudge.setCoilId(coilId);
rejudge.setBeforeQuality(oldQuality);
rejudge.setAfterQuality(newQuality);
rejudge.setRejudgeReason(reason);
wmsCoilQualityRejudgeMapper.insert(rejudge);
log.info("钢卷质量状态变更: coilId={}, {} -> {}, 原因: {}", coilId, oldQuality, newQuality, reason);
}
@Override
public String queryQualityStatusByWarehouseIdAndCurrentCoilNo(Long warehouseId, String currentCoilNo) {
if (warehouseId == null || StringUtils.isBlank(currentCoilNo)) {