From 11f6eb0bcda5e562d26ebc2c5ccd0672d66da76d Mon Sep 17 00:00:00 2001
From: lty <876263681@qq.com>
Date: 星期一, 15 九月 2025 14:50:46 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  262 +++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 256 insertions(+), 6 deletions(-)

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 91ab467..ca6a12f 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -8,11 +8,16 @@
 import com.core.common.DateUtils;
 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;
 import com.zy.asrs.utils.RouteUtils;
 import com.zy.asrs.utils.Utils;
 import com.zy.asrs.utils.VersionUtils;
+import com.zy.asrs.utils.core.ReturnT;
+import com.zy.common.constant.ArmConstant;
 import com.zy.common.model.LocTypeDto;
 import com.zy.common.model.MatDto;
 import com.zy.common.model.SearchLocParam;
@@ -93,9 +98,16 @@
     private WrkMastService wrkMastService;
     @Autowired
     private BasRgvMapService basRgvMapService;
+    @Autowired
+    private BasArmService basArmService;
+    @Autowired
+    private BasArmMastService basArmMastService;
 
     @Value("${wms.url}")
     private String wmsUrl;
+
+    @Value("${wms.comb}")
+    private String wmsComb;
     @Value("${inventory.number}")
     private Integer inventoryNumber;
 
