From 88955d3be6a16064639f596d4d7987b081a344e2 Mon Sep 17 00:00:00 2001
From: zhoushihao <zsh19950802@163.com>
Date: 星期一, 29 七月 2024 14:41:03 +0800
Subject: [PATCH] 大理片笼:调度任务完成开发,待测试

---
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java |  169 +++++++++++++++++++++++++++++++-------------------------
 1 files changed, 94 insertions(+), 75 deletions(-)

diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
index 126fbbd..3b11d12 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
@@ -311,48 +311,49 @@
             }
         }
         //鎵ц鍐呴儴璋冨害浠诲姟
-        TemperingLayoutDTO temperingOccupySlot = bigStorageCageDetailsService.queryTemperingOccupySlot();
-        if (null != temperingOccupySlot) {
-            List<SlotSequenceDTO> slotSequenceList = bigStorageCageDetailsService.queryGlassMaxAndMin(temperingOccupySlot.getEngineerId(), temperingOccupySlot.getTemperingLayoutId());
-            for (int i = 0; i < slotSequenceList.size() - 1; i++) {
-                SlotSequenceDTO first = slotSequenceList.get(i);
-                SlotSequenceDTO second = slotSequenceList.get(i + 1);
-                int slotWidth = carWidth - first.getRemainWidth() - glassGap;
-                if (first.getMinSequence() == second.getMaxSequence() + 1
-                        && second.getRemainWidth() > slotWidth && slotWidth >= 0) {
-
-                    List<BigStorageCageDetails> list = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
-                            .eq(BigStorageCageDetails::getSlot, first.getSlot()).eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
-                            .orderBy(Boolean.TRUE, sequenceOrder, BigStorageCageDetails::getTemperingFeedSequence));
-                    if (CollectionUtils.isNotEmpty(list)) {
-                        List<BigStorageCageOutTask> outTasks = new ArrayList<>();
-                        int serialNumber = 1;
-                        for (BigStorageCageDetails item : list) {
-                            outTasks.add(new BigStorageCageOutTask(item.getGlassId(), first.getSlot(), second.getSlot(),
-                                    item.getWidth() * 10, item.getHeight() * 10, 1, serialNumber++, Const.BIG_STORAGE_OUT_NEW));
+        List<TemperingLayoutDTO> temperingOccupySlotList = bigStorageCageDetailsService.queryTemperingOccupySlot();
+        if (CollectionUtils.isNotEmpty(temperingOccupySlotList)) {
+            for (TemperingLayoutDTO temperingOccupySlot : temperingOccupySlotList) {
+                List<SlotSequenceDTO> slotSequenceList = bigStorageCageDetailsService.queryGlassMaxAndMin(temperingOccupySlot.getEngineerId(), temperingOccupySlot.getTemperingLayoutId());
+                for (int i = 0; i < slotSequenceList.size() - 1; i++) {
+                    SlotSequenceDTO first = slotSequenceList.get(i);
+                    SlotSequenceDTO second = slotSequenceList.get(i + 1);
+                    int slotWidth = carWidth - first.getRemainWidth() - glassGap;
+                    if (first.getMinSequence() == second.getMaxSequence() + 1
+                            && second.getRemainWidth() > slotWidth && slotWidth >= 0) {
+                        List<BigStorageCageDetails> list = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
+                                .eq(BigStorageCageDetails::getSlot, first.getSlot()).eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
+                                .orderBy(Boolean.TRUE, sequenceOrder, BigStorageCageDetails::getTemperingFeedSequence));
+                        if (CollectionUtils.isNotEmpty(list)) {
+                            List<BigStorageCageOutTask> outTasks = new ArrayList<>();
+                            int serialNumber = 1;
+                            for (BigStorageCageDetails item : list) {
+                                outTasks.add(new BigStorageCageOutTask(item.getGlassId(), first.getSlot(), second.getSlot(),
+                                        item.getWidth() * 10, item.getHeight() * 10, 1, serialNumber++, Const.BIG_STORAGE_OUT_NEW));
+                            }
+                            //鏂板璋冨害浠诲姟
+                            bigStorageCageOutTaskService.saveBatch(outTasks);
+                            //鏇存柊鐞嗙墖绗艰鎯呰〃璋冨害鐨勫悗鐨勭幓鐠冧綅缃俊鎭細鐢熸垚浠诲姟鍚庡厛灏嗙幓鐠冩牸瀛愪綅缃繘琛岃皟鏁达紝鐜荤拑鐘舵�佹敼涓鸿皟搴︿腑锛屾柊澧炶皟搴﹀畬鎴愪换鍔★紝澶勭悊璋冨害瀹屾垚鍚庣幓鐠冪姸鎬佹敼涓�100.
+                            List<String> glassList = list.stream().map(BigStorageCageDetails::getGlassId).collect(Collectors.toList());
+                            bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>().set(BigStorageCageDetails::getState, Const.GLASS_STATE_SCHEDULE_ING)
+                                    .set(BigStorageCageBaseInfo::getSlot, second.getSlot()).eq(BigStorageCageDetails::getGlassId, glassList));
+                            break;
                         }
-                        //鏂板璋冨害浠诲姟
-                        bigStorageCageOutTaskService.saveBatch(outTasks);
-                        //鏇存柊鐞嗙墖绗艰鎯呰〃璋冨害鐨勫悗鐨勭幓鐠冧綅缃俊鎭細鐢熸垚浠诲姟鍚庡厛灏嗙幓鐠冩牸瀛愪綅缃繘琛岃皟鏁达紝鐜荤拑鐘舵�佹敼涓鸿皟搴︿腑锛屾柊澧炶皟搴﹀畬鎴愪换鍔★紝澶勭悊璋冨害瀹屾垚鍚庣幓鐠冪姸鎬佹敼涓�100.
-                        List<String> glassList = list.stream().map(BigStorageCageDetails::getGlassId).collect(Collectors.toList());
-                        bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>().set(BigStorageCageDetails::getState, Const.GLASS_STATE_SCHEDULE_ING)
-                                .set(BigStorageCageBaseInfo::getSlot, second.getSlot()).eq(BigStorageCageDetails::getGlassId, glassList));
                     }
-
-                    //鍚憄lc鍐欏叆纭瀛�
-                    int returnData = 0;
-                    int count = 1;
-                    while (returnData == 0) {
-                        log.info("宸插悜plc绗瑊}娆¢�佸崗璁�", count);
-                        S7object.getinstance().plccontrol.writeWord(mesToPLCAddress, 1);
-                        returnData = S7object.getinstance().plccontrol.readWord(mesToPLCAddress, 1).get(0);
-                        log.info("宸插悜plc绗瑊}娆″彂閫佸嚭鐗囦换鍔$‘璁わ紝鍦板潃涓猴細{},鍐欏叆鐨勫唴瀹逛负{}", count++, mesToPLCAddress, returnData);
-                    }
-                    Date endDate = new Date();
-                    log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
-                    return;
                 }
             }
+            //鍚憄lc鍐欏叆纭瀛�
+            int returnData = 0;
+            int count = 1;
+            while (returnData == 0) {
+                log.info("宸插悜plc绗瑊}娆¢�佸崗璁�", count);
+                S7object.getinstance().plccontrol.writeWord(mesToPLCAddress, 1);
+                returnData = S7object.getinstance().plccontrol.readWord(mesToPLCAddress, 1).get(0);
+                log.info("宸插悜plc绗瑊}娆″彂閫佸嚭鐗囦换鍔$‘璁わ紝鍦板潃涓猴細{},鍐欏叆鐨勫唴瀹逛负{}", count++, mesToPLCAddress, returnData);
+            }
+            Date endDate = new Date();
+            log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
+            return;
         }
     }
 
