From bf8895d798f6308717f83b2bdb413ff5f304b3e4 Mon Sep 17 00:00:00 2001
From: lsh <lsh@163.com>
Date: 星期二, 09 九月 2025 16:11:22 +0800
Subject: [PATCH] *

---
 src/main/java/com/zy/asrs/entity/param/CombParam.java             |  103 +++++++++++++++++
 src/main/java/com/zy/core/model/DevpSlave.java                    |    5 
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java       |  119 +++++++++++++++++++
 src/main/resources/mapper/BasArmMastMapper.xml                    |    9 +
 src/main/java/com/zy/asrs/service/BasArmMastService.java          |    2 
 src/main/java/com/zy/asrs/mapper/BasArmMastMapper.java            |    3 
 src/main/java/com/zy/core/MainProcess.java                        |    4 
 src/main/resources/application.yml                                |   65 ++++++++++
 src/main/java/com/zy/asrs/service/impl/BasArmMastServiceImpl.java |    4 
 src/main/java/com/zy/asrs/utils/PostMesDataUtils.java             |    8 
 10 files changed, 316 insertions(+), 6 deletions(-)

diff --git a/src/main/java/com/zy/asrs/entity/param/CombParam.java b/src/main/java/com/zy/asrs/entity/param/CombParam.java
new file mode 100644
index 0000000..0580fb9
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/param/CombParam.java
@@ -0,0 +1,103 @@
+package com.zy.asrs.entity.param;
+
+import com.core.common.Cools;
+import com.zy.asrs.entity.BasArmMast;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by vincent on 2020/6/28
+ */
+@Data
+public class CombParam {
+
+    // 鍗曟嵁缂栧彿
+    private String orderNo;
+
+    // 鎵樼洏鏉$爜
+    private String barcode;
+
+    // 搴撲綅缂栧彿
+    private String locNo;
+
+    private List<CombMat> combMats;
+
+    @Data
+    public static class CombMat {
+
+        private String orderNo;
+
+        // 鐗╂枡缂栧彿
+        private String matnr = "";
+
+        // 搴忓垪鐮�
+        private String batch = "";
+        private String brand = "";
+        private String standby1 = "";
+        private String standby2 = "";
+        private String standby3 = "";
+
+        private String boxType1 = "1";
+        private String boxType2 = "1";
+        private String boxType3 = "1";
+
+        // 鐗╂枡鏁伴噺
+        private Double anfme;
+
+        // 鍟嗗搧鍚嶇О
+        private String maktx = "";
+
+        // 瑙勬牸
+        private String specs = "";
+
+        // sku
+        private String sku = "";
+        //澶囨敞
+        private String memo = "";
+
+        public CombMat() {
+
+        }
+        public CombMat(BasArmMast basArmMast) {
+            this.orderNo = basArmMast.getOrderNo();
+            this.matnr = basArmMast.getMatnr();
+//            this.batch = basArmMast.getCreateTime().toString();
+            this.anfme = basArmMast.getCtns().doubleValue();
+            this.specs = basArmMast.getOrderNo();
+            this.sku = basArmMast.getSku();
+        }
+    }
+
+    public CombParam() {
+
+    }
+    public CombParam(List<BasArmMast> basArmMastList) {
+        this.orderNo = basArmMastList.get(0).getOrderNo();
+        this.combMats = new ArrayList<>();
+        List<BasArmMast> basArmMasts = new ArrayList<>();
+        for (BasArmMast basArmMast : basArmMastList) {
+            if (basArmMasts.isEmpty()){
+                basArmMasts.add(basArmMast);
+            } else {
+                boolean sign = false;
+                for (BasArmMast basArmMastold : basArmMasts){
+                    if (basArmMastold.getMatnr().equals(basArmMast.getMatnr())
+                            && Cools.eq(basArmMastold.getOrderNo(), basArmMast.getOrderNo())) {//闇�瑕佸畬鍠勩�佸拰寰�
+                        basArmMastold.setCtns(basArmMastold.getCtns()+1);
+                        sign = true;
+                        break;
+                    }
+                }
+                if (!sign){
+                    basArmMasts.add(basArmMast);
+                }
+            }
+        }
+        for (BasArmMast basArmMast : basArmMasts) {
+            CombMat combMat = new CombMat(basArmMast);
+            combMats.add(combMat);
+        }
+    }
+}
diff --git a/src/main/java/com/zy/asrs/mapper/BasArmMastMapper.java b/src/main/java/com/zy/asrs/mapper/BasArmMastMapper.java
index 264ce36..9ed6db1 100644
--- a/src/main/java/com/zy/asrs/mapper/BasArmMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/BasArmMastMapper.java
@@ -3,10 +3,13 @@
 import com.zy.asrs.entity.BasArmMast;
 import com.baomidou.mybatisplus.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
 @Mapper
 @Repository
 public interface BasArmMastMapper extends BaseMapper<BasArmMast> {
 
+    boolean updateArmMastStatus(@Param("armNo")int armNo, @Param("sortingLine")int sortingLine, @Param("status")int status, @Param("endStatus")int endStatus);
+
 }
