From d12ca7c9d0635eec17d1dc03ed085eeac7eb248f Mon Sep 17 00:00:00 2001
From: zhoushihao <zsh19950802@163.com>
Date: 星期六, 10 八月 2024 14:11:21 +0800
Subject: [PATCH] 1、磨边前破损处理:识别仅将数据存入破损表,不做其他处理 2、磨边队列破损:将数据加入破损表,将状态改为破损

---
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java |  301 +++++++++++++++++++++++++++++++++----------------
 1 files changed, 200 insertions(+), 101 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..a480e2c 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
@@ -128,6 +128,8 @@
         if (!REQUEST_WORD.equals(mesD01Value) && REQUEST_WORD.equals(d01ToMES) && (StringUtils.isBlank(d02State) || !REQUEST_WORD.equals(d03State))) {
             if (!d01GlassId.equals(d01Id)) {
                 judgeGlassTypeStatus(d01Id, Const.A09_OUT_TARGET_POSITION, mesD01Address);
+                edgGlassTaskInfoService.update(new LambdaUpdateWrapper<EdgGlassTaskInfo>()
+                        .set(EdgGlassTaskInfo::getStatus, Const.EDG_GLASS_SUCCESS).eq(EdgGlassTaskInfo::getGlassId, d01Id));
                 d01GlassId = d01Id;
             }
         }
@@ -135,6 +137,8 @@
         if (!REQUEST_WORD.equals(mesD04Value) && REQUEST_WORD.equals(d04ToMES) && !REQUEST_WORD.equals(d05State)) {
             if (!d04GlassId.equals(d04Id)) {
                 judgeGlassTypeStatus(d04Id, Const.A10_OUT_TARGET_POSITION, mesD04Address);
+                edgGlassTaskInfoService.update(new LambdaUpdateWrapper<EdgGlassTaskInfo>()
+                        .set(EdgGlassTaskInfo::getStatus, Const.EDG_GLASS_SUCCESS).eq(EdgGlassTaskInfo::getGlassId, d04Id));
                 d04GlassId = d04Id;
             }
         }
@@ -244,7 +248,7 @@
         log.info("澶х悊鐗囩绌鸿溅杩涚墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
     }
 
-    @Scheduled(fixedDelay = 5000)
+    @Scheduled(fixedDelay = 10000)
     public void plcToHomeEdgOutTask() {
         Date startDate = new Date();
         log.info("澶х悊鐗囩绌鸿溅杩涚墖浠诲姟寮�濮嬫墽琛屾椂闂达細{}", startDate);
@@ -271,7 +275,7 @@
                     .orderBy(Boolean.TRUE, sequenceOrder, TemperingGlassInfo::getTemperingFeedSequence));
             if (CollectionUtils.isNotEmpty(temperingGlassInfoList)) {
                 log.info("鏈夋鍦ㄥ嚭鐗囩殑閽㈠寲浠诲姟");
-                computeOutGlassInfo(temperingGlassInfoList, Boolean.TRUE, mesToPLCAddress);
+                computeOutMoreGlassInfo(temperingGlassInfoList, Boolean.TRUE, mesToPLCAddress);
                 Date endDate = new Date();
                 log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
                 return;
@@ -280,7 +284,7 @@
             List<BigStorageCageDetails> artificialList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
                     .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_ARTIFICIAL).orderByDesc(BigStorageCageDetails::getWidth));
             if (CollectionUtils.isNotEmpty(artificialList)) {
-                computeOutGlassInfo(artificialList, Boolean.FALSE, mesToPLCAddress);
+                computeOutMoreGlassInfo(artificialList, Boolean.FALSE, mesToPLCAddress);
                 Date endDate = new Date();
                 log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
                 return;
@@ -302,7 +306,7 @@
                             .orderBy(Boolean.TRUE, sequenceOrder, GlassInfo::getTemperingFeedSequence));
                     if (CollectionUtils.isNotEmpty(temperingGlassInfos)) {
                         temperingGlassInfoService.saveBatch(temperingGlassInfos);
-                        computeOutGlassInfo(temperingGlassInfoList, Boolean.TRUE, mesToPLCAddress);
+                        computeOutMoreGlassInfo(temperingGlassInfoList, Boolean.TRUE, mesToPLCAddress);
                         Date endDate = new Date();
                         log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
                         return;
@@ -311,48 +315,53 @@
             }
         }
         //鎵ц鍐呴儴璋冨害浠诲姟
