From 1af93b3d4833dfead180264f41cfaa896ac7d24b Mon Sep 17 00:00:00 2001
From: 1 <1>
Date: 星期六, 22 十一月 2025 08:21:58 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/BasDevpOptServiceImpl.java  |    5 +
 src/main/java/com/zy/core/model/protocol/StaProtocol.java          |   18 ++++++
 src/main/java/com/zy/asrs/service/BasDevpOptService.java           |    1 
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java        |   69 +++++++++++++++++++++-
 src/main/java/com/zy/asrs/mapper/BasDevpOptMapper.java             |    2 
 src/main/java/com/zy/asrs/entity/param/AgvTaskAssignmentParam.java |    8 ++
 src/main/java/com/zy/core/MainProcess.java                         |   19 +++---
 src/main/java/com/zy/asrs/entity/BasDevpOpt.java                   |    3 
 src/main/java/com/zy/core/thread/SiemensDevpThread.java            |   47 +++++++++++++--
 src/main/resources/mapper/BasDevpOptMapper.xml                     |    7 ++
 10 files changed, 157 insertions(+), 22 deletions(-)

diff --git a/src/main/java/com/zy/asrs/entity/BasDevpOpt.java b/src/main/java/com/zy/asrs/entity/BasDevpOpt.java
index 55d286f..b1409f6 100644
--- a/src/main/java/com/zy/asrs/entity/BasDevpOpt.java
+++ b/src/main/java/com/zy/asrs/entity/BasDevpOpt.java
@@ -110,7 +110,7 @@
 
     public BasDevpOpt() {}
 
-    public BasDevpOpt(Integer wrkNo,Date sendTime,Integer sourceSta,Integer posSta,Date updateTime,String sourceLoading,String barcode,Long frontErr,Long backErr,Long highErr,Long leftErr,Long rightErr,Long barcodeErr) {
+    public BasDevpOpt(Integer wrkNo,Date sendTime,Integer sourceSta,Integer posSta,Date updateTime,String sourceLoading,String barcode,Long frontErr,Long backErr,Long highErr,Long leftErr,Long rightErr,Long barcodeErr,String posLoading) {
         this.wrkNo = wrkNo;
         this.sendTime = sendTime;
         this.sourceSta = sourceSta;
@@ -124,6 +124,7 @@
         this.leftErr = leftErr;
         this.rightErr = rightErr;
         this.barcodeErr = barcodeErr;
+        this.posLoading =posLoading;
     }
 
 //    BasDevpOpt basDevpOpt = new BasDevpOpt(
diff --git a/src/main/java/com/zy/asrs/entity/param/AgvTaskAssignmentParam.java b/src/main/java/com/zy/asrs/entity/param/AgvTaskAssignmentParam.java
index 1ce2289..221871e 100644
--- a/src/main/java/com/zy/asrs/entity/param/AgvTaskAssignmentParam.java
+++ b/src/main/java/com/zy/asrs/entity/param/AgvTaskAssignmentParam.java
@@ -35,15 +35,23 @@
         switch (basAgvMast.getIoType()){
             case 0:
                 getAgvTaskAssignmentParam0(basAgvMast);
+                taskTyp = "1FQ3";
+                ctnrTyp = "1";
                 return;
             case 1:
                 getAgvTaskAssignmentParam1(basAgvMast);
+//                taskTyp = "1FQ2";
+                ctnrTyp = "1";
                 return;
             case 2:
                 getAgvTaskAssignmentParam2(basAgvMast);
+                taskTyp = "1FQ1";
+                ctnrTyp = "1";
                 return;
             case 3:
                 getAgvTaskAssignmentParam3(basAgvMast);
+//                taskTyp = "1FQ4";
+                ctnrTyp = "1";
                 return;
             default:
                 return;
diff --git a/src/main/java/com/zy/asrs/mapper/BasDevpOptMapper.java b/src/main/java/com/zy/asrs/mapper/BasDevpOptMapper.java
index 9d835ab..bd5ed5b 100644
--- a/src/main/java/com/zy/asrs/mapper/BasDevpOptMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/BasDevpOptMapper.java
@@ -8,5 +8,5 @@
 @Mapper
 @Repository
 public interface BasDevpOptMapper extends BaseMapper<BasDevpOpt> {
-
+    String getErr(Integer wrkNo);
 }
diff --git a/src/main/java/com/zy/asrs/service/BasDevpOptService.java b/src/main/java/com/zy/asrs/service/BasDevpOptService.java
index 13d23b7..34ad01a 100644
--- a/src/main/java/com/zy/asrs/service/BasDevpOptService.java
+++ b/src/main/java/com/zy/asrs/service/BasDevpOptService.java
@@ -4,5 +4,6 @@
 import com.baomidou.mybatisplus.service.IService;
 
 public interface BasDevpOptService extends IService<BasDevpOpt> {
+    String getErr(Integer wrkNo);
 
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/BasDevpOptServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasDevpOptServiceImpl.java
index 9f7d39c..570aa8a 100644
--- a/src/main/java/com/zy/asrs/service/impl/BasDevpOptServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/BasDevpOptServiceImpl.java
@@ -8,5 +8,8 @@
 
 @Service("basDevpOptService")
 public class BasDevpOptServiceImpl extends ServiceImpl<BasDevpOptMapper, BasDevpOpt> implements BasDevpOptService {
-
+    @Override
+    public String getErr(Integer wrkNo){
+        return baseMapper.getErr(wrkNo);
+    }
 }
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 69c5cfe..afd9cbf 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -111,6 +111,8 @@
     private BasArmMastService basArmMastService;
     @Autowired
     private ApiLogService apiLogService;
+    @Autowired
+    private BasDevpOptService basDevpOptService;
 
     @Value("${wms.url}")
     private String wmsUrl;
@@ -201,6 +203,7 @@
                         MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg));
                     }
                     staProtocol.setWorkNo(wrkNo);