@@ -371,16 +372,16 @@
                     .in(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_SLOT));
             if (CollectionUtils.isNotEmpty(inSuccessGlass)) {
                 log.info("3銆佽幏鍙栬繘鐗囧凡瀹屾垚鐨勭幓鐠冧俊鎭痠d:{}", inSuccessGlass);
-                List<String> inSuccessGlassIds = inSuccessGlass.stream().map(BigStorageCageFeedTask::getGlassId).collect(Collectors.toList());
+                List<Integer> inSuccessGlassSlot = inSuccessGlass.stream().map(BigStorageCageFeedTask::getTargetSlot).collect(Collectors.toList());
                 List<UpdateBigStorageCageDTO> storageCageDTOList = inSuccessGlass.stream().map(e -> {
                     UpdateBigStorageCageDTO storageCageDTO = new UpdateBigStorageCageDTO();
                     BeanUtils.copyProperties(e, storageCageDTO);
                     return storageCageDTO;
                 }).collect(Collectors.toList());
                 bigStorageCageDetailsService.updateBySlot(storageCageDTOList, Const.GLASS_STATE_IN);
-                log.info("4銆佸ぇ鐞嗙墖绗艰繘鐗囩姸鎬佸凡瀹屾垚宸插畬鎴愮殑鐜荤拑淇℃伅id:{}", inSuccessGlassIds);
+                log.info("4銆佸ぇ鐞嗙墖绗艰繘鐗囩姸鎬佸凡瀹屾垚宸插畬鎴愮殑鐜荤拑淇℃伅id:{}", inSuccessGlass);
                 //鏇存柊鐞嗙墖绗肩幓鐠冨昂瀵�
-                updateSlotRemain(inSuccessGlassIds, Boolean.TRUE);
+                updateSlotRemainBySlots(inSuccessGlassSlot);
                 log.info("5銆佸ぇ鐞嗙墖绗艰繘鐗囩洰鏍囨牸瀛愬昂瀵告洿鏂板畬鎴�");
             }
 