@@ -2803,6 +2815,7 @@
                         && rgvProtocol.getModeType() == RgvModeType.AUTO
                         && (rgvProtocol.getStatusType() == RgvStatusType.WORKING1)
                 ){
+
                     log.info("{}鍙峰皬杞︾瓑寰厀cs纭锛岀姸鎬亄}锛屽弬鏁皗}",rgvProtocol.getRgvNo(),rgvProtocol.getStatusType(),rgvProtocol);
                     if(rgvProtocol.getTaskNo1() == 9999){ // 棰勮皟搴︿换鍔$‘璁�
                         BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
@@ -2835,6 +2848,23 @@
                     if (rgvProtocol.getTaskNo1()!=0 && rgvProtocol.getTaskNo1()!=9999){
                         WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo1());
                         if(wrkMastSta.getWrkSts() == 1){//鍙栬揣纭
+                            wrkMastSta.setWrkSts(4);  //琛岃蛋鐘舵��
+                            try{
+                                wrkMastStaMapper.updateById(wrkMastSta);
+                                log.error("鏇存柊灏忚溅浠诲姟鎴愬姛");
+                            }catch (Exception e){
+                                log.error("鏇存柊灏忚溅浠诲姟澶辫触");
+                            }
+                            boolean rgvComplete = false;
+
+                            rgvComplete = rgvComplete((int) rgvProtocol.getRgvNo(),7);
+                            if (!rgvComplete){
+                                log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{}锛�",rgvProtocol.getRgvNo());
+                                break;
+                            }
+                            break;
+                        }
+                        if(wrkMastSta.getWrkSts() == 4){//琛岃蛋纭
                             wrkMastSta.setWrkSts(2);
                             try{
                                 wrkMastStaMapper.updateById(wrkMastSta);
@@ -2911,7 +2941,24 @@
                     log.info("{}鍙峰皬杞︾瓑寰厀cs纭锛岀姸鎬亄}锛屽弬鏁皗}",rgvProtocol.getRgvNo(),rgvProtocol.getStatusType(),rgvProtocol);
                     if (rgvProtocol.getTaskNo2() !=0 ){
                         WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo1());
-                        if(wrkMastSta.getWrkSts() == 1){//缂鸿揣纭
+                        if(wrkMastSta.getWrkSts() == 1){//鍙栬揣纭
+                            wrkMastSta.setWrkSts(4);  //琛岃蛋鐘舵��
+                            try{
+                                wrkMastStaMapper.updateById(wrkMastSta);
+                                log.error("鏇存柊灏忚溅浠诲姟鎴愬姛");
+                            }catch (Exception e){
+                                log.error("鏇存柊灏忚溅浠诲姟澶辫触");
+                            }
+                            boolean rgvComplete = false;
+
+                            rgvComplete = rgvComplete((int) rgvProtocol.getRgvNo(),7);
+                            if (!rgvComplete){
+                                log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{}锛�",rgvProtocol.getRgvNo());
+                                break;
+                            }
+                            break;
+                        }
+                        if(wrkMastSta.getWrkSts() == 4){//琛岃蛋鍚庣‘璁�
                             wrkMastSta.setWrkSts(2);
                             try{
                                 wrkMastStaMapper.updateById(wrkMastSta);
@@ -3288,7 +3335,7 @@
             Short direction = 2;//鍙屽伐浣嶆渶缁堟姷杈句綅缃�
             boolean sign = false;
             //鑻ュ彇璐т负宸ヤ綅2涓斿彇璐у彛鍓嶄竴绔欑偣鏈夌墿锛岀粰鍙屽伐浣嶅悓鏃朵笅鍙戞寚浠�
-            if(wrkMastSta.getWorkSta() == 2 && staProtocol2 != null && staProtocol2.isLoading() && staProtocol2.getWorkNo() > 0){
+            if(wrkMastSta.getWorkSta() == 2 && staProtocol2 != null && staProtocol2.isLoading() && staProtocol2.getWorkNo() > 0 && sign){
                 WrkMastSta wrkMastSta3 = wrkMastStaMapper.selectNoInterfere(route, route, Long.valueOf(staProtocol2.getWorkNo()));//鏍规嵁绔欑偣宸ヤ綔鍙峰拰灏忚溅宸ヤ綔鑼冨洿妫�绱换鍔℃。
                 wrkMastSta3.setWorkSta(1);
                 wrkMastSta3.setRgvNo((int) rgvProtocol.getRgvNo());
@@ -3388,7 +3435,7 @@
             boolean sign = false;
             Short direction = 1;//宸ヤ綅1鏂瑰悜
             //鑻ュ彇璐т负宸ヤ綅2涓斿彇璐у彛鍓嶄竴绔欑偣鏈夌墿锛岀粰鍙屽伐浣嶅悓鏃朵笅鍙戞寚浠�
-            if(wrkMastSta.getWorkSta() == 1 && staProtocol2 != null && staProtocol2.isLoading() && staProtocol2.getWorkNo() > 0){
+            if(wrkMastSta.getWorkSta() == 1 && staProtocol2 != null && staProtocol2.isLoading() && staProtocol2.getWorkNo() > 0 && sign){
                 WrkMastSta wrkMastSta3 = wrkMastStaMapper.selectNoInterfere(route, route, Long.valueOf(staProtocol2.getWorkNo()));//鏍规嵁绔欑偣宸ヤ綔鍙峰拰灏忚溅宸ヤ綔鑼冨洿妫�绱换鍔℃。
                 wrkMastSta3.setWorkSta(2);
                 wrkMastSta3.setRgvNo((int) rgvProtocol.getRgvNo());
@@ -3864,13 +3911,50 @@
             boolean pakIn1 = true;
             boolean pakIn2 = true;
             rgvCommand.setRgvNo(rgvId); // RGV缂栧彿
-            if(wrkMastSta.getWrkSts() == 0){//鍙栬揣
+            if(wrkMastSta.getWrkSts() == 0 || wrkMastSta.getWrkSts() == 4){//鍒濆鍚庤璧�
+                if(wrkMastSta.getWorkSta() == 2){//鍑哄簱RGV鍙栬揣琛岃蛋
+                    rgvCommand.setAckFinish2(false);  // 宸ヤ綅2浠诲姟瀹屾垚纭浣�
+                    rgvCommand.setTaskNo2(Math.toIntExact(wrkMastSta.getWrkNo())); // 宸ヤ綅2宸ヤ綔鍙�
+                    rgvCommand.setTaskStatus2(RgvTaskStatusType.X_MOVE); // 宸ヤ綅2浠诲姟妯″紡:  鍙栨斁璐�
+                    rgvCommand.setEndStaNo2(wrkMastSta.getWrkEnd());   //宸ヤ綅2 鏀捐揣鍚庤鍘荤殑浣嶇疆
+                    rgvCommand.setTargetPosition1(wrkMastSta.getStaStart());   //宸ヤ綅2鐩爣绔欑偣
+                    rgvCommand.setDirection2(direction);
+                    rgvCommand.setCommand(true);   //宸ヤ綅1浠诲姟纭
+                    pakIn1 = false;
+                }else{  //鍏ュ簱RGV鍙栬揣琛岃蛋
+                    rgvCommand.setAckFinish1(false);  // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+                    rgvCommand.setTaskNo1(Math.toIntExact(wrkMastSta.getWrkNo())); // 宸ヤ綅1宸ヤ綔鍙�
+                    rgvCommand.setTaskStatus1(RgvTaskStatusType.X_MOVE); // 宸ヤ綅1浠诲姟妯″紡:  鍙栨斁璐�
+                    rgvCommand.setEndStaNo1(wrkMastSta.getWrkEnd());   //宸ヤ綅1 鏀捐揣鍚庤鍘荤殑浣嶇疆
+                    rgvCommand.setTargetPosition1(wrkMastSta.getStaStart());   //宸ヤ綅1鐩爣绔欑偣
+                    rgvCommand.setDirection1(direction);
+                    rgvCommand.setCommand(true);   //宸ヤ綅1浠诲姟纭
+                }
+                if(!pakIn1){
+                    if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) {
+                        //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱   step=4锛屽伐浣�1鍐欎换鍔★紱     step=5锛屽伐浣�2鍐欎换鍔�
+                        log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
+                        return false;
+                    } else {
+                        return true;
+                    }
+                }else{
+                    if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) {
+                        //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱   step=4锛屽伐浣�1鍐欎换鍔★紱     step=5锛屽伐浣�2鍐欎换鍔�
+                        log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
+                        return false;
+                    } else {
+                        return true;
+                    }
+                }
+            }
+            if(wrkMastSta.getWrkSts() == 1){//鍙栬揣
                 if(wrkMastSta.getWorkSta() == 2){//鍑哄簱RGV鍙栬揣
                     rgvCommand.setAckFinish2(false);  // 宸ヤ綅2浠诲姟瀹屾垚纭浣�
                     rgvCommand.setTaskNo2(Math.toIntExact(wrkMastSta.getWrkNo())); // 宸ヤ綅2宸ヤ綔鍙�
                     rgvCommand.setTaskStatus2(RgvTaskStatusType.FETCH); // 宸ヤ綅2浠诲姟妯″紡:  鍙栨斁璐�
                     rgvCommand.setEndStaNo2(wrkMastSta.getWrkEnd());   //宸ヤ綅2 鏀捐揣鍚庤鍘荤殑浣嶇疆
-                    rgvCommand.setTargetPosition2(wrkMastSta.getStaStart());   //宸ヤ綅2鐩爣绔欑偣
+                    rgvCommand.setTargetPosition1(wrkMastSta.getStaStart());   //宸ヤ綅2鐩爣绔欑偣
                     rgvCommand.setDirection2(direction);
                     rgvCommand.setCommand(true);   //宸ヤ綅1浠诲姟纭
                     pakIn1 = false;
@@ -3907,7 +3991,7 @@
                     rgvCommand.setTaskNo2(Math.toIntExact(wrkMastSta.getWrkNo())); // 宸ヤ綅2宸ヤ綔鍙�
                     rgvCommand.setTaskStatus2(RgvTaskStatusType.PUT); // 宸ヤ綅2浠诲姟妯″紡:  鏀捐揣
                     rgvCommand.setEndStaNo2(wrkMastSta.getWrkEnd());   //宸ヤ綅2 鏀捐揣鍚庤鍘荤殑浣嶇疆
-                    rgvCommand.setTargetPosition2(wrkMastSta.getStaEnd());   //宸ヤ綅2鐩爣绔欑偣
+                    rgvCommand.setTargetPosition1(wrkMastSta.getStaEnd());   //宸ヤ綅2鐩爣绔欑偣
                     rgvCommand.setCommand(true);   //宸ヤ綅1浠诲姟纭
                     pakIn2 = false;
                 }else{  //宸ヤ綅1浠诲姟鏀捐揣
@@ -4183,4 +4267,170 @@
         }
     }
 
+
+
+
+    /*
+     * 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() {
+        try{
+            List<BasArm> basArmList = basArmService.selectList(new EntityWrapper<>());
+            for (BasArm basArm : basArmList) {
+                if (basArm.getStatus()!=1){
+                    continue;
+                }
+                try{
+                    List<BasArmMast> basArmMastListRuning = basArmMastService.selectList(
+                            new EntityWrapper<BasArmMast>()
+                                    .eq("arm_no", basArm.getArmNo())
+                                    .eq("sorting_line", basArm.getSortingLine())
+                                    .eq("status", 1)
+                    );
+                    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())
+                                        .eq("sorting_line", basArm.getSortingLine())
+                                        .eq("status", 0)
+                        );
+                        if (basArmMastList.isEmpty()){
+                            continue;
+                        }
+                        if (basArmMastList.size()>1){
+                            log.error("arm缂栧彿锛�"+basArm.getArmNo()+"====銆嬫媶鐮佸灈浠诲姟寮傚父绂佹涓嬪彂锛侊紒锛佷换鍔″緟鎵ц鏁伴噺澶т簬1锛侊紒锛�");
+                            continue;
+                        }
+                        for (BasArmMast basArmMast:basArmMastList) {
+                            ArmTaskAssignmentParam armTaskAssignmentParam = new ArmTaskAssignmentParam(basArmMast.getSortingLine());
+                            //璁剧疆宸ヤ綔绌洪棿灏辩华
+                            ReturnT<String> result = new PostMesDataUtils().postMesData("鏈烘鑷傛姄鍙栦换鍔′笅鍙戯細閫氱煡宸ヤ綔绌洪棿宸插氨缁�",ArmConstant.ARM_URL, ArmConstant.ARM_WORKSPACE, armTaskAssignmentParam);
+                            if (result.getCode()==200){
+                                basArmMast.setStatus(1);
+                                basArmMastService.updateById(basArmMast);
+                            } else {
+                                log.error("鏈烘鑷傛姄鍙栦换鍔★細"+JSON.toJSON(basArmMast)+"===銆嬩换鍔′俊鎭笅鍙戝け璐�");
+                            }
+                        }
+                    }
+                }  catch (Exception e){
+                    log.error("arm缂栧彿锛�"+basArm.getArmNo()+"====銆嬫媶鐮佸灈浠诲姟涓嬪彂澶辫触"+e.getMessage());
+                }
+            }
+        }catch (Exception e){
+            log.error("arm浠诲姟涓嬪彂澶辫触"+e.getMessage());
+        }
+    }
+
 }

--
Gitblit v1.9.1