From 47a468a30e24567783c1319cbd7874ef1226ddd5 Mon Sep 17 00:00:00 2001
From: zhoushihao <zsh19950802@163.com>
Date: 星期四, 09 五月 2024 19:19:53 +0800
Subject: [PATCH] 卧式理片笼线程改造:新增当前笼子的格子位置,优先进最近的格子

---
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java           |    2 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/JsonFile/PlcCacheGlass.json                                   |    7 ++
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java                                    |   78 +++++++++++++++----------
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageServiceImpl.java |   14 ++++
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java                                               |   22 ++++++
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCageDetails.java           |    2 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java          |    7 ++
 7 files changed, 96 insertions(+), 36 deletions(-)

diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java
index bc344ce..51a945b 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java
@@ -11,8 +11,26 @@
     //榛樿瑙掕壊
     public static final Long DEFULT_ROLE = 1L;
 
-    //A09鍑虹墖鐩爣浣嶇疆
+    /**
+     * 纾ㄨ竟娓呮礂鍓�
+     */
+    /**
+     * A09鍑虹墖鐩爣浣嶇疆2001
+     * A10鍑虹墖鐩爣浣嶇疆2002
+     */
     public static final Integer A09_OUT_TARGET_POSITION = 2001;
-    //A09鍑虹墖鐩爣浣嶇疆
     public static final Integer A10_OUT_TARGET_POSITION = 2002;
+
+    /**
+     * 鍗у紡鐞嗙墖绗艰鎯呰〃鐜荤拑鐘舵��
+     * 璇嗗埆鍚庢垚鍔熺姸鎬�100
+     * 鍑虹墖浠诲姟101
+     * 鎷胯蛋200
+     * 鐮存崯201
+     */
+    public static final Integer GLASS_STATE_IN = 100;
+    public static final Integer GLASS_STATE_OUT = 101;
+    public static final Integer GLASS_STATE_TAKE = 200;
+    public static final Integer A10_OUT_TARGET_DAMAGE = 201;
+
 }
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCageDetails.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCageDetails.java
index 11c4269..29f21c7 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCageDetails.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCageDetails.java
@@ -98,7 +98,7 @@
     private Integer patternSequence;
 
     /**
-     * 鐘舵��
+     * 鐘舵��  锛堣瘑鍒悗鎴愬姛鐘舵��100锛屽嚭鐗囦换鍔�101锛� 鎷胯蛋200锛岀牬鎹�201锛�
      */
     private Integer state;
 
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java
index 92e8d63..a9d0721 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java
@@ -1,6 +1,5 @@
 package com.mes.edgstoragecage.service;
 
-import com.baomidou.mybatisplus.extension.service.IService;
 import com.github.yulichang.base.MPJBaseService;
 import com.mes.edgstoragecage.entity.EdgStorageCage;
 import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
