From af941c2fd4d4b75ed0b13ec59e8abfe8ebd06ba9 Mon Sep 17 00:00:00 2001 From: 86156 <823267011@qq.com> Date: Thu, 18 Dec 2025 09:45:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=8C=E7=BA=A7=E4=BB=A3=E7=A0=81=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../constants/enums/L1OperateMatEnum.java | 15 ++++++---- .../constants/enums/WebOperateMatEnum.java | 1 - .../service/hanle/AppMeasureHandler.java | 22 +++++++++----- .../service/hanle/EntryMovementHandler.java | 4 +-- .../service/impl/LogDataServiceImpl.java | 27 ++++++++++------- .../service/impl/PdoExCoilServiceImpl.java | 2 +- .../service/impl/TrackServiceImpl.java | 14 +++++---- .../service/strip/SegmentTrackerService.java | 29 ++++++++++++------- .../com/fizz/business/utils/MatmapUtil.java | 6 ++-- 9 files changed, 73 insertions(+), 47 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 70b7179..ab9658a 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 @@ -5,28 +5,31 @@ import com.baomidou.mybatisplus.annotation.IEnum; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; import com.fizz.business.form.ChangePlanStatusForm; -import com.fizz.business.constants.enums.PlanStatusEnum; import com.fizz.business.form.L1OperateMatForm; import com.fizz.business.service.CrmPdiPlanService; import com.fizz.business.comm.OPC.OpcMessageSend; -import com.fizz.business.service.TrackService; +import com.fizz.business.service.client.RedisCacheManager; +import com.fizz.business.service.impl.BeanFactory; import com.fizz.business.utils.MatmapUtil; import com.fizz.business.utils.WebSocketUtil; import com.fizz.business.vo.CrmPdiPlanVO; import com.google.common.collect.Lists; import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.extern.slf4j.Slf4j; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; + /** * 钢卷操作 * * @author chenhao * @date 2023/04/24 */ +@Slf4j @Getter @AllArgsConstructor public enum L1OperateMatEnum implements IEnum, IOperateMat { @@ -56,15 +59,13 @@ public enum L1OperateMatEnum implements IEnum, IOperateMat, IOperateMat, IOperateMat { WebSocketUtil.sendMeasureMsg(message); + + BigDecimal lengthAtWelder = entry == null || entry.getStripLocation() == null ? BigDecimal.ZERO : entry.getStripLocation(); // 处理钢卷ID为空的情况 String coilId =""; - if (entry != null && entry.getEntryCoilId() != null){ - coilId = entry.getEntryCoilId(); - - }else { - MatmapDTO matmapDTO =getCurrentRunningCoilId(entry); - coilId = matmapDTO.getMatId(); +// if (entry != null && entry.getEntryCoilId() != null){ +// coilId = entry.getEntryCoilId(); +// +// }else { + if (entry != null) { + log.error("entry{}",entry.getPayOffReelNumber()); } + MatmapDTO matmapDTO =getCurrentRunningCoilId(entry); + coilId = matmapDTO.getMatId(); +// } if (StringUtils.isEmpty(coilId) || "".equals(coilId)){ log.error("钢卷号为空,无法执行焊缝跟踪!!!!!!"); return; } - BigDecimal lengthAtWelder = entry == null || entry.getStripLocation() == null ? BigDecimal.ZERO : entry.getStripLocation(); + // 每10次请求输出一次日志 int count = LOG_COUNTER.incrementAndGet(); @@ -64,6 +69,7 @@ public class AppMeasureHandler implements OpcMessageHandler { logDataService.logInfo("WELDER", "接收到钢卷焊缝跟踪信号:当前焊缝长度 lengthAtWelder:{} 当前钢卷信息 coilId:{}", lengthAtWelder, coilId); + } // 核心逻辑处理 @@ -85,7 +91,7 @@ public class AppMeasureHandler implements OpcMessageHandler { private MatmapDTO getCurrentRunningCoilId(AppMeasureEntryMessage entry) { - return MatmapUtil.getMatmap(entry.getPayOffReelNumber()); + return MatmapUtil.getMatmap(entry.getPayOffReelNumber()-1); } } diff --git a/business/src/main/java/com/fizz/business/service/hanle/EntryMovementHandler.java b/business/src/main/java/com/fizz/business/service/hanle/EntryMovementHandler.java index df69296..5b2e17f 100644 --- a/business/src/main/java/com/fizz/business/service/hanle/EntryMovementHandler.java +++ b/business/src/main/java/com/fizz/business/service/hanle/EntryMovementHandler.java @@ -44,7 +44,7 @@ public class EntryMovementHandler implements OpcMessageHandler impl LambdaQueryChainWrapper lambdaQuery = lambdaQuery(); - if(ObjectUtil.isNotEmpty(logDataForm.getStartTime())){ + if (ObjectUtil.isNotEmpty(logDataForm.getStartTime())) { LocalDateTime start = LocalDateTime.of(logDataForm.getStartTime().toLocalDate(), LocalTime.MIN); lambdaQuery.ge(LogData::getTimestamp, start); } - if(ObjectUtil.isNotEmpty(logDataForm.getEndTime())){ + if (ObjectUtil.isNotEmpty(logDataForm.getEndTime())) { LocalDateTime end = LocalDateTime.of(logDataForm.getEndTime().toLocalDate(), LocalTime.MAX); lambdaQuery.le(LogData::getTimestamp, end); } @@ -69,17 +69,21 @@ public class LogDataServiceImpl extends ServiceImpl impl @Override public void alarmAck(Integer seqid) { lambdaUpdate() - .set(LogData::getConfirmTime, new Date()) - .eq(LogData::getSeqid, seqid) - .update(); + .set(LogData::getConfirmTime, new Date()) + .eq(LogData::getSeqid, seqid) + .update(); } @Override public void logInfo(String module, String content, Object... args) { - if (args.length > 0) { - content = formatMessage(content, args); + try { + if (args.length > 0) { + content = formatMessage(content, args); + } + saveLogData("INFORMATION", module, content); + } catch (Exception e) { + log.error("没存进去,没事,{}",e); } - saveLogData("INFORMATION",module, content); } @Override @@ -87,9 +91,10 @@ public class LogDataServiceImpl extends ServiceImpl impl if (args.length > 0) { content = formatMessage(content, args); } - saveLogData("WARN",module, content); + saveLogData("WARN", module, content); } - private void saveLogData(String logType,String module, String content){ + + private void saveLogData(String logType, String module, String content) { LogData logData = new LogData(); logData.setModule(module);//设置模块名称 logData.setLogtext(content);//设置日志内容 @@ -130,4 +135,4 @@ public class LogDataServiceImpl extends ServiceImpl impl return sb.toString(); } -} \ No newline at end of file +} diff --git a/business/src/main/java/com/fizz/business/service/impl/PdoExCoilServiceImpl.java b/business/src/main/java/com/fizz/business/service/impl/PdoExCoilServiceImpl.java index 249ec42..f2a8c5c 100644 --- a/business/src/main/java/com/fizz/business/service/impl/PdoExCoilServiceImpl.java +++ b/business/src/main/java/com/fizz/business/service/impl/PdoExCoilServiceImpl.java @@ -120,7 +120,7 @@ public class PdoExCoilServiceImpl implements PdoExCoilService { //准备的成品子卷号 //考虑依据数据库记录分卷,避免因为平台重启导致分卷丢失或错误 Long subNum = crmPdoExcoilService.getNumber(trCoilId - , trMatmap.getPlanNo(), + , trMatmap.getPlanId(), 0); CrmPdiPlanVO plan = crmPdiPlanService.getByCoilIdAndOperId(trMatmap.getMatId()); diff --git a/business/src/main/java/com/fizz/business/service/impl/TrackServiceImpl.java b/business/src/main/java/com/fizz/business/service/impl/TrackServiceImpl.java index 1f754f6..6144c98 100644 --- a/business/src/main/java/com/fizz/business/service/impl/TrackServiceImpl.java +++ b/business/src/main/java/com/fizz/business/service/impl/TrackServiceImpl.java @@ -95,7 +95,7 @@ public class TrackServiceImpl implements TrackService { .planId(Long.valueOf(matmap.getPlanId())) .build(); } - + String returnType = null; double returnWt = 0; if (Objects.equals(planVO.getStatus(), PlanStatusEnum.PRODUCING.name())) { @@ -171,13 +171,15 @@ public class TrackServiceImpl implements TrackService { Integer currPosIdx = currDevice.getIdx(); MatmapDTO target = MatmapUtil.getMatmap(targetPosIdx); MatmapDTO curr = MatmapUtil.getMatmap(currPosIdx); - + if (curr == null || target == null) { - log.warn("Matmap is null - curr: {}, target: {}, currPosIdx: {}, targetPosIdx: {}", + log.warn("Matmap is null - curr: {}, target: {}, currPosIdx: {}, targetPosIdx: {}", curr, target, currPosIdx, targetPosIdx); return; } - + + + if (Objects.equals(curr.getMatId(), target.getMatId())) { return; } @@ -261,13 +263,13 @@ public class TrackServiceImpl implements TrackService { log.warn("CoilPosition not found in Redis, creating empty position"); position = new CoilPositionDTO(); } - + List matmapList = redisCacheManager.getMatmapList(); if (matmapList == null) { log.warn("MatmapList not found in Redis, using empty list"); matmapList = new ArrayList<>(); } - + position.setMatMapList(matmapList); return position; } 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 93eec36..50d462b 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 @@ -73,12 +73,21 @@ public class SegmentTrackerService { AppMeasureExitMessage exit) { long now = System.currentTimeMillis(); + + try { + log.warn(">>> trackCoilHeadPosition start, thread: {}, coilId: {}", Thread.currentThread().getName(), coilId); + trackCoilHeadPosition(coilId, entryLengthAtWelder, entry, exit); + } catch (Exception e) { + log.error("trackCoilHeadPosition 执行异常,coilId=" + coilId, e); + } + Long lastTime = lastLogTimeMap.get(coilId); if (lastTime == null || now - lastTime > intervalTime) { lastLogTimeMap.put(coilId, now); log.info("【TRACK-START】接收到测量数据 -> CoilId: {}, LengthAtWelder: {}", coilId, entryLengthAtWelder); logDataService.logInfo("WELDER", "接收到测量数据 -> CoilId: " + coilId + ", LengthAtWelder: " + entryLengthAtWelder); } + // 4. trackCoilHeadPosition 同步执行 // 1. 新卷或首次测量初始化 BigDecimal weldDev; @@ -117,13 +126,6 @@ public class SegmentTrackerService { // 3. 更新已有段 treatSeg(entry, furnace, coat, exit, weldDev); - // 4. trackCoilHeadPosition 同步执行 - try { - log.warn(">>> trackCoilHeadPosition start, thread: {}, coilId: {}", Thread.currentThread().getName(), coilId); - trackCoilHeadPosition(coilId, entryLengthAtWelder, entry, exit); - } catch (Exception e) { - log.error("trackCoilHeadPosition 执行异常,coilId=" + coilId, e); - } // 5. 完成日志 log.info("【TRACK-END】CoilId: {}, 当前长度: {}, 已生成段数: {}", coilId, entryLengthAtWelder, coilSegNum); @@ -343,6 +345,11 @@ public class SegmentTrackerService { Set prevReached = coilReachedDevices.computeIfAbsent(coilId, k -> Collections.newSetFromMap(new ConcurrentHashMap<>())); + if (entry.getPayOffReelNumber()-1 == DeviceEnum.POR1.getIdx()) { + prevReached.remove(DeviceEnum.POR2); + } else { + prevReached.remove(DeviceEnum.POR1); + } if (LogRateLimiter.shouldLog("TRACK:" + coilId, 5000)) { logDataService.logInfo("MATMAP-TRACK", "构建的本地matmap缓存为=" + JSONUtil.toJsonStr(prevReached) + " ..."); @@ -357,9 +364,12 @@ public class SegmentTrackerService { if (headPos.compareTo(BigDecimal.valueOf(dynPos)) >= 0 && !prevReached.contains(d)) { + MatmapDTO matmap = MatmapUtil.getMatmap(entry.getPayOffReelNumber()-1); + MatmapUtil.setMatId(d.getIdx(), coilId,matmap.getPlanId()); + if (d == DeviceEnum.WELDER) { logDataService.logInfo("MATMAP-TRACK", "钢卷到达焊机,更新钢卷计划状态coil=" + coilId + "当前长度为:" + headPos); - MatmapDTO matmap = MatmapUtil.getMatmap(DeviceEnum.WELDER.getIdx()); + log.info("matmap.planid={},coilid={}", matmap.getPlanId(), coilId); trackService.l1OperateMat(L1OperateMatForm.builder() .entryMatId(coilId) .planId(matmap.getPlanId()) @@ -368,7 +378,6 @@ public class SegmentTrackerService { .build()); } else { logDataService.logInfo("MATMAP-TRACK", "钢卷:" + coilId + "到达设备:" + d.getDesc() + "当前长度为:" + headPos); - MatmapUtil.setMatId(d.getIdx(), coilId); proMatmapService.flushMatmap(); WebSocketUtil.sendMatmapMsg(); } @@ -381,4 +390,4 @@ public class SegmentTrackerService { -} \ No newline at end of file +} diff --git a/business/src/main/java/com/fizz/business/utils/MatmapUtil.java b/business/src/main/java/com/fizz/business/utils/MatmapUtil.java index fd098af..00e4fc1 100644 --- a/business/src/main/java/com/fizz/business/utils/MatmapUtil.java +++ b/business/src/main/java/com/fizz/business/utils/MatmapUtil.java @@ -69,15 +69,17 @@ public class MatmapUtil { return Objects.nonNull(matmap) && Objects.nonNull(matmap.getMatId()); } - public static void setMatId(int index, String matId) { + public static void setMatId(int index, String matId, String planId) { MatmapDTO matmap = getMatmap(index); if (ObjectUtil.isNull(matmap)) { return; } matmap.setPosIdx(index); matmap.setMatId(matId); + matmap.setPlanId(planId); log.info("钢卷焊缝跟踪:matId{},位置id:{}",matId,index); - logDataService.logInfo("MATMAP-SAVE","钢卷焊缝跟踪:matId"+matId+",位置id:"+index); + + logDataService.logInfo("MATMAP-SAVE","钢卷焊缝跟踪:matId"+matId+",位置id:"+index,"planId="+planId); redisCacheManager.setMatmap(index, matmap); }