diff --git a/src/main/java/com/zy/asrs/service/BasArmMastService.java b/src/main/java/com/zy/asrs/service/BasArmMastService.java
index bbf8883..2519ca2 100644
--- a/src/main/java/com/zy/asrs/service/BasArmMastService.java
+++ b/src/main/java/com/zy/asrs/service/BasArmMastService.java
@@ -5,4 +5,6 @@
 
 public interface BasArmMastService extends IService<BasArmMast> {
 
+    boolean updateArmMastStatus(int armNo,int sortingLine,int status,int endStatus);
+
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/BasArmMastServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasArmMastServiceImpl.java
index 7ac81d6..fc7dcc6 100644
--- a/src/main/java/com/zy/asrs/service/impl/BasArmMastServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/BasArmMastServiceImpl.java
@@ -9,4 +9,8 @@
 @Service("basArmMastService")
 public class BasArmMastServiceImpl extends ServiceImpl<BasArmMastMapper, BasArmMast> implements BasArmMastService {
 
+    @Override
+    public boolean updateArmMastStatus(int armNo,int sortingLine,int status,int endStatus){
+        return this.baseMapper.updateArmMastStatus(armNo,sortingLine,status,endStatus);
+    }
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index 117747c..f6f1c90 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -9,6 +9,7 @@
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.entity.param.ArmTaskAssignmentParam;
+import com.zy.asrs.entity.param.CombParam;
 import com.zy.asrs.mapper.*;
 import com.zy.asrs.service.*;
 import com.zy.asrs.utils.PostMesDataUtils;
@@ -104,6 +105,9 @@
 
     @Value("${wms.url}")
     private String wmsUrl;
+
+    @Value("${wms.comb}")
+    private String wmsComb;
     @Value("${inventory.number}")
     private Integer inventoryNumber;
 
@@ -4195,6 +4199,111 @@
 
 
     /*
+     * arm浠诲姟瀹屾垚鑷姩缁勬墭
+     * */
+    public synchronized void armMissionAccomplished() {
+        try{
+            for (DevpSlave devp : slaveProperties.getDevp()) {
+                // 閬嶅巻鎷f枡鍏ュ簱鍙�
+                for (DevpSlave.Sta armSta : devp.getArmSta()) {
+                    // 鑾峰彇鏉$爜鎵弿浠俊鎭�
+                    BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, armSta.getBarcode());
+                    if (barcodeThread == null) {
+                        continue;
+                    }
+                    String barcode = barcodeThread.getBarcode();
+                    if(!Cools.isEmpty(barcode)) {
+                        if("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
+                            continue;
+                        }
+                    } else {
+                        continue;
+                    }
+
+                    List<BasArm> basArmList = basArmService.selectList(new EntityWrapper<BasArm>()
+                            .eq("arm_no", armSta.getArmNo())
+                            .eq("sta_no", armSta.getStaNo())
+                            .eq("status", 1));
+                    for (BasArm basArm : basArmList) {
+                        if (basArm.getStatus()!=1){
+                            continue;
+                        }
+                        try{
+                            List<BasArmMast> basArmMastList = basArmMastService.selectList(
+                                    new EntityWrapper<BasArmMast>()
+                                            .eq("arm_no", basArm.getArmNo())
+                                            .eq("sorting_line", basArm.getSortingLine())
+                                            .eq("status", 3)
+                            );
+                            if (basArmMastList.isEmpty()){
+                                continue;
+                            }
+                            CombParam combParam = new CombParam(basArmMastList);
+                            combParam.setBarcode(barcode);
+                            //璁剧疆宸ヤ綔绌洪棿灏辩华
+                            ReturnT<String> result = new PostMesDataUtils().postMesData("arm浠诲姟瀹屾垚鑷姩缁勬墭",wmsUrl, wmsComb, combParam);
+                            if (result.getCode()==200){
+                                basArmMastService.updateArmMastStatus(basArm.getArmNo(),basArm.getSortingLine(),3,4);
+                            } else {
+                                log.error("鏈烘鑷傛姄鍙栦换鍔″畬鎴愶細"+JSON.toJSON(basArmMastList)+"===銆嬭嚜鍔ㄧ粍鎵樺け璐ワ紝绛夊緟閲嶈瘯");
+                            }
+                        }  catch (Exception e){
+                            log.error("arm缂栧彿锛�"+basArm.getArmNo()+"====銆嬫満姊拌噦鎶撳彇浠诲姟瀹屾垚"+e.getMessage());
+                        }
+                        break;
+                    }
+                }
+            }
+        } catch (Exception e){
+            log.error("鏈烘鑷傛姄鍙栦换鍔″畬鎴愮粍鎵樺け璐�"+e.getMessage());
+        }
+    }
+    public synchronized void armMissionAccomplishedScanToCheckIn() {
+        try{
+            for (DevpSlave devp : slaveProperties.getDevp()) {
+                // 閬嶅巻鎷f枡鍏ュ簱鍙�
+                for (DevpSlave.Sta armSta : devp.getArmSta()) {
+
+                    List<BasArmMast> basArmMastList = basArmMastService.selectList(
+                            new EntityWrapper<BasArmMast>()
+                                    .eq("arm_no", armSta.getArmNo())
+                                    .eq("sta_no", armSta.getStaNo())
+                                    .eq("status", 4)
+                    );
+
+                    if (basArmMastList.isEmpty()){
+                        continue;
+                    }
+                    // 鑾峰彇绔欑偣淇℃伅
+                    SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+                    StaProtocol staProtocol = devpThread.getStation().get(armSta.getStaNo());
+                    if (staProtocol == null) {
+                        continue;
+                    } else {
+                        staProtocol = staProtocol.clone();
+                    }
+
+                    if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()) {
+                        int workNo = commonService.getWorkNo(6);//寰呭畬鍠�
+                        // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
+                        staProtocol.setWorkNo(workNo);
+                        staProtocol.setStaNo(armSta.getStaNoEnd().shortValue());
+                        devpThread.setPakMk(staProtocol.getSiteId(), false);
+                        boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                        log.error("杈撻�佺嚎涓嬪彂5锛�"+workNo+","+armSta.getStaNoEnd());
+                        if (!result) {
+                            News.error(""+" - 3"+" - 鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId());
+                        }
+                        basArmMastService.updateArmMastStatus(basArmMastList.get(0).getArmNo(),basArmMastList.get(0).getSortingLine(),4,5);
+                    }
+                }
+            }
+        } catch (Exception e){
+            log.error("缁勬墭瀹屾垚椹卞姩鎵樼洏鎵爜鍏ュ簱澶辫触"+e.getMessage());
+        }
+    }
+
+    /*
      * arm浠诲姟涓嬪彂
      * */
     public synchronized void armTaskAssignment() {
@@ -4211,7 +4320,13 @@
                                     .eq("sorting_line", basArm.getSortingLine())
                                     .eq("status", 1)
                     );
-                    if (basArmMastListRuning.isEmpty()){
+                    List<BasArmMast> basArmMastListRuning3 = basArmMastService.selectList(
+                            new EntityWrapper<BasArmMast>()
+                                    .eq("arm_no", basArm.getArmNo())
+                                    .eq("sorting_line", basArm.getSortingLine())
+                                    .eq("status", 3)
+                    );
+                    if (basArmMastListRuning.isEmpty() && basArmMastListRuning3.isEmpty()){
                         List<BasArmMast> basArmMastList = basArmMastService.selectList(
                                 new EntityWrapper<BasArmMast>()
                                         .eq("arm_no", basArm.getArmNo())
@@ -4228,7 +4343,7 @@
                         for (BasArmMast basArmMast:basArmMastList) {
                             ArmTaskAssignmentParam armTaskAssignmentParam = new ArmTaskAssignmentParam(basArmMast.getSortingLine());
                             //璁剧疆宸ヤ綔绌洪棿灏辩华
-                            ReturnT<String> result = new PostMesDataUtils().postMesData("鏈烘鑷傛姄鍙栦换鍔�",ArmConstant.ARM_URL, ArmConstant.ARM_WORKSPACE, armTaskAssignmentParam);
+                            ReturnT<String> result = new PostMesDataUtils().postMesData("鏈烘鑷傛姄鍙栦换鍔′笅鍙戯細閫氱煡宸ヤ綔绌洪棿宸插氨缁�",ArmConstant.ARM_URL, ArmConstant.ARM_WORKSPACE, armTaskAssignmentParam);
                             if (result.getCode()==200){
                                 basArmMast.setStatus(1);
                                 basArmMastService.updateById(basArmMast);
diff --git a/src/main/java/com/zy/asrs/utils/PostMesDataUtils.java b/src/main/java/com/zy/asrs/utils/PostMesDataUtils.java
index 00d53fa..920cfe0 100644
--- a/src/main/java/com/zy/asrs/utils/PostMesDataUtils.java
+++ b/src/main/java/com/zy/asrs/utils/PostMesDataUtils.java
@@ -84,7 +84,7 @@
                     success = true;
                 } else {
                     log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", URL+"/"+mesPath, JSON.toJSONString(combParam), response);
-                    throw new CoolException("涓婃姤"+name);
+                    throw new CoolException(name);
                 }
             } catch (Exception e) {
                 log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", URL+"/"+mesPath, JSON.toJSONString(combParam), response);
@@ -95,7 +95,7 @@
                     // 淇濆瓨鎺ュ彛鏃ュ織
                     ApiLogService apiLogService = SpringUtils.getBean(ApiLogService.class);
                     apiLogService.save(
-                            "涓婃姤"+name,
+                            name,
                             URL +"/"+ mesPath,
                             null,
                             "127.0.0.1",
@@ -135,7 +135,7 @@
                     success = true;
                 } else {
                     log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", URL+"/"+mesPath, JSON.toJSONString(combParam), response);
-                    throw new CoolException("涓婃姤"+name);
+                    throw new CoolException(name);
                 }
             } catch (Exception e) {
                 log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", URL+"/"+mesPath, JSON.toJSONString(combParam), response);
@@ -146,7 +146,7 @@
                     // 淇濆瓨鎺ュ彛鏃ュ織
                     ApiLogService apiLogService = SpringUtils.getBean(ApiLogService.class);
                     apiLogService.save(
-                            "涓婃姤"+name,
+                            name,
                             URL +"/"+ mesPath,
                             null,
                             "127.0.0.1",
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index b77014c..f3aa38d 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -157,6 +157,10 @@
                     continue;
                 }
 
+                //arm浠诲姟瀹屾垚
+                mainService.armMissionAccomplished();
+                mainService.armMissionAccomplishedScanToCheckIn();
+
                 //arm浠诲姟涓嬪彂
                 mainService.armTaskAssignment();
 
diff --git a/src/main/java/com/zy/core/model/DevpSlave.java b/src/main/java/com/zy/core/model/DevpSlave.java
index 3a79437..62e3fe2 100644
--- a/src/main/java/com/zy/core/model/DevpSlave.java
+++ b/src/main/java/com/zy/core/model/DevpSlave.java
@@ -27,11 +27,16 @@
 
     private List<Sta> pickSta = new ArrayList<>();
 
+    private List<Sta> armSta = new ArrayList<>();
+
     @Data
     public static class Sta {
 
         private Integer staNo;
 
+        private Integer armNo;
+        private Integer sortingLine;
+        private Integer staNoEnd;
         private Integer barcode;
         private Integer barcodeMat;
 
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 27da1b8..92f14d1 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -38,6 +38,7 @@
 
 wms:
   url: 127.0.0.1:8080/jshdasrs
+  comb: mobile/combAuto/wcs/auth
 inventory:
   number: 7
 
@@ -294,6 +295,70 @@
     port: 102
     rack: 0
     slot: 0
+    # 鐮佸灈浣�
+    armSta[0]:
+      staNo: 1044
+      armNo: 1
+      sortingLine: 1044
+      staNoEnd: 1044
+      barcode: ${wcs-slave.barcode[0].id}
+      led: ${wcs-slave.led[1].id}
+    # 鐮佸灈浣�
+    armSta[1]:
+      staNo: 1044
+      armNo: 1
+      sortingLine: 1044
+      staNoEnd: 1044
+      barcode: ${wcs-slave.barcode[0].id}
+      led: ${wcs-slave.led[1].id}
+    # 鐮佸灈浣�
+    armSta[2]:
+      staNo: 1044
+      armNo: 2
+      sortingLine: 1044
+      staNoEnd: 1044
+      barcode: ${wcs-slave.barcode[0].id}
+      led: ${wcs-slave.led[1].id}
+    # 鐮佸灈浣�
+    armSta[3]:
+      staNo: 1044
+      armNo: 2
+      sortingLine: 1044
+      staNoEnd: 1044
+      barcode: ${wcs-slave.barcode[0].id}
+      led: ${wcs-slave.led[1].id}
+    # 鐮佸灈浣�
+    armSta[4]:
+      staNo: 1044
+      armNo: 3
+      sortingLine: 1044
+      staNoEnd: 1044
+      barcode: ${wcs-slave.barcode[0].id}
+      led: ${wcs-slave.led[1].id}
+    # 鐮佸灈浣�
+    armSta[5]:
+      staNo: 1044
+      armNo: 3
+      sortingLine: 1044
+      staNoEnd: 1044
+      barcode: ${wcs-slave.barcode[0].id}
+      led: ${wcs-slave.led[1].id}
+    # 鐮佸灈浣�
+    armSta[6]:
+      staNo: 1044
+      armNo: 4
+      sortingLine: 1044
+      staNoEnd: 1044
+      barcode: ${wcs-slave.barcode[0].id}
+      led: ${wcs-slave.led[1].id}
+    # 鐮佸灈浣�
+    armSta[7]:
+      staNo: 1044
+      armNo: 4
+      sortingLine: 1044
+      staNoEnd: 1044
+      barcode: ${wcs-slave.barcode[0].id}
+      led: ${wcs-slave.led[1].id}
     # 鍏ュ簱鍙�1
     inSta[0]:
       staNo: 1044
diff --git a/src/main/resources/mapper/BasArmMastMapper.xml b/src/main/resources/mapper/BasArmMastMapper.xml
index 777e018..29622c6 100644
--- a/src/main/resources/mapper/BasArmMastMapper.xml
+++ b/src/main/resources/mapper/BasArmMastMapper.xml
@@ -25,4 +25,13 @@
 
     </resultMap>
 
+    <update id="updateArmMastStatus">
+        update asr_bas_arm_mast
+        set status = #{endStatus}
+        where 1=1
+          and arm_no = #{armNo}
+          and sorting_line = #{sortingLine}
+          and status = #{status}
+    </update>
+
 </mapper>

--
Gitblit v1.9.1