-        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)) {
+            loop:
+            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()).in(BigStorageCageDetails::getGlassId, glassList));
+                            //涓ゆ鏇存柊绗煎瓙鐨勫墿浣欏昂瀵革細绗竴娆¢槻姝㈡湁鐜荤拑缁х画杩涜皟搴﹀悗鐨勭瀛愶紝绗簩娆℃洿鏂帮細璁$畻鏍煎瓙鐨勫疄闄呭昂瀵�
+                            // 浠呮洿鏂拌皟搴﹀悗鐨勬牸瀛愪俊鎭細璧峰鏍煎瓙瀹屾垚鍚庢洿鏂帮細闃叉璋冨害鍑虹墖杩囩▼涓湁鏂扮幓鐠冭繘鍏ワ紝
+                            updateSlotRemainBySlots(Arrays.asList(second.getSlot()));
+                            break loop;
                         }
-                        //鏂板璋冨害浠诲姟
-                        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 +380,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 +421,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銆佸ぇ鐞嗙墖绗艰繘鐗囩洰鏍囨牸瀛愬昂瀵告洿鏂板畬鎴�");
             }
         }
@@ -434,48 +480,56 @@
         log.info("澶х悊鐗囩鐮存崯鐜荤拑娓呴櫎浠诲姟寮�濮嬫墽琛屾椂闂达細{}", startDate);
         //鑾峰彇杩涚墖浠诲姟琛ㄤ腑鐘舵�佷负鐮存崯鐨勬暟鎹�
         List<BigStorageCageFeedTask> inDamageTaskInfoList = bigStorageCageFeedTaskService.list(new LambdaQueryWrapper<BigStorageCageFeedTask>()
-                .eq(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_DAMAGE));
+                .in(BigStorageCageFeedTask::getTaskState, Const.GLASS_STATE_DAMAGE_TAKE));
         if (CollectionUtils.isNotEmpty(inDamageTaskInfoList)) {
             log.info("鑾峰彇杩涚墖浠诲姟琛ㄤ腑鐮存崯鐨勭幓鐠冧俊鎭瘂}", inDamageTaskInfoList);
-            bigStorageCageFeedTaskService.remove(new LambdaQueryWrapper<BigStorageCageFeedTask>().eq(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_DAMAGE));
+            bigStorageCageFeedTaskService.remove(new LambdaQueryWrapper<BigStorageCageFeedTask>().in(BigStorageCageFeedTask::getTaskState, Const.GLASS_STATE_DAMAGE_TAKE));
             //鐞嗙墖绗艰鎯呰〃鏁版嵁鐘舵�佹洿鏂�
-            bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>()
-                    .set(BigStorageCageDetails::getState, Const.GLASS_STATE_DAMAGE).in(BigStorageCageDetails::getGlassId, inDamageTaskInfoList.stream().map(BigStorageCageFeedTask::getGlassId).collect(Collectors.toList())));
+            bigStorageCageDetailsService.remove(new LambdaQueryWrapper<BigStorageCageDetails>()
+                    .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_NEW).in(BigStorageCageDetails::getGlassId, inDamageTaskInfoList.stream().map(BigStorageCageFeedTask::getGlassId).collect(Collectors.toList())));
             //灏嗙牬鎹熶俊鎭柊澧炲叆鐮存崯琛�
+            List<Integer> slotList = new ArrayList<>();
             for (BigStorageCageFeedTask bigStorageCageFeedTask : inDamageTaskInfoList) {
                 Damage damage = new Damage();
                 damage.setGlassId(bigStorageCageFeedTask.getGlassId());
                 damage.setLine(bigStorageCageFeedTask.getLine());
                 damage.setWorkingProcedure("鍐峰姞宸�");
                 damage.setRemark("杩涚鍓嶅崸杞珛");
-                damage.setStatus(2);
+                damage.setStatus(0);
+                damage.setType(bigStorageCageFeedTask.getTaskState());
                 damageService.insertDamage(damage);
+                slotList.add(bigStorageCageFeedTask.getTargetSlot());
             }
