From b4ff04d7dd22f0e48bf386cd422e885aef08fed7 Mon Sep 17 00:00:00 2001
From: ZengTao <2773468879@qq.com>
Date: 星期四, 22 五月 2025 15:03:10 +0800
Subject: [PATCH] OPC通讯修改为S7通讯

---
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/OpcLoadGlassTask.java |  188 +++++++++++++++++++++++++++++++++++++---------
 1 files changed, 150 insertions(+), 38 deletions(-)

diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/OpcLoadGlassTask.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/OpcLoadGlassTask.java
index 3471b59..2a79d53 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/OpcLoadGlassTask.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/OpcLoadGlassTask.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.github.xingshuangs.iot.protocol.s7.serializer.S7Serializer;
 import com.mes.common.config.Const;
 import com.mes.engineering.entity.Engineering;
 import com.mes.engineering.mapper.EngineeringMapper;
@@ -10,13 +11,19 @@
 import com.mes.opctask.entity.LoadGlassDeviceTaskHistory;
 import com.mes.opctask.service.LoadGlassDeviceTaskHistoryService;
 import com.mes.opctask.service.LoadGlassDeviceTaskService;
+import com.mes.pp.entity.OptimizeProject;
+import com.mes.pp.service.OptimizeProjectService;
 import com.mes.rawglassdetails.entity.RawGlassStorageDetails;
 import com.mes.rawglassdetails.service.RawGlassStorageDetailsService;
+import com.mes.s7.entity.S7DataSP;
 import com.mes.uppattenusage.entity.UpPattenUsage;
 import com.mes.uppattenusage.entity.vo.UpPattenUsageVO;
 import com.mes.uppattenusage.mapper.UpPattenUsageMapper;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
+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 org.springframework.util.CollectionUtils;
 
@@ -47,6 +54,16 @@
     private LoadGlassDeviceTaskHistoryService loadGlassDeviceTaskHistoryService;
     @Resource
     private UpPattenUsageMapper upPattenUsageMapper;
+    @Resource
+    private OptimizeProjectService optimizeProjectService;
+
+    @Autowired
+    @Qualifier("s7SerializerSPOne")
+    private S7Serializer s7SerializerSPOne;
+
+    @Autowired
+    @Qualifier("s7SerializerSPTwo")
+    private S7Serializer s7SerializerSPTwo;
 
     private static final List<Integer> LOAD_STATION_01 = Arrays.asList(101, 102);
     private static final List<Integer> LOAD_STATION_02 = Arrays.asList(103, 104);
@@ -58,40 +75,82 @@
 
     private static final String LOAD_GLASS_DEVICE_TWO_TASK = "load_glass_device_two_task";
 
-
     //璁惧id   涓婄墖浣嶄俊鎭�   浠诲姟琛ㄤ笉涓�鑷�   鍘嗗彶浠诲姟琛ㄥ叕鐢ㄤ竴寮� 鏂板浠诲姟/浠诲姟缁撴潫锛屽悗浼氬湪鍘嗗彶琛ㄤ腑鏂板涓�鏉¤褰曞苟鍦ㄧ粨鏉熷悗鏇存柊浠诲姟  涓�涓换鍔″嵆鍙�
     //瀹氭椂浠诲姟鎵弿涓婄墖浣嶆湁娌℃湁鍘熺墖
     //1銆佹槸鍚︽湁鍦ㄦ墽琛岀殑浠诲姟
     //2銆�1鍙蜂笂鐗囦綅鏄惁鏈夊師鐗囷紝鍘熺墖灏哄鏄惁鍜屼笂鐗囧緟涓婄墖鐨勫昂瀵镐竴鑷�
     //3銆�1鍙锋棤鍘熺墖锛屼笖娌℃湁鏋跺瓙锛�2鍙蜂笂鐗囦綅灏哄鏄惁鍜屽甫涓婄墖灏哄涓�鑷�
     //4銆佷笉涓�鑷村彲鑳藉嚭鐜扮幓鐠冪牬鎹熷鑷寸殑涓婁竴鏋跺師鐗囨暟閲忎笉澶�
+    @Scheduled(fixedDelay = 5000)
     public void opcLoadGlassOne() {
         opcLoadGlassChild(LOAD_GLASS_DEVICE_ONE_TASK, LOAD_GLASS_ONE_DEVICE);
     }
 
