From 97c788f31a57b4e8c3fc8091dc29aab598adeebb Mon Sep 17 00:00:00 2001
From: dubin <bindu_bean@163.com>
Date: 星期日, 04 一月 2026 08:07:00 +0800
Subject: [PATCH] #1

---
 src/main/java/com/zy/common/model/MatDto.java               |   14 
 src/main/java/com/zy/asrs/controller/SiteController.java    |   37 +-
 src/main/java/com/zy/core/thread/LedThread.java             |    4 
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  398 ++++++++++++++++++++++----------
 src/main/java/com/zy/asrs/entity/WrkDetl.java               |   16 
 src/main/resources/mapper/WrkMastMapper.xml                 |    2 
 src/main/webapp/static/js/console.map.js                    |  142 +++++++++++
 src/main/java/com/zy/core/MainProcess.java                  |    2 
 src/main/java/com/zy/core/thread/SiemensDevpThread.java     |   64 ++++-
 src/main/resources/application.yml                          |   24 +-
 10 files changed, 520 insertions(+), 183 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/SiteController.java b/src/main/java/com/zy/asrs/controller/SiteController.java
index 9d1aeea..7926976 100644
--- a/src/main/java/com/zy/asrs/controller/SiteController.java
+++ b/src/main/java/com/zy/asrs/controller/SiteController.java
@@ -14,6 +14,7 @@
 import com.zy.core.enums.SlaveType;
 import com.zy.core.model.DevpSlave;
 import com.zy.core.model.Task;
+import com.zy.core.model.command.LiftCommand;
 import com.zy.core.model.protocol.StaProtocol;
 import com.zy.core.properties.SlaveProperties;
 import com.zy.core.DevpThread;
@@ -175,23 +176,27 @@
             Map<Integer, StaProtocol> station = devpThread.getStation();
             for (Map.Entry<Integer, StaProtocol> entry : station.entrySet()) {
                 if (siteId.equals(entry.getKey())) {
-                    StaProtocol staProtocol = entry.getValue();
-                    if (staProtocol == null) {
-                        continue;
-                    } else {
-                        staProtocol = staProtocol.clone();
-                    }
-                    if (workNo != null) {
-                        staProtocol.setWorkNo(workNo);
-                    }
-                    if (staNo != null) {
-                        staProtocol.setStaNo(staNo);
-                    }
-                    if (pakMk != null) {
-                        staProtocol.setPakMk(pakMk.equals("Y"));
-                    }
+//                    StaProtocol staProtocol = entry.getValue();
+//                    if (staProtocol == null) {
+//                        continue;
+//                    } else {
+//                        staProtocol = staProtocol.clone();
+//                    }
+//                    if (workNo != null) {
+//                        staProtocol.setWorkNo(workNo);
+//                    }
+//                    if (staNo != null) {
+//                        staProtocol.setStaNo(staNo);
+//                    }
+//                    if (pakMk != null) {
+//                        staProtocol.setPakMk(pakMk.equals("Y"));
+//                    }
+                    LiftCommand command = new LiftCommand();
+                    command.setWorkNo(Integer.valueOf(workNo));
+                    command.setSourceStaNo(siteId);
+                    command.setTargetStaNo(Integer.valueOf(staNo));
 
-                    boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                    boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, command));
                     if (result) {
                         return R.ok();
                     } else {
diff --git a/src/main/java/com/zy/asrs/entity/WrkDetl.java b/src/main/java/com/zy/asrs/entity/WrkDetl.java
index cb0dade..b428b45 100644
--- a/src/main/java/com/zy/asrs/entity/WrkDetl.java
+++ b/src/main/java/com/zy/asrs/entity/WrkDetl.java
@@ -424,14 +424,14 @@
         return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime);
     }
 
-    public String getCstateid$() {
-        KcztMapService service = SpringUtils.getBean(KcztMapService.class);
-        KcztMap kcztMap = service.selectOne(new EntityWrapper<KcztMap>().eq("cstateid", this.cstateid));
-        if (!Cools.isEmpty(kcztMap)){
-            return String.valueOf(kcztMap.getVname());
-        }
-        return String.valueOf(this.cstateid);
-    }
+//    public String getCstateid$() {
+//        KcztMapService service = SpringUtils.getBean(KcztMapService.class);
+//        KcztMap kcztMap = service.selectOne(new EntityWrapper<KcztMap>().eq("cstateid", this.cstateid));
+//        if (!Cools.isEmpty(kcztMap)){
+//            return String.valueOf(kcztMap.getVname());
+//        }
+//        return String.valueOf(this.cstateid);
+//    }
 
     public void sync(Object source) {
         Synchro.Copy(source, this);
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 e9dd9ac..13af51d 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -36,6 +36,7 @@
 import com.zy.core.thread.LedThread;
 import com.zy.core.thread.SiemensDevpThread;
 import com.zy.system.service.ConfigService;
+import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -43,6 +44,7 @@
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 绔嬩綋浠撳簱WCS绯荤粺涓绘祦绋嬩笟鍔�
@@ -122,6 +124,11 @@
                     continue;
                 }
 
+                String barcode = barcodeThread.getBarcode();
+                if (Cools.isEmpty(barcode)){
+                    continue;
+                }
+
                 if (staProtocol.isAutoing()
                         && staProtocol.isInEnable()
                         && !staProtocol.isEmptyMk()
@@ -129,10 +136,10 @@
                         && staProtocol.isPakMk()) {
                     News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛�");
 
-                    String barcode = barcodeThread.getBarcode();
+
                     if (!Cools.isEmpty(barcode)) {
                         News.info("" + mark + " - 1" + " - {}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode);
-                        if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) {
+                        if ("NG".endsWith(barcode) || "No Read".equals(barcode) || "empty".equals(barcode)) {
                             News.info("" + mark + " - 2" + " - 鎵爜澶辫触1 ===>> {}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{},绔欑偣:{}", inSta.getBarcode(), barcode, inSta.getStaNo());
                             // led 寮傚父鏄剧ず
                             if (ledThread != null) {
@@ -156,12 +163,12 @@
                     //杩囨护鍒ゆ柇锛岄槻姝㈡嫞鏂欏啀鍏ュ簱璐х墿锛岀粡杩囧叆搴撶珯鍐嶅叆搴撴椂锛岃閫�鍥炲埌閫�搴撶珯
                     WrkMast wrkMast1 = wrkMastMapper.selectPakInStepBarcode(barcode);
                     if (wrkMast1 != null) {
-                        if (wrkMast1.getIoType() == 103 || wrkMast1.getIoType() == 107 || wrkMast1.getIoType() == 104) {
+                        if (wrkMast1.getIoType() == 103 || wrkMast1.getIoType() == 107 || wrkMast1.getIoType() == 104|| wrkMast1.getIoType() == 53 || wrkMast1.getIoType() == 57 || wrkMast1.getIoType() == 54) {
                             continue;
                         }
                     }
                     if (wrkMast != null) {
-                        News.error("" + mark + " - 4" + " - 宸ヤ綔妗d腑宸插瓨鍦ㄨ绔欑姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑鏁版嵁,宸ヤ綔鍙�={}", wrkMast.getWrkNo());
+                        News.error("" + mark + " - 4" + " - 宸ヤ綔妗d腑宸插瓨鍦ㄨ绔欑姸鎬佷负锛� 3.寮�濮嬫墽琛屽叆搴撲换鍔� 锛夌殑鏁版嵁,宸ヤ綔鍙�={}", wrkMast.getWrkNo());
 
                         // led 寮傚父鏄剧ず
                         if (ledThread != null) {
@@ -220,6 +227,9 @@
 
                             barcodeThread.setBarcode("");
                             boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, command));
+                            if (result) {
+                                News.info("WCS--->PLC涓嬪彂浠诲姟鎴愬姛:{}",command.toString());
+                            }
                             if (!result) {
                                 throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
                             }
@@ -227,6 +237,7 @@
                             currentWrkMast.setWrkSts(3L);// 3.璁惧鎵ц涓�
                             currentWrkMast.setCrnStrTime(new Date());
                             wrkMastService.updateById(currentWrkMast);
+                            Thread.sleep(3000); // 寤舵椂3S
                         } else {
                             News.error("" + mark + " - 5" + " - 璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
 
@@ -234,6 +245,19 @@
                             if (ledThread != null) {
                                 String errorMsg = jsonObject.getString("msg");
                                 MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg));
+                            }
+
+                            //鎵樼洏閫�鍥�
+//                            LiftCommand command = new LiftCommand();
+//                            command.setWorkNo(9998);
+//                            command.setSourceStaNo(inSta.getStaNo());
+//                            command.setTargetStaNo(inSta.getBackSta());
+                            Integer back = 999;
+
+                            barcodeThread.setBarcode("");
+                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(4, back));
+                            if (!result) {
+                                throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
                             }
                         }
 
@@ -293,17 +317,18 @@
                             continue;
                         }
 
-                    WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode);
+                        WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode);
 //                        WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo().intValue());
