From b610921461e3afa6f1f1271428136dead3372afe Mon Sep 17 00:00:00 2001
From: zhoushihao <zsh19950802@163.com>
Date: 星期一, 29 七月 2024 13:16:32 +0800
Subject: [PATCH] 大理片笼:出片规则调整,新增出片开关接口,用与控制大理片笼是否出钢化的玻璃 出片任务一次性生成全部 调度任务优化

---
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java |  159 ++++++++++++++++++++++++++++++----------------------
 1 files changed, 91 insertions(+), 68 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 34c6d1d..126fbbd 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
@@ -21,6 +21,7 @@
 import com.mes.bigstoragetask.service.BigStorageCageOutTaskService;
 import com.mes.common.S7object;
 import com.mes.common.config.Const;
+import com.mes.common.utils.RedisUtil;
 import com.mes.damage.entity.Damage;
 import com.mes.damage.service.DamageService;
 import com.mes.device.PlcParameterObject;
@@ -65,6 +66,9 @@
     private TemperingGlassInfoService temperingGlassInfoService;
     @Resource
     private DamageService damageService;
+
+    @Resource
+    private RedisUtil redisUtil;
 
     private static final String REQUEST_WORD = "1";
 
@@ -179,11 +183,6 @@
         String d01Id = plcParameterObject.getPlcParameter("D01ID").getValue();
         String d04Id = plcParameterObject.getPlcParameter("D04ID").getValue();
         log.info("1銆佽幏鍙杁01Id鎵弿ID涓猴細{};鑾峰彇d04Id鎵弿ID涓猴細{};", d01Id, d04Id);