@@ -412,10 +413,47 @@
                     return storageCageDTO;
                 }).collect(Collectors.toList());
                 bigStorageCageDetailsService.updateBySlot(storageCageDTOList, Const.GLASS_STATE_OUT);
-                List<String> outSuccessGlassIds = outSuccessGlass.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList());
-                log.info("4銆佸ぇ鐞嗙墖绗煎嚭鐗囩姸鎬佸凡瀹屾垚宸插畬鎴愮殑鐜荤拑淇℃伅id:{}", outSuccessGlassIds);
+                List<Integer> outSuccessSlotList = outSuccessGlass.stream().map(BigStorageCageOutTask::getStartSlot).collect(Collectors.toList());
+                log.info("4銆佸ぇ鐞嗙墖绗煎嚭鐗囩姸鎬佸凡瀹屾垚宸插畬鎴愮殑鐜荤拑淇℃伅id:{}", outSuccessGlass);
                 //鏇存柊鐞嗙墖绗肩幓鐠冨昂瀵�
-                updateSlotRemain(outSuccessGlassIds, Boolean.FALSE);
+                updateSlotRemainBySlots(outSuccessSlotList);
+                log.info("5銆佸ぇ鐞嗙墖绗艰繘鐗囩洰鏍囨牸瀛愬昂瀵告洿鏂板畬鎴�");
+            }
+        }
+        Date endDate = new Date();
+        log.info("end:澶х悊鐗囩鍑虹墖瀹屾垚鍚庢洿鏂板ぇ鐞嗙墖绗兼暟鎹换鍔$粨鏉熸椂闂达細{}锛屽叡鑰楁椂锛歿}ms,缁撴潫浠诲姟", endDate, endDate.getTime() - startDate.getTime());
+        return;
+
+    }
+
+    @Scheduled(fixedDelay = 300)
+    public void updateScheduleGlassStateTask() {
+        Date startDate = new Date();
+        log.info("1銆佸ぇ鐞嗙墖绗艰皟搴﹀畬鎴愬悗鏇存柊澶х悊鐗囩鏁版嵁浠诲姟寮�濮嬫墽琛屾椂闂达細{}", startDate);
+        //鍥犱负澶х悊鐗囩鍜岃皟搴︿换鍔℃槸涓や釜搴撶殑鏁版嵁锛屾墍浠ヨ鍒嗗紑鏌ユ壘
+        List<Object> list = bigStorageCageDetailsService.listObjs(new LambdaQueryWrapper<BigStorageCageDetails>()
+                .select(BigStorageCageDetails::getGlassId).eq(BigStorageCageDetails::getState, Const.GLASS_STATE_SCHEDULE_ING));
+        if (CollectionUtils.isNotEmpty(list)) {
+            log.info("2銆佽幏鍙栨墍鏈夋鍦ㄥ嚭鐗囩殑鐜荤拑淇℃伅id:{}", list);
+            List<String> glassIds = list.stream().map(String::valueOf).collect(Collectors.toList());
+            List<BigStorageCageOutTask> scheduleSuccessGlass = bigStorageCageOutTaskService.list(new LambdaQueryWrapper<BigStorageCageOutTask>()
+                    .in(BigStorageCageOutTask::getGlassId, glassIds).eq(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_SUCCESS)
+                    .notIn(BigStorageCageOutTask::getEndSlot, Const.TEMPERING_OUT_TARGET_POSITION, Const.ARTIFICIAL_OUT_TARGET_POSITION));
+            if (CollectionUtils.isNotEmpty(scheduleSuccessGlass)) {
+                log.info("3銆佽幏鍙栬皟搴﹀凡瀹屾垚鐨勭幓鐠冧俊鎭痠d:{}", scheduleSuccessGlass);
+                List<UpdateBigStorageCageDTO> storageCageDTOList = scheduleSuccessGlass.stream().map(e -> {
+                    UpdateBigStorageCageDTO storageCageDTO = new UpdateBigStorageCageDTO();
+                    storageCageDTO.setGlassId(e.getGlassId());
+                    storageCageDTO.setTargetSlot(e.getEndSlot());
+                    return storageCageDTO;
+                }).collect(Collectors.toList());
+                bigStorageCageDetailsService.updateBySlot(storageCageDTOList, Const.GLASS_STATE_IN);
+                List<String> scheduleSuccessGlassIds = scheduleSuccessGlass.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList());
+                log.info("4銆佸ぇ鐞嗙墖绗煎嚭鐗囩姸鎬佸凡瀹屾垚宸插畬鎴愮殑鐜荤拑淇℃伅id:{}", scheduleSuccessGlassIds);
+                //鏇存柊鐞嗙墖绗肩幓鐠冨昂瀵�
+                List<Integer> slotList = scheduleSuccessGlass.stream().map(BigStorageCageOutTask::getStartSlot).distinct().collect(Collectors.toList());
+                slotList.addAll(scheduleSuccessGlass.stream().map(BigStorageCageOutTask::getEndSlot).distinct().collect(Collectors.toList()));
+                updateSlotRemainBySlots(slotList);
                 log.info("5銆佸ぇ鐞嗙墖绗艰繘鐗囩洰鏍囨牸瀛愬昂瀵告洿鏂板畬鎴�");
             }
         }
