feat(anneal): 添加退火计划钢卷查询功能并优化变更日志处理
- 在IWmsAnnealPerformanceService中添加queryPlanCoils方法用于查询退火计划中的加工前钢卷 - 在WmsAnnealPerformanceController中添加/rawCoils端点暴露钢卷查询功能 - 在WmsAnnealPerformanceServiceImpl中实现完整的钢卷查询逻辑,包括按计划条件筛选和关联查询 - 修改CoilChangeLogAspect切面,在旧卷ID提取和快照查询中添加异常处理,确保异常不影响主流程 - 将变更日志的确定新卷ID和写入日志整体包装在try-catch中,提升系统稳定性
This commit is contained in:
@@ -2,6 +2,7 @@ package com.klp.controller;
|
|||||||
|
|
||||||
import com.klp.common.core.domain.R;
|
import com.klp.common.core.domain.R;
|
||||||
import com.klp.domain.bo.WmsAnnealPerformanceBo;
|
import com.klp.domain.bo.WmsAnnealPerformanceBo;
|
||||||
|
import com.klp.domain.vo.WmsMaterialCoilVo;
|
||||||
import com.klp.domain.vo.anneal.WmsAnnealPerformanceVo;
|
import com.klp.domain.vo.anneal.WmsAnnealPerformanceVo;
|
||||||
import com.klp.service.IWmsAnnealPerformanceService;
|
import com.klp.service.IWmsAnnealPerformanceService;
|
||||||
import lombok.RequiredArgsConstructor;
|
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.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 炉火实绩
|
* 炉火实绩
|
||||||
*
|
*
|
||||||
@@ -28,4 +31,12 @@ public class WmsAnnealPerformanceController {
|
|||||||
public R<WmsAnnealPerformanceVo> getPerformance(WmsAnnealPerformanceBo bo) {
|
public R<WmsAnnealPerformanceVo> getPerformance(WmsAnnealPerformanceBo bo) {
|
||||||
return R.ok(performanceService.queryPerformance(bo));
|
return R.ok(performanceService.queryPerformance(bo));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询退火计划中的加工前钢卷列表
|
||||||
|
*/
|
||||||
|
@GetMapping("/rawCoils")
|
||||||
|
public R<List<WmsMaterialCoilVo>> getRawCoils(WmsAnnealPerformanceBo bo) {
|
||||||
|
return R.ok(performanceService.queryPlanCoils(bo));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
package com.klp.service;
|
package com.klp.service;
|
||||||
|
|
||||||
import com.klp.domain.bo.WmsAnnealPerformanceBo;
|
import com.klp.domain.bo.WmsAnnealPerformanceBo;
|
||||||
|
import com.klp.domain.vo.WmsMaterialCoilVo;
|
||||||
import com.klp.domain.vo.anneal.WmsAnnealPerformanceVo;
|
import com.klp.domain.vo.anneal.WmsAnnealPerformanceVo;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 炉火实绩Service接口
|
* 炉火实绩Service接口
|
||||||
*
|
*
|
||||||
@@ -12,4 +15,9 @@ import com.klp.domain.vo.anneal.WmsAnnealPerformanceVo;
|
|||||||
public interface IWmsAnnealPerformanceService {
|
public interface IWmsAnnealPerformanceService {
|
||||||
|
|
||||||
WmsAnnealPerformanceVo queryPerformance(WmsAnnealPerformanceBo bo);
|
WmsAnnealPerformanceVo queryPerformance(WmsAnnealPerformanceBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询退火计划中的加工前钢卷列表
|
||||||
|
*/
|
||||||
|
List<WmsMaterialCoilVo> queryPlanCoils(WmsAnnealPerformanceBo bo);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,10 +10,12 @@ import com.klp.domain.vo.WmsMaterialCoilVo;
|
|||||||
import com.klp.domain.vo.anneal.WmsAnnealPerformanceDetailVo;
|
import com.klp.domain.vo.anneal.WmsAnnealPerformanceDetailVo;
|
||||||
import com.klp.domain.vo.anneal.WmsAnnealPerformanceSummaryVo;
|
import com.klp.domain.vo.anneal.WmsAnnealPerformanceSummaryVo;
|
||||||
import com.klp.domain.vo.anneal.WmsAnnealPerformanceVo;
|
import com.klp.domain.vo.anneal.WmsAnnealPerformanceVo;
|
||||||
|
import com.klp.domain.WmsFurnacePlan;
|
||||||
import com.klp.domain.WmsFurnacePlanCoil;
|
import com.klp.domain.WmsFurnacePlanCoil;
|
||||||
import com.klp.domain.WmsWarehouse;
|
import com.klp.domain.WmsWarehouse;
|
||||||
import com.klp.mapper.WmsAnnealPerformanceMapper;
|
import com.klp.mapper.WmsAnnealPerformanceMapper;
|
||||||
import com.klp.mapper.WmsFurnacePlanCoilMapper;
|
import com.klp.mapper.WmsFurnacePlanCoilMapper;
|
||||||
|
import com.klp.mapper.WmsFurnacePlanMapper;
|
||||||
import com.klp.mapper.WmsWarehouseMapper;
|
import com.klp.mapper.WmsWarehouseMapper;
|
||||||
import com.klp.service.IWmsAnnealPerformanceService;
|
import com.klp.service.IWmsAnnealPerformanceService;
|
||||||
import com.klp.service.IWmsMaterialCoilService;
|
import com.klp.service.IWmsMaterialCoilService;
|
||||||
@@ -38,6 +40,7 @@ public class WmsAnnealPerformanceServiceImpl implements IWmsAnnealPerformanceSer
|
|||||||
|
|
||||||
private final WmsAnnealPerformanceMapper performanceMapper;
|
private final WmsAnnealPerformanceMapper performanceMapper;
|
||||||
private final WmsFurnacePlanCoilMapper planCoilMapper;
|
private final WmsFurnacePlanCoilMapper planCoilMapper;
|
||||||
|
private final WmsFurnacePlanMapper planMapper;
|
||||||
private final WmsWarehouseMapper warehouseMapper;
|
private final WmsWarehouseMapper warehouseMapper;
|
||||||
private final IWmsMaterialCoilService materialCoilService;
|
private final IWmsMaterialCoilService materialCoilService;
|
||||||
|
|
||||||
@@ -200,4 +203,50 @@ public class WmsAnnealPerformanceServiceImpl implements IWmsAnnealPerformanceSer
|
|||||||
vo.setDetails(details);
|
vo.setDetails(details);
|
||||||
return vo;
|
return vo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<WmsMaterialCoilVo> queryPlanCoils(WmsAnnealPerformanceBo bo) {
|
||||||
|
// 1. 查询退火计划
|
||||||
|
LambdaQueryWrapper<WmsFurnacePlan> planQw = new LambdaQueryWrapper<WmsFurnacePlan>()
|
||||||
|
.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<WmsFurnacePlan> plans = planMapper.selectList(planQw);
|
||||||
|
|
||||||
|
List<Long> planIds = plans.stream()
|
||||||
|
.map(WmsFurnacePlan::getPlanId)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
if (planIds.isEmpty()) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. 查询计划关联的钢卷(加工前的coilId)
|
||||||
|
List<WmsFurnacePlanCoil> planCoils = planCoilMapper.selectList(
|
||||||
|
new LambdaQueryWrapper<WmsFurnacePlanCoil>()
|
||||||
|
.in(WmsFurnacePlanCoil::getPlanId, planIds)
|
||||||
|
.eq(WmsFurnacePlanCoil::getDelFlag, 0)
|
||||||
|
);
|
||||||
|
|
||||||
|
Set<Long> 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<WmsMaterialCoilVo> coilPage = materialCoilService.queryPageList(coilBo, pageQuery);
|
||||||
|
|
||||||
|
return coilPage != null && coilPage.getRows() != null
|
||||||
|
? coilPage.getRows()
|
||||||
|
: Collections.emptyList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,11 +46,18 @@ public class CoilChangeLogAspect {
|
|||||||
public Object around(ProceedingJoinPoint joinPoint, CoilChangeLog coilChangeLog) throws Throwable {
|
public Object around(ProceedingJoinPoint joinPoint, CoilChangeLog coilChangeLog) throws Throwable {
|
||||||
CoilChangeType changeType = coilChangeLog.changeType();
|
CoilChangeType changeType = coilChangeLog.changeType();
|
||||||
|
|
||||||
// 1. 提取旧卷 ID 列表
|
// 1. 提取旧卷 ID 列表(异常不影响主流程)
|
||||||
List<Long> oldCoilIds = extractOldCoilIds(joinPoint, coilChangeLog);
|
List<Long> oldCoilIds;
|
||||||
|
try {
|
||||||
|
oldCoilIds = extractOldCoilIds(joinPoint, coilChangeLog);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.warn("提取旧卷ID失败,跳过变更日志: {}", e.getMessage());
|
||||||
|
return joinPoint.proceed();
|
||||||
|
}
|
||||||
|
|
||||||
// 2. 查询旧卷快照
|
// 2. 查询旧卷快照(异常不影响主流程)
|
||||||
Map<Long, Map<String, Object>> oldSnapshots = new LinkedHashMap<>();
|
Map<Long, Map<String, Object>> oldSnapshots = new LinkedHashMap<>();
|
||||||
|
try {
|
||||||
for (Long coilId : oldCoilIds) {
|
for (Long coilId : oldCoilIds) {
|
||||||
if (coilId != null) {
|
if (coilId != null) {
|
||||||
WmsMaterialCoil coil = coilMapper.selectById(coilId);
|
WmsMaterialCoil coil = coilMapper.selectById(coilId);
|
||||||
@@ -59,15 +66,17 @@ public class CoilChangeLogAspect {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.warn("查询旧卷快照失败,跳过变更日志: {}", e.getMessage());
|
||||||
|
return joinPoint.proceed();
|
||||||
|
}
|
||||||
|
|
||||||
// 3. 执行目标方法
|
// 3. 执行目标方法
|
||||||
Object result = joinPoint.proceed();
|
Object result = joinPoint.proceed();
|
||||||
|
|
||||||
// 4. 确定新卷 ID 列表
|
// 4. 确定新卷 ID + 写入日志(整块 try-catch,不影响主流程)
|
||||||
List<Long> newCoilIds = resolveNewCoilIds(result, changeType, oldCoilIds);
|
|
||||||
|
|
||||||
// 5. 查询新卷快照并写入日志(try-catch 包裹,不影响主流程)
|
|
||||||
try {
|
try {
|
||||||
|
List<Long> newCoilIds = resolveNewCoilIds(result, changeType, oldCoilIds);
|
||||||
if (changeType == CoilChangeType.DELETE) {
|
if (changeType == CoilChangeType.DELETE) {
|
||||||
// 删除:只有旧快照,无新快照
|
// 删除:只有旧快照,无新快照
|
||||||
for (Long oldId : oldCoilIds) {
|
for (Long oldId : oldCoilIds) {
|
||||||
|
|||||||
Reference in New Issue
Block a user