-        //涓ゆ潯绾块兘鏈夎繘鍗ц浆绔嬩换鍔★紝鐩存帴缁撴潫
-//        if (StringUtils.isNotBlank(d01Id) && StringUtils.isNotBlank(d04Id)) {
-//            log.info("涓ゆ潯绾块兘瀛樺湪杩涚墖浠诲姟锛岀粨鏉熶换鍔�");
-//            return;
-//        }
         //鑾峰彇涓ゆ潯绾垮崸杞珛鏄惁鏈夌幓鐠冿紝涓斾换鍔$姸鎬佷负1/2
         List<Integer> lineList = bigStorageCageFeedTaskService.querySitToUpGlass();
         if (CollectionUtils.isEmpty(lineList)) {
@@ -250,63 +249,68 @@
         Date startDate = new Date();
         log.info("澶х悊鐗囩绌鸿溅杩涚墖浠诲姟寮�濮嬫墽琛屾椂闂达細{}", startDate);
         PlcParameterObject plcMesObject = S7object.getinstance().PlcMesObject;
-        String e02State = plcMesObject.getPlcParameter("E02State").getAddress();
+        String e02State = plcMesObject.getPlcParameter("E02State").getValue();
         if (REQUEST_WORD.equals(e02State)) {
             log.info("鍑虹墖蹇欑锛岀粨鏉熷嚭鐗囦换鍔�");
             return;
         }
         String mesToPLCAddress = plcMesObject.getPlcParameter("MESToPLC").getAddress();
-        List<BigStorageCageOutTask> outingList = bigStorageCageOutTaskService.list(new LambdaQueryWrapper<BigStorageCageOutTask>().eq(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_NEW));
-        Assert.isTrue(CollectionUtils.isEmpty(outingList), "鏈夋鍦ㄦ墽琛屽嚭鐗囩殑浠诲姟锛岀粨鏉熷綋鍓嶅嚭鐗囩嚎绋�");
-
-        //鏄惁鏈夋鍦ㄩ挗鍖栫殑鐜荤拑
-        List<TemperingGlassInfo> temperingGlassInfoList = temperingGlassInfoService.selectJoinList(TemperingGlassInfo.class, new MPJLambdaWrapper<TemperingGlassInfo>()
-                .selectAll(TemperingGlassInfo.class)
-                .leftJoin(BigStorageCageOutTask.class, BigStorageCageOutTask::getGlassId, TemperingGlassInfo::getGlassId)
-                .eq(TemperingGlassInfo::getState, Const.TEMPERING_NEW)
-                .isNull(BigStorageCageOutTask::getGlassId)
-                .orderBy(Boolean.TRUE, sequenceOrder, TemperingGlassInfo::getTemperingFeedSequence));
-        if (CollectionUtils.isNotEmpty(temperingGlassInfoList)) {
-            log.info("鏈夋鍦ㄥ嚭鐗囩殑閽㈠寲浠诲姟");
-            computeOutGlassInfo(temperingGlassInfoList, Boolean.TRUE, mesToPLCAddress);
-            Date endDate = new Date();
-            log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
+        List<BigStorageCageOutTask> outingList = bigStorageCageOutTaskService.list(new LambdaQueryWrapper<BigStorageCageOutTask>()
+                .eq(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_NEW));
+        if (CollectionUtils.isNotEmpty(outingList)) {
+            log.info("鏈夋鍦ㄦ墽琛屽嚭鐗囩殑浠诲姟锛岀粨鏉熷綋鍓嶅嚭鐗囩嚎绋�");
             return;
         }
-        //鏄惁鏈変汉宸ヤ笅鐗囦换鍔�   鏈夌洿鎺ュ嚭
-        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);
-            Date endDate = new Date();
-            log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
-            return;
-        }
-        //閽㈠寲浼樺厛锛氳幏鍙栫悊鐗囩  鐜荤拑灏忕墖  鐮存崯琛� 鏁伴噺   鍒ゆ柇绗煎唴鐗堝浘鏄惁鍒伴綈
-        List<TemperingLayoutDTO> temperingLayoutDTOList = bigStorageCageDetailsService.temperingIsAll();
-        if (CollectionUtils.isNotEmpty(temperingLayoutDTOList)) {
-            //鐜荤拑鍒伴綈鍖呮嫭宸插嚭鐗囩殑
-            //鍒伴綈锛屽皢鐜荤拑灏忕墖鏁版嵁瀛樺叆閽㈠寲灏忕墖琛紝閫昏緫鐢熸垚鍑虹墖浠诲姟  缁撴潫
-            for (TemperingLayoutDTO item : temperingLayoutDTOList) {
-                List<TemperingGlassInfo> temperingGlassInfos = glassInfoService.selectJoinList(TemperingGlassInfo.class, JoinWrappers.lambda(GlassInfo.class)
-                        .selectAll(GlassInfo.class)
-                        .select("-1 as state")
-                        .selectAs(BigStorageCageDetails::getSlot, TemperingGlassInfo::getSlot)
-                        .innerJoin(BigStorageCageDetails.class, BigStorageCageDetails::getGlassId, GlassInfo::getGlassId)
-                        .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
-                        .eq(GlassInfo::getTemperingLayoutId, item.getTemperingLayoutId())
-                        .eq(GlassInfo::getEngineerId, item.getEngineerId())
-                        .orderBy(Boolean.TRUE, sequenceOrder, GlassInfo::getTemperingFeedSequence));
-                if (CollectionUtils.isNotEmpty(temperingGlassInfos)) {
-                    temperingGlassInfoService.saveBatch(temperingGlassInfos);
-                    computeOutGlassInfo(temperingGlassInfoList, Boolean.TRUE, mesToPLCAddress);
-                    Date endDate = new Date();
-                    log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
-                    return;
+        if (redisUtil.getCacheObject("temperingSwitch")) {
+            //鏄惁鏈夋鍦ㄩ挗鍖栫殑鐜荤拑
+            List<TemperingGlassInfo> temperingGlassInfoList = temperingGlassInfoService.selectJoinList(TemperingGlassInfo.class, new MPJLambdaWrapper<TemperingGlassInfo>()
+                    .selectAll(TemperingGlassInfo.class)
+                    .leftJoin(BigStorageCageOutTask.class, BigStorageCageOutTask::getGlassId, TemperingGlassInfo::getGlassId)
+                    .eq(TemperingGlassInfo::getState, Const.TEMPERING_NEW)
+                    .isNull(BigStorageCageOutTask::getGlassId)
+                    .orderBy(Boolean.TRUE, sequenceOrder, TemperingGlassInfo::getTemperingFeedSequence));
+            if (CollectionUtils.isNotEmpty(temperingGlassInfoList)) {
+                log.info("鏈夋鍦ㄥ嚭鐗囩殑閽㈠寲浠诲姟");
+                computeOutGlassInfo(temperingGlassInfoList, Boolean.TRUE, mesToPLCAddress);
+                Date endDate = new Date();
+                log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
+                return;
+            }
+            //鏄惁鏈変汉宸ヤ笅鐗囦换鍔�   鏈夌洿鎺ュ嚭
+            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);
+                Date endDate = new Date();
+                log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
+                return;
+            }
+            //閽㈠寲浼樺厛锛氳幏鍙栫悊鐗囩  鐜荤拑灏忕墖  鐮存崯琛� 鏁伴噺   鍒ゆ柇绗煎唴鐗堝浘鏄惁鍒伴綈
+            List<TemperingLayoutDTO> temperingLayoutDTOList = bigStorageCageDetailsService.temperingIsAll();
+            if (CollectionUtils.isNotEmpty(temperingLayoutDTOList)) {
+                //鐜荤拑鍒伴綈鍖呮嫭宸插嚭鐗囩殑
+                //鍒伴綈锛屽皢鐜荤拑灏忕墖鏁版嵁瀛樺叆閽㈠寲灏忕墖琛紝閫昏緫鐢熸垚鍑虹墖浠诲姟  缁撴潫
+                for (TemperingLayoutDTO item : temperingLayoutDTOList) {
+                    List<TemperingGlassInfo> temperingGlassInfos = glassInfoService.selectJoinList(TemperingGlassInfo.class, JoinWrappers.lambda(GlassInfo.class)
+                            .selectAll(GlassInfo.class)
+                            .select("-1 as state")
+                            .selectAs(BigStorageCageDetails::getSlot, TemperingGlassInfo::getSlot)
+                            .innerJoin(BigStorageCageDetails.class, BigStorageCageDetails::getGlassId, GlassInfo::getGlassId)
+                            .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
+                            .eq(GlassInfo::getTemperingLayoutId, item.getTemperingLayoutId())
+                            .eq(GlassInfo::getEngineerId, item.getEngineerId())
+                            .orderBy(Boolean.TRUE, sequenceOrder, GlassInfo::getTemperingFeedSequence));
+                    if (CollectionUtils.isNotEmpty(temperingGlassInfos)) {
+                        temperingGlassInfoService.saveBatch(temperingGlassInfos);
+                        computeOutGlassInfo(temperingGlassInfoList, Boolean.TRUE, mesToPLCAddress);
+                        Date endDate = new Date();
+                        log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
+                        return;
+                    }
                 }
             }
         }
-        //鏈埌榻� 鎵ц鍐呴儴璋冨害浠诲姟
+        //鎵ц鍐呴儴璋冨害浠诲姟
         TemperingLayoutDTO temperingOccupySlot = bigStorageCageDetailsService.queryTemperingOccupySlot();
         if (null != temperingOccupySlot) {
             List<SlotSequenceDTO> slotSequenceList = bigStorageCageDetailsService.queryGlassMaxAndMin(temperingOccupySlot.getEngineerId(), temperingOccupySlot.getTemperingLayoutId());
@@ -315,12 +319,25 @@
                 SlotSequenceDTO second = slotSequenceList.get(i + 1);
                 int slotWidth = carWidth - first.getRemainWidth() - glassGap;
                 if (first.getMinSequence() == second.getMaxSequence() + 1
-                        && second.getRemainWidth() > slotWidth) {
+                        && 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));
-                    List<BigStorageCageOutTask> outTasks = list.stream().map(e -> new BigStorageCageOutTask(e.getGlassId(), first.getSlot(), second.getSlot(),
-                            e.getWidth() * 10, e.getHeight() * 10, 0, 0, 1)).collect(Collectors.toList());
-                    bigStorageCageOutTaskService.saveBatch(outTasks);
+                            .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));
+                    }
 
                     //鍚憄lc鍐欏叆纭瀛�
                     int returnData = 0;