-//                        if (wrkMast == null) {
-//                            // 鏃犳嫞鏂欐暟鎹�
-//                            continue;
-//                        }
+                        if (wrkMast == null) {
+                            // 鏃犳嫞鏂欐暟鎹�
+                            continue;
+                        }
 
                         if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107)
                                 || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) {
                             continue;
                         }
+
 
                         // 鑾峰彇鐩爣绔�
                         Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
@@ -348,7 +373,7 @@
                             param.setLocType1(locTypeDto.getLocType1());
                             String response = new HttpHandler.Builder()
                                     .setUri(wmsUrl)
-                                    .setPath("/rpc/pakin/pick/loc/v1")
+                                    .setPath("/rpc/pakin/loc/returnWarehouse")
                                     .setJson(JSON.toJSONString(param))
                                     .build()
                                     .doPost();
@@ -361,12 +386,12 @@
                                     continue;
                                 }
 
-                                if(newWrkMast.getWrkSts() != 53 && newWrkMast.getWrkSts() != 57) {
+                                if(newWrkMast.getIoType() != 53 && newWrkMast.getIoType() != 57) {
                                     News.error("" + mark + " - 3" + " - 鎷i�夌洏鐐瑰洖搴撳伐浣滄。绫诲瀷寮傚父锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId());
                                     continue;
                                 }
 
-                                if (wrkMast.getWrkSts() != 2) {
+                                if (newWrkMast.getWrkSts() != 2) {
                                     News.error("" + mark + " - 3" + " - 鎷i�夌洏鐐瑰洖搴撳伐浣滄。鐘舵�佸紓甯革紒锛侊紒 [plc缂栧彿锛歿}]", devp.getId());
                                     continue;
                                 }
@@ -445,9 +470,9 @@
             return;
         }
 
-        if (!staProtocol.isOutEnable()) {
-            return;
-        }
+//        if (!staProtocol.isOutEnable()) {
+//            return;
+//        }
 
         //妫�鏌ユ槸鍚︽湁姝e湪鎵ц鐨勪换鍔�
         List<WrkMast> workingWrkMast = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_sts", 3, 12));
@@ -494,9 +519,9 @@
                 continue;
             }
 
-            if (liftProtocol.getWorkNo() <= 0) {
-                continue;
-            }
+//            if (liftProtocol.getWorkNo() <= 0) {
+//                continue;
+//            }
 
             if (liftProtocol.getMode() != 1) {
                 continue;
@@ -506,23 +531,37 @@
                 continue;
             }
 
-            WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", liftProtocol.getWorkNo()));
-            if (wrkMast == null) {
-                continue;
-            }
+//            WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", liftProtocol.getWorkNo()));
+//            if (wrkMast == null) {
+//                continue;
+//            }
 
-            if (wrkMast.getWrkSts() == 3) {
-                wrkMast.setWrkSts(4L);
-                wrkMast.setCrnEndTime(new Date());
-                wrkMast.setIoTime(new Date());
-                wrkMastService.updateById(wrkMast);
-            }else if (wrkMast.getWrkSts() == 12) {
-                wrkMast.setWrkSts(14L);
-                wrkMast.setCrnEndTime(new Date());
-                wrkMast.setIoTime(new Date());
-                wrkMastService.updateById(wrkMast);
-            }else {
-                News.error("鏈煡鐨勫伐浣滅姸鎬�");
+            List<WrkMast> wrkMastList = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_sts", 3,12));
+            for (WrkMast wrkMast : wrkMastList) {
+                if (wrkMast.getWrkSts() == 3) {
+                    String locNo = wrkMast.getLocNo();
+                    Integer staNo = Utils.getStaNoByLocNo(locNo);
+                    StaProtocol staProtocol = devpThread.getStation().get(staNo);
+                    if (staProtocol.getWorkNo() <= 0 || !staProtocol.isLoading() || !staProtocol.isAutoing() || !Integer.valueOf(staProtocol.getWorkNo()).equals(wrkMast.getWrkNo())){
+                        continue;
+                    }
+                    wrkMast.setWrkSts(4L);
+                    wrkMast.setCrnEndTime(new Date());
+                    //wrkMast.setIoTime(new Date());
+                    wrkMastService.updateById(wrkMast);
+                }else if (wrkMast.getWrkSts() == 12) {
+                    Integer targetStaNo = wrkMast.getStaNo();
+                    StaProtocol staProtocol = devpThread.getStation().get(targetStaNo);
+                    if (staProtocol.getWorkNo() <= 0 || !staProtocol.isLoading() || !staProtocol.isAutoing() || !Integer.valueOf(staProtocol.getWorkNo()).equals(wrkMast.getWrkNo())){
+                        continue;
+                    }
+                    wrkMast.setWrkSts(14L);
+                    wrkMast.setCrnEndTime(new Date());
+                    //wrkMast.setIoTime(new Date());
+                    wrkMastService.updateById(wrkMast);
+                }else {
+                    News.error("鏈煡鐨勫伐浣滅姸鎬�");
+                }
             }
         }
     }
@@ -659,8 +698,6 @@
             DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
             // 鍛戒护闆嗗悎
             List<LedCommand> commands = new ArrayList<>();