@@ -19,6 +18,12 @@
 public interface EdgStorageCageService extends MPJBaseService<EdgStorageCage> {
 
     /**
+     * 鏌ヨ绗煎唴绂绘寚瀹氭牸瀛愭渶杩戠┖鏍�
+     * @return
+     */
+    EdgStorageCage selectNearestEmpty(int currentSlot);
+
+    /**
      * 鏌ヨ绗煎唴绌烘牸
      * @return
      */
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageServiceImpl.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageServiceImpl.java
index 242ffed..7c71c38 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageServiceImpl.java
@@ -3,6 +3,7 @@
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.toolkit.JoinWrappers;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.mes.common.config.Const;
 import com.mes.edgstoragecage.entity.EdgStorageCage;
 import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
 import com.mes.edgstoragecage.mapper.EdgStorageCageDetailsMapper;
@@ -34,6 +35,18 @@
     @Autowired
     UpPattenUsageMapper upPattenUsageMapper;
 
+    @Override
+    public EdgStorageCage selectNearestEmpty(int currentSlot) {
+        return this.selectJoinOne(EdgStorageCage.class,new MPJLambdaWrapper<EdgStorageCage>()
+                .selectAll(EdgStorageCage.class)
+                .leftJoin(EdgStorageCageDetails.class,on->on
+                        .eq(EdgStorageCageDetails::getSlot,EdgStorageCage::getSlot)
+                        .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN))
+                .isNull(EdgStorageCageDetails::getSlot)
+                .last("order by abs(slot - 4)  asc limit 1")
+        );
+    }
+
     /**
      * 鏌ヨ绗煎唴绌烘牸
      * @return
@@ -46,6 +59,7 @@
                         .eq(EdgStorageCageDetails::getSlot,EdgStorageCage::getSlot)
                         .eq(EdgStorageCageDetails::getState,"100"))
                 .isNull(EdgStorageCageDetails::getSlot)
+                .last("order by abs(slot - 4)  asc")
         );
     }
 
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
index d559304..19e77e5 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
@@ -45,47 +45,59 @@
     @Value("${mes.threshold}")
     private int threshold;
 
-    @Scheduled(fixedDelay = 10000)
+    @Scheduled(fixedDelay = 1000)
     public void plcHomeEdgTask() {
         PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
-
         String taskRequestTypeValue = plcParameterObject.getPlcParameter("A06_request_word").getValue();
         String glassIdeValue = plcParameterObject.getPlcParameter("A05_scanning_ID").getValue();
         String confirmationWrodValue = plcParameterObject.getPlcParameter("MES_confirmation_word").getValue();
 //        1涓篈09绌洪棽锛�2涓篈10绌洪棽锛�3涓篈09A10閮界┖闂�,0涓篈09A10閮芥湁鐜荤拑
         String outGlassstate = plcParameterObject.getPlcParameter("A09_glass_status").getValue();
-
         String confirmationWrodAddress = plcParameterObject.getPlcParameter("MES_confirmation_word").getAddress();
+        String currentSlot = plcParameterObject.getPlcParameter("Current_slot").getValue();
+        log.info("1銆佽幏鍙栧埌鐨勮姹傚瓧涓猴細{}锛岃幏鍙栧埌鐨勬壂鎻廔D涓猴細{}锛岃幏鍙栧埌鐨勭‘璁ゅ瓧涓猴細{}锛岃幏鍙栧埌鐨勫嚭鐗囩姸鎬佷负锛歿},褰撳墠鏍煎瓙鍙蜂负锛歿}",
+                taskRequestTypeValue, glassIdeValue, confirmationWrodValue, outGlassstate, currentSlot);
 
         if ("0".equals(taskRequestTypeValue)) {
-            log.info("1銆佽幏鍙栧埌鐨勮姹傚瓧涓�0锛屽皢纭瀛楁敼涓�0");
+            if ("0".equals(confirmationWrodValue)) {
+                log.info("2銆佽幏鍙栧埌鐨勮姹傚瓧涓�0锛屼笖纭瀛椾负0锛屼笉鎵ц浠诲姟");
+                return;
+            }
+            log.info("2銆佽幏鍙栧埌鐨勮姹傚瓧涓�0锛屽皢纭瀛楁敼涓�0");
             S7object.getinstance().plccontrol.WriteWord(confirmationWrodAddress, (short) 0);
             return;
         }
         if (!"0".equals(confirmationWrodValue)) {
-            log.info("1銆佽幏鍙栧埌鐨勮姹傚瓧涓嶄负0锛屽皢纭瀛楁敼涓�0");
+            log.info("2銆佽幏鍙栧埌鐨勮姹傚瓧涓嶄负0锛屽皢纭瀛楁敼涓�0");
             S7object.getinstance().plccontrol.WriteWord(confirmationWrodAddress, (short) 0);
             return;
         }
+
         if ("1".equals(taskRequestTypeValue)) {
-            log.info("2銆佽繘鐗囪姹傦紝涓旂‘璁ゅ瓧涓�0锛屾墽琛岃繘鐗囦换鍔�");
-            inTo(glassIdeValue, confirmationWrodAddress);
+            log.info("3銆佽繘鐗囪姹傦紝涓旂‘璁ゅ瓧涓�0锛屾墽琛岃繘鐗囦换鍔�");
+            inTo(glassIdeValue, confirmationWrodAddress, currentSlot);
         } else if ("2".equals(taskRequestTypeValue)) {
             //09绌洪棽 锛�1      10绌洪棽 锛�2        閮界┖闂诧細3    鍏朵粬0
-            log.info("2銆佸嚭鐗囪姹傦紝涓旂‘璁ゅ瓧涓�0锛屾墽琛岃繘鐗囦换鍔�");
-            outTo(Integer.parseInt(outGlassstate), confirmationWrodAddress);
+            log.info("3銆佸嚭鐗囪姹傦紝涓旂‘璁ゅ瓧涓�0锛屾墽琛岃繘鐗囦换鍔�");
+            outTo(Integer.parseInt(outGlassstate), confirmationWrodAddress, currentSlot);
         } else if ("3".equals(taskRequestTypeValue)) {
-            log.info("2銆佽繘鐗囧拰鍑虹墖閮界┖闂诧紝鎵ц鍑虹墖浠诲姟");
+            log.info("3銆佽繘鐗囧拰鍑虹墖閮界┖闂诧紝鎵ц鍑虹墖浠诲姟");
             if ("0".equals(outGlassstate)) {
-                inTo(glassIdeValue, confirmationWrodAddress);
+                inTo(glassIdeValue, confirmationWrodAddress, currentSlot);
             } else {
-                outTo(Integer.parseInt(outGlassstate), confirmationWrodAddress);
+                outTo(Integer.parseInt(outGlassstate), confirmationWrodAddress, currentSlot);
             }
         }
     }
 
-    private void inTo(String glassId, String confirmationWrodAddress) {
-        log.info("1銆佹寜鐓х幓鐠僫d:{}鑾峰彇鐜荤拑灏忕墖淇℃伅", glassId);
+    /**
+     * 杩涚墖浠诲姟
+     * @param glassId
+     * @param confirmationWrodAddress
+     * @param currentSlot
+     */
+    private void inTo(String glassId, String confirmationWrodAddress, String currentSlot) {
+        log.info("1銆佹寜鐓х幓鐠僫d:{}鑾峰彇鐜荤拑灏忕墖淇℃伅,褰撳墠鏍煎瓙涓�:{}", glassId, currentSlot);
         GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId));
         if (glassInfo == null) {
             log.info("2銆佹鐜荤拑缂栧彿涓嶅瓨鍦�");
@@ -93,39 +105,43 @@
         }
         log.info("2銆佽幏鍙栧埌鐨勭幓鐠冧俊鎭负{}", glassInfo);
         //娣诲姞杩涚墖浠诲姟  鏌ユ壘绌烘牸