@@ -716,47 +754,28 @@
         return Boolean.TRUE;
     }
 
-    /**
-     * 鏇存柊绗煎瓙鍐呮牸瀛愮殑鍓╀綑灏哄
-     *
-     * @param taskGlassIds 鏈浠诲姟鍑哄幓鐨勭幓鐠僫ds
-     * @param flag         鏄惁杩涘嚭鐗� true 杩涚墖  false 鍑虹墖
-     */
-    public void updateSlotRemain(List<String> taskGlassIds, Boolean flag) {
-        //鎸夌収鐜荤拑id鑾峰彇鐜荤拑淇℃伅鍙婄幓鐠冪殑鏍煎瓙鍙�
-        List<BigStorageCageDetails> glassList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
-                .in(BigStorageCageDetails::getGlassId, taskGlassIds));
-        //鑾峰彇闇�瑕佸嚭鍘�/杩涚锛堝寘鎷緟鍑哄幓鐨勶級鐨勬墍鏈夌幓鐠冩牸瀛愬彿
-        List<Integer> slotList = glassList.stream().map(BigStorageCageDetails::getSlot).distinct().collect(Collectors.toList());
+    public void updateSlotRemainBySlots(List<Integer> slotList) {
         //鑾峰彇鏍煎瓙鍐呮墍鏈夌殑鐜荤拑淇℃伅
         List<BigStorageCageDetails> inSlotGlassList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
                 .in(BigStorageCageDetails::getSlot, slotList).in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL));
