diff --git a/klp-wms/src/main/java/com/klp/controller/WmsAnnealPerformanceController.java b/klp-wms/src/main/java/com/klp/controller/WmsAnnealPerformanceController.java index ced6d9ef6..c13628186 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsAnnealPerformanceController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsAnnealPerformanceController.java @@ -2,6 +2,7 @@ package com.klp.controller; import com.klp.common.core.domain.R; import com.klp.domain.bo.WmsAnnealPerformanceBo; +import com.klp.domain.vo.WmsMaterialCoilVo; import com.klp.domain.vo.anneal.WmsAnnealPerformanceVo; import com.klp.service.IWmsAnnealPerformanceService; import lombok.RequiredArgsConstructor; @@ -10,6 +11,8 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** * 炉火实绩 * @@ -28,4 +31,12 @@ public class WmsAnnealPerformanceController { public R getPerformance(WmsAnnealPerformanceBo bo) { return R.ok(performanceService.queryPerformance(bo)); } + + /** + * 查询退火计划中的加工前钢卷列表 + */ + @GetMapping("/rawCoils") + public R> getRawCoils(WmsAnnealPerformanceBo bo) { + return R.ok(performanceService.queryPlanCoils(bo)); + } } diff --git a/klp-wms/src/main/java/com/klp/service/IWmsAnnealPerformanceService.java b/klp-wms/src/main/java/com/klp/service/IWmsAnnealPerformanceService.java index 7f021e385..61890b130 100644 --- a/klp-wms/src/main/java/com/klp/service/IWmsAnnealPerformanceService.java +++ b/klp-wms/src/main/java/com/klp/service/IWmsAnnealPerformanceService.java @@ -1,8 +1,11 @@ package com.klp.service; import com.klp.domain.bo.WmsAnnealPerformanceBo; +import com.klp.domain.vo.WmsMaterialCoilVo; import com.klp.domain.vo.anneal.WmsAnnealPerformanceVo; +import java.util.List; + /** * 炉火实绩Service接口 * @@ -12,4 +15,9 @@ import com.klp.domain.vo.anneal.WmsAnnealPerformanceVo; public interface IWmsAnnealPerformanceService { WmsAnnealPerformanceVo queryPerformance(WmsAnnealPerformanceBo bo); + + /** + * 查询退火计划中的加工前钢卷列表 + */ + List queryPlanCoils(WmsAnnealPerformanceBo bo); } diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsAnnealPerformanceServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsAnnealPerformanceServiceImpl.java index 39d637cdf..b1bb473d6 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsAnnealPerformanceServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsAnnealPerformanceServiceImpl.java @@ -10,10 +10,12 @@ import com.klp.domain.vo.WmsMaterialCoilVo; import com.klp.domain.vo.anneal.WmsAnnealPerformanceDetailVo; import com.klp.domain.vo.anneal.WmsAnnealPerformanceSummaryVo; import com.klp.domain.vo.anneal.WmsAnnealPerformanceVo; +import com.klp.domain.WmsFurnacePlan; import com.klp.domain.WmsFurnacePlanCoil; import com.klp.domain.WmsWarehouse; import com.klp.mapper.WmsAnnealPerformanceMapper; import com.klp.mapper.WmsFurnacePlanCoilMapper; +import com.klp.mapper.WmsFurnacePlanMapper; import com.klp.mapper.WmsWarehouseMapper; import com.klp.service.IWmsAnnealPerformanceService; import com.klp.service.IWmsMaterialCoilService; @@ -38,6 +40,7 @@ public class WmsAnnealPerformanceServiceImpl implements IWmsAnnealPerformanceSer private final WmsAnnealPerformanceMapper performanceMapper; private final WmsFurnacePlanCoilMapper planCoilMapper; + private final WmsFurnacePlanMapper planMapper; private final WmsWarehouseMapper warehouseMapper; private final IWmsMaterialCoilService materialCoilService; @@ -200,4 +203,50 @@ public class WmsAnnealPerformanceServiceImpl implements IWmsAnnealPerformanceSer vo.setDetails(details); return vo; } + + @Override + public List queryPlanCoils(WmsAnnealPerformanceBo bo) { + // 1. 查询退火计划 + LambdaQueryWrapper planQw = new LambdaQueryWrapper() + .ge(bo.getStartTime() != null, WmsFurnacePlan::getActualStartTime, bo.getStartTime()) + .le(bo.getEndTime() != null, WmsFurnacePlan::getActualStartTime, bo.getEndTime()) + .eq(bo.getTargetFurnaceId() != null, WmsFurnacePlan::getTargetFurnaceId, bo.getTargetFurnaceId()) + .like(StringUtils.isNotBlank(bo.getPlanNo()), WmsFurnacePlan::getPlanNo, bo.getPlanNo()) + .eq(WmsFurnacePlan::getDelFlag, 0); + List plans = planMapper.selectList(planQw); + + List planIds = plans.stream() + .map(WmsFurnacePlan::getPlanId) + .collect(Collectors.toList()); + if (planIds.isEmpty()) { + return Collections.emptyList(); + } + + // 2. 查询计划关联的钢卷(加工前的coilId) + List planCoils = planCoilMapper.selectList( + new LambdaQueryWrapper() + .in(WmsFurnacePlanCoil::getPlanId, planIds) + .eq(WmsFurnacePlanCoil::getDelFlag, 0) + ); + + Set coilIds = planCoils.stream() + .map(WmsFurnacePlanCoil::getCoilId) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + if (coilIds.isEmpty()) { + return Collections.emptyList(); + } + + // 3. 按coilId直接查询加工前的钢卷 + WmsMaterialCoilBo coilBo = new WmsMaterialCoilBo(); + coilBo.setCoilIds(coilIds.stream().map(String::valueOf).collect(Collectors.joining(","))); + PageQuery pageQuery = new PageQuery(); + pageQuery.setPageNum(1); + pageQuery.setPageSize(Integer.MAX_VALUE); + TableDataInfo coilPage = materialCoilService.queryPageList(coilBo, pageQuery); + + return coilPage != null && coilPage.getRows() != null + ? coilPage.getRows() + : Collections.emptyList(); + } } diff --git a/klp-wms/src/main/java/com/klp/wms/aspect/CoilChangeLogAspect.java b/klp-wms/src/main/java/com/klp/wms/aspect/CoilChangeLogAspect.java index 1c6083cd3..5c00ec148 100644 --- a/klp-wms/src/main/java/com/klp/wms/aspect/CoilChangeLogAspect.java +++ b/klp-wms/src/main/java/com/klp/wms/aspect/CoilChangeLogAspect.java @@ -46,28 +46,37 @@ public class CoilChangeLogAspect { public Object around(ProceedingJoinPoint joinPoint, CoilChangeLog coilChangeLog) throws Throwable { CoilChangeType changeType = coilChangeLog.changeType(); - // 1. 提取旧卷 ID 列表 - List oldCoilIds = extractOldCoilIds(joinPoint, coilChangeLog); + // 1. 提取旧卷 ID 列表(异常不影响主流程) + List oldCoilIds; + try { + oldCoilIds = extractOldCoilIds(joinPoint, coilChangeLog); + } catch (Exception e) { + log.warn("提取旧卷ID失败,跳过变更日志: {}", e.getMessage()); + return joinPoint.proceed(); + } - // 2. 查询旧卷快照 + // 2. 查询旧卷快照(异常不影响主流程) Map> oldSnapshots = new LinkedHashMap<>(); - for (Long coilId : oldCoilIds) { - if (coilId != null) { - WmsMaterialCoil coil = coilMapper.selectById(coilId); - if (coil != null) { - oldSnapshots.put(coilId, beanToSnapshot(coil)); + try { + for (Long coilId : oldCoilIds) { + if (coilId != null) { + WmsMaterialCoil coil = coilMapper.selectById(coilId); + if (coil != null) { + oldSnapshots.put(coilId, beanToSnapshot(coil)); + } } } + } catch (Exception e) { + log.warn("查询旧卷快照失败,跳过变更日志: {}", e.getMessage()); + return joinPoint.proceed(); } // 3. 执行目标方法 Object result = joinPoint.proceed(); - // 4. 确定新卷 ID 列表 - List newCoilIds = resolveNewCoilIds(result, changeType, oldCoilIds); - - // 5. 查询新卷快照并写入日志(try-catch 包裹,不影响主流程) + // 4. 确定新卷 ID + 写入日志(整块 try-catch,不影响主流程) try { + List newCoilIds = resolveNewCoilIds(result, changeType, oldCoilIds); if (changeType == CoilChangeType.DELETE) { // 删除:只有旧快照,无新快照 for (Long oldId : oldCoilIds) {