-        List<EdgStorageCage> list = edgStorageCageService.selectCacheEmpty();
-        log.info("3銆佹煡璇㈠崸寮忕悊鐗囩閲岄潰鐨勭┖鏍�:{}", list);
-        if (CollectionUtil.isEmpty(list)) {
-            log.info("4銆佷笉瀛樺湪绌烘牸");
-            return;
-        }
-        log.info("4銆佸皢鐜荤拑淇℃伅鎻掑叆鍗у紡鐞嗙墖绗�:{}", glassInfo);
+        EdgStorageCage nearestEmpty = edgStorageCageService.selectNearestEmpty(Integer.parseInt(currentSlot));
+        Assert.isTrue(nearestEmpty == null, "鏍煎瓙宸叉弧");
+        log.info("3銆佹煡璇㈠崸寮忕悊鐗囩閲岄潰鐨勭┖鏍�:{}", nearestEmpty);
+
+        log.info("4銆佸皢鐜荤拑淇℃伅鎻掑叆鍗у紡鐞嗙墖绗�,褰撳墠鐜荤拑淇℃伅:{}", glassInfo);
         EdgStorageCageDetails details = new EdgStorageCageDetails();
         BeanUtils.copyProperties(glassInfo, details);
-        details.setState(100);
-        Integer slot = list.get(0).getSlot();
-        Integer deviceId = list.get(0).getDeviceId();
-        log.info("5銆佽幏鍙栫┖闂叉牸瀛愪负:{},璁惧鍙蜂负{}", slot, deviceId);
-        details.setSlot(slot);
-        details.setDeviceId(deviceId);
+        details.setState(Const.GLASS_STATE_IN);
+        details.setSlot(nearestEmpty.getSlot());
+        details.setDeviceId(nearestEmpty.getDeviceId());
         edgStorageCageDetailsService.save(details);