+    @Scheduled(fixedDelay = 5000)
     public void opcLoadGlassTwo() {
         opcLoadGlassChild(LOAD_GLASS_DEVICE_TWO_TASK, LOAD_GLASS_TWO_DEVICE);
     }
 
-
+    @Scheduled(fixedDelay = 5000)
     public void opcLoadGlassOneFinish() {
         opcLoadGlassFinishChid(LOAD_GLASS_DEVICE_ONE_TASK, LOAD_GLASS_ONE_DEVICE);
     }
 
+    @Scheduled(fixedDelay = 5000)
     public void opcLoadGlassTwoFinish() {
         opcLoadGlassFinishChid(LOAD_GLASS_DEVICE_TWO_TASK, LOAD_GLASS_TWO_DEVICE);
     }
 
+    /**
+     * 瀹氭椂浠诲姟鎵爜宸插畬鎴愪笂鐗囩殑宸ョ▼锛屽皢宸ョ▼鐘舵�佹敼涓哄凡瀹屾垚锛屽悓姝p琛ㄧ殑宸ョ▼琛紝鐘舵�佹敼涓�300
+     */
+    @Scheduled(fixedDelay = 5000)
+    public void updateEngineerState() {
+        log.info("淇敼宸插畬鎴愬伐绋嬬姸鎬佷换鍔″紑濮嬫墽琛�");
+        List<Engineering> engineerings = engineeringMapper.selectList(new LambdaQueryWrapper<Engineering>().eq(Engineering::getState, Const.ENGINEERING_RUNNING));
+        for (Engineering engineering : engineerings) {
+            Integer count = upPattenUsageMapper.selectCount(new LambdaQueryWrapper<UpPattenUsage>()
+                    .eq(UpPattenUsage::getEngineeringId, engineering.getEngineerId()).ne(UpPattenUsage::getState, Const.LOAD_RAW_GLASS_SUCCESS));
+            if (count == 0) {
+                engineeringMapper.update(null, new LambdaUpdateWrapper<Engineering>().set(Engineering::getState, Const.ENGINEERING_SUCCESS)
+                        .eq(Engineering::getEngineerId, engineering.getEngineerId()));
+                optimizeProjectService.update(null, new LambdaUpdateWrapper<OptimizeProject>().set(OptimizeProject::getState, 300)
+                        .eq(OptimizeProject::getProjectNo, engineering.getEngineerId()));
+            }
+        }
+    }
+
     private void opcLoadGlassChild(String tableName, Integer deviceId) {
+        S7DataSP s7DataSP = new S7DataSP();
+        if (tableName.equals(LOAD_GLASS_DEVICE_ONE_TASK)) {
+            s7DataSP = s7SerializerSPOne.read(S7DataSP.class);
+        } else {
+            s7DataSP = s7SerializerSPTwo.read(S7DataSP.class);
+        }
         Engineering engineering = engineeringMapper.selectOne(new LambdaQueryWrapper<Engineering>()
                 .eq(Engineering::getState, Const.ENGINEERING_RUNNING).eq(Engineering::getStationCell, deviceId));
         if (null == engineering) {
             log.info("{}涓婄墖绾匡紝娌℃湁宸ョ▼浠诲姟", deviceId);
+            return;
         }
         //浠诲姟鏆傚仠
-        LoadGlassDeviceTask task = loadGlassDeviceTaskService.queryTaskMessage(tableName);
-        if ("1".equals(task.getTaskState())) {
-            log.info("鏈夋鍦ㄦ墽琛岀殑涓婄墖浠诲姟锛岀粨鏉熸湰鍦颁笂鐗囪姹�");
+        S7DataSP task=new S7DataSP();
+        if(LOAD_GLASS_ONE_DEVICE.equals(deviceId)){
+            s7SerializerSPOne.read(S7DataSP.class);
+        }else{
+            s7SerializerSPTwo.read(S7DataSP.class);
+        }
+//        LoadGlassDeviceTask task = loadGlassDeviceTaskService.queryTaskMessage(tableName);
+        ;
+        if ("0".equals(s7DataSP.getInkageState().toString())) {
+            log.info("{}涓婄墖绾匡紝澶勪簬绂荤嚎鐘舵�侊細{}锛岀粨鏉熸湰鍦颁笂鐗囪姹�", deviceId, s7DataSP.getInkageState().toString());
+//        if (0 == task.getInkageState()) {
+//            log.info("{}涓婄墖绾匡紝澶勪簬绂荤嚎鐘舵�侊細{}锛岀粨鏉熸湰鍦颁笂鐗囪姹�", deviceId, task.getInkageState());
+            return;
+        }
+        if (s7DataSP.getTaskRunning().toString().equals(Const.ENGINEERING_RUNNING)) {
+//        if (task.getTaskRunning().equals(Const.ENGINEERING_RUNNING)) {
+            log.info("{}涓婄墖绾匡紝鏈夋鍦ㄦ墽琛岀殑浠诲姟锛岀粨鏉熸湰鍦颁笂鐗囪姹�", deviceId);
             return;
         }
         List<UpPattenUsageVO> pattenUsageList = upPattenUsageMapper.queryRawGlassByEngineeringId(engineering.getEngineerId());
@@ -104,12 +163,12 @@
         Map<String, List<UpPattenUsageVO>> upListMap = pattenUsageList.stream()
                 .collect(Collectors.groupingBy(UpPattenUsageVO::getGroupNumber));
         log.info("鑾峰彇褰撳墠闇�瑕佷笂鐗囩殑鍘熺墖鏁版嵁");
-        List<UpPattenUsageVO> usageVOS = upListMap.get(0);
+        List<UpPattenUsageVO> usageVOS = upListMap.get("1");
 //        鑾峰彇1鍙蜂笂鐗囦綅鏄湁鏋跺瓙涓旀湁鐜荤拑
         List<Integer> loadStation = LOAD_GLASS_DEVICE_ONE_TASK.equals(tableName) ? LOAD_STATION_01 : LOAD_STATION_02;
         List<RawGlassStorageDetails> loadStationList = rawGlassStorageDetailsService.list(new LambdaQueryWrapper<RawGlassStorageDetails>()
                 .inSql(RawGlassStorageDetails::getSlot, "select slot from raw_glass_storage_station where enable_state = 1")
-                .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)
+                .in(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN_ALL)
                 .eq(RawGlassStorageDetails::getDeviceId, deviceId));
         if (CollectionUtils.isEmpty(loadStationList)) {
             log.info("褰撳墠涓婄墖绾胯矾涓や釜涓婄墖浣嶉兘娌℃湁鍘熺墖淇℃伅锛岀粨鏉熸湰娆′笂鐗囦换鍔★紝绛夊緟浠撳偍璋冨害浠诲姟");
@@ -118,18 +177,29 @@
         RawGlassStorageDetails oneLoadStation = loadStationList.stream().filter(e -> e.getSlot().equals(loadStation.get(0))).findFirst().orElse(null);
         if (null == oneLoadStation) {
             RawGlassStorageDetails twoLoadStation = loadStationList.stream().filter(e -> e.getSlot().equals(loadStation.get(1))).findFirst().orElse(null);
-            if (!compareRawSize(usageVOS.get(0), oneLoadStation)) {
+            if (!compareRawSize(usageVOS.get(0), twoLoadStation)) {
                 log.info("浜屽彿涓婄墖浣嶆湁鏋跺瓙锛屽師鐗囨暟閲忎负0鎴栬�呭師鐗囦俊鎭笌寰呬笂鐗囧昂瀵镐笉涓�鑷达紝缁撴潫鏈涓婄墖浠诲姟锛岀瓑寰呬粨鍌ㄨ皟搴︿换鍔�");
                 return;
             }
             int number = Math.min(twoLoadStation.getRemainQuantity(), usageVOS.size());
             //鐢熸垚涓婄墖浠诲姟
-            task.setTotalCount(number);
-            task.setTaskRunning(Const.ENGINEERING_RUNNING);
-            task.setRawGlassWidth((int) usageVOS.get(0).getWidth());
-            task.setRawGlassHeight((int) usageVOS.get(0).getHeight());
-            task.setSlot(loadStation.get(1));
-            loadGlassDeviceTaskService.updateTaskMessage(tableName, task);
+            task.setTotalCount((short)number);
+            task.setTaskRunning(Boolean.TRUE);
+            task.setRawGlassWidth((short) usageVOS.get(0).getWidth());
+            task.setRawGlassHeight((short) usageVOS.get(0).getHeight());
+            task.setSlot(loadStation.get(1).shortValue());
+//            loadGlassDeviceTaskService.updateTaskMessage(tableName, task);
+            S7DataSP s7DataSPWrite = new S7DataSP();
+            s7DataSPWrite.setTotalCount((short) number);
+            s7DataSPWrite.setTaskRunning(Boolean.TRUE);
+            s7DataSPWrite.setRawGlassWidth((short) usageVOS.get(0).getWidth());
+            s7DataSPWrite.setRawGlassHeight((short) usageVOS.get(0).getHeight());
+            s7DataSPWrite.setSlot(loadStation.get(1).shortValue());
+            if (LOAD_GLASS_ONE_DEVICE.equals(deviceId)) {
+                s7SerializerSPOne.write(s7DataSPWrite);
+            } else {
+                s7SerializerSPTwo.write(s7DataSPWrite);
+            }
             saveHistoryTask(task, deviceId);
             return;
         }
@@ -140,43 +210,85 @@
         }
         //鐢熸垚涓婄墖浠诲姟
         int number = Math.min(oneLoadStation.getRemainQuantity(), usageVOS.size());
-        task.setTotalCount(number);
-        task.setTaskRunning(Const.ENGINEERING_RUNNING);
-        task.setRawGlassWidth((int) usageVOS.get(0).getWidth());
-        task.setRawGlassHeight((int) usageVOS.get(0).getHeight());
-        task.setSlot(loadStation.get(0));
-        loadGlassDeviceTaskService.updateTaskMessage(tableName, task);
+        task.setTotalCount((short)number);
+        task.setTaskRunning(Boolean.TRUE);
+        task.setRawGlassWidth((short) usageVOS.get(0).getWidth());
+        task.setRawGlassHeight((short) usageVOS.get(0).getHeight());
+        task.setSlot(loadStation.get(0).shortValue());
+//        loadGlassDeviceTaskService.updateTaskMessage(tableName, task);
+        S7DataSP s7DataSPWrite = new S7DataSP();
+        s7DataSPWrite.setTotalCount((short) number);
+        s7DataSPWrite.setTaskRunning(Boolean.TRUE);
+        s7DataSPWrite.setRawGlassWidth((short) usageVOS.get(0).getWidth());
+        s7DataSPWrite.setRawGlassHeight((short) usageVOS.get(0).getHeight());
+        s7DataSPWrite.setSlot(loadStation.get(0).shortValue());
+        if (LOAD_GLASS_ONE_DEVICE.equals(deviceId)) {
+            s7SerializerSPOne.write(s7DataSPWrite);
+        } else {
+            s7SerializerSPTwo.write(s7DataSPWrite);
+        }
         saveHistoryTask(task, deviceId);
     }
 
     private void opcLoadGlassFinishChid(String tableName, Integer deviceId) {
-        LoadGlassDeviceTask task = loadGlassDeviceTaskService.queryTaskMessage(tableName);
-        if (task.getTaskState() <= 1) {
-            log.info("鏃犱换鍔℃垨浠诲姟姝e湪鎵ц涓�");
+        S7DataSP s7DataSP = new S7DataSP();
+        if (tableName.equals(LOAD_GLASS_DEVICE_ONE_TASK)) {
+            s7DataSP = s7SerializerSPOne.read(S7DataSP.class);
+        } else {
+            s7DataSP = s7SerializerSPTwo.read(S7DataSP.class);
+        }
+//        LoadGlassDeviceTask task = loadGlassDeviceTaskService.queryTaskMessage(tableName);
+        if (s7DataSP.getTaskRunning().toString().equals(Const.ENGINEERING_NEW)) {
+//        if (task.getTaskRunning().equals(Const.ENGINEERING_NEW)) {
+            log.info("鏃犱换鍔�,缁撴潫");
+            return;
+        }
+        if (Integer.parseInt(s7DataSP.getTaskState().toString()) <= 1) {
+//        if (task.getTaskState() <= 1) {
+            log.info("浠诲姟姝e湪鎵ц,缁撴潫");
             return;
         }
         //鑾峰彇浠诲姟瀹屾垚鎯呭喌
 //         宸插畬鎴愭暟閲�  鐮存崯鏁伴噺
-        Integer finishCount = task.getFinishCount();
-        Integer damageCount = task.getDamageCount();
+        Integer finishCount = Integer.parseInt(s7DataSP.getFinishCount().toString());
+        Integer damageCount = Integer.parseInt(s7DataSP.getDamageCount().toString());
+        Integer slot = Integer.parseInt(s7DataSP.getSlot().toString());
+//        Integer finishCount = task.getFinishCount();
+//        Integer damageCount = task.getDamageCount();
 
         //鏇存柊褰撳墠鏋跺瓙涓婄殑鍘熺墖鍓╀綑鎯呭喌
         rawGlassStorageDetailsService.update(new UpdateWrapper<RawGlassStorageDetails>()
                 .inSql("slot", "select slot from raw_glass_storage_station where enable_state = 1")
-                .eq("slot", task.getSlot())
+//                .eq("slot", task.getSlot())
+                .eq("slot", slot)
                 .eq("state", Const.RAW_GLASS_STATE_IN)
-                .set("remain_quantity", "remain_quantity - " + (finishCount + damageCount)));
+                .setSql("remain_quantity = remain_quantity - " + (finishCount + damageCount)));
         //鏇存柊宸ョ▼涓嬬殑鍘熺墖鏁伴噺 todo:sql寰呬紭鍖�
-        upPattenUsageMapper.update(null, new LambdaUpdateWrapper<UpPattenUsage>()
-                .inSql(UpPattenUsage::getId, " SELECT id FROM up_patten_usage ORDER BY id ASC LIMIT 10")
-                .set(UpPattenUsage::getState, Const.LOAD_RAW_GLASS_SUCCESS));
-        //todo:浠诲姟琛ㄦ暟鎹儏鍐�
-        task.setTaskRunning(0);
-        task.setTotalCount(0);
-        task.setRawGlassWidth(0);
-        task.setRawGlassHeight(0);
-        task.setSlot(0);
-        loadGlassDeviceTaskService.updateTaskMessage(tableName, task);
+
+        if (finishCount > 0) {
+            List<Integer> ids = upPattenUsageMapper.queryFinishByEngineering(deviceId, finishCount);
+            upPattenUsageMapper.update(null, new LambdaUpdateWrapper<UpPattenUsage>()
+                    .in(UpPattenUsage::getId, ids)
+                    .set(UpPattenUsage::getState, Const.LOAD_RAW_GLASS_SUCCESS));
+        }
+        //浠诲姟琛ㄦ暟鎹儏鍐�
+//        task.setTaskRunning(0);
+//        task.setTotalCount(0);
+//        task.setRawGlassWidth(0);
+//        task.setRawGlassHeight(0);
+//        task.setSlot(0);
+//        loadGlassDeviceTaskService.updateTaskMessage(tableName, task);
+        S7DataSP s7DataSPWrite = new S7DataSP();
+        s7DataSPWrite.setTaskRunning(Boolean.FALSE);
+        s7DataSPWrite.setTotalCount((short) 0);
+        s7DataSPWrite.setRawGlassWidth((short) 0);
+        s7DataSPWrite.setRawGlassHeight((short) 0);
+        s7DataSPWrite.setSlot((short) 0);
+        if (LOAD_GLASS_ONE_DEVICE.equals(deviceId)) {
+            s7SerializerSPOne.write(s7DataSPWrite);
+        } else {
+            s7SerializerSPTwo.write(s7DataSPWrite);
+        }
         loadGlassDeviceTaskHistoryService.update(new LambdaUpdateWrapper<LoadGlassDeviceTaskHistory>()
                 .set(LoadGlassDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_SUCCESS)
                 .eq(LoadGlassDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_NEW)
@@ -184,7 +296,7 @@
         );
     }
 
-    private boolean saveHistoryTask(LoadGlassDeviceTask task, Integer deviceId) {
+    private boolean saveHistoryTask(S7DataSP task, Integer deviceId) {
         LoadGlassDeviceTaskHistory taskHistory = new LoadGlassDeviceTaskHistory();
         BeanUtils.copyProperties(task, taskHistory);
         taskHistory.setStation(deviceId);

--
Gitblit v1.8.0