From 675dd432628376133e6d7e26335d15954548e97b Mon Sep 17 00:00:00 2001 From: 86156 <823267011@qq.com> Date: Wed, 21 Jan 2026 14:29:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A5=E5=BF=97=E4=BC=98=E5=8C=96+PRODUCING?= =?UTF-8?q?=E5=88=B0PRODUCT=E7=8A=B6=E6=80=81=E8=BD=AC=E5=8C=96=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../constants/enums/L1OperateMatEnum.java | 6 ++- .../business/service/CrmPdiPlanService.java | 2 +- .../service/hanle/ExitCutHandler.java | 4 +- .../service/impl/CrmPdiPlanServiceImpl.java | 46 ++++++++++++++++--- .../service/strip/SegmentTrackerService.java | 39 +++++++--------- 5 files changed, 66 insertions(+), 31 deletions(-) diff --git a/business/src/main/java/com/fizz/business/constants/enums/L1OperateMatEnum.java b/business/src/main/java/com/fizz/business/constants/enums/L1OperateMatEnum.java index 510dd57..9a2cfc2 100644 --- a/business/src/main/java/com/fizz/business/constants/enums/L1OperateMatEnum.java +++ b/business/src/main/java/com/fizz/business/constants/enums/L1OperateMatEnum.java @@ -122,10 +122,14 @@ public enum L1OperateMatEnum implements IEnum, IOperateMat { */ CrmPdiPlan getFirstUnProducedCoil(); - void changeStatus(ChangePlanStatusForm build); + boolean changeStatus(ChangePlanStatusForm build); /** * 获取当前正在线上的钢卷(优先级:ONLINE > PRODUCING > READY/NEW) diff --git a/business/src/main/java/com/fizz/business/service/hanle/ExitCutHandler.java b/business/src/main/java/com/fizz/business/service/hanle/ExitCutHandler.java index 1c65aa8..8a4d290 100644 --- a/business/src/main/java/com/fizz/business/service/hanle/ExitCutHandler.java +++ b/business/src/main/java/com/fizz/business/service/hanle/ExitCutHandler.java @@ -38,7 +38,8 @@ public class ExitCutHandler implements OpcMessageHandler { MatmapDTO trMatmap = MatmapUtil.getMatmap(TR.getIdx()); if (trMatmap == null) { - log.error("卷取机不存在"); + com.fizz.business.service.impl.BeanFactory.getBean(com.fizz.business.service.LogDataService.class) + .logInfo("EXIT_CUT", "卷取机不存在"); return; } @@ -60,6 +61,7 @@ public class ExitCutHandler implements OpcMessageHandler { .planId(trMatmap.getPlanId()) .operation(L1OperateMatEnum.PRODUCT) .build()); + } log.info("成功处理 EXIT_CUT 消息,已保存成品卷: " + exitCoilInfo.getExitMatId()); diff --git a/business/src/main/java/com/fizz/business/service/impl/CrmPdiPlanServiceImpl.java b/business/src/main/java/com/fizz/business/service/impl/CrmPdiPlanServiceImpl.java index 6973456..2f8e3a3 100644 --- a/business/src/main/java/com/fizz/business/service/impl/CrmPdiPlanServiceImpl.java +++ b/business/src/main/java/com/fizz/business/service/impl/CrmPdiPlanServiceImpl.java @@ -10,6 +10,7 @@ import com.fizz.business.form.ChangePlanStatusForm; import com.fizz.business.form.PlanQueryForm; import com.fizz.business.mapper.CrmPdiPlanMapper; import com.fizz.business.service.CrmPdiPlanService; +import com.fizz.business.service.LogDataService; import com.fizz.business.vo.CrmPdiPlanVO; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -21,6 +22,9 @@ import java.util.List; @Service public class CrmPdiPlanServiceImpl extends ServiceImpl implements CrmPdiPlanService { + @javax.annotation.Resource + private LogDataService logDataService; + /** * 根据卷ID和操作员ID查询单个记录 @@ -150,23 +154,53 @@ public class CrmPdiPlanServiceImpl extends ServiceImpl wrapper = new QueryWrapper<>(); + + if (StrUtil.isBlank(build.getMatId())) { + if (logDataService != null) { + logDataService.logInfo("PLAN", "changeStatus matId为空, planId={}, operation={}", build.getId(), build.getOperation()); + } + return false; + } + wrapper.eq("coilid", build.getMatId()); - wrapper.eq("planid", build.getId()); + + // planId 非空时:matId + planId 精确匹配 + // planId 为空时:仅用 matId 匹配(coilid 唯一) + if (StrUtil.isNotBlank(build.getId())) { + wrapper.eq("planid", build.getId()); + } CrmPdiPlan pdiPlan = baseMapper.selectOne(wrapper); if (pdiPlan == null) { - log.error("未找到ID为{}的计划记录", build.getId()); - return; + if (logDataService != null) { + logDataService.logInfo("PLAN", "未找到计划记录, matId={}, planId={}, operation={}", build.getMatId(), build.getId(), build.getOperation()); + } + return false; } pdiPlan.setStatus(build.getOperation()); - baseMapper.updateById(pdiPlan); - log.info("计划状态更新成功,ID: {}, 新状态: {}", build.getId(), build.getOperation()); + int rows = baseMapper.updateById(pdiPlan); + if (rows <= 0) { + if (logDataService != null) { + logDataService.logInfo("PLAN", "计划状态更新失败, matId={}, planId={}, operation={}", build.getMatId(), build.getId(), build.getOperation()); + } + return false; + } + + log.info("计划状态更新成功, matId={}, planId={}, 新状态={}", build.getMatId(), build.getId(), build.getOperation()); + return true; } /** diff --git a/business/src/main/java/com/fizz/business/service/strip/SegmentTrackerService.java b/business/src/main/java/com/fizz/business/service/strip/SegmentTrackerService.java index 5c99033..1824ad9 100644 --- a/business/src/main/java/com/fizz/business/service/strip/SegmentTrackerService.java +++ b/business/src/main/java/com/fizz/business/service/strip/SegmentTrackerService.java @@ -79,7 +79,7 @@ public class SegmentTrackerService { try { trackCoilHeadPosition(coilId, entryLengthAtWelder, entry, exit); } catch (Exception e) { - logDataService.logInfo("ERROR","coidId="+coilId+", e="+ e); + logDataService.logInfo("TRACK", "trackCoilHeadPosition异常, coilId={}, err={}", coilId, String.valueOf(e)); } Long lastTime = lastLogTimeMap.get(coilId); @@ -105,8 +105,7 @@ public class SegmentTrackerService { Long lastTime1 = lastNewCoilLogTimeMap.get(coilId); if (lastTime1 == null || now1 - lastTime1 > intervalTime) { lastNewCoilLogTimeMap.put(coilId, now1); - log.info("【WELDER】检测到新钢卷或初始化 -> CoilId: {}", coilId); - logDataService.logInfo("WELDER", "Detected new coil or initialized -> CoilId: " + coilId); + logDataService.logInfo("WELDER", "检测到新钢卷或初始化, CoilId={}", coilId); } } else { weldDev = entryLengthAtWelder.subtract(weldLength); @@ -129,8 +128,7 @@ public class SegmentTrackerService { // 5. 完成日志 - log.info("【TRACK-END】CoilId: {}, 当前长度: {}, 已生成段数: {}", coilId, entryLengthAtWelder, coilSegNum); - logDataService.logInfo("TRACK", "Process completed -> CoilId: " + coilId + ", CurrentLength: " + entryLengthAtWelder + ", SegmentCount: " + coilSegNum); + logDataService.logInfo("TRACK", "处理完成, CoilId={}, 当前长度={}, 已生成段数={}", coilId, entryLengthAtWelder, coilSegNum); } @@ -146,7 +144,7 @@ public class SegmentTrackerService { BigDecimal weldDev) { if (listSegment.isEmpty()) { // === 【处理开始日志】=== - log.warn("【TRACK-TREAT】,listSegment为空,直接返回"); + logDataService.logWarn("TRACK", "treatSeg: listSegment为空,直接返回, coilSegNum={}", coilSegNum); return; } @@ -157,8 +155,7 @@ public class SegmentTrackerService { // payOffReelNumber=1/2 代表当前跟踪的是哪一路开卷机入口。 // 这里做保护,避免 entry 为空或值异常导致误写 matmap。 // === 【处理开始日志】=== - log.info("【TRACK-TREAT】开始处理段数据,共 {} 段,weldDev={},celLength = {},cxlLength = {}。 ", listSegment.size(), weldDev, celLength, cxlLength); - logDataService.logInfo("TRACK", "Start processing segments: count=" + listSegment.size() + ", weldDev=" + weldDev); + logDataService.logInfo("TRACK", "开始处理段数据, count={}, weldDev={}, celLength={}, cxlLength={}", listSegment.size(), weldDev, celLength, cxlLength); Iterator iterator = listSegment.descendingIterator(); while (iterator.hasNext()) { @@ -184,14 +181,12 @@ public class SegmentTrackerService { if (segment.getHeadPos().compareTo(BigDecimal.valueOf(currentDevicePos)) > 0 && segment.getTailPos().compareTo(BigDecimal.valueOf(currentDevicePos)) < 0) { - log.info("【TRACK-TREAT】段 {} 进入设备区域 [{}],当前设备长度:{}", segment.getSegNo(), device.name(), currentDevicePos); logDataService.logInfo("TRACK", - "Segment " + segment.getSegNo() + " entered device area [" + device.name() + "], devicePos=" + currentDevicePos); + "段进入设备区域, segNo={}, device={}, devicePos={}", segment.getSegNo(), device.name(), currentDevicePos); double currentSpeed = getSpeedForDevice(device, entry, coat, exit); if (currentSpeed > LOWSPEEDLIMIT) { - log.info("【TRACK-TREAT】段 {} 速度大于基准速度, 进入设备区域 [{}],当前速度:{}", segment.getSegNo(), device.name(), currentSpeed); logDataService.logInfo("TRACK", - "Segment " + segment.getSegNo() + " entered device area [" + device.name() + "], speed=" + currentSpeed); + "段速度满足条件并进入设备区域, segNo={}, device={}, speed={}", segment.getSegNo(), device.name(), currentSpeed); for (String fieldName : device.getParamFields()) { Object message = getMessageForDevice(device, entry, furnace, coat, exit); if (message != null) { @@ -206,10 +201,9 @@ public class SegmentTrackerService { double exitPlantPos = stripPositionService.calculate(DeviceEnum.TR, celLength, cxlLength); if (segment.getTailPos().compareTo(BigDecimal.valueOf(exitPlantPos)) >= 0) { - log.info("【TRACK-END】钢卷 {} 的段号 {} 已离开产线,开始持久化数据{}。", - segment.getEnCoilID(), segment.getSegNo(), JSONUtil.toJsonStr(segment.getTotalValues())); logDataService.logInfo("SEGMENT", - "Coil " + segment.getEnCoilID() + " segment " + segment.getSegNo() + " left the line, start persisting data."); + "段离开产线并开始持久化, coilId={}, segNo={}, values={}", + segment.getEnCoilID(), segment.getSegNo(), JSONUtil.toJsonStr(segment.getTotalValues())); segmentService.saveTotalSegment(segment); // 调用服务进行持久化 iterator.remove(); } @@ -368,16 +362,15 @@ public class SegmentTrackerService { public void trackCoilHeadPosition(String coilId, BigDecimal headPos, AppMeasureEntryMessage entry, AppMeasureExitMessage exit) { - log.warn(">>> trackCoilHeadPosition 当前线程:{}", Thread.currentThread().getName()); + logDataService.logInfo("MATMAP-TRACK", "trackCoilHeadPosition 当前线程={}", Thread.currentThread().getName()); if (LogRateLimiter.shouldLog("TRACK:" + coilId, 5000)) { - log.info("焊缝位置匹配逻辑,当前焊缝长度{},", headPos); - logDataService.logInfo("MATMAP-TRACK", "CoilId=" + coilId + "Weld position matching logic, current weld length ="+headPos); + logDataService.logInfo("MATMAP-TRACK", "焊缝位置匹配逻辑, coilId={}, weldLen={}", coilId, headPos); } Integer payOffReelNumber = entry != null ? entry.getPayOffReelNumber() : null; if (payOffReelNumber == null || payOffReelNumber < 1) { - log.warn("trackCoilHeadPosition: invalid payOffReelNumber={}, coilId={}", payOffReelNumber, coilId); + logDataService.logWarn("MATMAP-TRACK", "trackCoilHeadPosition: invalid payOffReelNumber={}, coilId={}", payOffReelNumber, coilId); return; } @@ -394,7 +387,9 @@ public class SegmentTrackerService { for (DeviceEnum d : DeviceEnum.values()) { double dynPos = stripPositionService.calculate(d, celLength, cxlLength); - log.info("焊缝位置匹配逻辑,当前焊缝长度{},当前计算的设备长度:{}", headPos, dynPos); + if (LogRateLimiter.shouldLog("TRACK:DYNPOS:" + coilId, 5000)) { + logDataService.logInfo("MATMAP-TRACK", "焊缝位置匹配, coilId={}, headPos={}, device={}, dynPos={}", coilId, headPos, d.name(), dynPos); + } boolean positionReached = headPos.compareTo(BigDecimal.valueOf(dynPos)) >= 0; @@ -404,8 +399,8 @@ public class SegmentTrackerService { if (d == DeviceEnum.WELDER && entry != null && entry.getStripSpeed() != null) { if (entry.getStripSpeed().doubleValue() > LOWSPEEDLIMIT) { welderIsMoving = true; - log.info("【WELDER-SPEED-TRIGGER】CoilId: {}, Speed: {} > {}, 触发状态变更", - coilId, entry.getStripSpeed().doubleValue(), LOWSPEEDLIMIT); + logDataService.logInfo("MATMAP-TRACK", "WELDER速度触发状态变更, coilId={}, speed={}, limit={}", + coilId, entry.getStripSpeed().doubleValue(), LOWSPEEDLIMIT); } }