From b804d88d626d1df675a3278c859b37758c55432b Mon Sep 17 00:00:00 2001
From: ZengTao <2773468879@qq.com>
Date: 星期四, 18 十二月 2025 13:42:06 +0800
Subject: [PATCH] 1、增加流程卡进度查询,可根据工程号,流程卡号,玻璃id查看进度情况 2、钢化界面增加颜色对应注释,版图增加落架顺序 3、两个大理片界面笼子上色块显示修改为根据玻璃宽度显示 4、中空大理片右侧缺片情况显示优化 5、是否除膜从领取工程取消,在中空领取任务时选择除膜膜系(不除膜时不选择膜系),当配方中是需要除膜时并且选择的膜系与小片膜系一样时发送除膜信息 6、中空领取任务界面流程卡数量不等于已配对数量时高亮显示 7、磨边队列当后面玻璃磨边完成扫码但前面玻璃还未扫到码时高亮显示

---
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java |  229 ++++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 147 insertions(+), 82 deletions(-)

diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java
index fc07543..0ba7fb6 100644
--- a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java
@@ -1,22 +1,28 @@
 package com.mes.job;
 
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.json.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.github.xingshuangs.iot.protocol.s7.serializer.S7Serializer;
 import com.mes.common.config.Const;
-import com.mes.damage.entity.Damage;
 import com.mes.damage.service.DamageService;
-import com.mes.engineering.entity.Engineering;
-import com.mes.temperingglass.service.TemperingGlassInfoService;
+import com.mes.largenscreen.entity.PieChartVO;
+import com.mes.s7.entity.S7DataGHTwo;
 import com.mes.temperingglass.entity.TemperingGlassInfo;