+                    staProtocol.setErrCode(errMsg);
                     News.info("寮傚父鍒ゆ柇{}鍏ュ簱鍥為��锛歿}锛屼换鍔″彿锛歿}", inSta.getStaNo(), errMsg,wrkNo);
                     wrkNo++;
                     staProtocol.setStaNo(inSta.getBackSta().shortValue());
@@ -229,6 +232,7 @@
                             MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
                         }
                         staProtocol.setWorkNo(wrkNo);
+                        staProtocol.setErrCode(errMsg);
                         News.info("鏉$爜鍒ゆ柇{}鍏ュ簱鍥為��锛歿}锛屼换鍔″彿锛歿}", inSta.getStaNo(), errMsg,wrkNo);
                         wrkNo++;
                         staProtocol.setStaNo(inSta.getBackSta().shortValue());
@@ -299,7 +303,6 @@
                     }
                     try {
                         LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
-
                         SearchLocParam param = new SearchLocParam();
                         param.setBarcode(barcode);
                         param.setIoType(1);
@@ -334,6 +337,10 @@
                             staProtocol.setWorkNo(wrkNo);
                             staProtocol.setStaNo(inSta.getBackSta().shortValue());
                             devpThread.setPakMk(staProtocol.getSiteId(), false);
+                            switch (jsonObject.getInteger("code")){
+                                case 700: staProtocol.setErrCode("鏈粍鎵�");break;
+                                case 500: staProtocol.setErrCode("宸ヤ綔妗�/搴撳瓨鏉$爜鏁版嵁宸插瓨鍦�");break;
+                            }
                             MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                             News.info("浠诲姟涓嬪彂鍒ゆ柇{}鍏ュ簱鍥為��锛歿}锛岄敊璇紪鍙穥},浠诲姟鍙凤細{}", inSta.getStaNo(), errMsg,jsonObject.getInteger("code"),wrkNo);
                             wrkNo++;
@@ -2259,7 +2266,8 @@
                 WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
                 if (null == wrkMast) {
                     if(staProtocol.getWorkNo() > 9999){ //寮傚父閫�鍑�
-                        MessageQueue.offer(SlaveType.Led, 2, new Task(3, "寮傚父閫�鍑�"));
+                        String err = basDevpOptService.getErr(staProtocol.getWorkNo());
+                        MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, err));
                     }
                     continue;
                 }