+            //鏇存柊鏍煎瓙鍓╀綑瀹藉害
+            updateSlotRemainBySlots(slotList);
             log.info("杩涚墖浠诲姟鎵ц瀹屾垚");
         }
         //鑾峰彇鍑虹墖浠诲姟琛ㄤ腑鐘舵�佷负鐮存崯鐨勬暟鎹�
         List<BigStorageCageOutTask> outDamageTaskInfoList = bigStorageCageOutTaskService.list(new LambdaQueryWrapper<BigStorageCageOutTask>()
-                .eq(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_DAMAGE));
+                .in(BigStorageCageOutTask::getTaskState, Const.GLASS_STATE_DAMAGE_TAKE));
         if (CollectionUtils.isNotEmpty(outDamageTaskInfoList)) {
             log.info("鑾峰彇鍑虹墖浠诲姟琛ㄤ腑鐮存崯鐨勭幓鐠冧俊鎭瘂}", outDamageTaskInfoList);
-            bigStorageCageOutTaskService.remove(new LambdaQueryWrapper<BigStorageCageOutTask>().eq(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_IN_DAMAGE));
+            bigStorageCageOutTaskService.remove(new LambdaQueryWrapper<BigStorageCageOutTask>().eq(BigStorageCageOutTask::getTaskState, Const.GLASS_STATE_DAMAGE_TAKE));
             List<String> glassIdList = outDamageTaskInfoList.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList());
             //绉婚櫎閽㈠寲涓嬬墖琛ㄦ暟鎹�
             temperingGlassInfoService.remove(new LambdaQueryWrapper<TemperingGlassInfo>().in(TemperingGlassInfo::getGlassId, glassIdList));
-            //鐞嗙墖绗艰鎯呰〃鏁版嵁鐘舵�佹洿鏂�
-            bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>()
-                    .set(BigStorageCageDetails::getState, Const.GLASS_STATE_DAMAGE).in(BigStorageCageDetails::getGlassId, glassIdList));
-
+            //鐞嗙墖绗艰鎯呰〃鏁版嵁鐘舵�佸垹闄�
+            bigStorageCageDetailsService.remove(new LambdaQueryWrapper<BigStorageCageDetails>().in(BigStorageCageDetails::getGlassId, glassIdList));
             //灏嗙牬鎹熶俊鎭柊澧炲叆鐮存崯琛�
+            List<Integer> slotList = new ArrayList<>();
             for (BigStorageCageOutTask bigStorageCageOutTask : outDamageTaskInfoList) {
                 Damage damage = new Damage();
                 damage.setGlassId(bigStorageCageOutTask.getGlassId());
                 damage.setLine(bigStorageCageOutTask.getEndSlot());
                 damage.setWorkingProcedure("鍐峰姞宸�");
                 damage.setRemark("鍑虹墖鍚庡崸杞珛");
-                damage.setStatus(2);
+                damage.setStatus(0);
+                damage.setType(bigStorageCageOutTask.getTaskState());
                 damageService.insertDamage(damage);
+                slotList.add(bigStorageCageOutTask.getStartSlot());
             }
+            //鏇存柊鏍煎瓙鍓╀綑瀹藉害
+            updateSlotRemainBySlots(slotList);
             log.info("鍑虹墖浠诲姟鎵ц瀹屾垚");
         }
         Date endDate = new Date();
@@ -623,9 +677,9 @@
             BeanUtils.copyProperties(info, cageDetails);
             //2銆佽幏鍙栫洰鏍囨牸瀛愪俊鎭�
             BigStorageDTO bigStorageDTO = bigStorageCageDetailsService.queryTargetSlotByTempering(info);
