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

@@ -9,10 +9,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.klp.common.core.domain.PageQuery; import com.klp.common.core.domain.PageQuery;
import com.klp.common.core.page.TableDataInfo; import com.klp.common.core.page.TableDataInfo;
import com.klp.common.utils.StringUtils; import com.klp.common.utils.StringUtils;
import com.klp.domain.WmsCoilQualityRejudge;
import com.klp.domain.WmsMaterialCoil; import com.klp.domain.WmsMaterialCoil;
import com.klp.mapper.WmsCoilQualityRejudgeMapper;
import com.klp.mapper.WmsMaterialCoilMapper; import com.klp.mapper.WmsMaterialCoilMapper;
import com.klp.service.IWmsMaterialCoilService;
import com.klp.mes.qc.domain.QcQualityReview; import com.klp.mes.qc.domain.QcQualityReview;
import com.klp.mes.qc.domain.QcQualityReviewCoil; import com.klp.mes.qc.domain.QcQualityReviewCoil;
import com.klp.mes.qc.domain.QcQualityReviewLog; import com.klp.mes.qc.domain.QcQualityReviewLog;
@@ -49,7 +48,7 @@ public class QcQualityReviewServiceImpl implements IQcQualityReviewService {
private final QcQualityReviewCoilMapper coilMapper; private final QcQualityReviewCoilMapper coilMapper;
private final QcQualityReviewLogMapper logMapper; private final QcQualityReviewLogMapper logMapper;
private final WmsMaterialCoilMapper wmsMaterialCoilMapper; private final WmsMaterialCoilMapper wmsMaterialCoilMapper;
private final WmsCoilQualityRejudgeMapper wmsCoilQualityRejudgeMapper; private final IWmsMaterialCoilService wmsMaterialCoilService;
/** /**
* 查询评审单详情(含钢卷明细和审批日志) * 查询评审单详情(含钢卷明细和审批日志)
@@ -289,23 +288,15 @@ public class QcQualityReviewServiceImpl implements IQcQualityReviewService {
} }
Date now = new Date(); Date now = new Date();
String reason = "异常产品评审改判,评审单号:" + review.getReviewNo();
for (QcQualityReviewCoil coil : coilList) { for (QcQualityReviewCoil coil : coilList) {
// 1. 写入 wms_coil_quality_rejudge 改判记录 // 1. 通过统一方法更新钢卷质量状态 + 自动记录改判日志
WmsCoilQualityRejudge rejudge = new WmsCoilQualityRejudge();
rejudge.setCoilId(coil.getCoilId());
rejudge.setBeforeQuality(coil.getBeforeQuality());
rejudge.setAfterQuality(coil.getRegradeQuality());
rejudge.setRejudgeReason("异常产品评审改判,评审单号:" + review.getReviewNo());
wmsCoilQualityRejudgeMapper.insert(rejudge);
// 2. 更新钢卷的 qualityStatus 为改判后的值
if (coil.getCoilId() != null && StringUtils.isNotBlank(coil.getRegradeQuality())) { if (coil.getCoilId() != null && StringUtils.isNotBlank(coil.getRegradeQuality())) {
wmsMaterialCoilMapper.update(null, Wrappers.<WmsMaterialCoil>lambdaUpdate() wmsMaterialCoilService.updateQualityStatus(
.eq(WmsMaterialCoil::getCoilId, coil.getCoilId()) coil.getCoilId(), coil.getRegradeQuality(), reason);
.set(WmsMaterialCoil::getQualityStatus, coil.getRegradeQuality()));
} }
// 3. 更新明细执行状态 // 2. 更新明细执行状态
coilMapper.update(null, Wrappers.<QcQualityReviewCoil>lambdaUpdate() coilMapper.update(null, Wrappers.<QcQualityReviewCoil>lambdaUpdate()
.eq(QcQualityReviewCoil::getDetailId, coil.getDetailId()) .eq(QcQualityReviewCoil::getDetailId, coil.getDetailId())
.set(QcQualityReviewCoil::getExecuteStatus, 1L) .set(QcQualityReviewCoil::getExecuteStatus, 1L)

View File

@@ -194,6 +194,16 @@ public interface IWmsMaterialCoilService {
*/ */
String queryQualityStatusByWarehouseIdAndCurrentCoilNo(Long warehouseId, String currentCoilNo); 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); int exportCoil(@NotEmpty(message = "主键不能为空") Long coilId);

View File

@@ -1823,6 +1823,40 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
return qw; 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 @Override
public String queryQualityStatusByWarehouseIdAndCurrentCoilNo(Long warehouseId, String currentCoilNo) { public String queryQualityStatusByWarehouseIdAndCurrentCoilNo(Long warehouseId, String currentCoilNo) {
if (warehouseId == null || StringUtils.isBlank(currentCoilNo)) { if (warehouseId == null || StringUtils.isBlank(currentCoilNo)) {