-//            // 宸ヤ綔妗i泦鍚�
-//            List<WrkMast> wrkMasts = new ArrayList<>();
             List<Integer> workNoList = new ArrayList<>();
             for (Integer staNo : led.getStaArr()) {
                 // 鑾峰彇鍙夎溅绔欑偣
@@ -678,8 +715,7 @@
                 String barcode = null;
 
                 // 鑾峰彇宸ヤ綔妗f暟鎹�
-                WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
-//                if (null == wrkMast || wrkMast.getWrkSts() < 14 || wrkMast.getIoType() < 100) { continue; }
+                WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no",staProtocol.getWorkNo()).in("io_type",101,103,104,107));
                 if (null == wrkMast) {
                     List<WrkMastLog> wrkMastLogs = wrkMastLogService.selectList(new EntityWrapper<WrkMastLog>()
                             .eq("wrk_no", staProtocol.getWorkNo())
@@ -751,63 +787,47 @@
                 ledCommand.setLocNo(locNo);
                 ledCommand.setStaNo(targetStaNo);
                 ledCommand.setBarcode(barcode);
-//                ledCommand.setSourceStaNo(wrkMast.getSourceStaNo());
+
+                // 淇敼寮�濮嬶細澶勭悊澶氫釜wrkDetl锛屼笉鍚堝苟
                 if (ioType != 110 && ioType != 10) {
                     List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkNo);
 
                     if (!wrkDetls.isEmpty()) {
-                        WrkDetl wrkDetl = wrkDetls.get(0);
-                        double anfme = 0D;
-                        double weight = 0D;
-                        for (WrkDetl detl : wrkDetls) {
-                            anfme += detl.getAnfme();
-                            weight += detl.getWeight();
-                            wrkDetl.setAnfme(anfme);
-                            wrkDetl.setWeight(weight);
-                        }
-
+                        // 鑾峰彇搴撳瓨淇℃伅
                         List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>()
                                 .eq("loc_no", wrkMast.getSourceLocNo()));
                         double totalAnfme = 0D;
                         double totalWeight = 0D;
                         for (LocDetl locDetl : locDetls) {
                             totalAnfme += locDetl.getAnfme();
-                            totalWeight += locDetl.getWeight();
+//                        totalWeight += locDetl.getWeight();
                         }
-                        wrkDetl.setStockNum(totalAnfme);
-                        wrkDetl.setStockNum2(totalWeight);
 
-                        ledCommand.getMatDtos().add(new MatDto(
-                                wrkDetl.getMatnr()
-                                , wrkDetl.getMaktx()
-                                , wrkDetl.getAnfme()
-                                , wrkDetl.getWeight()
-                                , wrkDetl.getStockNum()
-                                , wrkDetl.getStockNum2()
-                                , wrkDetl.getSpecs()
-                                , wrkDetl.getSku()
-                                , wrkDetl.getZpallet()
-                                , wrkDetl.getModel()
-                                , wrkDetl.getSupp()
-                                , wrkDetl.getKpCstmrName()
-                                , wrkDetl.getOrderNo()
-                                , wrkDetl.getCstateid$()
-                        ));
-
-                    }else {
+                        // 涓烘瘡涓猈rkDetl鍒涘缓鐙珛鐨凪atDto
+                        for (WrkDetl wrkDetl : wrkDetls) {
+                            // 娉ㄦ剰锛氳繖閲屼娇鐢ㄦ瘡涓獁rkDetl鐨勫師濮嬫暟鎹紝涓嶅悎骞�
+                            ledCommand.getMatDtos().add(new MatDto(
+                                    wrkDetl.getMatnr()
+                                    , wrkDetl.getMaktx()
+                                    , wrkDetl.getAnfme()  // 浣跨敤鍗曚釜鐗╂枡鐨勬暟閲忥紝涓嶇疮鍔�
+                                    , wrkDetl.getWeight() // 浣跨敤鍗曚釜鐗╂枡鐨勯噸閲忥紝涓嶇疮鍔�
+                                    , totalAnfme          // 搴撳瓨鎬绘暟锛堣繖涓槸姝e父鐨勶級
+                                    , totalWeight         // 搴撳瓨鎬婚噸閲忥紙杩欎釜鏄甯哥殑锛�
+                                    , wrkDetl.getSpecs()
+                                    , wrkDetl.getSku()
+                                    , wrkDetl.getZpallet()
+                                    , wrkDetl.getModel()
+                                    , wrkDetl.getSupp()
+                                    , wrkDetl.getKpCstmrName()
+                                    , wrkDetl.getOrderNo()
+                                    , wrkDetl.getBatch()
+//                                , wrkDetl.getCstateid$()
+                            ));
+                        }
+                    } else {
                         List<WrkDetlLog> wrkDetlLogs = wrkDetlLogService.selectTodayByWrkNo(wrkNo);
-                        if(!wrkDetlLogs.isEmpty()) {
-                            WrkDetlLog wrkDetlLog = wrkDetlLogs.get(0);
-
-                            double anfme = 0D;
-                            double weight = 0D;
-                            for (WrkDetlLog detl : wrkDetlLogs) {
-                                anfme += detl.getAnfme();
-                                weight += detl.getWeight();
-                                wrkDetlLog.setAnfme(anfme);
-                                wrkDetlLog.setWeight(weight);
-                            }
-
+                        if (!wrkDetlLogs.isEmpty()) {
+                            // 鑾峰彇搴撳瓨淇℃伅
                             List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>()
                                     .eq("loc_no", sourceLocNo));
                             double totalAnfme = 0D;
@@ -816,29 +836,33 @@
                                 totalAnfme += locDetl.getAnfme();
                                 totalWeight += locDetl.getWeight();
                             }
-                            wrkDetlLog.setStockNum(totalAnfme);
-                            wrkDetlLog.setStockNum2(totalWeight);
 
-                            ledCommand.getMatDtos().add(new MatDto(
-                                    wrkDetlLog.getMatnr()
-                                    , wrkDetlLog.getMaktx()
-                                    , wrkDetlLog.getAnfme()
-                                    , wrkDetlLog.getWeight()
-                                    , wrkDetlLog.getStockNum()
-                                    , wrkDetlLog.getStockNum2()
-                                    , wrkDetlLog.getSpecs()
-                                    , wrkDetlLog.getSku()
-                                    , wrkDetlLog.getZpallet()
-                                    , wrkDetlLog.getModel()
-                                    , wrkDetlLog.getSupp()
-                                    , wrkDetlLog.getKpCstmrName()
-                                    , wrkDetlLog.getOrderNo()
-                                    , wrkDetlLog.getCstateid$()
-                            ));
+                            // 涓烘瘡涓猈rkDetlLog鍒涘缓鐙珛鐨凪atDto
+                            for (WrkDetlLog wrkDetlLog : wrkDetlLogs) {
+                                // 娉ㄦ剰锛氳繖閲屼娇鐢ㄦ瘡涓獁rkDetlLog鐨勫師濮嬫暟鎹紝涓嶅悎骞�
+                                ledCommand.getMatDtos().add(new MatDto(
+                                        wrkDetlLog.getMatnr()
+                                        , wrkDetlLog.getMaktx()
+                                        , wrkDetlLog.getAnfme()  // 浣跨敤鍗曚釜鐗╂枡鐨勬暟閲忥紝涓嶇疮鍔�
+                                        , wrkDetlLog.getWeight() // 浣跨敤鍗曚釜鐗╂枡鐨勯噸閲忥紝涓嶇疮鍔�
+                                        , totalAnfme              // 搴撳瓨鎬绘暟
+                                        , totalWeight             // 搴撳瓨鎬婚噸閲�
+                                        , wrkDetlLog.getSpecs()
+                                        , wrkDetlLog.getSku()
+                                        , wrkDetlLog.getZpallet()
+                                        , wrkDetlLog.getModel()
+                                        , wrkDetlLog.getSupp()
+                                        , wrkDetlLog.getKpCstmrName()
+                                        , wrkDetlLog.getOrderNo()
+                                        , wrkDetlLog.getBatch()
+//                                    , wrkDetlLog.getCstateid$()
+                                ));
+                            }
                         }
                     }
-
                 }
+                // 淇敼缁撴潫
+
                 commands.add(ledCommand);
             }
             Set<Integer> workNos = new HashSet<>(workNoList);
@@ -848,29 +872,11 @@
             if (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) {
                 continue;
             }