-        //鑾峰彇寰呰繘鐗�/鍑哄幓鐨勭幓鐠冧俊鎭�
-        Map<Integer, Double> slotRemainMap = null;
-        if (flag) {
-            slotRemainMap = inSlotGlassList.stream().filter(e -> taskGlassIds.contains(e.getGlassId()))
+        Map<Integer, Double> slotRemainMap = new HashMap<>();
+        //鏄惁瀛樺湪鏈夋牸瀛愰潪绌虹殑鐜荤拑
+        if (CollectionUtils.isNotEmpty(inSlotGlassList)) {
+            //瀛樺湪  灏嗘牸瀛愬唴鐨勭幓鐠冨垎鍒繘琛屾洿鏂�
+            slotRemainMap = inSlotGlassList.stream()
                     .collect(Collectors.groupingBy(BigStorageCageDetails::getSlot, Collectors.summingDouble(item -> item.getWidth() + glassGap)));
-        } else {
-            slotRemainMap = inSlotGlassList.stream().filter(e -> !taskGlassIds.contains(e.getGlassId()))
-                    .collect(Collectors.groupingBy(BigStorageCageDetails::getSlot, Collectors.summingDouble(item -> item.getWidth() + glassGap)));
-        }
-        //鏍煎瓙鍐呮湁鐜荤拑鐨勶紝璁$畻涓猴細 鏍煎瓙鐨勫搴� - 锛堢粰瀛愬唴鐜荤拑鐨勫昂瀵�+闂磋窛锛�
-        if (CollectionUtils.isNotEmpty(slotRemainMap)) {
             slotRemainMap.forEach((e, v) -> {
                 bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, slotWidth - v)
                         .eq(BigStorageCage::getSlot, e));
             });
         }
-        //鍙洿鏂拌繘绗煎畬鎴愮殑鐘舵�侊紝濡傛灉杩涚瀹屾垚锛屾牸瀛愬唴蹇呭畾鏈夌幓鐠冿紝涓嶅瓨鍦ㄥ嚭鐗囧悗鏍煎瓙鍐呮病鏈夌幓鐠冪殑鎯呭喌锛屾墍鏈夋牸瀛愬昂瀵搁噸缃紝鍙兘瀛樺湪浜庡嚭鐗囦换鍔�
-        if (!flag) {
-            Set<Integer> remainSlotList = slotRemainMap.keySet();
-            slotList.removeAll(remainSlotList);
-            if (CollectionUtils.isNotEmpty(slotList)) {
-                bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, slotWidth)
-                        .in(BigStorageCage::getSlot, slotList));
-            }
+        //杩囨护涓嶅瓨鍦ㄧ幓鐠冪殑鏍煎瓙 灏嗗搴﹂噸缃负鍘熷瀹藉害5000
+        Set<Integer> remainSlotList = slotRemainMap.keySet();
+        slotList.removeAll(remainSlotList);
+        if (CollectionUtils.isNotEmpty(slotList)) {
+            bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, slotWidth)
+                    .in(BigStorageCage::getSlot, slotList));
         }
-
     }
 
     public Boolean computeIsRun(int line, String glassId) {

--
Gitblit v1.8.0