+        log.info("5銆佺幓鐠冧俊鎭凡瀛樺叆鐞嗙墖绗艰鎯呰〃锛岀幓鐠冧俊鎭负{}", details);
 
-        log.info("6銆佺敓鎴愯繘鐗囦换鍔′俊鎭瓨鍏ヤ换鍔¤〃");
+        //娣诲姞杩涚墖浠诲姟
         TaskCache taskCache = new TaskCache();
         taskCache.setGlassId(glassId);
         taskCache.setTaskStatus(0);
         taskCache.setStartCell(0);
-        taskCache.setEndCell(slot);
+        taskCache.setEndCell(nearestEmpty.getSlot());
         taskCache.setTaskType(1);
         taskCache.setCreateTime(new Date());
         taskCacheService.insertTaskCache(taskCache);
-        log.info("6銆佸彂閫佺‘璁ゅ瓧");
+        log.info("6銆佺敓鎴愯繘鐗囦换鍔′俊鎭瓨鍏ヤ换鍔¤〃{}", taskCache);
+
         S7object.getinstance().plccontrol.WriteWord(confirmationWrodAddress, (short) 1);
+        log.info("7銆佸彂閫佺‘璁ゅ瓧瀹屾垚");
 
 
     }
 
-    private void outTo(int line, String confirmationWrodAddress) {
+    /**
+     * 鍑虹墖浠诲姟
+     * @param line
+     * @param confirmationWrodAddress
+     * @param currentSlot
+     */
+    private void outTo(int line, String confirmationWrodAddress, String currentSlot) {
         Assert.isTrue(line != 0, "A09銆丄10閮芥湁鐜荤拑锛屾棤娉曞嚭鐗�");
         log.info("1銆佸嚭鐗囦换鍔″嚭銆恵}銆戝彿绾�,澶囨敞(09绌洪棽锛�1;10绌洪棽锛�2;閮界┖闂诧細3)", line);
         int endcell = 0;
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java
index 07a04f8..486eb8a 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java
@@ -89,7 +89,7 @@
      * @return
      */
     @Override
-    public List<TaskCache> selectLastOutCacheInfos(String line){
+    public List<TaskCache> selectLastOutCacheInfos(int line){
         return baseMapper.selectList(new MPJLambdaWrapper<TaskCache>().selectAll(TaskCache.class).eq(TaskCache::getEndCell,line).eq(TaskCache::getTaskStatus,1).orderByDesc(TaskCache::getCreateTime));
 //        return baseMapper.selectList(new QueryWrapper<TaskCache>().eq("end_cell",line).eq("task_status",1).orderByDesc("ID"));
     }
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/JsonFile/PlcCacheGlass.json b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/JsonFile/PlcCacheGlass.json
index e32b9d6..d3ebde8 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/JsonFile/PlcCacheGlass.json
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/JsonFile/PlcCacheGlass.json
@@ -18,6 +18,13 @@
           "unit":""
        },
        {
+          "codeId": "Current_slot",
+          "addressIndex":"36",
+          "addressLenght":"2",
+          "ratio":"1",
+          "unit":""
+       },
+        {
           "codeId": "MES_confirmation_word",
           "addressIndex":"38",
           "addressLenght":"2",

--
Gitblit v1.8.0