-//             鍛戒护涓嬪彂 -------------------------------------------------------------------------------
-//            if (!commands.isEmpty()) {
-//                if (led.getId() < 7) {
-//                    if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, commands))) {
-//                        News.error(""+mark+" - 2"+" - {}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
-//                        continue;
-//                    } else {
-//                        ledThread.setLedMk(false);
-//                    }
-//                } else {
-//                    if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) {
-//                        News.error(""+mark+" - 3"+" - {}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
-//                        continue;
-//                    } else {
-//                        ledThread.setLedMk(false);
-//                    }
-//                }
-//
-//            }
+
             // 鍛戒护涓嬪彂 -------------------------------------------------------------------------------
             if (!commands.isEmpty()) {
                 if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, commands))) {
-                    News.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
+                    News.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触--->鍑哄簱锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
                     continue;
                 } else {
                     ledThread.setLedMk(false);
@@ -918,10 +924,14 @@
             for (Integer staNo : led.getStaArr()) {
                 // 鑾峰彇鍙夎溅绔欑偣
                 StaProtocol staProtocol = devpThread.getStation().get(staNo);
+                StaProtocol staProtocol1 = devpThread.getStation().get(122);
                 if (staProtocol == null) {
                     continue;
                 }
-                if (staProtocol.getWorkNo() != 0 && staProtocol.isLoading()) {
+                if (staProtocol1 == null) {
+                    continue;
+                }
+                if ((staProtocol.getWorkNo() != 0 && staProtocol.isLoading()) || (staProtocol1.getWorkNo() != 0 || staProtocol1.isLoading())) {
                     reset = false;
                     break;
                 }
@@ -932,7 +942,7 @@
             if (reset && !ledThread.isLedMk()) {
                 ledThread.setLedMk(true);
                 if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(4, new ArrayList<>()))) {
-                    News.error("" + mark + " - 1" + " - {}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
+                    News.error("" + mark + " - 1" + " - {}鍙稬ED鍛戒护涓嬪彂澶辫触--->澶嶄綅锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
                 } else {
 
                 }
@@ -940,4 +950,144 @@
         }
         News.infoNoLog("" + mark + " - 0" + " - 鎵ц瀹屾垚锛氬叾浠�  ===>> LED鏄剧ず鍣ㄥ浣嶏紝鏄剧ず榛樿淇℃伅");
     }
-}
+
+    public void ledExecuteIn(Integer mark) {
+        for (LedSlave led : slaveProperties.getLed()) {
+            // 鍛戒护闆嗗悎
+            List<LedCommand> commands = new ArrayList<>();
+            List<Integer> workNoList = new ArrayList<>();
+
+            // 鍏ュ簱宸ヤ綔妗� - 杩欓噷鍙兘闇�瑕佹坊鍔犳洿澶氭煡璇㈡潯浠讹紝纭繚鍙幏鍙栬LED瀵瑰簲鐨勫伐浣滄。
+            WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
+                            .eq("wrk_sts", 3)
+                            .in("io_type", 1, 53, 54, 57)
+                    // 鍙兘闇�瑕佹坊鍔燣ED鍏宠仈鏉′欢锛屼緥濡傜珯鐐圭紪鍙风瓑
+            );
+
+            if (wrkMast == null) {
+                continue;  // 娌℃湁宸ヤ綔妗o紝缁х画澶勭悊涓嬩竴涓狶ED
+            }
+
+            Integer wrkNo = wrkMast.getWrkNo();
+            Integer ioType = wrkMast.getIoType();
+            String sourceLocNo = wrkMast.getSourceLocNo();
+            String locNo = wrkMast.getLocNo();
+            Integer targetStaNo = wrkMast.getStaNo();
+            String barcode = wrkMast.getBarcode();
+
+            workNoList.add(wrkNo);
+
+            // 缁勮鍛戒护
+            LedCommand ledCommand = new LedCommand();
+            ledCommand.setWorkNo(wrkNo);
+            ledCommand.setIoType(ioType);
+
+            // 鍏ュ簱妯″紡 - 淇浜哻ase 54鍜�57鐨勬弿杩�
+            switch (ioType) {
+                case 1:
+                    ledCommand.setTitle("鍏ㄦ澘鍏ュ簱");
+                    break;
+                case 53:
+                    ledCommand.setTitle("鎷f枡鍏ュ簱");
+                    break;
+                case 54:
+                    ledCommand.setTitle("骞舵澘鍏ュ簱");  // 淇锛氬簲璇ユ槸骞舵澘鍏ュ簱锛屼笉鏄洏鐐瑰叆搴�
+                    break;
+                case 57:
+                    ledCommand.setTitle("鐩樼偣鍏ュ簱");  // 淇锛氬簲璇ユ槸鐩樼偣鍏ュ簱锛屼笉鏄苟鏉垮叆搴�
+                    break;
+                default:
+                    // 鍙�夌殑閿欒澶勭悊
+                    continue;  // 璺宠繃涓嶆敮鎸佺殑ioType
+            }
+
+            ledCommand.setSourceLocNo(sourceLocNo);
+            ledCommand.setLocNo(locNo);
+            ledCommand.setStaNo(targetStaNo);
+            ledCommand.setBarcode(barcode);
+
+            List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkNo);
+
+            // 鍗充娇wrkDetls涓虹┖锛屼篃搴旇澶勭悊LED鍛戒护锛堝彲鑳芥煇浜涘叆搴撶被鍨嬩笉闇�瑕佺墿鏂欐槑缁嗭級
+            if (!wrkDetls.isEmpty()) {
+                // 鑾峰彇搴撳瓨淇℃伅
+                List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>()
+                        .eq("loc_no", sourceLocNo));  // 浣跨敤sourceLocNo鑰屼笉鏄痺rkMast.getSourceLocNo()
+                double totalAnfme = 0D;
+                double totalWeight = 0D;
+                for (LocDetl locDetl : locDetls) {
+                    totalAnfme += locDetl.getAnfme();
+                    totalWeight += locDetl.getWeight();  // 濡傛灉鏁版嵁搴撴湁weight瀛楁锛屽簲璇ュ姞涓�
+                }
+
+                // 涓烘瘡涓猈rkDetl鍒涘缓鐙珛鐨凪atDto
+                for (WrkDetl wrkDetl : wrkDetls) {
+                    ledCommand.getMatDtos().add(new MatDto(
+                            wrkDetl.getMatnr(),
+                            wrkDetl.getMaktx(),
+                            wrkDetl.getAnfme(),   // 浣跨敤鍗曚釜鐗╂枡鐨勬暟閲�
+                            wrkDetl.getWeight(),  // 浣跨敤鍗曚釜鐗╂枡鐨勯噸閲�
+                            totalAnfme,           // 搴撳瓨鎬绘暟
+                            totalWeight,          // 搴撳瓨鎬婚噸閲�
+                            wrkDetl.getSpecs(),
+                            wrkDetl.getSku(),
+                            wrkDetl.getZpallet(),
+                            wrkDetl.getModel(),
+                            wrkDetl.getSupp(),
+                            wrkDetl.getKpCstmrName(),
+                            wrkDetl.getOrderNo(),
+                            wrkDetl.getBatch()
+                    ));
+                }
+            }
+
+            // 鍗充娇娌℃湁鐗╂枡鏄庣粏锛屼篃搴旇娣诲姞LED鍛戒护锛堟煇浜涘叆搴撶被鍨嬪彲鑳戒笉闇�瑕佹樉绀虹墿鏂欙級
+            commands.add(ledCommand);
+
+            Set<Integer> workNos = new HashSet<>(workNoList);
+            // 鑾峰彇LED绾跨▼
+            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
+
+            if (ledThread == null) {
+                News.error("鏈壘鍒癓ED绾跨▼锛歔id锛歿}]", led.getId());
+                continue;
+            }
+
+            // 鐩稿悓宸ヤ綔鍙烽泦鍚堝垯杩囨护
+            if (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) {
+                continue;
+            }
+
+            // 鍛戒护涓嬪彂 -------------------------------------------------------------------------------
+            if (!commands.isEmpty()) {
+                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, commands))) {
+                    News.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触--->鍏ュ簱锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
+                    continue;
+                } else {
+                    ledThread.setLedMk(false);
+                }
+            }
+
+            try {
+                // 淇敼涓绘。led鏍囪
+                // 娉ㄦ剰锛氳繖閲屽彧闇�瑕佹洿鏂板綋鍓嶅伐浣滄。锛屼笉闇�瑕佸惊鐜�
+                WrkMast wrkMastToUpdate = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", wrkNo));
+                if (wrkMastToUpdate != null) {
+                    wrkMastToUpdate.setOveMk("Y");
+                    wrkMastToUpdate.setModiTime(new Date());
+                    if (wrkMastMapper.updateById(wrkMastToUpdate) == 0) {
+                        News.errorNoLog("" + mark + " - 4" + " - 鏇存柊宸ヤ綔妗eけ璐�");
+                        throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�");
+                    }
+                }
+
+                // 鏇存柊绾跨▼褰撳墠宸ヤ綔鍙烽泦鍚�
+                ledThread.setWorkNos(workNos);
+
+            } catch (Exception e) {
+                e.printStackTrace();
+                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/zy/common/model/MatDto.java b/src/main/java/com/zy/common/model/MatDto.java
index 02eb13c..c36276a 100644
--- a/src/main/java/com/zy/common/model/MatDto.java
+++ b/src/main/java/com/zy/common/model/MatDto.java
@@ -20,7 +20,7 @@
     private String specs;
 
     // 鐗╂枡鏁伴噺
-    private Double count;
+    private Double anfme;
 
     // 搴撲綅鏁伴噺
     private Double total;
@@ -49,17 +49,20 @@
     //鍗曞彿
     private String orderNo;
 
-    private String cstateid;
+    //鎵瑰彿
+    private String batch;
+
+//    private String cstateid;
 
     public MatDto() {
     }
 
-    public MatDto(String matNo, String maktx, Double count, Double weight, Double total, Double totalWeight, String specs, String sku, String barcode, String model, String supp, String kpCstmrName, String orderNo, String cstateid) {
+    public MatDto(String matNo, String maktx, Double anfme, Double weight, Double total, Double totalWeight, String specs, String sku, String barcode, String model, String supp, String kpCstmrName, String orderNo, String batch) {
         this.matnr = matNo;
         this.maktx = maktx;
         this.maknx = maktx;
         this.specs = specs;
-        this.count = count;
+        this.anfme = anfme;
         this.weight = weight;
         this.total = total;
         this.totalWeight = totalWeight;
@@ -69,6 +72,7 @@
         this.supp = supp;
         this.kpCstmrName = kpCstmrName;
         this.orderNo = orderNo;
-        this.cstateid = cstateid;
+        this.batch = batch;
+//        this.cstateid = cstateid;
     }
 }
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index 26e29fb..895a849 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -54,6 +54,8 @@
 //                    mainService.recCrnErr(3);
                     // 鍑哄簱  ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣�
                     mainService.ledExecute(4);
+                    // 鍏ュ簱 ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣�
+                    mainService.ledExecuteIn(6);
                     // 鍏朵粬  ===>> LED鏄剧ず鍣ㄥ浣嶏紝鏄剧ず榛樿淇℃伅
                     mainService.ledReset(5);
 
diff --git a/src/main/java/com/zy/core/thread/LedThread.java b/src/main/java/com/zy/core/thread/LedThread.java
index 6b8306b..17eb42b 100644
--- a/src/main/java/com/zy/core/thread/LedThread.java
+++ b/src/main/java/com/zy/core/thread/LedThread.java
@@ -122,7 +122,7 @@
             if (!command.isEmptyMk()) {
                 for (MatDto matDto : command.getMatDtos()) {
                     //鍘绘帀灏忔暟鐐�
-                    String strQty = matDto.getCount().toString();
+                    String strQty = matDto.getAnfme().toString();
                     int idx = strQty.lastIndexOf(".");
                     if(idx >= 0){
                         strQty.substring(0,idx);
@@ -214,7 +214,7 @@
             if (!command.isEmptyMk()) {
                 for (MatDto matDto : command.getMatDtos()) {
                     sb.append("鐗╂枡缂栫爜锛�").append(matDto.getMatnr()).append("\n");
-                    sb.append("鏁伴噺锛�").append(matDto.getCount()).append("\n");
+                    sb.append("鏁伴噺锛�").append(matDto.getAnfme()).append("\n");
                     sb.append("瑙勬牸锛�").append(matDto.getSpecs()).append("\n");
                 }
             }
diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index ee70d68..64d0eee 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -53,7 +53,7 @@
         add(100);add(101);add(102);add(103);add(104);
         add(105);add(106);add(107);add(108);add(109);
         add(110);add(111);add(112);add(113);add(114);
-        add(115);add(116);add(117);add(118);add(119);add(120);
+        add(115);add(116);add(117);add(118);add(119);add(120);add(122);
     }};
 
     public static final ArrayList<Integer> barcode1 = new ArrayList<Integer>() {{
@@ -132,6 +132,8 @@
                         break;
                     case 3:
                         writeIoMode((Integer) task.getData());
+                    case 4:
+                        writeBack((Integer) task.getData());
                     default:
                         break;
                 }
@@ -195,7 +197,7 @@
     private void read() throws InterruptedException {
         ArrayList<Integer> staNos = getStaNo();
         int staNoSize = staNos.size();
-        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (staNoSize * 13));
+        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB301.0", (short) (staNoSize * 14));
         if (result.IsSuccess) {
             for (int i = 0; i < staNoSize; i++) {
                 Integer siteId = staNos.get(i); // 绔欑偣缂栧彿
@@ -206,18 +208,31 @@
                     station.put(siteId, staProtocol);
                 }
                 staProtocol.setSiteId(siteId);
-                staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, (i * 13)));     // 宸ヤ綔鍙�
-                staProtocol.setStaNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, (i * 13) + 4));   // 鐩爣绔�
-                staProtocol.setLocHeight(siemensS7Net.getByteTransform().TransInt16(result.Content, (i * 13) + 8));//搴撲綅楂樺害
-                staProtocol.setError(siemensS7Net.getByteTransform().TransInt16(result.Content, (i * 13) + 10));   // 鎶ヨ
+                staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, (i * 14)));     // 宸ヤ綔鍙�
+                staProtocol.setStaNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, (i * 14) + 4));   // 鐩爣绔�
+                staProtocol.setLocHeight(siemensS7Net.getByteTransform().TransInt16(result.Content, (i * 14) + 8));//搴撲綅楂樺害
+                staProtocol.setError(siemensS7Net.getByteTransform().TransInt16(result.Content, (i * 14) + 10));   // 鎶ヨ
 