@@ -2390,6 +2398,8 @@
             // 鍛戒护闆嗗悎
             boolean reset = true;
             for (Integer staNo : led.getStaArr()) {
+//                System.out.println("staArr = " + staNo);
+
                 // 鑾峰彇鍙夎溅绔欑偣
                 StaProtocol staProtocol = devpThread.getStation().get(staNo);
                 if (staProtocol == null) { continue; }
@@ -3553,7 +3563,8 @@
             }
             if(rgvProtocol.getStatusType1() == RgvStatusType.WORKING){
                 rgvThread.setPaking(true);
-            }else if(rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0 && rgvProtocol.getStatusType1() == RgvStatusType.IDLE){
+            }
+            if(rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0 && rgvProtocol.getStatusType1() == RgvStatusType.IDLE){
                 rgvThread.setPaking(true);
             }
             if(rgvProtocol.isLoaded1ing() && rgvProtocol.isLoaded2ing()){
@@ -4767,7 +4778,9 @@
 //                        News.info("{}鍙风珯鐐瑰瓨鍦ㄤ换鍔℃墽琛屼腑锛岃绛夊緟浠诲姟鎵ц瀹屾瘯锛歿}", outStaAgv.getStaNo(), barcode);
                         continue;
                     }
-
+                    if(barcode.equals("0")){
+                        continue;
+                    }
                     List<LocMast> locMastList = locMastService.selectList(new EntityWrapper<LocMast>().eq("barcode", barcode));
                     if (!locMastList.isEmpty()) {
                         News.info("{}鍙风珯鐐规潯鐮佷俊鎭噸澶嶏細{}", outStaAgv.getStaNo(), barcode);
@@ -4873,6 +4886,52 @@
         }
     }
 
+    /*
+     * agv浠诲姟鐢熸垚 寮傚父閫佸埌鍏ュ簱鍙�
+     * */
+    public synchronized void agvTaskCreateException() {
+        // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+        for (DevpSlave devp : slaveProperties.getDevp()) {
+            Integer outStaAgv = 1041;
+            // 鑾峰彇鍏ュ簱绔欎俊鎭�
+            SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+            StaProtocol staProtocol = devpThread.getStation().get(outStaAgv);
+            if (staProtocol == null) {
+                continue;
+            } else {
+                staProtocol = staProtocol.clone();
+            }
+            // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
+            if (!staProtocol.isLoading()){
+                continue;
+            }
+
+            if (staProtocol.isAutoing() && staProtocol.getWorkNo() > 10000) {
+
+                // 鍒ゆ柇閲嶅宸ヤ綔妗�
+                List<BasAgvMast> basAgvMastList = basAgvMastService.selectList(new EntityWrapper<BasAgvMast>().eq("sta_no", 1037));
+                if (!basAgvMastList.isEmpty()) {
+                    News.info("{}鍙风珯鐐瑰瓨鍦ㄤ换鍔℃墽琛屼腑锛岀瓑寰呬换鍔℃墽琛屽畬姣�!!!", outStaAgv);
+                    continue;
+                }
+                // 浠诲姟鐢熸垚鍖� --------------------------------------------------------------------------
+
+                BasAgvMast basAgvMast = new BasAgvMast();
+                try {
+                    basAgvMast.setTaskNo(staProtocol.getWorkNo());
+                    basAgvMast.setSourceStaNo(1041);
+                    basAgvMast.setStaNo(1037);
+                    basAgvMast.setDevpId(devp.getId());
+                    basAgvMast.setIoType(3);//杈撻��==銆嬭緭閫佺嚎绔欑偣 3
+                    basAgvMastService.insert(basAgvMast);
+                    break;
+                } catch (Exception e) {
+                    News.error(JSON.toJSONString(e.getMessage()));
+                }
+            }
+        }
+    }
+
 
     /*
      * agv浠诲姟涓嬪彂:AGV搴撲綅==銆嬭緭閫佺嚎绔欑偣
@@ -4916,6 +4975,8 @@
         }
     }
 
+
+
     /*
      * agv浠诲姟涓嬪彂:AGV搴撲綅==銆婣GV搴撲綅
      * */
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index fbb579c..534f44b 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -165,15 +165,16 @@
                     continue;
                 }
                 //agv浠诲姟涓嬪彂