-            //3銆佹洿鏂板ぇ鐞嗙墖绗艰〃鍓╀綑瀹藉害锛堟洿鏂板ぇ鐞嗙墖绗煎墿浣欏昂瀵哥Щ鍒拌繘绗煎畬鎴愬悗鎵ц锛�
-//            bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, bigStorageDTO.getWidth() - info.getWidth() - glassGap)
-//                    .eq(BigStorageCage::getSlot, bigStorageDTO.getSlot()));
+            //3銆佷复鏃舵洿鏂版牸瀛愮殑鍓╀綑灏哄锛氶槻姝㈢浉閭荤幓鐠冭繘鍚屼竴鏍煎瓙閫犳垚鍓╀綑灏哄涓嶈冻锛岀幓鐠冭秺鐣岀殑鎯呭喌锛屼换鍔″畬鎴愬悗鍐嶆鏇存柊澶х悊鐗囩琛ㄥ墿浣欏搴︼紙鎸夌収绗煎唴鐜荤拑鏁伴噺鏇存柊澶х悊鐗囩鍓╀綑灏哄锛�
+            bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, bigStorageDTO.getWidth() - Math.max(info.getWidth(), info.getHeight()) - glassGap)
+                    .eq(BigStorageCage::getSlot, bigStorageDTO.getSlot()));
             //4銆佹洿鏂拌繘鐗囦换鍔¤〃锛岀洰鏍囨牸瀛愬強鐘舵�侊紙鐘舵�佹敼涓�2 鐢垫皵鎵埌鑷澶勭悊锛�  閬囧埌闂锛氭棤娉曟壒閲忔洿鏂帮紝鎵归噺鏇存柊鏃犳硶璧版寚瀹氫粠搴�
             e.setTargetSlot(bigStorageDTO.getSlot());
             bigStorageCageFeedTaskService.updateById(e);
@@ -636,6 +690,7 @@
             cageDetails.setDeviceId(bigStorageDTO.getDeviceId());
             cageDetails.setGap(glassGap);
             bigStorageCageDetailsService.save(cageDetails);
+
         }
         sendTaskListToPLC(taskList, line);
         return Boolean.TRUE;
@@ -662,7 +717,69 @@
         }
     }
 