-                boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, (i * 13) + 12, 1);
+                boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, (i * 14) + 12, 1);
                 staProtocol.setAutoing(status[0]);  // 鑷姩
                 staProtocol.setLoading(status[1]);  // 鏈夌墿
                 staProtocol.setInEnable(status[2]); // 鍙叆
                 staProtocol.setOutEnable(status[3]);// 鍙嚭
                 staProtocol.setEmptyMk(status[4]);  // 绌烘澘淇″彿
                 staProtocol.setFullPlt(status[5]);  // 婊℃墭鐩�
+
+
+
+                //122 鎻愬崌鏈哄崟鐙鍙�
+                if (siteId == 122){
+                    staProtocol.setSiteId(siteId);
+                    OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB301.308", (short) 10);
+                    OperateResultExOne<byte[]> result4 = siemensS7Net.Read("DB301.306", (short) 1);
+                    staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(result3.Content, 6)); //宸ヤ綔鍙�
+                    staProtocol.setAutoing(siemensS7Net.getByteTransform().TransInt16(result3.Content, 0) == 1); //鑷姩
+                    boolean[] booleans = siemensS7Net.getByteTransform().TransBool(result4.Content, 0, 1);
+                    staProtocol.setLoading(booleans[1]); //1 鏈夌墿  0 鏃犵墿
+                }
 
                 if (!staProtocol.isPakMk() && !staProtocol.isLoading()) {
                     staProtocol.setPakMk(true);
@@ -227,19 +242,19 @@
 
         //浠诲姟淇℃伅鍙嶉
         Thread.sleep(200);
-        OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB101.400", (short) 10);
+        OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB301.308", (short) 10);
         if (result3.IsSuccess) {
             liftProtocol.setMode(siemensS7Net.getByteTransform().TransInt16(result3.Content, 0));     // 妯″紡
             liftProtocol.setDeviceStatus(siemensS7Net.getByteTransform().TransInt16(result3.Content, 2));     // 璁惧鐘舵��
             liftProtocol.setTaskStatus(siemensS7Net.getByteTransform().TransInt16(result3.Content, 4));     // 瀹屾垚淇″彿
             liftProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(result3.Content, 6));     // 宸ヤ綔鍙�
-            liftProtocol.setIoMode(siemensS7Net.getByteTransform().TransInt16(result3.Content, 10));     // 鍑哄叆搴撴ā寮�
+            liftProtocol.setIoMode(siemensS7Net.getByteTransform().TransInt16(result3.Content, 8));     // 鍑哄叆搴撴ā寮�
         }
 
         //娓╂箍搴︿俊鎭弽棣�
         Thread.sleep(200);
         ArrayList<Integer> temperatureList = getTemperature();
