From 78b8f5141aa11bfa0f94361407ed43362c8852ce Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期一, 19 一月 2026 17:28:55 +0800
Subject: [PATCH] WMS功能完善

---
 src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java |  174 +++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 161 insertions(+), 13 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java
index 67cab6e..f8ac53d 100644
--- a/src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java
@@ -10,9 +10,11 @@
 import com.zy.asrs.entity.mes.TransParent;
 import com.zy.asrs.entity.rcs.*;
 import com.zy.asrs.enums.RcsRetMethodEnum;
+import com.zy.asrs.mapper.BasDevpMapper;
 import com.zy.asrs.mapper.BlockStationMapper;
 import com.zy.asrs.mapper.BlockTaskMapper;
 import com.zy.asrs.service.*;
+import com.zy.common.utils.HttpHandler;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -43,6 +45,10 @@
     private String HX_URL;
     @Value("${mes.defaultUserId}")
     public long defaultUserId;
+
+    // wcs鍦板潃
+    @Value("${wcs.url}")
+    private String WCS_URL;
 
 
     @Resource
@@ -222,17 +228,17 @@
         String url = rcsFactory == 2 ? HX_URL : HIK_URL + "api/robot/controller/task/submit";
         String response = "";
         try {
+            // 妯℃嫙杩斿洖
+//            rcsReturn.setCode("SUCCESS");
+//            success = true;
+//            log.info("鍛煎彨agv鎼繍鎴愬姛锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", url, JSON.toJSONString(rcsTaskSubmit), response);
+
+
             response = sendPost(url, JSONObject.toJSONString(rcsTaskSubmit));
             if (!StringUtils.isEmpty(response) && response.contains("code")) {
                 rcsReturn = JSONObject.parseObject(response, RcsReturn.class);
                 if ("SUCCESS".equals(rcsReturn.getCode())) {
-            // 妯℃嫙杩斿洖
-//            rcsReturn.setCode("SUCCESS");
-//            JSONObject jsonObject = new JSONObject();
-//            jsonObject.put("robotTaskCode",4);
-//            rcsReturn.setData(jsonObject);
                     success = true;
-
                     log.info("鍛煎彨agv鎼繍鎴愬姛锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", url, JSON.toJSONString(rcsTaskSubmit), response);
                 } else {
                     log.error("鍛煎彨agv鎼繍澶辫触锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", url, JSON.toJSONString(rcsTaskSubmit), response);
@@ -334,6 +340,9 @@
         return 0;
     }
 
+    @Resource
+    private BasDevpMapper basDevpMapper;
+
     /**
      * 2.2.1浠诲姟鎵ц鍥為
      * 鍘傚锛氭捣閲忋�佸崕鏅�
@@ -382,6 +391,100 @@
 //                        JSONObject taskMemo = JSONObject.parseObject(task.getMemo());
 //                        mesService.outFeedbackByTuo(taskMemo.getString("OrderNo"), task);
                     } break;
+                    case APPLY_PUT: { // 鏀捐揣鐢宠
+                        String staNo = task.getStaNo();
+                        BasDevp basDevp = basDevpMapper.selectById(staNo);
+                        if(basDevp.getAutoing().equals("Y") && basDevp.getLoading().equals("N") && basDevp.getWrkNo() == 0) {
+
+                            // 205 瑙﹀彂鏉$爜鎵弿
+                            if (staNo.equals("205")) {
+                                Map<String,Object> params = new HashMap<>();
+                                params.put("siteId",staNo);
+                                String response = new HttpHandler.Builder()
+                                        .setUri(WCS_URL)
+                                        .setPath("/site/startScan")
+                                        .setParams(params)
+                                        .build()
+                                        .doPost();
+                                log.info("{}鏀捐揣鐢宠缁檞cs涓嬪彂鏉$爜鎵弿鍘熷杩斿洖:{}",staNo,response);
+                            }
+
+                            // 婊¤冻鏀捐揣鏉′欢锛岃皟鐢≧CS浠诲姟缁х画鎵ц
+                            RcsTaskContinue rcsTaskContinue = new RcsTaskContinue();
+                            rcsTaskContinue.setRobotTaskCode(robotTaskCode);
+                            rcsTaskContinue.setTriggerType("TASK");
+                            rcsTaskContinue.setTriggerCode(robotTaskCode);
+                            int success = continueTask(rcsTaskContinue, 1);
+                            if(success != 1) {
+                                rcsReturn.setCode("Err_RobotCodeNotMatch");
+                                rcsReturn.setMessage("缁х画鎵ц澶辫触");
+                                JSONObject data = new JSONObject();
+                                data.put("robotTaskCode", robotTaskCode);
+                                rcsReturn.setData(data);
+                                return rcsReturn;
+                            }
+                        }else {
+                            log.warn("绔欑偣锛歿}锛屼笉婊¤冻鏀捐揣鏉′欢锛岃嚜鍔細{}锛屾棤鐗╋細{}锛屼换鍔″彿锛歿}",staNo,basDevp.getAutoing(),basDevp.getLoading(),basDevp.getWrkNo());
+                            rcsReturn.setCode("Err_RobotCodeNotMatch");
+                            rcsReturn.setMessage("绔欑偣涓嶆弧瓒虫斁璐ф潯浠�");
+                            JSONObject data = new JSONObject();
+                            data.put("robotTaskCode", robotTaskCode);
+                            rcsReturn.setData(data);
+                            return rcsReturn;
+                        }
+                    } break;
+                    case APPLY_PICK: { // 鍙栬揣鐢宠
+                        String staNo = task.getSourceStaNo();
+                        BasDevp basDevp = basDevpMapper.selectById(staNo);
+                        if(basDevp.getAutoing().equals("Y") && basDevp.getLoading().equals("Y")
+                                && basDevp.getWrkNo()  > 0 && basDevp.getWrkNo() <= 9990) {
+                            // 婊¤冻鏀捐揣鏉′欢锛岃皟鐢≧CS浠诲姟缁х画鎵ц
+                            RcsTaskContinue rcsTaskContinue = new RcsTaskContinue();
+                            rcsTaskContinue.setRobotTaskCode(robotTaskCode);
+                            rcsTaskContinue.setTriggerType("TASK");
+                            rcsTaskContinue.setTriggerCode(robotTaskCode);
+                            int success = continueTask(rcsTaskContinue, 1);
+                            if(success != 1) {
+                                rcsReturn.setCode("Err_RobotCodeNotMatch");
+                                rcsReturn.setMessage("缁х画鎵ц澶辫触");
+                                JSONObject data = new JSONObject();
+                                data.put("robotTaskCode", robotTaskCode);
+                                rcsReturn.setData(data);
+                                return rcsReturn;
+                            }
+                        }else {
+                            log.warn("绔欑偣锛歿}锛屼笉婊¤冻鍙栬揣鏉′欢锛岃嚜鍔細{}锛屾棤鐗╋細{}锛屼换鍔″彿锛歿}",staNo,basDevp.getAutoing(),basDevp.getLoading(),basDevp.getWrkNo());
+                            rcsReturn.setCode("Err_RobotCodeNotMatch");
+                            rcsReturn.setMessage("绔欑偣涓嶆弧瓒虫斁璐ф潯浠�");
+                            JSONObject data = new JSONObject();
+                            data.put("robotTaskCode", robotTaskCode);
+                            rcsReturn.setData(data);
+                            return rcsReturn;
+                        }
+                    } break;
+                    case PICK_COMPLETE: { // 鍙栬揣瀹屾垚
+                        String staNo = task.getSourceStaNo();
+
+                        // 娓呴櫎杈撻�佺嚎浠诲姟鍙�
+                        Map<String,Object> params = new HashMap<>();
+                        params.put("siteId",staNo);
+                        params.put("workNo",0);
+                        params.put("staNo", 0);
+                        params.put("pakMk","Y");
+                        String response = new HttpHandler.Builder()
+                                .setUri(WCS_URL)
+                                .setPath("/site/detl/update")
+                                .setParams(params)
+                                .build()
+                                .doPost();
+                        log.info("agv鍙嶉pickComplete缁檞cs鍙戝懡浠�:{},杩斿洖锛歿}",JSONObject.toJSONString(params),response);
+                        // agv缁х画鎵ц
+//                        TransInOutStationAllow inOutStationAllow = new TransInOutStationAllow();
+//                        inOutStationAllow.setTaskno(robotTaskCode);
+//                        inOutStationAllow.setStatus("Y");
+//                        inOutStationAllow.setAgvCode("agv001");
+//                        mesService.allowOutStation(inOutStationAllow);
+                    } break;
                     case TASK_END: {
                         // 鏇存柊浠诲姟鐘舵�佺瓑鍐呴儴閫昏緫
                         task.setWrkSts(304L);   // 301 浠诲姟涓嬪彂銆�302 浠诲姟鎵ц銆�303 浠诲姟涓柇銆�304 浠诲姟缁撴潫
@@ -389,7 +492,38 @@
                         task.setModiUser(defaultUserId);
                         taskService.updateById(task);
                         // 浠诲姟瀹屾垚
-                        mesService.reporterTask(rcsReporterTask);
+//                        mesService.reporterTask(rcsReporterTask);
+
+                        // 鍏ョ珛搴撴椂锛屽尯鍒嗘槸绌烘墭杩樻槸婊℃墭锛岀粰杈撻�佺嚎涓嬪彂鍛戒护9990 绌猴紝9995婊�
+                        // 渚ч潰205 9996绌猴紝9997婊�
+                        String transType = memo.getString("TransType");
+                        if("02".equals(transType) || "04".equals(transType)) {
+                            int wrkNo = 9995;
+                            if("02".equals(transType)) {
+                                TaskDetl taskDetl = taskDetlService.selectOne(new EntityWrapper<TaskDetl>().eq("wrk_no", task.getWrkNo()));
+                                if (taskDetl != null) {
+                                    if("tuopan".equals(taskDetl.getMatnr())){
+                                        wrkNo = 9990;
+                                    }
+                                }
+                            }
+                            int staNo = Integer.parseInt(task.getStaNo());
+                            if(staNo == 205) { // 渚ч潰浠诲姟鍙疯浆鎹�
+                                wrkNo = wrkNo == 9990 ? 9996 : 9997;
+                            }
+                            Map<String,Object> params = new HashMap<>();
+                            params.put("siteId",staNo);
+                            params.put("workNo",wrkNo);
+                            params.put("staNo", staNo == 205 ? 205 : (staNo-1) );
+                            params.put("pakMk","Y");
+                            String response = new HttpHandler.Builder()
+                                    .setUri(WCS_URL)
+                                    .setPath("/site/detl/update")
+                                    .setParams(params)
+                                    .build()
+                                    .doPost();
+                            log.info("agv鍙嶉end缁檞cs鍙戝懡浠�:{},杩斿洖锛歿}",JSONObject.toJSONString(params),response);
+                        }
 
 //                    EntityWrapper<TaskDetl> wapper2 = new EntityWrapper<>();
 //                    wapper2.eq("wrk_no", task.getWrkNo())
@@ -428,11 +562,11 @@
                             mesService.outStation(apply);
                             // agv缁х画鎵ц
 
-                            TransInOutStationAllow inOutStationAllow = new TransInOutStationAllow();
-                            inOutStationAllow.setTaskno(robotTaskCode);
-                            inOutStationAllow.setStatus("Y");
-                            inOutStationAllow.setAgvCode("agv001");
-                            mesService.allowOutStation(inOutStationAllow);
+//                            TransInOutStationAllow inOutStationAllow = new TransInOutStationAllow();
+//                            inOutStationAllow.setTaskno(robotTaskCode);
+//                            inOutStationAllow.setStatus("Y");
+//                            inOutStationAllow.setAgvCode("agv001");
+//                            mesService.allowOutStation(inOutStationAllow);
                         }
                     } break;
                     case ARRIVE_ON_STATION: {
@@ -444,7 +578,7 @@
                         TransArrivalStation arrivalStation = new TransArrivalStation();
                         arrivalStation.setTaskno(robotTaskCode);
                         arrivalStation.setTaskname(memo.getString("taskName"));
-                        arrivalStation.setTuoPanId(taskDetl == null ? "":taskDetl.getZpallet());  // memo.getString("TuoPanId")
+                        arrivalStation.setTuoPanId(task.getBarcode());  // memo.getString("TuoPanId")
                         arrivalStation.setProductLineId(memo.getString("ProductLineId"));
                         String transType = memo.getString("TransType");
                         arrivalStation.setDaotype(transType);
@@ -705,5 +839,19 @@
         return result.toString();
     }
 
+    @Override
+    public RcsReturn siteBind(SiteBind siteBind) {
+        RcsReturn rcsReturn = new RcsReturn();
+        String url = HIK_URL + "api/robot/controller/site/bind";
+        String response = sendPost(url, JSONObject.toJSONString(siteBind));
+        if (!StringUtils.isEmpty(response) && response.contains("code")){
+            rcsReturn = JSONObject.parseObject(response, RcsReturn.class);
+        } else {
+            rcsReturn.setCode("ERROR");
+            rcsReturn.setMessage("璋冪敤缁戝畾鎺ュ彛RCS鏃犺繑鍥�");
+        }
+        return rcsReturn;
+    }
+
     // endregion
 }

--
Gitblit v1.9.1