-//                mainService.agvTaskAssignment0();//0===銆�1  AGV搴撲綅==銆嬭緭閫佺嚎绔欑偣  0
-//                mainService.agvTaskAssignment1();//0===銆�1  AGV搴撲綅==銆婣GV搴撲綅  1
-//                mainService.agvTaskAssignment2();//0===銆�1  杈撻�佺嚎绔欑偣==銆婣GV搴撲綅  2
-//                mainService.agvTaskAssignment3();//0===銆�1  杈撻�佺嚎绔欑偣==銆嬭緭閫佺嚎绔欑偣  3
-//
-//
-//                mainService.agvTaskCreateFull();//浠诲姟鐢熸垚  鍑哄簱鍙�==銆婣GV搴撲綅
-//                mainService.agvTaskCreateEmpty();//浠诲姟鐢熸垚  鍑哄簱鍙�==銆婣GV搴撲綅
-//                mainService.agvTaskCreateR();//浠诲姟鐢熸垚  AGV搴撲綅==銆嬪叆搴撳彛
+                mainService.agvTaskAssignment0();//0===銆�1  AGV搴撲綅==銆嬭緭閫佺嚎绔欑偣  0
+                mainService.agvTaskAssignment1();//0===銆�1  AGV搴撲綅==銆婣GV搴撲綅  1
+                mainService.agvTaskAssignment2();//0===銆�1  杈撻�佺嚎绔欑偣==銆婣GV搴撲綅  2
+                mainService.agvTaskAssignment3();//0===銆�1  杈撻�佺嚎绔欑偣==銆嬭緭閫佺嚎绔欑偣  3
+
+
+                mainService.agvTaskCreateFull();//浠诲姟鐢熸垚  鍑哄簱鍙�==銆婣GV搴撲綅
+                mainService.agvTaskCreateEmpty();//浠诲姟鐢熸垚  鍑哄簱鍙�==銆婣GV搴撲綅
+                mainService.agvTaskCreateR();//浠诲姟鐢熸垚  AGV搴撲綅==銆嬪叆搴撳彛
+                mainService.agvTaskCreateException();//浠诲姟鐢熸垚  鍑哄簱鍙�==銆嬪叆搴撳彛
 
             } catch (Exception e) {
                 e.printStackTrace();
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 8bcba40..3114eae 100644
--- a/src/main/java/com/zy/core/model/protocol/StaProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -14,6 +14,9 @@
     // 绔欑偣缂栧彿
     private Integer siteId;
 
+    //閿欒缂栧彿
+    private String errCode = null;
+
     // ----------------------------------------------------------------
     // 宸ヤ綔鍙�
     private Integer workNo = 0;
@@ -156,6 +159,21 @@
     private Boolean sensorDecL = false; //宸︾Щ鏂瑰悜鍑忛��
     private Boolean sensorArriveR = false; //鍙崇Щ鏂瑰悜鍒颁綅
     private Boolean sensorDecR = false; //鍙崇Щ鏂瑰悜鍑忛��
+    
+    //agv----------------------------------------------------------
+    private Boolean heartbeatDevp = false;  //蹇冭烦
+    private Boolean conveyorAllowPick = false;//杈撻�佺嚎鍏佽鍙栬揣
+    private Boolean conveyorAllowPlace = false;//杈撻�佺嚎鍏佽鏀捐揣
+    private Boolean conveyorPickDone = false;//杈撻�佺嚎鍙栬揣瀹屾垚纭
+    private Boolean conveyorPlaceDone = false;//杈撻�佺嚎鏀捐揣瀹屾垚纭
+    private Boolean safetyDoorOpen = false;//瀹夊叏闂ㄦ墦寮�
+    private Boolean externalEmergencyStop = false;//澶栭儴鎬ュ仠
+    private Boolean heartbeatAgv = false;
+    private Boolean agvRequestPlace = false;//AGV 鐢宠鏀捐揣
+    private Boolean agvRequestPick = false;//AGV 鐢宠鍙栬揣
+    private Boolean agvPickDone = false;//AGV 鍙栬揣瀹屾垚
+    private Boolean agvPlaceDone = false;//AGV 鏀捐揣瀹屾垚
+    private Boolean agvForbidden = false;//AGV 绂佹杩愯
 
 
     public BasDevpErrorLog toSqlModelError(){
diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index b24cb6d..25712d2 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -167,6 +167,10 @@
         put(1036, 512);put(1103, 476);put(1047, 452);put(2037, 270);put(4001,294);
 
     }};