-        OperateResultExOne<byte[]> result4 = siemensS7Net.Read("DB101.300", (short) (temperatureList.size() * 4));
+        OperateResultExOne<byte[]> result4 = siemensS7Net.Read("DB301.300", (short) (temperatureList.size() * 4));
         if (result4.IsSuccess) {
             for (int i = 0; i < temperatureList.size(); i++) {
                 Integer deviceId = temperatureList.get(i); // 缂栧彿
@@ -258,7 +273,7 @@
         Thread.sleep(200);
         ArrayList<Integer> barcodeList = getBarcode();
         int barcodeSize = barcodeList.size();
-        OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB103.0", (short) (barcodeSize * 8));
+        OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB4.0", (short) (barcodeSize * 8));
         if (result2.IsSuccess) {
             for (int i = 0; i < barcodeSize; i++) {
                 String barcode = siemensS7Net.getByteTransform().TransString(result2.Content, i * 8, 8, "UTF-8");
@@ -286,7 +301,7 @@
             deviceDataLogTime = System.currentTimeMillis();
         }
 
-        if (result.IsSuccess && result2.IsSuccess) {
+        if (result.IsSuccess && result2.IsSuccess && result3.IsSuccess && result4.IsSuccess) {
             OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId()));
         } else {
             OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戣鍙栬緭閫佺嚎plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
@@ -305,7 +320,7 @@
         array[1] = liftCommand.getSourceStaNo();
         array[2] = liftCommand.getTargetStaNo();
 
-        OperateResult write = siemensS7Net.Write("DB100.0", array);
+        OperateResult write = siemensS7Net.Write("DB300.0", array);
 
         if (!write.IsSuccess) {
             OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(liftCommand)));
@@ -326,7 +341,7 @@
         short[] array = new short[1];
         array[0] = ioMode.shortValue();
 
-        OperateResult write = siemensS7Net.Write("DB100.12", array);
+        OperateResult write = siemensS7Net.Write("DB300.12", array);
 
         if (!write.IsSuccess) {
             OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ュ嚭鍏ュ簱妯″紡鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", DateUtils.convert(new Date()), slave.getId(), ioMode));
@@ -338,6 +353,27 @@
     }
 
     /**
+     * 鍐欏叆鍛戒护
+     */
+    private void writeBack(Integer back) {
+        if (null == back) {
+            return;
+        }
+        short[] array = new short[1];
+        array[0] = back.shortValue();
+
+        OperateResult write = siemensS7Net.Write("DB300.14", array);
+
+        if (!write.IsSuccess) {
+            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ユ墭鐩橀��鍥炴暟鎹け璐ャ�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", DateUtils.convert(new Date()), slave.getId(), back));
+            News.error("SiemensDevp"+" - 4"+" - 鍐欏叆鎵樼洏閫�鍥炴暟鎹け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), back);
+        } else {
+            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆� 鎵樼洏閫�鍥炲懡浠や笅鍙� [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), back));
+            News.info("SiemensDevp"+" - 5"+" - 鎵樼洏閫�鍥炲懡浠や笅鍙� [id:{}] >>>>> 鍛戒护涓嬪彂锛� {}",  slave.getId(), back);
+        }
+    }
+
+    /**
      * 璁剧疆鍏ュ簱鏍囪
      */
     @Override
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 1ac4329..1d6eec1 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -8,7 +8,7 @@
     name: @pom.build.finalName@
   datasource:
     driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
-    url: jdbc:sqlserver://127.0.0.1:1433;databasename=shhtgcasrs
+    url: jdbc:sqlserver://127.0.0.1:52840;databasename=shhtgcasrs
     username: sa
     password: sa@123
   mvc:
@@ -55,42 +55,42 @@
   # 杈撻�佺嚎1
   devp[0]:
     id: 1
-    ip: 172.17.60.100
+    ip: 172.168.61.123
     port: 102
     rack: 0
     slot: 0
     # 鍏ュ簱鍙�1
     inSta[0]:
-      staNo: 1009
+      staNo: 101
       barcode: ${wcs-slave.barcode[0].id}
-      backSta: 1008
+      backSta: 100
       led: ${wcs-slave.led[0].id}
     # 绌烘澘鍏ュ簱鍙�1
     emptyInSta[0]:
-      staNo: 1076
+      staNo: 101
       barcode: ${wcs-slave.barcode[0].id}
-      backSta: 1075
+      backSta: 100
       led: ${wcs-slave.led[0].id}
     # 鎷f枡鍏ュ簱鍙�1
     pickSta[0]:
-      staNo: 1059
+      staNo: 101
       barcode: ${wcs-slave.barcode[0].id}
-      backSta: 1059
+      backSta: 100
       led: ${wcs-slave.led[0].id}
     # 鍑哄簱鍙�1
     outSta[0]:
-      staNo: 102
+      staNo: 101
       led: ${wcs-slave.led[0].id}
   # 鏉$爜鎵弿浠�1
   barcode[0]:
     id: 1
-    ip: 10.10.10.121
+    ip: 172.168.61.127
     port: 51236
   # LED1
   led[0]:
     id: 1
-    ip: 127.0.0.1
+    ip: 172.168.61.201
     port: 5005
     devpPlcId: ${wcs-slave.devp[0].id}
-    staArr: 1009
+    staArr: 101
     crnId: 1
\ No newline at end of file
diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml
index 06982a4..65d4464 100644
--- a/src/main/resources/mapper/WrkMastMapper.xml
+++ b/src/main/resources/mapper/WrkMastMapper.xml
@@ -87,7 +87,7 @@
         select top 1 * from asr_wrk_mast where source_sta_no=#{sourceStaNo} and wrk_sts=2 and barcode=#{barcode} and (io_type=1 or io_type=10) order by io_pri desc,io_time,wrk_no ASC
     </select>
     <select id="selectPakInStepBarcode" resultMap="BaseResultMap">
-        select top 1 * from dbo.asr_wrk_mast where  barcode = #{barcode}
+        select top 1 * from dbo.asr_wrk_mast where barcode = #{barcode}
     </select>
 
     <select id="selectPakInStep11" resultMap="BaseResultMap">
diff --git a/src/main/webapp/static/js/console.map.js b/src/main/webapp/static/js/console.map.js
index b739aa7..5d03d9e 100644
--- a/src/main/webapp/static/js/console.map.js
+++ b/src/main/webapp/static/js/console.map.js
@@ -1 +1,141 @@
-mapInfo = {"mapName":"YTFLWCS","rackCount":16,"crnCount":4,"stbCount":16,"hpPosition":0,"minBayNo":2,"floors":1,"racks":[{"type":"rack","id":"rack23","top":558,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack26","top":631,"left":642,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack25","top":612,"left":642,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack24","top":577,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack19","top":469,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack22","top":539,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack21","top":519,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack20","top":488,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack4","top":122,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":61},{"type":"rack","id":"rack5","top":141,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":61},{"type":"rack","id":"rack111","top":49,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":61},{"type":"rack","id":"rack15","top":376,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack18","top":449,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack17","top":430,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack16","top":396,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack11","top":287,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack14","top":357,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack13","top":337,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack12","top":307,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack7","top":193,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack10","top":268,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack9","top":249,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack8","top":212,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack2","top":83,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":61},{"type":"rack","id":"rack3","top":103,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":61},{"type":"rack","id":"rack6","top":174,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31}],"crns":[{"type":"track","id":"lb_track8","text":"","top":76,"left":1327,"width":1,"height":93},{"type":"track","id":"lb_track7","text":"","top":75,"left":596,"width":733,"height":1},{"type":"track","id":"lb_track1","text":"","top":604,"left":593,"width":733,"height":1},{"type":"track","id":"lb_track2","text":"","top":513,"left":595,"width":733,"height":1},{"type":"crane","id":"crn-5","text":"5","top":507,"left":731,"width":67,"height":13},{"type":"crane","id":"crn-6","text":"6","top":597,"left":731,"width":67,"height":13},{"type":"crane","id":"crn-1","text":"1","top":162,"left":730,"width":67,"height":13},{"type":"track","id":"lb_track3","text":"","top":424,"left":593,"width":733,"height":1},{"type":"crane","id":"crn-2","text":"2","top":234,"left":741,"width":67,"height":13},{"type":"track","id":"lb_track4","text":"","top":333,"left":593,"width":733,"height":1},{"type":"crane","id":"crn-3","text":"3","top":325,"left":730,"width":67,"height":13},{"type":"track","id":"lb_track5","text":"","top":241,"left":595,"width":733,"height":1},{"type":"track","id":"lb_track6","text":"","top":168,"left":596,"width":733,"height":1},{"type":"crane","id":"crn-4","text":"4","top":417,"left":730,"width":67,"height":13}],"areas":[{"type":"Control_floor","id":"tabControl_floor1","text":"妤煎眰","top":41,"left":80,"width":1269,"height":781,"floors":[{"type":"floor","id":"page_floor1","text":"1F","top":4,"left":22,"width":1243,"height":773,"stns":[{"type":"stn","id":"site-1064","text":"1064","top":720,"left":769,"width":59,"height":20},{"type":"stn","id":"site-2003","text":"2003","top":456,"left":309,"width":37,"height":20},{"type":"stn","id":"site-2002","text":"2002","top":455,"left":221,"width":37,"height":20},{"type":"stn","id":"site-1004","text":"1004","top":334,"left":296,"width":37,"height":20},{"type":"stn","id":"site-1002","text":"1002","top":291,"left":296,"width":37,"height":20},{"type":"stn","id":"site-1006","text":"1006","top":312,"left":296,"width":37,"height":20},{"type":"stn","id":"site-1007","text":"1007","top":312,"left":258,"width":37,"height":20},{"type":"stn","id":"site-1003","text":"1003","top":312,"left":220,"width":37,"height":20},{"type":"stn","id":"site-1075","text":"1075","top":723,"left":406,"width":71,"height":20},{"type":"stn","id":"site-1076","text":"1076","top":701,"left":406,"width":71,"height":20},{"type":"stn","id":"site-1077","text":"1077","top":679,"left":406,"width":71,"height":20},{"type":"stn","id":"site-1078","text":"1078","top":657,"left":406,"width":71,"height":20},{"type":"stn","id":"site-1079","text":"1079","top":598,"left":406,"width":71,"height":57},{"type":"stn","id":"site-1047","text":"1047","top":578,"left":405,"width":93,"height":17},{"type":"stn","id":"site-1081","text":"1081","top":417,"left":405,"width":71,"height":158},{"type":"stn","id":"site-1034","text":"1034","top":398,"left":405,"width":95,"height":17},{"type":"stn","id":"site-1083","text":"1083","top":320,"left":405,"width":71,"height":75},{"type":"stn","id":"site-1084","text":"1084","top":198,"left":405,"width":71,"height":121},{"type":"stn","id":"site-1059","text":"1059","top":700,"left":480,"width":161,"height":20},{"type":"stn","id":"site-1018","text":"1018","top":178,"left":405,"width":95,"height":17},{"type":"stn","id":"site-1086","text":"1086","top":146,"left":406,"width":71,"height":30},{"type":"stn","id":"site-1087","text":"1087","top":125,"left":406,"width":71,"height":19},{"type":"stn","id":"site-1088","text":"1088","top":105,"left":406,"width":71,"height":19},{"type":"stn","id":"site-1074","text":"1074","top":678,"left":1141,"width":59,"height":20},{"type":"stn","id":"site-1073","text":"1073","top":657,"left":1141,"width":59,"height":20},{"type":"stn","id":"site-1071","text":"1071","top":678,"left":1017,"width":59,"height":20},{"type":"stn","id":"site-1072","text":"1072","top":657,"left":1079,"width":59,"height":20},{"type":"stn","id":"site-1070","text":"1070","top":657,"left":1017,"width":59,"height":20},{"type":"stn","id":"site-1069","text":"1069","top":657,"left":955,"width":59,"height":20},{"type":"stn","id":"site-1068","text":"1068","top":678,"left":893,"width":59,"height":20},{"type":"stn","id":"site-1067","text":"1067","top":657,"left":893,"width":59,"height":20},{"type":"stn","id":"site-1066","text":"1066","top":657,"left":831,"width":59,"height":20},{"type":"stn","id":"site-1065","text":"1065","top":700,"left":707,"width":59,"height":20},{"type":"stn","id":"site-1063","text":"1063","top":700,"left":769,"width":59,"height":20},{"type":"stn","id":"site-1062","text":"1062","top":678,"left":769,"width":59,"height":20},{"type":"stn","id":"site-1061","text":"1061","top":657,"left":769,"width":59,"height":20},{"type":"stn","id":"site-1058","text":"1058","top":721,"left":645,"width":59,"height":20},{"type":"stn","id":"site-1057","text":"1057","top":700,"left":645,"width":59,"height":20},{"type":"stn","id":"site-1056","text":"1056","top":678,"left":645,"width":59,"height":20},{"type":"stn","id":"site-1060","text":"1060","top":657,"left":707,"width":59,"height":20},{"type":"stn","id":"site-1055","text":"1055","top":657,"left":645,"width":59,"height":20},{"type":"stn","id":"site-1054","text":"1054","top":657,"left":574,"width":67,"height":20},{"type":"stn","id":"site-1053","text":"1053","top":657,"left":479,"width":91,"height":20},{"type":"stn","id":"site-1052","text":"1052","top":614,"left":573,"width":67,"height":17},{"type":"stn","id":"site-1051","text":"1051","top":597,"left":502,"width":67,"height":58},{"type":"stn","id":"site-1049","text":"1049","top":577,"left":571,"width":67,"height":17},{"type":"stn","id":"site-1048","text":"1048","top":578,"left":501,"width":67,"height":17},{"type":"stn","id":"site-1045","text":"1045","top":523,"left":571,"width":67,"height":17},{"type":"stn","id":"site-1044","text":"1044","top":506,"left":501,"width":67,"height":69},{"type":"stn","id":"site-1042","text":"1042","top":488,"left":571,"width":67,"height":17},{"type":"stn","id":"site-1041","text":"1041","top":466,"left":501,"width":67,"height":39},{"type":"stn","id":"site-1039","text":"1039","top":433,"left":571,"width":67,"height":17},{"type":"stn","id":"site-1038","text":"1038","top":418,"left":501,"width":67,"height":45},{"type":"stn","id":"site-1036","text":"1036","top":397,"left":571,"width":67,"height":17},{"type":"stn","id":"site-1035","text":"1035","top":398,"left":501,"width":67,"height":17},{"type":"stn","id":"site-1032","text":"1032","top":342,"left":571,"width":67,"height":17},{"type":"stn","id":"site-1031","text":"1031","top":322,"left":501,"width":67,"height":73},{"type":"stn","id":"site-1029","text":"1029","top":308,"left":571,"width":67,"height":17},{"type":"stn","id":"site-1028","text":"1028","top":280,"left":501,"width":67,"height":40},{"type":"stn","id":"site-1026","text":"1026","top":250,"left":571,"width":67,"height":17},{"type":"stn","id":"site-1025","text":"1025","top":248,"left":501,"width":67,"height":29},{"type":"stn","id":"site-1023","text":"1023","top":212,"left":571,"width":67,"height":17},{"type":"stn","id":"site-1022","text":"1022","top":198,"left":501,"width":67,"height":48},{"type":"stn","id":"site-1020","text":"1020","top":177,"left":571,"width":67,"height":17},{"type":"stn","id":"site-1019","text":"1019","top":178,"left":502,"width":67,"height":17},{"type":"stn","id":"site-1016","text":"1016","top":142,"left":571,"width":67,"height":17},{"type":"stn","id":"site-1015","text":"1015","top":129,"left":502,"width":67,"height":46},{"type":"stn","id":"site-1012","text":"1012","top":105,"left":502,"width":67,"height":23},{"type":"stn","id":"site-1008","text":"1008","top":82,"left":337,"width":67,"height":21},{"type":"stn","id":"site-1009","text":"1009","top":82,"left":406,"width":95,"height":21},{"type":"stn","id":"site-1010","text":"1010","top":82,"left":502,"width":67,"height":21},{"type":"stn","id":"site-1013","text":"1013","top":105,"left":571,"width":67,"height":17}]}]}]}
+mapInfo =
+    {"mapName":"YTFLWCS","rackCount":16,"crnCount":4,"stbCount":16,"hpPosition":0,"minBayNo":2,"floors":1,
+        "racks":[
+            // {"type":"rack","id":"rack23","top":558,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},
+            // {"type":"rack","id":"rack26","top":631,"left":642,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},
+            // {"type":"rack","id":"rack25","top":612,"left":642,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},
+            // {"type":"rack","id":"rack24","top":577,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},
+            // {"type":"rack","id":"rack19","top":469,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},
+            // {"type":"rack","id":"rack22","top":539,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},
+            // {"type":"rack","id":"rack21","top":519,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},
+            // {"type":"rack","id":"rack20","top":488,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},
+            // {"type":"rack","id":"rack4","top":122,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":61},
+            // {"type":"rack","id":"rack5","top":141,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":61},
+            // {"type":"rack","id":"rack111","top":49,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":61},
+            // {"type":"rack","id":"rack15","top":376,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},
+            // {"type":"rack","id":"rack18","top":449,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},
+            // {"type":"rack","id":"rack17","top":430,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},
+            // {"type":"rack","id":"rack16","top":396,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},
+            // {"type":"rack","id":"rack11","top":287,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},
+            // {"type":"rack","id":"rack14","top":357,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},
+            // {"type":"rack","id":"rack13","top":337,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},
+            // {"type":"rack","id":"rack12","top":307,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},
+            // {"type":"rack","id":"rack7","top":193,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},
+            // {"type":"rack","id":"rack10","top":268,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},
+            // {"type":"rack","id":"rack9","top":249,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},
+            // {"type":"rack","id":"rack8","top":212,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},
+            // {"type":"rack","id":"rack2","top":83,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":61},
+            // {"type":"rack","id":"rack3","top":103,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":61},
+            // {"type":"rack","id":"rack6","top":174,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31}
+            ],
+        "crns":[
+            // {"type":"track","id":"lb_track8","text":"","top":76,"left":1327,"width":1,"height":93},
+            // {"type":"track","id":"lb_track7","text":"","top":75,"left":596,"width":733,"height":1},
+            // {"type":"track","id":"lb_track1","text":"","top":604,"left":593,"width":733,"height":1},
+            // {"type":"track","id":"lb_track2","text":"","top":513,"left":595,"width":733,"height":1},
+            // {"type":"crane","id":"crn-5","text":"5","top":507,"left":731,"width":67,"height":13},
+            // {"type":"crane","id":"crn-6","text":"6","top":597,"left":731,"width":67,"height":13},
+            // {"type":"crane","id":"crn-1","text":"1","top":162,"left":730,"width":67,"height":13},
+            // {"type":"track","id":"lb_track3","text":"","top":424,"left":593,"width":733,"height":1},
+            // {"type":"crane","id":"crn-2","text":"2","top":234,"left":741,"width":67,"height":13},
+            // {"type":"track","id":"lb_track4","text":"","top":333,"left":593,"width":733,"height":1},
+            // {"type":"crane","id":"crn-3","text":"3","top":325,"left":730,"width":67,"height":13},
+            // {"type":"track","id":"lb_track5","text":"","top":241,"left":595,"width":733,"height":1},
+            // {"type":"track","id":"lb_track6","text":"","top":168,"left":596,"width":733,"height":1},
+            // {"type":"crane","id":"crn-4","text":"4","top":417,"left":730,"width":67,"height":13}
+        ],
+        "areas":[{"type":"Control_floor","id":"tabControl_floor1","text":"妤煎眰","top":41,"left":80,"width":1269,"height":781,
+            "floors":[{"type":"floor","id":"page_floor1","text":"1F","top":4,"left":22,"width":1243,"height":773,
+                "stns":[
+                    // {"type":"stn","id":"site-1064","text":"1064","top":720,"left":769,"width":59,"height":20},
+                    // {"type":"stn","id":"site-2003","text":"2003","top":456,"left":309,"width":37,"height":20},
+                    // {"type":"stn","id":"site-2002","text":"2002","top":455,"left":221,"width":37,"height":20},
+                    // {"type":"stn","id":"site-1004","text":"1004","top":334,"left":296,"width":37,"height":20},
+                    // {"type":"stn","id":"site-1002","text":"1002","top":291,"left":296,"width":37,"height":20},
+                    // {"type":"stn","id":"site-1006","text":"1006","top":312,"left":296,"width":37,"height":20},
+                    // {"type":"stn","id":"site-1007","text":"1007","top":312,"left":258,"width":37,"height":20},
+                    // {"type":"stn","id":"site-1003","text":"1003","top":312,"left":220,"width":37,"height":20},
+                    // {"type":"stn","id":"site-1075","text":"1075","top":723,"left":406,"width":71,"height":20},
+                    // {"type":"stn","id":"site-1076","text":"1076","top":701,"left":406,"width":71,"height":20},
+                    // {"type":"stn","id":"site-1077","text":"1077","top":679,"left":406,"width":71,"height":20},
+                    // {"type":"stn","id":"site-1078","text":"1078","top":657,"left":406,"width":71,"height":20},
+                    // {"type":"stn","id":"site-1079","text":"1079","top":598,"left":406,"width":71,"height":57},
+                    // {"type":"stn","id":"site-1047","text":"1047","top":578,"left":405,"width":93,"height":17},
+                    // {"type":"stn","id":"site-1081","text":"1081","top":417,"left":405,"width":71,"height":158},
+                    // {"type":"stn","id":"site-1034","text":"1034","top":398,"left":405,"width":95,"height":17},
+                    // {"type":"stn","id":"site-1083","text":"1083","top":320,"left":405,"width":71,"height":75},
+                    // {"type":"stn","id":"site-1084","text":"1084","top":198,"left":405,"width":71,"height":121},
+                    // {"type":"stn","id":"site-1059","text":"1059","top":700,"left":480,"width":161,"height":20},
+                    // {"type":"stn","id":"site-1018","text":"1018","top":178,"left":405,"width":95,"height":17},
+                    // {"type":"stn","id":"site-1086","text":"1086","top":146,"left":406,"width":71,"height":30},
+                    // {"type":"stn","id":"site-1087","text":"1087","top":125,"left":406,"width":71,"height":19},
+                    // {"type":"stn","id":"site-1088","text":"1088","top":105,"left":406,"width":71,"height":19},
+                    // {"type":"stn","id":"site-1074","text":"1074","top":678,"left":1141,"width":59,"height":20},
+                    // {"type":"stn","id":"site-1073","text":"1073","top":657,"left":1141,"width":59,"height":20},
+                    // {"type":"stn","id":"site-1071","text":"1071","top":678,"left":1017,"width":59,"height":20},
+                    // {"type":"stn","id":"site-1072","text":"1072","top":657,"left":1079,"width":59,"height":20},
+                    // {"type":"stn","id":"site-1070","text":"1070","top":657,"left":1017,"width":59,"height":20},
+                    {"type":"stn","id":"site-100","text":"100","top":657,"left":1017,"width":59,"height":20},
+                    {"type":"stn","id":"site-101","text":"101","top":657,"left":955,"width":59,"height":20},
+                    {"type":"stn","id":"site-103","text":"103","top":630,"left":955,"width":59,"height":20},
+                    {"type":"stn","id":"site-105","text":"105","top":603,"left":955,"width":59,"height":20},
+                    {"type":"stn","id":"site-107","text":"107","top":576,"left":955,"width":59,"height":20},
+                    {"type":"stn","id":"site-109","text":"109","top":549,"left":955,"width":59,"height":20},
+                    {"type":"stn","id":"site-111","text":"111","top":522,"left":955,"width":59,"height":20},
+                    {"type":"stn","id":"site-113","text":"113","top":495,"left":955,"width":59,"height":20},
+                    {"type":"stn","id":"site-115","text":"115","top":468,"left":955,"width":59,"height":20},
+                    {"type":"stn","id":"site-117","text":"117","top":441,"left":955,"width":59,"height":20},
+                    {"type":"stn","id":"site-119","text":"119","top":414,"left":955,"width":59,"height":20},
+                    // {"type":"stn","id":"site-1068","text":"1068","top":678,"left":893,"width":59,"height":20},
+                    {"type":"stn","id":"site-122","text":"122","top":657,"left":893,"width":59,"height":20},
+                    {"type":"stn","id":"site-102","text":"102","top":657,"left":831,"width":59,"height":20},
+                    {"type":"stn","id":"site-104","text":"104","top":630,"left":831,"width":59,"height":20},
+                    {"type":"stn","id":"site-106","text":"106","top":603,"left":831,"width":59,"height":20},
+                    {"type":"stn","id":"site-108","text":"108","top":576,"left":831,"width":59,"height":20},
+                    {"type":"stn","id":"site-110","text":"110","top":549,"left":831,"width":59,"height":20},
+                    {"type":"stn","id":"site-112","text":"112","top":522,"left":831,"width":59,"height":20},
+                    {"type":"stn","id":"site-114","text":"114","top":495,"left":831,"width":59,"height":20},
+                    {"type":"stn","id":"site-116","text":"116","top":468,"left":831,"width":59,"height":20},
+                    {"type":"stn","id":"site-118","text":"118","top":441,"left":831,"width":59,"height":20},
+                    {"type":"stn","id":"site-120","text":"120","top":414,"left":831,"width":59,"height":20},
+                    // {"type":"stn","id":"site-1065","text":"1065","top":700,"left":707,"width":59,"height":20},
+                    // {"type":"stn","id":"site-1063","text":"1063","top":700,"left":769,"width":59,"height":20},
+                    // {"type":"stn","id":"site-1062","text":"1062","top":678,"left":769,"width":59,"height":20},
+                    // {"type":"stn","id":"site-1061","text":"1061","top":657,"left":769,"width":59,"height":20},
+                    // {"type":"stn","id":"site-1058","text":"1058","top":721,"left":645,"width":59,"height":20},
+                    // {"type":"stn","id":"site-1057","text":"1057","top":700,"left":645,"width":59,"height":20},
+                    // {"type":"stn","id":"site-1056","text":"1056","top":678,"left":645,"width":59,"height":20},
+                    // {"type":"stn","id":"site-1060","text":"1060","top":657,"left":707,"width":59,"height":20},
+                    // {"type":"stn","id":"site-1055","text":"1055","top":657,"left":645,"width":59,"height":20},
+                    // {"type":"stn","id":"site-1054","text":"1054","top":657,"left":574,"width":67,"height":20},
+                    // {"type":"stn","id":"site-1053","text":"1053","top":657,"left":479,"width":91,"height":20},
+                    // {"type":"stn","id":"site-1052","text":"1052","top":614,"left":573,"width":67,"height":17},
+                    // {"type":"stn","id":"site-1051","text":"1051","top":597,"left":502,"width":67,"height":58},
+                    // {"type":"stn","id":"site-1049","text":"1049","top":577,"left":571,"width":67,"height":17},
+                    // {"type":"stn","id":"site-1048","text":"1048","top":578,"left":501,"width":67,"height":17},
+                    // {"type":"stn","id":"site-1045","text":"1045","top":523,"left":571,"width":67,"height":17},
+                    // {"type":"stn","id":"site-1044","text":"1044","top":506,"left":501,"width":67,"height":69},
+                    // {"type":"stn","id":"site-1042","text":"1042","top":488,"left":571,"width":67,"height":17},
+                    // {"type":"stn","id":"site-1041","text":"1041","top":466,"left":501,"width":67,"height":39},
+                    // {"type":"stn","id":"site-1039","text":"1039","top":433,"left":571,"width":67,"height":17},
+                    // {"type":"stn","id":"site-1038","text":"1038","top":418,"left":501,"width":67,"height":45},
+                    // {"type":"stn","id":"site-1036","text":"1036","top":397,"left":571,"width":67,"height":17},
+                    // {"type":"stn","id":"site-1035","text":"1035","top":398,"left":501,"width":67,"height":17},
+                    // {"type":"stn","id":"site-1032","text":"1032","top":342,"left":571,"width":67,"height":17},
+                    // {"type":"stn","id":"site-1031","text":"1031","top":322,"left":501,"width":67,"height":73},
+                    // {"type":"stn","id":"site-1029","text":"1029","top":308,"left":571,"width":67,"height":17},
+                    // {"type":"stn","id":"site-1028","text":"1028","top":280,"left":501,"width":67,"height":40},
+                    // {"type":"stn","id":"site-1026","text":"1026","top":250,"left":571,"width":67,"height":17},
+                    // {"type":"stn","id":"site-1025","text":"1025","top":248,"left":501,"width":67,"height":29},
+                    // {"type":"stn","id":"site-1023","text":"1023","top":212,"left":571,"width":67,"height":17},
+                    // {"type":"stn","id":"site-1022","text":"1022","top":198,"left":501,"width":67,"height":48},
+                    // {"type":"stn","id":"site-1020","text":"1020","top":177,"left":571,"width":67,"height":17},
+                    // {"type":"stn","id":"site-1019","text":"1019","top":178,"left":502,"width":67,"height":17},
+                    // {"type":"stn","id":"site-1016","text":"1016","top":142,"left":571,"width":67,"height":17},
+                    // {"type":"stn","id":"site-1015","text":"1015","top":129,"left":502,"width":67,"height":46},
+                    // {"type":"stn","id":"site-1012","text":"1012","top":105,"left":502,"width":67,"height":23},
+                    // {"type":"stn","id":"site-1008","text":"1008","top":82,"left":337,"width":67,"height":21},
+                    // {"type":"stn","id":"site-1009","text":"1009","top":82,"left":406,"width":95,"height":21},
+                    // {"type":"stn","id":"site-1010","text":"1010","top":82,"left":502,"width":67,"height":21},
+                    // {"type":"stn","id":"site-1013","text":"1013","top":105,"left":571,"width":67,"height":17}
+                ]}]}]}

--
Gitblit v1.9.1