+    /**
+     * 鍑虹墖涓�娆′粎鐢熸垚涓�杞︾幓鐠�
+     *
+     * @param list
+     * @param isTempering
+     * @param mesToPLCAddress
+     * @param <T>
+     * @return
+     */
     private <T extends BigStorageCageBaseInfo> Boolean computeOutGlassInfo(List<T> list, Boolean isTempering, String mesToPLCAddress) {
+        //浠诲姟鏁版嵁  鑾峰彇杞﹀瓙瀛樻斁鐜荤拑鏈�澶ф暟閲�  鐜荤拑闂撮殧
+        List<BigStorageCageOutTask> bigStorageCageOutTaskList = new ArrayList<>();
+        //鎵撹溅鍓╀綑灏哄
+        Integer remainWidth = carWidth;
+        int maxX = 0;
+        for (T e : list) {
+            if (bigStorageCageOutTaskList.size() >= outCarMaxSize || Math.max((int) e.getWidth(), (int) e.getHeight()) > remainWidth) {
+                break;
+            }
+            remainWidth = remainWidth - Math.max((int) e.getWidth(), (int) e.getHeight()) - glassGap;
+            if (isTempering) {
+                int minLength = Math.min((int) e.getWidth(), (int) e.getHeight());
+                if (maxX + minLength <= xMaxSize) {
+                    bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.TEMPERING_OUT_TARGET_POSITION,
+                            e.getWidth() * 10, e.getHeight() * 10, 0, 0, 1));
+                    maxX = Math.max(maxX, e.getXCoordinate());
+                } else {
+                    break;
+                }
+
+            } else {
+                bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.ARTIFICIAL_OUT_TARGET_POSITION,
+                        e.getWidth() * 10, e.getHeight(), 0, 0, 1));
+            }
+        }
+        Assert.isFalse(CollectionUtils.isEmpty(bigStorageCageOutTaskList), "鏈幏鍙栧嚭鐗囨暟鎹紝缁撴潫鍑虹墖浠诲姟");
+        log.info("鑾峰彇鍑虹墖浠诲姟鏁版嵁{}鏉★紝鎵ц淇濆瓨", bigStorageCageOutTaskList.size());
+        bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList);
+        List<String> glassIds = bigStorageCageOutTaskList.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList());
+        log.info("灏嗗嚭鐗囩幓鐠儃}鐜荤拑鐘舵�佹敼涓哄凡鍑虹墖", glassIds);
+        bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>()
+                .set(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT_ING)
+                .in(BigStorageCageDetails::getGlassId, glassIds));
+        int returnData = 0;
+        int count = 1;
+        while (returnData == 0) {
+            S7object.getinstance().plccontrol.writeWord(mesToPLCAddress, 1);
+            returnData = S7object.getinstance().plccontrol.readWord(mesToPLCAddress, 1).get(0);
+            log.info("宸插悜plc绗瑊}娆″彂閫佸嚭鐗囦换鍔$‘璁わ紝鍦板潃涓猴細{},鍐欏叆鐨勫唴瀹逛负{}", count++, mesToPLCAddress, returnData);
+        }
+        return Boolean.TRUE;
+    }
+
+    /**
+     * 鍑虹墖涓�娆$敓鎴愪竴鐐夌幓鐠�
+     *
+     * @param list
+     * @param isTempering
+     * @param mesToPLCAddress
+     * @param <T>
+     * @return
+     */
+    private <T extends BigStorageCageBaseInfo> Boolean computeOutMoreGlassInfo(List<T> list, Boolean isTempering, String mesToPLCAddress) {
         //浠诲姟鏁版嵁  鑾峰彇杞﹀瓙瀛樻斁鐜荤拑鏈�澶ф暟閲�  鐜荤拑闂撮殧
         List<BigStorageCageOutTask> bigStorageCageOutTaskList = new ArrayList<>();
         //鎵撹溅鍓╀綑灏哄
@@ -672,12 +789,11 @@
         int maxX = 0;
         for (T e : list) {
             int maxLength = Math.max((int) e.getWidth(), (int) e.getHeight());
-            if (bigStorageCageOutTaskList.size() >= outCarMaxSize || maxLength > remainWidth) {
+            if (serialNumber > outCarMaxSize || maxLength > remainWidth) {
                 remainWidth = carWidth;
                 trainNumber = trainNumber + 1;
                 serialNumber = 1;
                 maxX = 0;
-                continue;
             }
             remainWidth = remainWidth - maxLength - glassGap;
             if (isTempering) {
@@ -687,11 +803,12 @@
                             e.getWidth() * 10, e.getHeight() * 10, trainNumber, serialNumber++, 1));
                     maxX = Math.max(maxX, e.getXCoordinate());
                 } else {
-                    remainWidth = carWidth;
+                    remainWidth = carWidth - maxLength - glassGap;
                     trainNumber = trainNumber + 1;
                     serialNumber = 1;
-                    maxX = 0;
-                    continue;
+                    maxX = e.getXCoordinate();
+                    bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.TEMPERING_OUT_TARGET_POSITION,
+                            e.getWidth() * 10, e.getHeight(), trainNumber, serialNumber++, 1));
                 }
             } else {
                 bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.ARTIFICIAL_OUT_TARGET_POSITION,
@@ -716,47 +833,29 @@
         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()))
-                    .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)) {
+        Map<Integer, Double> slotRemainMap = new HashMap<>();
+        //鏄惁瀛樺湪鏈夋牸瀛愰潪绌虹殑鐜荤拑
+        if (CollectionUtils.isNotEmpty(inSlotGlassList)) {
+            //瀛樺湪  灏嗘牸瀛愬唴鐨勭幓鐠冨垎鍒繘琛屾洿鏂�
+            slotRemainMap = inSlotGlassList.stream()
+                    .collect(Collectors.groupingBy(BigStorageCageDetails::getSlot, Collectors.summingDouble(item -> Math.max(item.getWidth(), item.getHeight()) + glassGap)));
             slotRemainMap.forEach((e, v) -> {
-                bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, slotWidth - v)
+                double remainWidth = slotWidth - v >= 0 ? slotWidth - v : 0;
+                bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, remainWidth)
                         .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