+    public static final Map<Integer, Integer> siteAgvOffsetMap = new HashMap<Integer, Integer>() {{
+        put(1037, 0);put(1039, 2);put(1041, 4);put(2033, 0);put(2034,2);put(4003,4);put(4006,6);
+
+    }};
 
     // 鐗规畩绔欑偣闆嗗悎
     private static final Set<Integer> specialSites = new HashSet<>(
@@ -179,6 +183,8 @@
     private static final Set<Integer> specialSites3 = new HashSet<>(//鏈烘鑷傜珯鐐�
             Arrays.asList(1098,1093,1087,1082,1074,1071,1061,1058));
 
+    private static final Set<Integer> specialAgvSites = new HashSet<>(//agv鍙栨斁璐х珯鐐�
+            Arrays.asList(1037,1039,1041,2033,2034,4003,4006));
 
     public static final ArrayList<Integer> BarcodeList = new ArrayList<Integer>() {{
         add(0); add(1); add(2);
@@ -329,6 +335,9 @@
                         write((StaProtocol)task.getData());
                         log.error("杈撻�佺嚎涓嬪彂鍛戒护锛�"+((StaProtocol) task.getData()).getWorkNo()+","+((StaProtocol) task.getData()).getStaNo());
                         break;
+//                    case 3:
+//                        writeAgv((StaProtocol)task.getData());
+//                        break;
                     default:
                         break;
                 }
@@ -449,7 +458,8 @@
         OperateResultExOne<byte[]> result4 = null;//1054-1079
         OperateResultExOne<byte[]> result5 = null;//1080-1110
         OperateResultExOne<byte[]> resultErr = null;
-        OperateResultExOne<byte[]> resultAlarm = null;
+        OperateResultExOne<byte[]> resultPlc = null;
+        OperateResultExOne<byte[]> resultAgv = null;
 
         if(staNoSize == 102){
             result1 = siemensS7Net.Read("DB100.0", (short) (2768));//1001-1028
@@ -458,14 +468,15 @@
             result4 = siemensS7Net.Read("DB103.0", (short) (2824));//1054-1079
             result5 = siemensS7Net.Read("DB102.0", (short) (3428));//1080-1110
             resultErr = siemensS7Net.Read("DB3.0", (short) (536));
-//            resultAlarm = siemensS7Net.Read("DB800.0", (short) (220));
+//            resultAgv = siemensS7Net.Read("DB901.0", (short) (5)); //agv鍙栨斁璐ц姹�
+//            resultPlc = siemensS7Net.Read("DB902.0", (short) (5)); //杈撻�佺嚎纭
         }else{
             result1 = siemensS7Net.Read("DB200.0", (short) (3000));//2001-2030
             result2 = siemensS7Net.Read("DB201.0", (short) (720));//2031-2037
             result3 = siemensS7Net.Read("DB400.0", (short) (600));//4001-4006
             resultErr = siemensS7Net.Read("DB3.0", (short) (354));
-//            resultAlarm = siemensS7Net.Read("DB800.0", (short) (126));
-
+//            resultAgv = siemensS7Net.Read("DB901.0", (short) (7)); //agv鍙栨斁璐ц姹�
+//            resultPlc = siemensS7Net.Read("DB902.0", (short) (7)); //杈撻�佺嚎纭
         }
 
 
@@ -631,6 +642,30 @@
                     staProtocol.setSensorDecL(statusSign[19]);
                     staProtocol.setSensorArriveR(statusSign[20]);
                     staProtocol.setSensorDecR(statusSign[21]);
+
+//                    Integer offsetAgv = siteAgvOffsetMap.get(siteId);
+//
+//                    boolean[] statusPlc = siemensS7Net.getByteTransform().TransBool(resultPlc.Content, offsetAgv, 1);
+//                    boolean[] statusAgv = siemensS7Net.getByteTransform().TransBool(resultAgv.Content, offsetAgv, 1);
+//
+//                    if(specialAgvSites.contains(siteId)){
+//                        // 蹇冭烦
+//                        staProtocol.setHeartbeatDevp(statusPlc[0]);
+//                        staProtocol.setHeartbeatAgv(statusAgv[0]);
+//                        // 杈撻�佺嚎锛圥LC锛�
+//                        staProtocol.setConveyorAllowPick(statusPlc[1]);
+//                        staProtocol.setConveyorAllowPlace(statusPlc[2]);
+//                        staProtocol.setConveyorPickDone(statusPlc[3]);
+//                        staProtocol.setConveyorPlaceDone(statusPlc[4]);
+//                        staProtocol.setSafetyDoorOpen(statusPlc[5]);
+//                        staProtocol.setExternalEmergencyStop(statusPlc[6]);
+//                        // AGV
+//                        staProtocol.setAgvRequestPlace(statusAgv[1]);
+//                        staProtocol.setAgvRequestPick(statusAgv[2]);
+//                        staProtocol.setAgvPickDone(statusAgv[3]);
+//                        staProtocol.setAgvPlaceDone(statusAgv[4]);
+//                        staProtocol.setAgvForbidden(statusAgv[5]);
+//                    }
 
 
                     if( (staProtocol.getPassTimeOut() ||
@@ -899,8 +934,8 @@
                     staProtocol.isHighErr()? 1L:0L,
                     staProtocol.isLeftErr()? 1L:0L,
                     staProtocol.isRightErr()? 1L:0L,
-                    staProtocol.isBarcodeErr()? 1L:0L
-
+                    staProtocol.isBarcodeErr()? 1L:0L,
+                    staProtocol.getErrCode()
             );
             bean.insert(basDevpOpt);
         } catch (Exception ignore) {
diff --git a/src/main/resources/mapper/BasDevpOptMapper.xml b/src/main/resources/mapper/BasDevpOptMapper.xml
index 26f9d6f..54e0b35 100644
--- a/src/main/resources/mapper/BasDevpOptMapper.xml
+++ b/src/main/resources/mapper/BasDevpOptMapper.xml
@@ -23,4 +23,11 @@
 
     </resultMap>
 
+    <select id="getErr" resultType="String">
+        SELECT TOP 1 pos_loading
+        FROM asr_bas_devp_opt
+        WHERE wrk_no = #{wrkNo}
+        ORDER BY send_time DESC
+    </select>
+
 </mapper>

--
Gitblit v1.9.1