From 276d837c0bb808e6d93ac7c7ba6abe654c75552e Mon Sep 17 00:00:00 2001
From: lty <876263681@qq.com>
Date: 星期一, 09 二月 2026 08:45:45 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/model/protocol/StaProtocol.java           |  116 ++----
 src/main/java/com/zy/asrs/controller/OpenController.java            |  157 ++++++++++
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java         |  122 +++++--
 src/main/java/com/zy/asrs/entity/param/TaskCreateParam.java         |   94 ++++++
 src/main/java/com/zy/asrs/entity/param/InboundTaskApplyParam.java   |   25 +
 src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java         |  265 +++++++++++++++++
 src/main/java/com/zy/core/model/protocol/CrnProtocol.java           |   57 +++
 src/main/java/com/zy/asrs/service/OpenService.java                  |   17 +
 src/main/java/com/zy/asrs/entity/param/TaskStatusFeedbackParam.java |   39 ++
 9 files changed, 767 insertions(+), 125 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/OpenController.java b/src/main/java/com/zy/asrs/controller/OpenController.java
index a07109a..35b839a 100644
--- a/src/main/java/com/zy/asrs/controller/OpenController.java
+++ b/src/main/java/com/zy/asrs/controller/OpenController.java
@@ -9,23 +9,35 @@
 import com.zy.asrs.entity.WrkMast;
 import com.zy.asrs.entity.param.ArmPrecomputeParam;
 import com.zy.asrs.service.OpenService;
+import com.zy.asrs.service.impl.WrkMastServiceImpl;
 import com.zy.common.web.BaseController;
+import com.zy.core.cache.RgvStatusCache;
+import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.SlaveType;
+import com.zy.core.model.CrnSlave;
+import com.zy.core.model.DevpSlave;
+import com.zy.core.model.protocol.CrnProtocol;
+import com.zy.core.model.protocol.RgvProtocol;
+import com.zy.core.model.protocol.StaProtocol;
+import com.zy.core.properties.SlaveProperties;
+import com.zy.core.thread.SiemensCrnThread;
+import com.zy.core.thread.SiemensDevpThread;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
+
+import com.zy.asrs.entity.param.TaskCreateParam;
 
 /**
  * Created by vincent on 2024/10/16
  */
 @Slf4j
 @RestController
