diff --git a/klp-mes/src/main/java/com/klp/mes/qc/service/impl/QcQualityReviewServiceImpl.java b/klp-mes/src/main/java/com/klp/mes/qc/service/impl/QcQualityReviewServiceImpl.java index edcc61ea0..e0cb81783 100644 --- a/klp-mes/src/main/java/com/klp/mes/qc/service/impl/QcQualityReviewServiceImpl.java +++ b/klp-mes/src/main/java/com/klp/mes/qc/service/impl/QcQualityReviewServiceImpl.java @@ -9,10 +9,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.klp.common.core.domain.PageQuery; import com.klp.common.core.page.TableDataInfo; import com.klp.common.utils.StringUtils; -import com.klp.domain.WmsCoilQualityRejudge; import com.klp.domain.WmsMaterialCoil; -import com.klp.mapper.WmsCoilQualityRejudgeMapper; import com.klp.mapper.WmsMaterialCoilMapper; +import com.klp.service.IWmsMaterialCoilService; import com.klp.mes.qc.domain.QcQualityReview; import com.klp.mes.qc.domain.QcQualityReviewCoil; import com.klp.mes.qc.domain.QcQualityReviewLog; @@ -49,7 +48,7 @@ public class QcQualityReviewServiceImpl implements IQcQualityReviewService { private final QcQualityReviewCoilMapper coilMapper; private final QcQualityReviewLogMapper logMapper; 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(); + String reason = "异常产品评审改判,评审单号:" + review.getReviewNo(); for (QcQualityReviewCoil coil : coilList) { - // 1. 写入 wms_coil_quality_rejudge 改判记录 - 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 为改判后的值 + // 1. 通过统一方法更新钢卷质量状态 + 自动记录改判日志 if (coil.getCoilId() != null && StringUtils.isNotBlank(coil.getRegradeQuality())) { - wmsMaterialCoilMapper.update(null, Wrappers.lambdaUpdate() - .eq(WmsMaterialCoil::getCoilId, coil.getCoilId()) - .set(WmsMaterialCoil::getQualityStatus, coil.getRegradeQuality())); + wmsMaterialCoilService.updateQualityStatus( + coil.getCoilId(), coil.getRegradeQuality(), reason); } - // 3. 更新明细执行状态 + // 2. 更新明细执行状态 coilMapper.update(null, Wrappers.lambdaUpdate() .eq(QcQualityReviewCoil::getDetailId, coil.getDetailId()) .set(QcQualityReviewCoil::getExecuteStatus, 1L) diff --git a/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java b/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java index 0f3d8d9f7..d801dd314 100644 --- a/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java +++ b/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java @@ -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); diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java index 20041efe5..3c80b55df 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java @@ -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.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)) {