-import com.mes.tools.WebSocketServer;
+import com.mes.temperingglass.service.TemperingGlassInfoService;
+import com.mes.tools.WebSocketUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
-import java.util.ArrayList;
-import java.util.List;
+import javax.annotation.Resource;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -27,122 +33,181 @@
 public class PlcTemperingGlassTask {
 
     @Autowired
-    private TemperingGlassInfoService temperingAgoService;
+    private TemperingGlassInfoService temperingGlassInfoService;
     @Autowired
     private DamageService damageService;
 
-    /**
-     * fixedRate : 涓婁竴涓皟鐢ㄥ紑濮嬪悗鍐嶆璋冪敤鐨勫欢鏃讹紙涓嶇敤绛夊緟涓婁竴娆¤皟鐢ㄥ畬鎴愶級
-     * fixedDelay : 涓婁竴涓皟鐢ㄧ粨鏉熷悗鍐嶆璋冪敤鐨勫欢鏃�
-     */
+    @Autowired
+    @Qualifier("s7SerializerGHTwo")
+    private S7Serializer s7SerializerGHTwo;
+    @Resource
+    private WebSocketUtils webSocketUtils;
+
 
     @Scheduled(fixedDelay = 1000)
     public void temperingGlassHome() {
         JSONObject jsonObject = new JSONObject();
         //姝e湪绛夊緟杩涚墖鐨勭幓鐠�
-        List<TemperingGlassInfo> waitingGlass = temperingAgoService.selectWaitingGlass();
-        if (waitingGlass != null) {
-            jsonObject.append("waitingGlass", waitingGlass);
-        }
-
-        //鑾峰彇鏁村湪鐐変腑鐨勪袱涓増鍥緄d
-        List<TemperingGlassInfo> layoutId = temperingAgoService.selectLayoutId();
-        //杩涚倝涓殑鐜荤拑
-        if (!layoutId.isEmpty()) {
-            List<TemperingGlassInfo> intoGlass = temperingAgoService.selectIntoGlass(layoutId.get(0));
-            jsonObject.append("intoGlass", intoGlass);
-            //杩涚倝涓殑绗簩涓増鍥�
-            if (layoutId.size() > 1) {
-                List<TemperingGlassInfo> intoGlass2 = temperingAgoService.selectIntoGlass(layoutId.get(1));
-                jsonObject.append("intoGlass2", intoGlass2);
+        List<TemperingGlassInfo> waitingGlass = new ArrayList<>();
+        try {
+            waitingGlass = selectWaitingGlassByOpc();
+            if (CollectionUtil.isNotEmpty(waitingGlass)) {
+                jsonObject.append("waitingGlass", markSequence(waitingGlass));
             }
+        } catch (Exception e) {
+            log.info("閽㈠寲鍓嶈幏鍙栧紓甯革細{}", e.getMessage());
         }
-        //鍑虹倝鍚庣殑鐜荤拑
-        List<TemperingGlassInfo> outGlass = temperingAgoService.selectOutGlass();
-        if (outGlass != null) {
-            jsonObject.append("outGlass", outGlass);
-        }
-
-        //杩囨棆杞彴閽㈠寲鍚庣殑鐜荤拑
-        List<TemperingGlassInfo> overGlass = temperingAgoService.selectOverGlass();
-        if (outGlass != null) {
-            jsonObject.append("overGlass", overGlass);
-        }
-
-
-        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("temperingGlass");
-        if (sendwServer != null) {
-            for (WebSocketServer webserver : sendwServer) {
-                if (webserver != null) {
-                    webserver.sendMessage(jsonObject.toString());
-                } else {
-                    log.info("Home is closed");
+        try {
+            List<TemperingGlassInfo> intoGlass = selectIntoGlass(waitingGlass);
+            if (CollectionUtil.isNotEmpty(intoGlass)) {
+                for (int i = 0; i < intoGlass.size(); i++) {
+                    String jsonName = "intoGlass";
+                    if (i != 0) {
+                        jsonName = jsonName + i;
+                    }
+                    List<TemperingGlassInfo> intoGlassList = temperingGlassInfoService.list(new LambdaQueryWrapper<TemperingGlassInfo>()
+                            .eq(TemperingGlassInfo::getEngineerId, intoGlass.get(i).getEngineerId())
+                            .eq(TemperingGlassInfo::getTemperingLayoutId, intoGlass.get(i).getTemperingLayoutId()));
+                    jsonObject.append(jsonName, markSequence(intoGlassList));
                 }
+
             }
+        } catch (Exception e) {
+            log.info("閽㈠寲鍓嶈幏鍙栧紓甯革細{}", e.getMessage());
         }
+        try {
+            //鍑虹倝鍚庣殑鐜荤拑
+            List<TemperingGlassInfo> outGlass = temperingGlassInfoService.selectOutGlass();
+            if (CollectionUtil.isNotEmpty(outGlass)) {
+                jsonObject.append("outGlass", markSequence(outGlass));
+            }
+        } catch (Exception e) {
+            log.info("閽㈠寲鍓嶈幏鍙栧紓甯革細{}", e.getMessage());
+        }
+        webSocketUtils.sendToWeb("temperingGlass", jsonObject);
+
     }
 
     @Scheduled(fixedDelay = 1000)
     public void temperingIsRun() {
         JSONObject jsonObject = new JSONObject();
         //姝e湪杩涜鐨勪换鍔�
-        List<TemperingGlassInfo> temperingTaskType = temperingAgoService.selectTaskType();
+        List<TemperingGlassInfo> temperingTaskType = temperingGlassInfoService.selectTaskType();
         jsonObject.append("temperingTaskType", temperingTaskType);
-
-
-        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("temperingIsRun");
-        if (sendwServer != null) {
-            for (WebSocketServer webserver : sendwServer) {
-                if (webserver != null) {
-                    webserver.sendMessage(jsonObject.toString());
-                } else {
-                    log.info("Home is closed");
-                }
-            }
-        }
-
+        webSocketUtils.sendToWeb("temperingIsRun", jsonObject);
     }
 
     @Scheduled(fixedDelay = 1000)
     public void largenScreen() {
         JSONObject jsonObject = new JSONObject();
         //澶у睆閽㈠寲淇℃伅
-        Integer putGlass = temperingAgoService.count(
-                new LambdaUpdateWrapper<TemperingGlassInfo>()
-                        .eq(TemperingGlassInfo::getState, Const.TEMPERING_NEW)
+        Date startOfToday = new Date(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant().toEpochMilli());
+
+        Integer putGlass = temperingGlassInfoService.count(
+                new QueryWrapper<TemperingGlassInfo>()
+                        .eq("state", Const.TEMPERING_NEW)
+                        .gt("create_time", startOfToday)
         );
         jsonObject.append("temperingTaskType", putGlass);
         //澶у睆閽㈠寲淇℃伅
-        List<TemperingGlassInfo> temperingGlassInfoList = temperingAgoService.list(
-                new LambdaQueryWrapper<TemperingGlassInfo>()
-                        .select(TemperingGlassInfo::getEngineerId, TemperingGlassInfo::getTemperingLayoutId) // 閫夋嫨瑕佸幓閲嶇殑瀛楁
-                        .eq(TemperingGlassInfo::getState, Const.TEMPERING_START)
-                        .groupBy(TemperingGlassInfo::getEngineerId, TemperingGlassInfo::getTemperingLayoutId) // 鎸� engineerId 鍜� temperingLayoutId 鍒嗙粍
+        List<TemperingGlassInfo> temperingGlassInfoList = temperingGlassInfoService.list(
+                new QueryWrapper<TemperingGlassInfo>()
+                        .select("engineer_id", "tempering_layout_id")
+                        .eq("state", Const.TEMPERING_START)
+                        .gt("create_time", startOfToday)
+                        .groupBy("engineer_id", "tempering_layout_id")
         );
         jsonObject.append("temperingGlassInfoList", temperingGlassInfoList.size());
         //澶у睆閽㈠寲淇℃伅
-        List<TemperingGlassInfo> temperingGlassInfoInList = temperingAgoService.list(
+        List<TemperingGlassInfo> temperingGlassInfoInList = temperingGlassInfoService.list(
                 new LambdaQueryWrapper<TemperingGlassInfo>()
                         .select(TemperingGlassInfo::getEngineerId, TemperingGlassInfo::getTemperingLayoutId) // 閫夋嫨瑕佸幓閲嶇殑瀛楁
                         .eq(TemperingGlassInfo::getState, Const.TEMPERING_DROP)
                         .groupBy(TemperingGlassInfo::getEngineerId, TemperingGlassInfo::getTemperingLayoutId) // 鎸� engineerId 鍜� temperingLayoutId 鍒嗙粍
         );
         jsonObject.append("temperingGlassInfoInList", temperingGlassInfoInList.size());
-        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("largenScreen");
-        if (sendwServer != null) {
-            for (WebSocketServer webserver : sendwServer) {
-                if (webserver != null) {
-                    webserver.sendMessage(jsonObject.toString());
-                    List<String> messages = webserver.getMessages();
-                    if (!messages.isEmpty()) {
-                        // // 灏嗘渶鍚庝竴涓秷鎭浆鎹负鏁存暟绫诲瀷鐨勫垪琛�
-                        webserver.clearMessages();
-                    }
-                } else {
-                    log.info("largenScreen is closed");
+        //閽㈠寲楗煎浘鏁版嵁
+        List<PieChartVO> pieChartVOS = temperingGlassInfoService.queryPieChart();
+        jsonObject.append("pieChartVOS", pieChartVOS);
+        webSocketUtils.sendToWeb("largenScreen", jsonObject);
+    }
+
+
+    /**
+     * fixedRate : 涓婁竴涓皟鐢ㄥ紑濮嬪悗鍐嶆璋冪敤鐨勫欢鏃讹紙涓嶇敤绛夊緟涓婁竴娆¤皟鐢ㄥ畬鎴愶級
+     * fixedDelay : 涓婁竴涓皟鐢ㄧ粨鏉熷悗鍐嶆璋冪敤鐨勫欢鏃�
+     */
+    private List<TemperingGlassInfo> selectWaitingGlassByOpc() {
+        //鑾峰彇绛夊緟杩涚倝涓殑鐜荤拑淇℃伅
+        try {
+            S7DataGHTwo s7DataGHTwo = s7SerializerGHTwo.read(S7DataGHTwo.class);
+            String engineerEntity = s7DataGHTwo.getF09EngineerId();
+            Integer temperingLayoutIdEntity = s7DataGHTwo.getF09TemperingLayoutId();
+            if (null == engineerEntity || null == temperingLayoutIdEntity) {
+                engineerEntity = s7DataGHTwo.getF08EngineerId();
+                temperingLayoutIdEntity = s7DataGHTwo.getF08TemperingLayoutId();
+                if (null == engineerEntity || null == temperingLayoutIdEntity) {
+                    log.info("鑾峰彇鍙傛暟寮傚父锛岀粨鏉熸湰娆′换鍔�");
+                    return new ArrayList<>();
                 }
             }
+            return temperingGlassInfoService.list(new LambdaQueryWrapper<TemperingGlassInfo>()
+                    .eq(TemperingGlassInfo::getEngineerId, engineerEntity)
+                    .eq(TemperingGlassInfo::getTemperingLayoutId, temperingLayoutIdEntity));
+        } catch (Exception e) {
+            log.info("鑾峰彇閽㈠寲鍙傛暟寮傚父锛歿}", e);
+            return new ArrayList<>();
         }
     }
 
+    /**
+     * 鑾峰彇姝e湪閽㈠寲鐨勭増鍥句俊鎭細鑾峰彇3鐐夊凡缁忔憜濂界殑鐜荤拑灏忕墖锛屾帓闄ゆ鍦ㄦ憜鐨�
+     *
+     * @param list
+     * @return
+     */
+    private List<TemperingGlassInfo> selectIntoGlass(List<TemperingGlassInfo> list) {
+        List<TemperingGlassInfo> temperingGlassInfoList = temperingGlassInfoService.queryEngineerAndLayoutId();
+        log.info("閽㈠寲涓幏鍙栧埌鐨勬暟鎹负{}", temperingGlassInfoList);
+        if (CollectionUtil.isEmpty(temperingGlassInfoList)) {
+            return new ArrayList<>();
+        }
+        if (CollectionUtil.isEmpty(list)) {
+            return temperingGlassInfoList;
+        } else {
+            String engineerId = list.get(0).getEngineerId();
+            int temperingLayoutId = list.get(0).getTemperingLayoutId();
+            List<TemperingGlassInfo> tempList = temperingGlassInfoList.stream().filter(e -> !(e.getEngineerId().equals(engineerId) && temperingLayoutId == e.getTemperingLayoutId())).collect(Collectors.toList());
+            return tempList;
+        }
+    }
+
+
+    public List<TemperingGlassInfo> markSequence(List<TemperingGlassInfo> tempGlass) {
+
+        // 1. 姝ラ1锛氬畾涔夊垎缁勯敭鎻愬彇瑙勫垯锛堟槑纭被鍨嬶紝閬垮厤娉涘瀷鎺ㄥ娣蜂贡锛�
+        // 缁勫悎閿細flowCardId + "_" + layer锛堜繚璇乫lowCardId+layer鍞竴锛�
+        Function<TemperingGlassInfo, String> keyExtractor = info ->
+                info.getFlowCardId() + "_" + (info.getLayer() == null ? "" : info.getLayer());
+
+        // 2. 姝ラ2锛氭寜缁勫悎閿垎缁勶紙瀹屽叏渚濊禆缂栬瘧鍣ㄨ嚜鍔ㄦ帹瀵兼硾鍨嬶紝鏃犳樉寮忔寚瀹氾級
+        // 浣跨敤LinkedHashMap淇濊瘉鍒嗙粍椤哄簭涓庡師濮嬫暟鎹竴鑷�
+        Map<String, List<TemperingGlassInfo>> groupMap = tempGlass.stream()
+                .collect(Collectors.groupingBy(
+                        keyExtractor,          // 鍒嗙粍閿�
+                        LinkedHashMap::new,    // 澶栧眰Map瀹炵幇锛堟湁搴忥級
+                        Collectors.toList()    // 鍐呭眰List鏀堕泦鍣�
+                ));
+
+        // 3. 姝ラ3锛氫负姣忎釜鍒嗙粍鍐呯殑鍏冪礌鏍囪sequence锛堜粠1寮�濮嬶級
+        groupMap.forEach((key, glassList) -> {
+            // 閬嶅巻鍒嗙粍鍐呯殑鍒楄〃锛屾寜椤哄簭璧嬪�約equence
+            for (int i = 0; i < glassList.size(); i++) {
+                glassList.get(i).setSequence(i + 1); // sequence浠�1寮�濮�
+            }
+        });
+
+        // 5. 杩斿洖鏍囪鍚庣殑瀹屾暣鍒楄〃锛堝師鍒楄〃宸查�氳繃寮曠敤淇敼锛�
+        return tempGlass;
+    }
 }
\ No newline at end of file

--
Gitblit v1.8.0