-@RequestMapping("open/hd")
+@RequestMapping("open/")
 public class OpenController extends BaseController {
 
     private static final boolean auth = true;
@@ -35,6 +47,11 @@
 
     @Autowired
     private OpenService openService;
+
+    @Autowired
+    private SlaveProperties slaveProperties;
+    @Autowired
+    private WrkMastServiceImpl wrkMastService;
 
     /**
      * 娣诲姞鍑哄簱鍗�
@@ -65,6 +82,138 @@
         return R.ok().add(param);
     }
 
+    /**
+     * 璁惧鐘舵��
+     */
+    @PostMapping("/deviceStatus")
+    @AppAuth(memo = "璁惧鐘舵�佽幏鍙�")
+    public R deviceStatus(
+            @RequestHeader(required = false) String appkey,
+            HttpServletRequest request) {
+
+        try {
+            auth(appkey, null, request);
+        } catch (Exception e) {
+            return new R(403, e.getMessage());
+        }
+
+        // 1. 绔欑偣
+        List<Map<String, Object>> devList = new ArrayList<>();
+        if (slaveProperties.getDevp() != null) {
+            for (DevpSlave devpSlave : slaveProperties.getDevp()) {
+                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devpSlave.getId());
+                if (devpThread != null && devpThread.getStation() != null) {
+                    for (StaProtocol staProtocol : devpThread.getStation().values()) {
+                        Map<String, Object> dev = new HashMap<>();
+                        dev.put("devNo", staProtocol.getSiteId());
+                        dev.put("inEnable", staProtocol.isInEnable() ? "1" : "0");
+                        dev.put("outEnable", staProtocol.isOutEnable() ? "1" : "0");
+                        dev.put("autoing", staProtocol.isAutoing() ? "1" : "0");
+                        dev.put("loading", staProtocol.isLoading() ? "1" : "0");
+                        dev.put("wrkNo", staProtocol.getWorkNo());
+                        dev.put("barcode", staProtocol.getBarcode());
+                        dev.put("devErr", staProtocol.getErrorDev$());
+                        dev.put("devErrM", staProtocol.getExceptions());
+                        devList.add(dev);
+                    }
+                }
+            }
+        }
+        devList.sort(Comparator.comparingInt(m -> (Integer) m.get("devNo")));
+
+        // 2. 鍫嗗灈鏈�
+        List<Map<String, Object>> crnList = new ArrayList<>();
+        if (slaveProperties.getCrn() != null) {
+            for (CrnSlave crnSlave : slaveProperties.getCrn()) {
+                SiemensCrnThread crnThread = (SiemensCrnThread) SlaveConnection.get(SlaveType.Crn, crnSlave.getId());
+                if (crnThread != null && crnThread.getCrnProtocol() != null) {
+                    CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+                    Map<String, Object> crn = new HashMap<>();
+                    crn.put("crnNo", crnProtocol.getCrnNo());
+                    crn.put("crnNoH", crnProtocol.getCrnNo());
+                    crn.put("crnSts", crnProtocol.getMode());
+                    crn.put("wrkNo", crnProtocol.getTaskNo());
+                    crn.put("crnErr", crnProtocol.getAlarm());
+                    crn.put("crnErrM", crnProtocol.getExceptions());
+                    WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no",crnProtocol.getTaskNo()));
+                    crn.put("frmLocno",wrkMast != null ? wrkMast.getSourceLocNo():null);
+                    crn.put("frmSta",wrkMast != null ? wrkMast.getSourceStaNo():0);
+                    crn.put("toSta", wrkMast != null? wrkMast.getStaNo():0);
+                    crn.put("toLocno", wrkMast != null ? wrkMast.getLocNo():null);
+                    crnList.add(crn);
+                }
+            }
+        }
+        crnList.sort(Comparator.comparingInt(m -> (Integer) m.get("crnNo")));
+
+        // 3. 绌挎杞�
+        List<Map<String, Object>> steList = new ArrayList<>();
+        Map<Integer, RgvProtocol> rgvMap = RgvStatusCache.getAllRgvStatus();
+        if (rgvMap != null) {
+            for (RgvProtocol rgvProtocol : rgvMap.values()) {
+                Map<String, Object> ste = new HashMap<>();
+                ste.put("steNo", rgvProtocol.getRgvNo());
+                ste.put("crnSts", rgvProtocol.getStatusType() != null ? rgvProtocol.getStatusType().id : 1);
+                ste.put("wrkNo", rgvProtocol.getTaskNo());
+                ste.put("steErr", rgvProtocol.getAlarm$());
+                ste.put("steErrM", rgvProtocol.getAlarmM());
+                steList.add(ste);
+            }
+        }
+        steList.sort(Comparator.comparingInt(m -> (Integer) m.get("steNo")));
+
+        R r =  R.ok();
+        r.put("devList", devList);
+        r.put("crnList", crnList);
+        r.put("steList", steList);
+        return r;
+    }
+
+
+
+    /**
+     * 浠诲姟涓嬪彂
+     */
+    @PostMapping("/taskCreate")
+    @AppAuth(memo = "浠诲姟涓嬪彂")
+    public R taskCreate(@RequestHeader(required = false) String appkey,
+                        @RequestBody TaskCreateParam param,
+                        HttpServletRequest request) {
+        try {
+            auth(appkey, param, request);
+        } catch (Exception e) {
+            return new R(403, e.getMessage());
+        }
+
+        if (Cools.isEmpty(param)) {
+            return R.parse(BaseRes.PARAM);
+        }
+        
+        if (Cools.isEmpty(param.getTaskNo())) {
+            return R.error("宸ヤ綔鍙穂taskNo]涓嶈兘涓虹┖");
+        }
+        if (Cools.isEmpty(param.getBarcode())) {
+             return R.error("瀹瑰櫒缂栫爜[barcode]涓嶈兘涓虹┖");
+        }
+        if (Cools.isEmpty(param.getStartPoint())) {
+             return R.error("璧风偣[startPoint]涓嶈兘涓虹┖");
+        }
+        if (Cools.isEmpty(param.getTargetPoint())) {
+             return R.error("鐩爣鐐筟targetPoint]涓嶈兘涓虹┖");
+        }
+
+        try {
+            boolean result = openService.taskCreate(param);
+            if (result) {
+                return R.ok("浠诲姟涓嬪彂鎴愬姛");
+            } else {
+                return R.error("浠诲姟涓嬪彂澶辫触");
+            }
+        } catch (Exception e) {
+            log.error("浠诲姟涓嬪彂寮傚父", e);
+            return R.error("浠诲姟涓嬪彂寮傚父: " + e.getMessage());
+        }
+    }
 
     private void auth(String appkey, Object obj, HttpServletRequest request) {
 //        log.info("{}鎺ュ彛琚闂紱appkey:{}锛涜姹傛暟鎹細{}", "open/sensorType/list/auth/v1", appkey, JSON.toJSONString(obj));
diff --git a/src/main/java/com/zy/asrs/entity/param/InboundTaskApplyParam.java b/src/main/java/com/zy/asrs/entity/param/InboundTaskApplyParam.java
new file mode 100644
index 0000000..27fbb9a
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/param/InboundTaskApplyParam.java
@@ -0,0 +1,25 @@
+package com.zy.asrs.entity.param;
+
+import lombok.Data;
+
+/**
+ * 浠诲姟鐢宠鍙傛暟
+ */
+@Data
+public class InboundTaskApplyParam {
+
+    /**
+     * 瀹瑰櫒缂栫爜
+     */
+    private String barcode;
+
+    /**
+     * 鍏ュ簱绔欑紪鍙�
+     */
+    private String stationCode;
+
+    /**
+     * 绌烘弧鏉� (0:绌烘澘, 1:婊℃澘 - 鏍规嵁涓氬姟閫昏緫绾﹀畾)
+     */
+    private Integer status;
+}
diff --git a/src/main/java/com/zy/asrs/entity/param/TaskCreateParam.java b/src/main/java/com/zy/asrs/entity/param/TaskCreateParam.java
new file mode 100644
index 0000000..901f292
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/param/TaskCreateParam.java
@@ -0,0 +1,94 @@
+package com.zy.asrs.entity.param;
+
+import lombok.Data;
+import java.util.List;
+import java.math.BigDecimal;
+
+/**
+ * 浠诲姟鍒涘缓鍙傛暟
+ */
+@Data
+public class TaskCreateParam {
+
+    /**
+     * 宸ヤ綔鍙�
+     */
+    private String taskNo;
+
+    /**
+     * 1锛氬嚭搴擄紝2锛氬叆搴� 3锛氱Щ搴�
+     * 11锛氱┖鏉垮嚭搴擄紝12锛氱┖鏉垮叆搴�
+     * 21锛氭嫞閫夊嚭搴� 22锛氭嫞閫夊叆搴�
+     * 31锛氱洏鐐瑰嚭搴� 32锛氱洏鐐瑰叆搴�
+     */
+    private Integer ioType;
+
+    /**
+     * 浼樺厛绾�
+     */
+    private Integer taskPriority;
+
+    /**
+     * 瀹瑰櫒缂栫爜
+     */
+    private String barcode;
+
+    /**
+     * 璧风偣
+     */
+    private String startPoint;
+
+    /**
+     * 鐩爣鐐�
+     */
+    private String targetPoint;
+
+    private String sourceLocNo;
+
+    private String targetLocNo;
+
+
+
+    /**
+     * 澶囨敞
+     */
+    private String memo;
+
+    /**
+     * 鏄庣粏鍒楄〃
+     */
+    private List<Detl> detlList;
+
+    @Data
+    public static class Detl {
+        /**
+         * 宸ヤ綔鍙�
+         */
+        private String taskNo;
+
+        /**
+         * 鐗╂枡缂栫爜
+         */
+        private String matnr;
+
+        /**
+         * 鎵规锛堥粯璁や负褰撳墠鏃ユ湡锛岀浉鍚屾壒娆¤嚜鍔ㄥ悎骞讹級
+         */
+        private String batch;
+
+        /**
+         * 瀹瑰櫒缂栫爜锛堟槑缁嗛渶瑕佷竴鑷达級
+         */
+        private String barcode;
+
+        /**
+         * 鏁伴噺
+         */
+        private BigDecimal anfme;
+
+        /**
+         * 澶囨敞
+         */
+        private String memo;
+    }
+}
diff --git a/src/main/java/com/zy/asrs/entity/param/TaskStatusFeedbackParam.java b/src/main/java/com/zy/asrs/entity/param/TaskStatusFeedbackParam.java
new file mode 100644
index 0000000..90e6200
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/param/TaskStatusFeedbackParam.java
@@ -0,0 +1,39 @@
+package com.zy.asrs.entity.param;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 浠诲姟鐘舵�佸弽棣堝弬鏁�
+ */
+@Data
+public class TaskStatusFeedbackParam {
+
+    /**
+     * 宸ヤ綔鍙�
+     */
+    private String taskNo;
+
+    /**
+     * 1锛氬彇娑�
+     * 2锛氬畬缁�
+     * 3:鎷i�夈�佺洏鐐瑰嚭搴撲笂鎶ワ紙浠诲姟鏈粨鏉燂紝闇�瑕佸洖搴擄級
+     */
+    private Integer status;
+
+    /**
+     * 1:鍑哄簱锛�2锛氱Щ搴擄紝3:鍏ュ簱
+     */
+    private Integer ioType;
+
+    /**
+     * 鎵樼洏鐮�
+     */
+    private String barcode;
+
+    /**
+     * 涓婃姤鏃堕棿
+     */
+    private Date reportTime;
+}
diff --git a/src/main/java/com/zy/asrs/service/OpenService.java b/src/main/java/com/zy/asrs/service/OpenService.java
index b722018..c64aa36 100644
--- a/src/main/java/com/zy/asrs/service/OpenService.java
+++ b/src/main/java/com/zy/asrs/service/OpenService.java
@@ -2,7 +2,24 @@
 
 import com.core.common.R;
 import com.zy.asrs.entity.param.ArmPrecomputeParam;
+import com.zy.asrs.entity.param.TaskCreateParam;
 
 public interface OpenService {
 
+    /**
+     * 浠诲姟鐘舵�佸弽棣堜笂鎶�
+     * @param taskNo 宸ヤ綔鍙�
+     * @param status 鐘舵�� 1锛氬彇娑� 2锛氬畬缁� 3:鎷i�夈�佺洏鐐瑰嚭搴撲笂鎶�
+     * @param ioType 绫诲瀷 1:鍑哄簱锛�2锛氱Щ搴擄紝3:鍏ュ簱
+     * @param barcode 鎵樼洏鐮�
+     * @return 鏄惁鎴愬姛
+     */
+    boolean reportTaskStatus(String taskNo, Integer status, Integer ioType, String barcode);
+
+    /**
+     * 浠诲姟涓嬪彂
+     * @param param 浠诲姟鍙傛暟
+     * @return 鏄惁鎴愬姛
+     */
+    boolean taskCreate(TaskCreateParam param);
 }
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 1a455ab..432677f 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -10,6 +10,7 @@
 import com.zy.asrs.domain.enums.LedErrorAreaType;
 import com.zy.asrs.domain.enums.TaskStatusType;
 import com.zy.asrs.entity.*;
+import com.zy.asrs.entity.param.InboundTaskApplyParam;
 import com.zy.asrs.mapper.*;
 import com.zy.asrs.service.*;
 import com.zy.asrs.utils.*;
@@ -82,6 +83,8 @@
     private BasDevpPositionService basDevpPositionService;
     @Autowired
     private TaskWrkService taskWrkService;
+    @Autowired
+    private OpenService openService;
 
     @Value("${wms.url}")
     private String wmsUrl;
@@ -258,45 +261,31 @@
 
                     try {
 
-                        LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
-
-                        SearchLocParam param = new SearchLocParam();
-                        param.setBarcode(barcode);
-                        param.setIoType(1);
-                        param.setSourceStaNo(inSta.getStaNo());
-                        param.setLocType1(locTypeDto.getLocType1());
+                        // 鏇挎崲涓烘柊鐨勪换鍔$敵璇锋帴鍙�
+                        InboundTaskApplyParam applyParam = new InboundTaskApplyParam();
+                        applyParam.setBarcode(barcode);
+                        applyParam.setStationCode(String.valueOf(inSta.getStaNo()));
+                        applyParam.setStatus(1); // 1:婊℃澘
+                        
                         String response = new HttpHandler.Builder()
                                 .setUri(wmsUrl)
-                                .setPath("/rpc/pakin/loc/v1")
-                                .setJson(JSON.toJSONString(param))
+                                .setPath("/inboundTaskApply")
+                                .setJson(JSON.toJSONString(applyParam))
                                 .build()
                                 .doPost();
+                        
+                        // 瑙f瀽鍝嶅簲锛屽彧纭鐢宠鏄惁鎴愬姛
                         JSONObject jsonObject = JSON.parseObject(response);
-                        if (jsonObject.getInteger("code").equals(200)) {
-                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
-
-//                            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
-
-
-                            barcodeThread.setBarcode("");
-                            staProtocol.setWorkNo(dto.getWorkNo());
-
-//                            if(Cools.isEmpty(dto.getRgvNo()) || dto.getRgvNo() <= 0) {
-//                                staProtocol.setStaNo(607);//607
-//                            } else {//濡傛灉瀛樺湪RGV缂栧彿锛岃鏄庨渶瑕丷GV鎺ラ┏锛屽厛涓嬪彂浠诲姟鍒癛GV婧愮珯
-//                            staProtocol.setStaNo(dto.getRgvSstaNo().shortValue());
-                            staProtocol.setStaNo(wrkMast.getStaNoSou$().shortValue());
-
-//                            }
-
-                            devpThread.setPakMk(staProtocol.getSiteId(), false,283);
+                        if (jsonObject != null && jsonObject.getInteger("code") != null && jsonObject.getInteger("code") == 200) {
+                            log.info("鍏ュ簱浠诲姟鐢宠鎴愬姛锛岀瓑寰匴MS涓嬪彂浠诲姟銆傛潯鐮侊細{}锛岀珯鐐癸細{}", barcode, inSta.getStaNo());
+                            staProtocol.setWorkNo(9998);//璁剧疆涓�9998绛夊緟涓婁綅鏈轰笅鍙戜换鍔�/9997鏄┖鏉垮叆搴撳垽鏂紝寰呬笅鍙戞椂涔熷啓鍏�9998
                             boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                             if (!result) {
                                 LedErrorThreadUtil.ledErrorThread("鏇存柊plc绔欑偣淇℃伅澶辫触!绔欑偣鍙凤細"+inSta.getStaNo(),inSta.getLed(), LedErrorAreaType.ONE_OTHER.getDesc());
                                 throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
                             }
                         } else {
-                            // 鑾峰彇宸ヤ綔鍙�
+                            //                            // 鑾峰彇宸ヤ綔鍙�
                             int workNo = commonService.getWorkNo(3);
 
                             staProtocol.setWorkNo(workNo);
@@ -306,8 +295,50 @@
                             boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                             // led 寮傚父鏄剧ず
                             LedErrorThreadUtil.ledErrorThread("鍏ュ簱璇锋眰澶辫触"+jsonObject.getInteger("code"),inSta.getLed(), LedErrorAreaType.ONE_OTHER.getDesc());
-                            log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
+                            log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/inboundTaskApply", JSON.toJSONString(applyParam), response);
                         }
+                        
+                        // 鍘熸湁閫昏緫娉ㄩ噴鎺�
+//                        LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
+//
+//                        SearchLocParam param = new SearchLocParam();
+//                        param.setBarcode(barcode);
+//                        param.setIoType(1);
+//                        param.setSourceStaNo(inSta.getStaNo());
+//                        param.setLocType1(locTypeDto.getLocType1());
+//                        String response = new HttpHandler.Builder()
+//                                .setUri(wmsUrl)
+//                                .setPath("/rpc/pakin/loc/v1")
+//                                .setJson(JSON.toJSONString(param))
+//                                .build()
+//                                .doPost();
+//                        JSONObject jsonObject = JSON.parseObject(response);
+//                        if (jsonObject.getInteger("code").equals(200)) {
+//                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
+//
+//                            barcodeThread.setBarcode("");
+//                            staProtocol.setWorkNo(dto.getWorkNo());
+//                            staProtocol.setStaNo(wrkMast.getStaNoSou$().shortValue());
+//
+//                            devpThread.setPakMk(staProtocol.getSiteId(), false,283);
+//                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+//                            if (!result) {
+//                                LedErrorThreadUtil.ledErrorThread("鏇存柊plc绔欑偣淇℃伅澶辫触!绔欑偣鍙凤細"+inSta.getStaNo(),inSta.getLed(), LedErrorAreaType.ONE_OTHER.getDesc());
+//                                throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
+//                            }
+//                        } else {
+//                            // 鑾峰彇宸ヤ綔鍙�
+//                            int workNo = commonService.getWorkNo(3);
+//
+//                            staProtocol.setWorkNo(workNo);
+//                            staProtocol.setStaNo(inSta.getBackSta().shortValue());
+//
+//                            devpThread.setPakMk(staProtocol.getSiteId(), false,201);
+//                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+//                            // led 寮傚父鏄剧ず
+//                            LedErrorThreadUtil.ledErrorThread("鍏ュ簱璇锋眰澶辫触"+jsonObject.getInteger("code"),inSta.getLed(), LedErrorAreaType.ONE_OTHER.getDesc());
+//                            log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
+//                        }
 
                     } catch (Exception e) {
                         e.printStackTrace();
@@ -337,36 +368,35 @@
                 }
                 // 绔欑偣鏉′欢鍒ゆ柇
                 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()
-                        && staProtocol.isEmptyMk() && ((staProtocol.getWorkNo() > 9000 && staProtocol.getWorkNo() <= 9999) || staProtocol.getWorkNo()==0)  && staProtocol.isPakMk()) {
+                        && staProtocol.isEmptyMk() && ((staProtocol.getWorkNo() > 9000 && staProtocol.getWorkNo() <= 9997) || staProtocol.getWorkNo()==0)  && staProtocol.isPakMk()) {
 
                     try {
                         LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
 
-                        SearchLocParam param = new SearchLocParam();
-                        param.setIoType(10);
-                        param.setSourceStaNo(emptyInSta.getStaNo());
-                        param.setLocType1(locTypeDto.getLocType1());
+                        InboundTaskApplyParam applyParam = new InboundTaskApplyParam();
+                        applyParam.setBarcode(null);
+                        applyParam.setStationCode(String.valueOf(emptyInSta.getStaNo()));
+                        applyParam.setStatus(0); // 1:婊℃澘
+
                         String response = new HttpHandler.Builder()
                                 .setUri(wmsUrl)
-                                .setPath("/rpc/pakin/loc/v1")
-                                .setJson(JSON.toJSONString(param))
+                                .setPath("/inboundTaskApply")
+                                .setJson(JSON.toJSONString(applyParam))
                                 .build()
                                 .doPost();
-                        JSONObject jsonObject = JSON.parseObject(response);
-                        if (jsonObject.getInteger("code").equals(200)) {
-                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
 
-                            // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
-                            staProtocol.setWorkNo(dto.getWorkNo());
-                            staProtocol.setStaNo(dto.getStaNoSou$(dto.getStaNo(),staProtocol.getSiteId()).shortValue());
-                            devpThread.setPakMk(staProtocol.getSiteId(), false,4087);
+                        // 瑙f瀽鍝嶅簲锛屽彧纭鐢宠鏄惁鎴愬姛
+                        JSONObject jsonObject = JSON.parseObject(response);
+                        if (jsonObject != null && jsonObject.getInteger("code") != null && jsonObject.getInteger("code") == 200) {
+                            log.info("鍏ュ簱浠诲姟鐢宠鎴愬姛锛岀瓑寰匴MS涓嬪彂浠诲姟锛岀珯鐐癸細{}",emptyInSta.getStaNo());
+                            staProtocol.setWorkNo(9998);//璁剧疆涓�9998绛夊緟涓婁綅鏈轰笅鍙戜换鍔�
                             boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                             if (!result) {
                                 LedErrorThreadUtil.ledErrorThread("鏇存柊plc绔欑偣淇℃伅澶辫触!绔欑偣鍙凤細"+emptyInSta.getStaNo(),emptyInSta.getLed(), LedErrorAreaType.ONE_OTHER.getDesc());
                                 throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
                             }
                         } else {
-                            log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
+                            log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/inboundTaskApply", JSON.toJSONString(applyParam), response);
                         }
                     } catch (Exception e) {
                         e.printStackTrace();
@@ -545,6 +575,10 @@
                         if (wrkMastMapper.updateById(wrkMast) != 0) {
                             // 澶嶄綅鍫嗗灈鏈�
                             crnThread.setResetFlag(true);
+                            if(wrkMast.getIoType() == 103 || wrkMast.getIoType() == 107) { //鎷f枡鍑哄簱浠诲姟鐘舵�佷笂鎶ワ紝鍏朵粬涓婃姤鍦╳ms浠诲姟瀹屾垚瀹氭椂浠诲姟涓�
+                                openService.reportTaskStatus(String.valueOf(wrkMast.getWrkNo()),3,1,wrkMast.getBarcode());
+                            }
+
                         } else {
                             log.error("鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
                         }
diff --git a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
index c68de35..120aa8c 100644
--- a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -1,18 +1,36 @@
 package com.zy.asrs.service.impl;
 
-import com.core.common.R;
-import com.zy.asrs.entity.param.ArmPrecomputeParam;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.zy.asrs.entity.WrkDetl;
+import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.entity.param.TaskCreateParam;
+import com.zy.asrs.entity.param.TaskStatusFeedbackParam;
+import com.zy.asrs.service.ApiLogService;
 import com.zy.asrs.service.OpenService;
+import com.zy.asrs.service.WrkDetlService;
 import com.zy.asrs.service.WrkMastService;
+import com.zy.common.service.CommonService;
+import com.zy.common.utils.HttpHandler;
+import com.zy.core.cache.MessageQueue;
+import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.SlaveType;
+import com.zy.core.model.Task;
+import com.zy.core.model.protocol.StaProtocol;
 import com.zy.core.properties.SlaveProperties;
+import com.zy.core.thread.SiemensDevpThread;
+import com.zy.core.model.DevpSlave;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
+import java.math.BigDecimal;
 import java.util.Date;
-import java.util.List;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * Created by vincent on 2022/4/9
@@ -21,5 +39,244 @@
 @Service
 public class OpenServiceImpl implements OpenService {
 
+    @Value("${wms.url}")
+    private String wmsUrl;
 
+    @Autowired
+    private ApiLogService apiLogService;
+    
+    @Autowired
+    private CommonService commonService;
+    
+    @Autowired
+    private WrkMastService wrkMastService;
+    
+    @Autowired
+    private WrkDetlService wrkDetlService;
+    
+    @Autowired
+    private SlaveProperties slaveProperties;
+
+
+    @Override
+    public boolean reportTaskStatus(String taskNo, Integer status, Integer ioType, String barcode) {
+        try {
+            TaskStatusFeedbackParam param = new TaskStatusFeedbackParam();
+            param.setTaskNo(taskNo);
+            param.setStatus(status);
+            param.setIoType(ioType);
+            param.setBarcode(barcode);
+            param.setReportTime(new Date());
+
+            Map<String, Object> headers = new HashMap<>();
+            headers.put("appkey", "ea1f0459efc02a79f046f982767939ae");
+
+            String response = new HttpHandler.Builder()
+                    .setUri(wmsUrl)
+                    .setPath("/taskStatusFeedback")
+                    .setJson(JSON.toJSONString(param))
+                    .setHeaders(headers)
+                    .build()
+                    .doPost();
+
+            boolean success = false;
+            log.info("浠诲姟鐘舵�佸弽棣堜笂鎶ョ粨鏋滐細{}", response);
+            if (response != null) {
+                try {
+                    JSONObject jsonObject = JSON.parseObject(response);
+                    // 鍋囪杩斿洖code涓�200琛ㄧず鎴愬姛
+                    if (jsonObject != null && jsonObject.containsKey("code") && jsonObject.getInteger("code") == 200) {
+                        success = true;
+                    }
+                } catch (Exception e) {
+                    log.warn("瑙f瀽鍝嶅簲澶辫触", e);
+                }
+            }
+
+            // 璁板綍鏃ュ織
+            try {
+                apiLogService.save("浠诲姟鐘舵�佸弽棣堜笂鎶�",
+                        "/taskStatusFeedback",
+                        "ea1f0459efc02a79f046f982767939ae",
+                        wmsUrl,
+                        JSON.toJSONString(param),
+                        response,
+                        success);
+            } catch (Exception e) {
+                log.error("淇濆瓨API鏃ュ織寮傚父", e);
+            }
+
+            return success;
+        } catch (Exception e) {
+            log.error("浠诲姟鐘舵�佸弽棣堜笂鎶ュ紓甯�", e);
+        }
+        return false;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean taskCreate(TaskCreateParam param) {
+        try {
+            Integer ioType = 0;
+            boolean Inbound = true;
+            //1锛氬嚭搴擄紝2锛氬叆搴� 3锛氱Щ搴�
+            //11锛氱┖鏉垮嚭搴擄紝12锛氱┖鏉垮叆搴�
+            //21锛氭嫞閫夊嚭搴� 22锛氭嫞閫夊叆搴�
+            //31锛氱洏鐐瑰嚭搴� 32锛氱洏鐐瑰叆搴�
+            switch (param.getIoType()){
+                case 1:  Inbound = false;break;
+                case 2 : Inbound = true;break;
+                case 3:  Inbound = false;break;
+                case 11: Inbound = false;ioType = 110;break;
+                case 12: Inbound = true;break;
+                case 21: Inbound = false;ioType = 103;break;
+                case 22: Inbound = true;break;
+                case 31: Inbound = false;ioType = 107;break;
+                case 32: Inbound = true;break;
+            }
+            // 2. 淇濆瓨WrkMast
+            WrkMast wrkMast = new WrkMast();
+
+            if(param.getIoType() == 2 || param.getIoType() == 12){
+                wrkMast.setWrkNo(Integer.valueOf(param.getTaskNo()));
+                wrkMast.setIoType(param.getIoType() != 2?10:1);
+                wrkMast.setIoPri(param.getTaskPriority() != null ? param.getTaskPriority().doubleValue() : 11.0);
+                wrkMast.setBarcode(param.getBarcode());
+                wrkMast.setMemo(param.getMemo());
+                wrkMast.setSourceStaNo(Integer.valueOf(param.getStartPoint()));
+                wrkMast.setStaNo(Integer.valueOf(param.getTargetPoint()));
+                wrkMast.setLocNo(param.getTargetLocNo());
+                wrkMast.setSourceLocNo(param.getSourceLocNo());
+            }else if(param.getIoType() == 22 || param.getIoType() == 32){
+                wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode",param.getBarcode()));
+                wrkMast.setWrkSts(param.getIoType() != 32 ? 53L: 57L);
+                wrkMast.setWrkNo(Integer.valueOf(param.getTaskNo()));
+                wrkMast.setIoPri(param.getTaskPriority() != null ? param.getTaskPriority().doubleValue() : 11.0);
+                wrkMast.setBarcode(param.getBarcode());
+                wrkMast.setMemo(param.getMemo());
+                wrkMast.setSourceStaNo(Integer.valueOf(param.getStartPoint()));
+                wrkMast.setStaNo(Integer.valueOf(param.getTargetPoint()));
+                wrkMast.setLocNo(param.getTargetLocNo());
+                wrkMast.setSourceLocNo(param.getSourceLocNo());
+            }else if(param.getIoType() == 3){
+                wrkMast.setWrkNo(Integer.valueOf(param.getTaskNo()));
+                wrkMast.setIoType(11);
+                wrkMast.setIoPri(param.getTaskPriority() != null ? param.getTaskPriority().doubleValue() : 12.0);
+                wrkMast.setBarcode(param.getBarcode());
+                wrkMast.setMemo(param.getMemo());
+                wrkMast.setSourceStaNo(Integer.valueOf(param.getStartPoint()));
+                wrkMast.setStaNo(Integer.valueOf(param.getTargetPoint()));
+                wrkMast.setLocNo(param.getTargetLocNo());
+                wrkMast.setSourceLocNo(param.getSourceLocNo());
+            }else{
+                wrkMast.setWrkNo(Integer.valueOf(param.getTaskNo()));
+                wrkMast.setIoType(ioType);
+                wrkMast.setIoPri(param.getTaskPriority() != null ? param.getTaskPriority().doubleValue() : 11.0);
+                wrkMast.setBarcode(param.getBarcode());
+                wrkMast.setMemo(param.getMemo());
+                wrkMast.setSourceStaNo(Integer.valueOf(param.getStartPoint()));
+                wrkMast.setStaNo(Integer.valueOf(param.getTargetPoint()));
+                wrkMast.setLocNo(param.getTargetLocNo());
+                wrkMast.setSourceLocNo(param.getSourceLocNo());
+            }
+
+            if(Inbound){
+                wrkMast.setWrkSts(2L);
+            }else{
+                wrkMast.setWrkSts(11L);
+            }
+            wrkMast.setAppeTime(new Date());
+            wrkMast.setWrkDate(new Date());
+            
+            wrkMastService.insert(wrkMast);
+
+            // 3. 淇濆瓨WrkDetl
+            if (param.getDetlList() != null && !param.getDetlList().isEmpty()) {
+                for (TaskCreateParam.Detl detl : param.getDetlList()) {
+                    WrkDetl wrkDetl = new WrkDetl();
+                    wrkDetl.setWrkNo(wrkMast.getWrkNo());
+                    wrkDetl.setZpallet(detl.getBarcode());
+                    wrkDetl.setMatnr(detl.getMatnr());
+                    wrkDetl.setBatch(detl.getBatch());
+                    if (detl.getAnfme() != null) {
+                        wrkDetl.setAnfme(detl.getAnfme().doubleValue());
+                    }
+                    wrkDetlService.insert(wrkDetl);
+                }
+            }
+            
+            // 4. 涓嬪彂缁橮LC
+            if(Inbound){
+                writeToPlc(wrkMast);
+            }
+
+            // 璁板綍鏃ュ織
+            try {
+                apiLogService.save("浠诲姟涓嬪彂",
+                        "/taskCreate",
+                        "ea1f0459efc02a79f046f982767939ae",
+                        "LOCAL",
+                        JSON.toJSONString(param),
+                        "SUCCESS",
+                        true);
+            } catch (Exception e) {
+                log.error("淇濆瓨API鏃ュ織寮傚父", e);
+            }
+            
+            return true;
+        } catch (Exception e) {
+            log.error("浠诲姟涓嬪彂寮傚父", e);
+             try {
+                apiLogService.save("浠诲姟涓嬪彂",
+                        "/taskCreate",
+                        "ea1f0459efc02a79f046f982767939ae",
+                        "LOCAL",
+                        JSON.toJSONString(param),
+                        "FAIL: " + e.getMessage(),
+                        false);
+            } catch (Exception ex) {
+                // ignore
+            }
+            throw new RuntimeException(e); // 瑙﹀彂浜嬪姟鍥炴粴
+        }
+    }
+    
+    private void writeToPlc(WrkMast wrkMast) {
+        if (wrkMast.getSourceStaNo() == null) {
+            log.warn("浠诲姟涓嬪彂缂哄皯婧愮珯鐐�: wrkNo={}", wrkMast.getWrkNo());
+            return;
+        }
+        
+        Integer sourceStaNo = wrkMast.getSourceStaNo();
+        
+        for (DevpSlave devp : slaveProperties.getDevp()) {
+             SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+             if (devpThread == null) continue;
+             
+             // 妫�鏌ヨPLC鏄惁绠$悊璇ョ珯鐐�
+             if (devpThread.getStation().containsKey(sourceStaNo.shortValue())) {
+                 StaProtocol staProtocol = devpThread.getStation().get(sourceStaNo.shortValue());
+                 if (staProtocol != null && staProtocol.getWorkNo() == 9998) {
+
+                     staProtocol.setWorkNo(wrkMast.getWrkNo());
+                     if (wrkMast.getStaNo() != null) {
+                        staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
+                     }
+                     
+                     // 涓嬪彂PLC鎸囦护
+                     devpThread.setPakMk(staProtocol.getSiteId(), false, 283);
+                     boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                     
+                     if (result) {
+                         log.info("浠诲姟涓嬪彂鎴愬姛锛屽凡鍐欏叆PLC銆俉rkNo: {}, Source: {}, Target: {}", 
+                                 wrkMast.getWrkNo(), wrkMast.getSourceStaNo(), wrkMast.getStaNo());
+                     } else {
+                         log.error("浠诲姟涓嬪彂澶辫触锛屽啓鍏LC闃熷垪澶辫触銆俉rkNo: {}", wrkMast.getWrkNo());
+                     }
+                     return;
+                 }
+             }
+        }
+        log.warn("鏈壘鍒板搴旂殑PLC绔欑偣鎴栫嚎绋�: {}", sourceStaNo);
+    }
 }
diff --git a/src/main/java/com/zy/core/model/protocol/CrnProtocol.java b/src/main/java/com/zy/core/model/protocol/CrnProtocol.java
index 623e52c..a07a8be 100644
--- a/src/main/java/com/zy/core/model/protocol/CrnProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/CrnProtocol.java
@@ -189,6 +189,63 @@
     public Float yDuration;
 
     //鍫嗗灈鏈洪厤缃俊鍙�--------------------------------------------------------------
+    public java.util.List<java.util.Map<String, Object>> getExceptions() {
+        java.util.List<java.util.Map<String, Object>> list = new java.util.ArrayList<>();
+        if (ibDriveFault) list.add(createException(0, "琛岃蛋鍙橀鍣ㄦ晠闅�"));
+        if (ibSupplyFault) list.add(createException(1, "鎻愪緵鍙橀鍣ㄦ晠闅�"));
+        if (ibForkDriveFault) list.add(createException(2, "璐у弶鍙橀鍣ㄦ晠闅�"));
+        if (ibDriveCircuitFault) list.add(createException(3, "琛岃蛋鏂矾鍣ㄦ晠闅�"));
+        if (ibLiftCircuitFault) list.add(createException(4, "鎻愬崌鏂矾鍣ㄦ晠闅�"));
+        if (ibForkCircuitFault) list.add(createException(5, "璐у弶鏂矾鍣ㄦ晠闅�"));
+        if (ibForwardLimit) list.add(createException(6, "鍓嶈繘闄愪綅"));
+        if (ibReverseLimit) list.add(createException(7, "鍚庨��闄愪綅"));
+        if (ibDriveStart) list.add(createException(8, "琛岃蛋鍘熺偣"));
+        if (ibForwardBrakeSpeed) list.add(createException(9, "鍓嶈繘寮哄埗浣庨��"));
+        if (ibReverseBrakeSpeed) list.add(createException(10, "鍚庨��寮哄埗浣庨��"));
+        if (ibUpLimit) list.add(createException(11, "涓婂崌闄愪綅"));
+        if (ibDownLimit) list.add(createException(12, "涓嬮檺闄愪綅"));
+        if (ibUpOrigin) list.add(createException(13, "鎻愬崌鍘熺偣"));
+        if (ibUpBrakeSpeed) list.add(createException(14, "涓婂崌寮哄埗浣庨��"));
+        if (ibDownBrakeSpeed) list.add(createException(15, "涓嬮檷寮哄埗浣庨��"));
+        if (ibPlatformSignal) list.add(createException(16, "杞借揣鍙版帰璐�"));
+        if (ibForkMidSignal) list.add(createException(17, "璐у弶涓綅淇″彿"));
+        if (ibForkLeftLimit) list.add(createException(18, "璐у弶宸︽瀬闄�"));
+        if (ibForkRightLimit) list.add(createException(19, "璐у弶鍙虫瀬闄�"));
+        if (ibFrontOverLimit) list.add(createException(20, "鍓嶈秴闄�"));
+        if (ibRearOverLimit) list.add(createException(21, "鍚庤秴闄�"));
+        if (ibLeftOverLimit) list.add(createException(22, "宸﹁秴闄�"));
+        if (ibRightOverLimit) list.add(createException(23, "鍙宠秴闄�"));
+        if (ibHighOverLimit1) list.add(createException(24, "楂樿秴闄�1"));
+        if (ibHighOverLimit2) list.add(createException(25, "楂樿秴闄�2"));
+        if (ibHighOverLimit3) list.add(createException(26, "楂樿秴闄�3"));
+        if (ibOneExtendLeftLoad1) list.add(createException(27, "涓�浼稿乏渚ф帰璐�1"));
+        if (ibOneExtendLeftLoad2) list.add(createException(28, "涓�浼稿乏渚ф帰璐�2"));
+        if (ibOneExtendRightLoad1) list.add(createException(29, "涓�浼稿彸渚ф帰璐�1"));
+        if (ibOneExtendRightLoad2) list.add(createException(30, "涓�浼稿彸渚ф帰璐�2"));
+        if (ibTwoExtendLeftLoad1) list.add(createException(31, "浜屼几宸︿晶鎺㈣揣1"));
+        if (ibTwoExtendLeftLoad2) list.add(createException(32, "浜屼几宸︿晶鎺㈣揣2"));
+        if (ibTwoExtendRightLoad1) list.add(createException(33, "浜屼几鍙充晶鎺㈣揣1"));
+        if (ibTwoExtendRightLoad2) list.add(createException(34, "浜屼几鍙充晶鎺㈣揣2"));
+        if (ibSpeedSignal1) list.add(createException(35, "瓒呴�熶俊鍙�1"));
+        if (ibSpeedSignal2) list.add(createException(36, "瓒呴�熶俊鍙�2"));
+        if (ibOverweightSignal1) list.add(createException(37, "瓒呴噸淇″彿1"));
+        if (ibOverweightSignal2) list.add(createException(38, "瓒呴噸淇″彿2"));
+        if (ibRopeReleaseSignal1) list.add(createException(39, "鏉剧怀淇″彿1"));
+        if (ibRopeReleaseSignal2) list.add(createException(40, "鏉剧怀淇″彿2"));
+        if (ibSafetyClamp) list.add(createException(41, "瀹夊叏閽�"));
+        if (ibTightener) list.add(createException(42, "寮犵揣鍣�"));
+        if (ibSpeedLimiter) list.add(createException(43, "闄愰�熷櫒"));
+        if (ibSafetyDoorOpen) list.add(createException(44, "瀹夊叏闂ㄦ墦寮�"));
+        return list;
+    }
+
+    private java.util.Map<String, Object> createException(int code, String msg) {
+        java.util.Map<String, Object> map = new java.util.HashMap<>();
+        map.put("code", code);
+        map.put("msg", msg);
+        return map;
+    }
+
     // 鏁呴殰璇诲彇閿佸畾鏍囪
     private boolean errorMk = false;
     //鍐欏叆鏍囪
diff --git a/src/main/java/com/zy/core/model/protocol/StaProtocol.java b/src/main/java/com/zy/core/model/protocol/StaProtocol.java
index 5b770dd..cbe4117 100644
--- a/src/main/java/com/zy/core/model/protocol/StaProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -282,80 +282,50 @@
     }
 
 
-    public String getErrorDev$(){
-        if (errorDev.equals("-")){
-            boolean back = false;
-            String errMsg = "-";
-            if (this.isErrOther1()) {
-                if (!back){
-                    errMsg = "鐢佃矾淇濇姢鍣ㄦ柇寮�";
-                } else {
-                    errMsg = errMsg+"---"+"鐢佃矾淇濇姢鍣ㄦ柇寮�";
-                }
-                back = true;
-            }
-            if (this.isErrOther2()) {
-                if (!back){
-                    errMsg = "鍏夌數寮傚父";
-                } else {
-                    errMsg = errMsg+"---"+"鍏夌數寮傚父";
-                }
-                back = true;
-            }
-            if (this.isErrOther3()) {
-                if (!back){
-                    errMsg = "杩愯瓒呮椂";
-                } else {
-                    errMsg = errMsg+"---"+"杩愯瓒呮椂";
-                }
-                back = true;
-            }
-            if (this.isErrOther4()) {
-                if (!back){
-                    errMsg = "鍗犱綅瓒呮椂";
-                } else {
-                    errMsg = errMsg+"---"+"鍗犱綅瓒呮椂";
-                }
-                back = true;
-            }
-            if (this.isErrOther5()) {
-                if (!back){
-                    errMsg = "鏈変换鍔℃棤璐ф晠闅�";
-                } else {
-                    errMsg = errMsg+"---"+"鏈変换鍔℃棤璐ф晠闅�";
-                }
-                back = true;
-            }
-            if (this.isErrOther6()) {
-                if (!back){
-                    errMsg = "鍙橀鍣ㄦ晠闅�";
-                } else {
-                    errMsg = errMsg+"---"+"鍙橀鍣ㄦ晠闅�";
-                }
-                back = true;
-            }
-            if (this.isErrOther7()) {
-                if (!back){
-                    errMsg = "鎺ヨЕ鍣ㄦ晠闅�";
-                } else {
-                    errMsg = errMsg+"---"+"鎺ヨЕ鍣ㄦ晠闅�";
-                }
-                back = true;
-            }
-            if (this.isErrOther8()) {
-                if (!back){
-                    errMsg = "椤跺崌鐢垫満鎺ヨЕ鍣ㄦ晠闅�";
-                } else {
-                    errMsg = errMsg+"---"+"椤跺崌鐢垫満鎺ヨЕ鍣ㄦ晠闅�";
-                }
-                back = true;
-            }
-            if (back){
-                return errMsg;
-            }
-        }
 
-        return errorDev;
+    public int getErrorDev$(){
+        if (errOther1){
+            return 1;
+        }
+        if (errOther2){
+            return 2;
+        }
+        if (errOther3){
+            return 3;
+        }
+        if (errOther4){
+            return 4;
+        }
+        if (errOther5){
+            return 5;
+        }
+        if (errOther6){
+            return 6;
+        }
+        if (errOther7){
+            return 7;
+        }
+        return 0;
+    }
+
+    public java.util.List<java.util.Map<String, Object>> getExceptions() {
+        java.util.List<java.util.Map<String, Object>> list = new java.util.ArrayList<>();
+        if (errOther1) list.add(createException(0, "鐢佃矾淇濇姢鍣ㄦ柇寮�"));
+        if (errOther2) list.add(createException(1, "鍏夌數寮傚父"));
+        if (errOther3) list.add(createException(2, "杩愯瓒呮椂"));
+        if (errOther4) list.add(createException(3, "鍗犱綅瓒呮椂"));
+        if (errOther5) list.add(createException(4, "鏈変换鍔℃棤璐ф晠闅�"));
+        if (errOther6) list.add(createException(5, "鍙橀鍣ㄦ晠闅�"));
+        if (errOther7) list.add(createException(6, "鎺ヨЕ鍣ㄦ晠闅�"));
+        if (errOther8) list.add(createException(7, "椤跺崌鐢垫満鎺ヨЕ鍣ㄦ晠闅�"));
+        return list;
+    }
+
+    private java.util.Map<String, Object> createException(int code, String msg) {
+        java.util.Map<String, Object> map = new java.util.HashMap<>();
+        map.put("code", code);
+        map.put("msg", msg);
+        return map;
     }
 //    public Integer getNearbySta() {
 //        if (getNearbySta == null) return 0;

--
Gitblit v1.9.1