@@ -650,27 +667,36 @@
         List<BigStorageCageOutTask> bigStorageCageOutTaskList = new ArrayList<>();
         //鎵撹溅鍓╀綑灏哄
         Integer remainWidth = carWidth;
+        int trainNumber = 1;
+        int serialNumber = 1;
         int maxX = 0;
         for (T e : list) {
-            if (bigStorageCageOutTaskList.size() >= outCarMaxSize || e.getWidth() > remainWidth) {
-                break;
+            int maxLength = Math.max((int) e.getWidth(), (int) e.getHeight());
+            if (bigStorageCageOutTaskList.size() >= outCarMaxSize || maxLength > remainWidth) {
+                remainWidth = carWidth;
+                trainNumber = trainNumber + 1;
+                serialNumber = 1;
+                maxX = 0;
+                continue;
             }
-            remainWidth = remainWidth - (int) e.getWidth() - glassGap;
+            remainWidth = remainWidth - maxLength - 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));
+                            e.getWidth() * 10, e.getHeight() * 10, trainNumber, serialNumber++, 1));
                     maxX = Math.max(maxX, e.getXCoordinate());
                 } else {
-                    break;
+                    remainWidth = carWidth;
+                    trainNumber = trainNumber + 1;
+                    serialNumber = 1;
+                    maxX = 0;
+                    continue;
                 }
-
             } else {
                 bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.ARTIFICIAL_OUT_TARGET_POSITION,
-                        e.getWidth() * 10, e.getHeight(), 0, 0, 1));
+                        e.getWidth() * 10, e.getHeight(), trainNumber, serialNumber++, 1));
             }
-
         }
         Assert.isFalse(CollectionUtils.isEmpty(bigStorageCageOutTaskList), "鏈幏鍙栧嚭鐗囨暟鎹紝缁撴潫鍑虹墖浠诲姟");
         log.info("鑾峰彇鍑虹墖浠诲姟鏁版嵁{}鏉★紝鎵ц淇濆瓨", bigStorageCageOutTaskList.size());
@@ -680,9 +706,6 @@
         bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>()
                 .set(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT_ING)
                 .in(BigStorageCageDetails::getGlassId, glassIds));
-        //鏇存柊绗煎瓙鍐呮牸瀛愮殑鍓╀綑灏哄(绉昏嚦鍑虹墖浠诲姟瀹屾垚鍚�)
-//        updateSlotRemain(list, glassIds);
-
         int returnData = 0;
         int count = 1;
         while (returnData == 0) {

--
Gitblit v1.8.0