From 3bf6f972604761c9ac59a2cb9ea01eeacaec2189 Mon Sep 17 00:00:00 2001
From: zyh <zyh@123>
Date: 星期六, 28 三月 2026 15:43:51 +0800
Subject: [PATCH] 更新为正式部署许可证

---
 src/main/java/com/zy/asrs/task/AGVTaskReportScheduler.java           |   86 ++
 src/main/java/com/zy/asrs/entity/param/CombParam.java                |    2 
 src/main/java/com/zy/asrs/controller/LocMastController.java          |   13 
 src/main/java/com/zy/asrs/service/impl/WrkDetlLogServiceImpl.java    |   14 
 src/main/java/com/zy/asrs/entity/mes/TransTask.java                  |    1 
 src/main/java/com/zy/asrs/mapper/WrkDetlLogMapper.java               |    3 
 src/main/java/com/zy/common/config/AdminInterceptor.java             |    4 
 src/main/java/com/zy/asrs/entity/Task.java                           |    8 
 src/main/java/com/zy/asrs/controller/DigitalTwinController.java      |  120 +--
 src/main/java/com/zy/common/web/WcsController.java                   |   35 +
 src/main/java/com/zy/asrs/mapper/CanFinMapper.java                   |   13 
 src/main/java/com/zy/asrs/service/MesService.java                    |    2 
 src/main/java/com/zy/asrs/entity/mes/MesMatInfo.java                 |    2 
 src/main/java/com/zy/asrs/entity/param/AbnormalLocDetlParam.java     |    7 
 src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java           |  244 ++++++-
 src/main/java/com/zy/asrs/service/DigitalTwinService.java            |   15 
 src/main/java/com/zy/common/config/LogAspect.java                    |    2 
 src/main/java/com/zy/asrs/task/ErrorStockScheduler.java              |   74 ++
 src/main/java/com/zy/asrs/entity/CanFin.java                         |   65 ++
 src/main/java/com/zy/system/timer/LoadingConfigTimer.java            |    2 
 src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java           |    8 
 src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java        |   31 
 src/main/resources/application-dev.yml                               |   15 
 src/main/java/com/zy/system/timer/LicenseTimer.java                  |    4 
 src/main/java/com/zy/asrs/controller/MesController.java              |  187 +++++
 src/main/java/com/zy/asrs/controller/OutController.java              |    8 
 src/main/java/com/zy/common/service/CommonService.java               |    7 
 license.lic                                                          |    0 
 src/main/java/com/zy/asrs/entity/AllLocationsVo.java                 |   36 +
 src/main/java/com/zy/system/entity/license/LicenseCheckListener.java |   36 
 src/main/java/com/zy/asrs/controller/LocDetlController.java          |   55 +
 src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java          |  123 ++++
 src/main/resources/logback-spring.xml                                |    2 
 src/main/webapp/views/pakStore/groupinto.html                        |  134 ++++
 src/main/java/com/zy/asrs/controller/TaskController.java             |   27 
 src/main/java/com/zy/asrs/task/WorkMastScheduler.java                |   10 
 src/main/java/com/zy/asrs/task/OrderSyncScheduler.java               |   54 +
 src/main/java/com/zy/asrs/task/handler/AGVTaskReportHandler.java     |   47 
 src/main/resources/mapper/TaskMapper.xml                             |    2 
 src/main/java/com/zy/asrs/controller/MobileController.java           |   23 
 src/main/java/com/zy/asrs/controller/OrderPakoutController.java      |   24 
 src/main/java/com/zy/asrs/entity/WorkChartAxis.java                  |    6 
 src/main/java/com/zy/asrs/service/impl/WrkMastLogServiceImpl.java    |    2 
 src/main/resources/license.lic                                       |    0 
 src/main/java/com/zy/asrs/service/impl/DigitalTwinServiceImpl.java   |  127 +++
 src/main/java/com/zy/asrs/service/OrderPakoutService.java            |    1 
 46 files changed, 1,406 insertions(+), 275 deletions(-)

diff --git a/license.lic b/license.lic
index 22364dc..a6bdd04 100644
--- a/license.lic
+++ b/license.lic
Binary files differ
diff --git a/src/main/java/com/zy/asrs/controller/DigitalTwinController.java b/src/main/java/com/zy/asrs/controller/DigitalTwinController.java
index 628091d..b919ff9 100644
--- a/src/main/java/com/zy/asrs/controller/DigitalTwinController.java
+++ b/src/main/java/com/zy/asrs/controller/DigitalTwinController.java
@@ -1,18 +1,26 @@
 package com.zy.asrs.controller;
 
 import com.core.common.R;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.zy.asrs.entity.LocChartPie;
 import com.zy.asrs.entity.LocDetl;
 import com.zy.asrs.entity.LocMast;
 import com.zy.asrs.entity.digitaltwin.*;
+import com.zy.asrs.mapper.ReportQueryMapper;
 import com.zy.asrs.service.DigitalTwinService;
+import com.zy.common.utils.HttpHandler;
 import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import java.io.IOException;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 @RequestMapping("/digitalTwin")
 @RestController
@@ -20,6 +28,8 @@
 
     @Resource
     private DigitalTwinService digitalTwinService;
+    @Autowired
+    private ReportQueryMapper reportQueryMapper;
 
     /**
      * 鏁版嵁鎬昏
@@ -107,20 +117,6 @@
                                  @RequestParam(required = false) String endDate){
 
         List<DtInAndOutBoundVo> inAndOutBoundVoList = digitalTwinService.inAndOutBound(areaId, startDate, endDate);
-//
-//        DtInAndOutBoundVo dtInAndOutBoundVo = DtInAndOutBoundVo.builder()
-//                .boundDate("2025-10-22")
-//                .inBoundNum(237)
-//                .outBoundNum(487)
-//                .build();
-//        DtInAndOutBoundVo dtInAndOutBoundVo2 = DtInAndOutBoundVo.builder()
-//                .boundDate("2025-10-23")
-//                .inBoundNum(187)
-//                .outBoundNum(287)
-//                .build();
-//        List<DtInAndOutBoundVo> inAndOutBoundVoList = new ArrayList<>();
-//        inAndOutBoundVoList.add(dtInAndOutBoundVo);
-//        inAndOutBoundVoList.add(dtInAndOutBoundVo2);
 
         return R.ok().add(inAndOutBoundVoList);
     }
@@ -167,73 +163,35 @@
     public R warehouseDetail(@RequestParam(required = false) String areaId){
 
         return R.ok(digitalTwinService.warehouseDetail(areaId));
-//        List<DtLocDetailVo> dtLocDetailVoList = new ArrayList<>();
-//        DtLocDetailVo dtLocDetailVo = new DtLocDetailVo();
-//        dtLocDetailVo.setLocNo("CA0100202");
-//        dtLocDetailVo.setLocSts("O");
-//        dtLocDetailVo.setAreaId(10010L);
-//        dtLocDetailVo.setAreaName("鍒�鍏峰簱");
-//        dtLocDetailVo.setRow1(1);
-//        dtLocDetailVo.setBay1(2);
-//        dtLocDetailVo.setLev1(2);
-//
-//        LocMast locMast = new LocMast();
-//        locMast.setLocNo("CA0100202");
-//        locMast.setLocSts("O");
-//        locMast.setRow1(1);
-//        locMast.setBay1(2);
-//        locMast.setLev1(2);
-//        dtLocDetailVo.setLocMast(locMast);
-//
-//        LocDetl locDetl = new LocDetl();
-//        locDetl.setLocNo("CA0100202");
-//        locDetl.setAreaId(10010L);
-//        locDetl.setAreaName("鍒�鍏峰簱");
-//        locDetl.setMatnr("mat10001");
-//        locDetl.setMaktx("鍒�鎶�");
-//        dtLocDetailVo.setLocDetl(locDetl);
-//        dtLocDetailVoList.add(dtLocDetailVo);
-//
-//
-//        DtLocDetailVo dtLocDetailVo2 = new DtLocDetailVo();
-//        dtLocDetailVo2.setLocNo("CA0100202");
-//        dtLocDetailVo2.setLocSts("O");
-//        dtLocDetailVo2.setAreaId(10010L);
-//        dtLocDetailVo2.setAreaName("鍒�鍏峰簱");
-//        dtLocDetailVo2.setRow1(1);
-//        dtLocDetailVo2.setBay1(2);
-//        dtLocDetailVo2.setLev1(2);
-//
-//        LocMast locMast2 = new LocMast();
-//        locMast2.setLocNo("CA0100203");
-//        locMast2.setLocSts("O");
-//        locMast2.setRow1(1);
-//        locMast2.setBay1(2);
-//        locMast2.setLev1(3);
-//        dtLocDetailVo2.setLocMast(locMast2);
-//
-//        LocDetl locDetl2 = new LocDetl();
-//        locDetl2.setLocNo("CA0100203");
-//        locDetl2.setAreaId(10010L);
-//        locDetl2.setAreaName("鍒�鍏峰簱");
-//        locDetl2.setMatnr("mat10001");
-//        locDetl2.setMaktx("鍒�鎶�");
-//        dtLocDetailVo2.setLocDetl(locDetl2);
-//        dtLocDetailVoList.add(dtLocDetailVo2);
-
-
-//        LocDetl locDetl2 = new LocDetl();
-//        locDetl2.setLocNo("1001");
-//        locDetl2.setAreaId(10010L);
-//        locDetl2.setAreaName("鍒�鍏峰簱");
-//        locDetl2.setMatnr("mat10001");
-//        locDetl2.setMaktx("鍒�鎶�");
-//
-////        List<LocDetl> locDetlList = new ArrayList<>();
-////        locDetlList.add(locDetl);
-////        locDetlList.add(locDetl2);
-
-//        return R.ok().add(dtLocDetailVoList);
     }
 
+
+    /**
+     * 鏌ヨ鎵�鏈夊簱浣嶇姸鎬佸拰鐗╂枡-浜屾満搴婁俊鎭寲鏁板瓧瀛敓鐢�
+     */
+    @RequestMapping(value = "/getAllLocations")
+    public R getAllLocations() {
+        return digitalTwinService.getAllLocations();
+    }
+
+
+    /**
+     * 鏌ヨ鍦ㄥ簱鏁伴噺绛変俊鎭�
+     */
+    @RequestMapping(value = "/getLocalInfo")
+    public LocChartPie getLocalInfo() {
+
+        LocChartPie locUseRate = reportQueryMapper.getLocUseRate();
+
+        return locUseRate;
+    }
+
+    /**
+     * 鏌ヨ鎵�鏈夊簱鐨勫簱瀛樻槑缁�
+     */
+    @RequestMapping(value = "/getLocalDetal")
+    public R getLocalDetal() throws IOException {
+
+        return R.ok(digitalTwinService.getLocalDetal());
+    }
 }
diff --git a/src/main/java/com/zy/asrs/controller/LocDetlController.java b/src/main/java/com/zy/asrs/controller/LocDetlController.java
index a9213d4..3edd491 100644
--- a/src/main/java/com/zy/asrs/controller/LocDetlController.java
+++ b/src/main/java/com/zy/asrs/controller/LocDetlController.java
@@ -298,41 +298,52 @@
         List<LocDetl> list = locDetlService.selectList(wrapper);
         List<AbnormalLocDetlParam> result = new ArrayList<>();
 
-        Page<LocDetl> groupLocDetl = locDetlService.getStockStatis2(toPage(1, 10000, param, LocDetl.class));
-        for (LocDetl locDetl : groupLocDetl.getRecords()) {
+        // 浣跨敤瀹屾暣鐨勬槑缁嗘暟鎹紝鑰屼笉鏄垎缁勬暟鎹�
+        for (LocDetl locDetl : list) {
             AbnormalLocDetlParam abnormalLocDetlParam = new AbnormalLocDetlParam();
             Mat mat = matService.selectOne(new EntityWrapper<Mat>()
                     .eq("matnr", locDetl.getMatnr()));
             if (Cools.isEmpty(mat)) {
                 continue;
             }
-            if (!Cools.isEmpty(mat.getStoreMax()) || !Cools.isEmpty(mat.getStoreMin())) {
-                abnormalLocDetlParam.setStoreMax(mat.getStoreMax());
-                abnormalLocDetlParam.setStoreMaxDate(mat.getStoreMaxDate());
-                abnormalLocDetlParam.setStoreMin(mat.getStoreMin());
-                abnormalLocDetlParam.setAnfme(locDetl.getAnfme());
-                abnormalLocDetlParam.setMaktx(mat.getMaktx());
-                abnormalLocDetlParam.setMatnr(mat.getMatnr());
-                abnormalLocDetlParam.setSpecs(mat.getSpecs());
-                abnormalLocDetlParam.setBatch(locDetl.getBatch());
 
-//                SimpleDateFormat simple = new SimpleDateFormat("yyyyMMdd");
-//                Date maxDate = simple.parse(locDetl.getBatch());
-//                long time = maxDate.getTime();
-//                Date now = new Date();
-//                long time1 = now.getTime();
-//                abnormalLocDetlParam.setNowTime((int) ((time1 - time) / (1000 * 60 * 60 * 24)));
+            // 璁剧疆鍩烘湰淇℃伅锛堟棤璁烘槸鍚﹀紓甯革級
+            abnormalLocDetlParam.setStoreMax(mat.getStoreMax());
+            abnormalLocDetlParam.setStoreMaxDate(mat.getStoreMaxDate());
+            abnormalLocDetlParam.setStoreMin(mat.getStoreMin());
+            abnormalLocDetlParam.setAnfme(locDetl.getAnfme());
+            abnormalLocDetlParam.setMaktx(mat.getMaktx());
+            abnormalLocDetlParam.setMatnr(mat.getMatnr());
+            abnormalLocDetlParam.setSpecs(mat.getSpecs());
+            abnormalLocDetlParam.setBatch(locDetl.getBatch());
 
-                if (!Cools.isEmpty(mat.getStoreMax()) && locDetl.getAnfme() > mat.getStoreMax()) {
-                    result.add(abnormalLocDetlParam);
-                } else if (!Cools.isEmpty(mat.getStoreMin()) && locDetl.getAnfme() < mat.getStoreMin()) {
-                    result.add(abnormalLocDetlParam);
-                }
+            // 璁剧疆瀵煎嚭闇�瑕佺殑鍏朵粬瀛楁
+            abnormalLocDetlParam.setLocNo(locDetl.getLocNo());
+            abnormalLocDetlParam.setZpallet(locDetl.getZpallet());
+            abnormalLocDetlParam.setOrderNo(locDetl.getOrderNo());
+            abnormalLocDetlParam.setModiTime(locDetl.getModiTime());
+
+            // 璁$畻搴撻緞锛堝疄闄呭湪搴撳ぉ鏁帮級
+            if (locDetl.getAppeTime() != null) {
+                long diff = System.currentTimeMillis() - locDetl.getAppeTime().getTime();
+                int days = (int) (diff / (1000 * 60 * 60 * 24));
+                abnormalLocDetlParam.setNowTime(days);
             }
+
+            // 纭繚鎵�鏈夊瓧娈甸兘鏈夊�硷紝閬垮厤绌哄�煎鑷村鍑哄紓甯�
+            if (abnormalLocDetlParam.getLocNo() == null) abnormalLocDetlParam.setLocNo("");
+            if (abnormalLocDetlParam.getZpallet() == null) abnormalLocDetlParam.setZpallet("");
+            if (abnormalLocDetlParam.getOrderNo() == null) abnormalLocDetlParam.setOrderNo("");
+            if (abnormalLocDetlParam.getSpecs() == null) abnormalLocDetlParam.setSpecs("");
+
+            // 鎬绘槸娣诲姞鍒扮粨鏋滃垪琛�
+            result.add(abnormalLocDetlParam);
         }
+
         return R.ok(exportSupport(result, fields));
     }
 
+
     @RequestMapping(value = "/locDetl/selectOwner/list/auth")
     @ManagerAuth
     public R selectOwnerlist(@RequestParam(defaultValue = "1")Integer curr,
diff --git a/src/main/java/com/zy/asrs/controller/LocMastController.java b/src/main/java/com/zy/asrs/controller/LocMastController.java
index 32fc68c..5dfa697 100644
--- a/src/main/java/com/zy/asrs/controller/LocMastController.java
+++ b/src/main/java/com/zy/asrs/controller/LocMastController.java
@@ -94,11 +94,14 @@
             String val = String.valueOf(entry.getValue());
             if (val.contains(RANGE_TIME_LINK)) {
                 String[] dates = val.split(RANGE_TIME_LINK);
-                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
-                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+                    wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+                    wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
             } else if (entry.getKey().equals("loc_no")) {
                 wrapper.like(entry.getKey(), val);
-            } else {
+            } else if (entry.getKey().equals("barcode")) {
+                wrapper.like(entry.getKey(), val);
+            }
+            else {
                 if (entry.getKey().equals("loc_type1")) {
                     sign = true;
                 }
@@ -365,8 +368,8 @@
                 locNoStr = split[1];
                 picPath += "_" + locNoStr;
             }
-            picList.add("http://" + WCS_URL + "/image/" + picPath + "-1.jpg");
-            picList.add("http://" + WCS_URL + "/image/" + picPath + "-2.jpg");
+            picList.add("http://172.26.1.189:8080//" + picPath + ".jpg");
+            picList.add("http://172.26.1.189:8080//" + picPath + ".jpg");
 
             LocPicDto locPicDto = new LocPicDto();
             locPicDto.setLocNo(locNoStr);
diff --git a/src/main/java/com/zy/asrs/controller/MesController.java b/src/main/java/com/zy/asrs/controller/MesController.java
index a690371..52b6720 100644
--- a/src/main/java/com/zy/asrs/controller/MesController.java
+++ b/src/main/java/com/zy/asrs/controller/MesController.java
@@ -2,18 +2,32 @@
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.annotations.AppAuth;
+import com.core.annotations.ManagerAuth;
 import com.core.common.Cools;
+import com.core.common.R;
 import com.core.exception.CoolException;
+import com.zy.asrs.entity.CanFin;
+import com.zy.asrs.entity.Task;
+import com.zy.asrs.entity.WrkMast;
 import com.zy.asrs.entity.mes.*;
+import com.zy.asrs.entity.param.CombParam;
+import com.zy.asrs.mapper.CanFinMapper;
 import com.zy.asrs.service.MesService;
+import com.zy.asrs.service.MobileService;
+import com.zy.asrs.service.TaskService;
+import com.zy.asrs.service.WrkMastService;
 import com.zy.common.web.BaseController;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.io.IOException;
+import java.util.Date;
+import java.util.List;
 
 @RestController
 @Slf4j
@@ -21,6 +35,15 @@
 
     @Resource
     private MesService mesService;
+
+    @Autowired
+    private MobileService mobileService;
+    @Autowired
+    private WrkMastService wrkMastService;
+    @Autowired
+    private TaskService taskService;
+    @Autowired
+    private CanFinMapper canFinMapper;
 
     private void auth(String appkey, Object obj, HttpServletRequest request) {
         log.info("{}鎺ュ彛琚闂紱appkey:{}锛涜姹傛暟鎹細{}", request.getRequestURI(), appkey, JSON.toJSONString(obj));
@@ -30,12 +53,17 @@
     // 鐗╂枡淇℃伅鍚屾
     @PostMapping("/api/mes/synMatInfo")
     @AppAuth(memo = "鐗╂枡淇℃伅鍚屾")
-    public MesReturn synMatInfo(@RequestHeader(required = false) String appkey,@RequestBody MesMatRecvForm param, HttpServletRequest request){
-        auth(appkey, param, request);
+//    public MesReturn synMatInfo(@RequestHeader(required = false) String appkey, @RequestBody List<MesMatRecvForm> params, HttpServletRequest request){
+    public MesReturn synMatInfo(@RequestHeader(required = false) String appkey, @RequestBody MesMatRecvForm params, HttpServletRequest request){
+        auth(appkey, params, request);
         MesReturn mesReturn = new MesReturn();
         try {
-            mesReturn = mesService.matInfoAndInBound(param);
+//            for (MesMatRecvForm param : params){
+//                mesReturn = mesService.matInfoAndInBound(param);
+//            }
+                mesReturn = mesService.matInfoAndInBound(params);
         } catch (Exception e) {
+            log.error(String.valueOf(e));
             mesReturn.setSuccess("2");
             mesReturn.setMessage("鐗╂枡淇℃伅鍚屾澶辫触");
         }
@@ -119,26 +147,143 @@
         return mesService.queryInventory(itemno,orderNo);
     }
 
-    @PostMapping("/api/mes/pauseAGV")
-    public MesReturn AGVPause(@RequestBody JSONObject param) throws IOException {
-        MesReturn mesReturn = new MesReturn();
-        int AGVType;
-        if (param.containsKey("zoneCode")){
-            param.put("mapCode", "BB");
-            param.put("invoke", "FREEZE");
-            AGVType = 1;
+    /**
+     * MES璋冪敤PDA鐨凙GV璁㈠崟鍏ュ簱鎺ュ彛
+     * @param combParam
+     * @return
+     */
+    @RequestMapping("/comb/auth")
+    @ManagerAuth(memo = "缁勬墭")
+    public R comb(@RequestBody CombParam combParam){
+        log.info("=============== MES涓嬪彂缁勬墭璁㈠崟 ===============");
+        log.info("{}", combParam);
+        log.info("=============== MES涓嬪彂缁勬墭璁㈠崟 ===============");
+        if (combParam.getUserId() != null && !combParam.getUserId().equals(null)){
+            mobileService.comb(combParam, combParam.getUserId());
         }else {
-            AGVType = 2;
+            mobileService.comb(combParam, getUserId());
         }
-        if (mesService.AGVPause(param, AGVType) == 1){
-            mesReturn.setSuccess("1");
-            mesReturn.setMessage("鎴愬姛");
-            return mesReturn;
-        }else {
-            mesReturn.setSuccess("2");
-            mesReturn.setMessage("澶辫触");
-            return mesReturn;
-        }
+        return R.ok("缁勬墭鎴愬姛");
     }
 
+    /**
+     * MES璋冪敤PDA鐨勮ˉ绌烘澘
+     *
+     * @param locNo 鐩爣绔欑偣
+     * @param size  鎵樼洏澶у皬 1锛氬皬鎵樼洏  2锛氬ぇ鎵樼洏
+     * @return
+     */
+    @PostMapping("/callEmptyBinOutBound")
+    public synchronized R callEmptyBinOutBound(@RequestParam(required = false) String locNo
+            , @RequestParam(required = false) String size
+            , @RequestParam(required = false) String palletFormat
+            , @RequestParam(required = false) String agvTaskNo) {
+        if (Cools.isEmpty(locNo) || Cools.isEmpty(size)) {
+            return R.error("绔欑偣鎴栬�呭ぇ灏忎笉鑳戒负绌�");
+        }
+        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 110).eq("memo", locNo));
+        if (wrkMast != null) {
+            return R.error("璇ョ珯鐐�="+locNo+"宸茬粡鏈夌┖鏉垮嚭搴撲换鍔★紝涓轰簡涓嶅牭濉炲爢鍨涙満鎺ラ┏绔欑偣锛岀姝笅鍙戝涓┖鏉垮嚭搴撲换鍔�");
+        }
+        return mobileService.callEmptyBinOutBound(locNo, size, palletFormat, agvTaskNo, 9995L);
+    }
+
+
+    /**
+     * 绌烘澘鍥炲簱鎴栬�呮嫞鏂欏洖搴�
+     *
+     * @param sourceStaNo
+     * @param staNo
+     * @return
+     */
+    @RequestMapping("/AGVStartReturn")
+    public synchronized R AGVStartReturn(@RequestParam(required = false) String sourceStaNo
+            , @RequestParam(required = false) String staNo
+            , @RequestParam(required = false) String taskNo) {
+        if (Cools.isEmpty(sourceStaNo) || Cools.isEmpty(staNo)) {
+            return R.error("婧愮珯鐐瑰拰鎵樼洏鐮佷笉鑳戒负绌�");
+        }
+        List<Task> tasks = taskService.selectList(new EntityWrapper<Task>().eq("source_sta_no", sourceStaNo).eq("barcode", staNo));
+        if (tasks.size() > 0) {
+            return R.error("璇ユ墭鐩�="+staNo+"宸茬粡瀛樺湪鎼繍浠诲姟锛岃涓嶈閲嶅涓嬪彂");
+        }
+
+        String barcode = staNo.substring(0,1);
+        if(barcode.equals("3")){
+            taskNo = "307";
+        }else if(barcode.equals("4")){
+            taskNo = "402";
+        }else if(barcode.equals("5")){
+            taskNo = "401";
+        }
+
+        R r = R.ok();
+        //鐢熸垚AGV鎼繍鍑哄簱浠诲姟
+        // 淇濆瓨宸ヤ綔妗�
+        Task task = new Task();
+        Date date = new Date();
+        String TaskNo = 555555 + "aa" + date.getTime();
+        task.setWrkNo((int) date.getTime())
+                .setTaskNo(TaskNo)
+                .setIoTime(date)
+                .setWrkSts(301L) // 宸ヤ綔鐘舵�侊細301.浠诲姟涓嬪彂
+                .setIoType(3) // 鍏ュ嚭搴撶姸鎬侊細 3.绔欏埌绔�  4.绔欏埌鍖哄煙
+                .setTaskType("agv")
+                .setIoPri(10D)
+                .setFullPlt("Y") // 婊℃澘锛歒
+                .setPicking("N") // 鎷f枡
+                .setExitMk("N")// 閫�鍑�
+                .setStaNo(taskNo)
+                .setSourceStaNo(sourceStaNo)//agv鍙栬揣绔欑偣
+                .setEmptyMk("N")// 绌烘澘
+                .setBarcode(staNo)// 鎵樼洏鐮�
+                .setLinkMis("N")
+                .setAppeUser(9945L)
+                .setAppeTime(date)
+                .setModiUser(9945L)
+                .setModiTime(date);
+        if (taskService.insert(task)) {
+            Date now = new Date();
+            CanFin canFin = new CanFin();
+            canFin.setAgvType("agv-in");
+            canFin.setInNo(TaskNo);
+            canFin.setApplyTime(now);
+            canFinMapper.insert(canFin);
+        }else{
+            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+        }
+
+        return r;
+    }
+    @PostMapping("/api/mes/pauseAGV")
+    public MesReturn AGVPause(@RequestBody JSONObject param){
+        MesReturn mesReturn = new MesReturn();
+
+        String type = "STOP";
+        if (param.getString("type") != null){
+            type = "START";
+        }
+
+        switch (mesService.AGVPause(param, type)){
+            case 1:
+                mesReturn.setSuccess("1");
+                mesReturn.setMessage("AGV鏆傚仠鎴栧惎鍔ㄦ垚鍔�");
+                return mesReturn;
+            case 2:
+                mesReturn.setSuccess("1");
+                mesReturn.setMessage("娴峰悍AGV鏆傚仠鎴栧惎鍔ㄦ垚鍔�");
+                return mesReturn;
+            case 3:
+                mesReturn.setSuccess("1");
+                mesReturn.setMessage("鍗庢檽AGV鏆傚仠鎴栧惎鍔ㄦ垚鍔�");
+                return mesReturn;
+            case 4:
+                mesReturn.setSuccess("2");
+                mesReturn.setMessage("AGV鏆傚仠鎴栧惎鍔ㄨ皟鐢ㄥけ璐�");
+                return mesReturn;
+        }
+        mesReturn.setSuccess("2");
+        mesReturn.setMessage("AGV鏆傚仠鎴栧惎鍔ㄨ皟鐢ㄥけ璐�");
+        return mesReturn;
+    }
 }
diff --git a/src/main/java/com/zy/asrs/controller/MobileController.java b/src/main/java/com/zy/asrs/controller/MobileController.java
index 5a3ab3b..7085b61 100644
--- a/src/main/java/com/zy/asrs/controller/MobileController.java
+++ b/src/main/java/com/zy/asrs/controller/MobileController.java
@@ -12,6 +12,7 @@
 import com.zy.asrs.entity.*;
 import com.zy.asrs.entity.param.*;
 import com.zy.asrs.entity.result.MobileAdjustResult;
+import com.zy.asrs.mapper.CanFinMapper;
 import com.zy.asrs.mapper.ManLocDetlMapper;
 import com.zy.asrs.service.*;
 import com.zy.asrs.service.impl.OrderDetlPakinServiceImpl;
@@ -65,6 +66,8 @@
     private ManLocDetlMapper manLocDetlMapper;
     @Autowired
     private WrkDetlLogService wrkDetlLogService;
+    @Autowired
+    private CanFinMapper canFinMapper;
 
     @Resource
     private StaDescService staDescService;
@@ -277,7 +280,13 @@
     @RequestMapping("/comb/auth")
     @ManagerAuth(memo = "缁勬墭")
     public R comb(@RequestBody CombParam combParam){
-        mobileService.comb(combParam, getUserId());
+
+        if (combParam.getUserId() != null && !combParam.getUserId().equals(null)){
+            mobileService.comb(combParam, combParam.getUserId());
+        }else {
+            mobileService.comb(combParam, getUserId());
+        }
+
         return R.ok("缁勬墭鎴愬姛");
     }
 
@@ -625,11 +634,17 @@
                 .setAppeTime(date)
                 .setModiUser(9945L)
                 .setModiTime(date);
-        if (!taskService.insert(task)) {
+        if (taskService.insert(task)) {
+            Date now = new Date();
+            CanFin canFin = new CanFin();
+            canFin.setAgvType("agv-in");
+            canFin.setInNo(TaskNo);
+            canFin.setApplyTime(now);
+            canFinMapper.insert(canFin);
+        }else{
             throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
         }
-
-        return r;
+        return R.error("涓嬪彂澶辫触");
     }
 
     @RequestMapping("/orderIn")
diff --git a/src/main/java/com/zy/asrs/controller/OrderPakoutController.java b/src/main/java/com/zy/asrs/controller/OrderPakoutController.java
index 23fbfff..a3b3454 100644
--- a/src/main/java/com/zy/asrs/controller/OrderPakoutController.java
+++ b/src/main/java/com/zy/asrs/controller/OrderPakoutController.java
@@ -10,6 +10,7 @@
 import com.zy.asrs.entity.*;
 import com.zy.asrs.entity.param.OrderDomainParam;
 import com.zy.asrs.entity.result.WrkTraceVo;
+import com.zy.asrs.mapper.CanFinMapper;
 import com.zy.asrs.service.*;
 import com.zy.common.model.DetlDto;
 import com.zy.common.web.BaseController;
@@ -42,6 +43,8 @@
     private WrkMastService wrkMastService;
     @Autowired
     private WrkMastLogService wrkMastLogService;
+    @Autowired
+    private CanFinMapper canFinMapper;
 
     @RequestMapping(value = "/order/nav/list/auth")
     @ManagerAuth
@@ -375,6 +378,27 @@
     @ManagerAuth(memo = "鎵嬪姩鍒犻櫎璁㈠崟")
     @Transactional
     public R delete(@RequestParam Long orderId){
+        OrderPakout orderPakout = orderService.selectOne(new EntityWrapper<OrderPakout>()
+                .eq("id", orderId));
+        CanFin deleteCanFin = new CanFin();
+        deleteCanFin.setOutNo(orderPakout.getOrderNo());
+        List<CanFin> canFinList = canFinMapper.selectList(new EntityWrapper<CanFin>()
+                .orderBy("apply_time", true)
+                .isNotNull("out_no"));
+        if (!canFinList.isEmpty()){
+            for (CanFin canFin : canFinList){
+                if (canFin.getOutNo().equals(deleteCanFin.getOutNo())){
+                    canFinMapper.deleteById(canFin.getId());
+                }
+            }
+        }
+        List<CanFin> newCanFinList = canFinMapper.selectList(new EntityWrapper<CanFin>()
+                .orderBy("apply_time", true));
+        if (!newCanFinList.isEmpty()){
+            CanFin firstCanFin = newCanFinList.get(0);
+            firstCanFin.setTaskStatus("canout");
+            canFinMapper.updateById(firstCanFin);
+        }
         orderService.remove(orderId);
 //        Order order = orderService.selectById(orderId);
 //        if (order != null) {
diff --git a/src/main/java/com/zy/asrs/controller/OutController.java b/src/main/java/com/zy/asrs/controller/OutController.java
index 5ace63f..63f250e 100644
--- a/src/main/java/com/zy/asrs/controller/OutController.java
+++ b/src/main/java/com/zy/asrs/controller/OutController.java
@@ -247,10 +247,10 @@
                             locType = 2;
                         }
                         String bar = "";
-                        //鍏蜂綋寰呭畾
-//                        if(!Cools.isEmpty(orderPakout.getShipCode())&&orderPakout.getShipCode().equals("A01")){
-//                            bar = "A01";
-//                        }
+//                        鍏蜂綋寰呭畾
+                        if(!Cools.isEmpty(orderPakout.getShipCode())){
+                            bar = orderPakout.getShipCode();
+                        }
                         LocMast locMast = new LocMast();
                         if (Cools.isEmpty(bar)) {
                             locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
diff --git a/src/main/java/com/zy/asrs/controller/TaskController.java b/src/main/java/com/zy/asrs/controller/TaskController.java
index b453629..979dabf 100644
--- a/src/main/java/com/zy/asrs/controller/TaskController.java
+++ b/src/main/java/com/zy/asrs/controller/TaskController.java
@@ -6,7 +6,9 @@
 import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.baomidou.mybatisplus.plugins.Page;
 import com.core.common.DateUtils;
+import com.zy.asrs.entity.CanFin;
 import com.zy.asrs.entity.Task;
+import com.zy.asrs.mapper.CanFinMapper;
 import com.zy.asrs.service.TaskService;
 import com.core.annotations.ManagerAuth;
 import com.core.common.BaseRes;
@@ -23,6 +25,8 @@
 
     @Autowired
     private TaskService taskService;
+    @Autowired
+    private CanFinMapper canFinMapper;
 
     @RequestMapping(value = "/task/{id}/auth")
     @ManagerAuth
@@ -99,6 +103,29 @@
             taskService.completeWrkMast(workNo, getUserId());
             return R.ok("宸ヤ綔妗e凡瀹屾垚");
         } else if (type == 2) {
+            Task task = taskService.selectOne(new EntityWrapper<Task>()
+                    .eq("wrk_no", workNo));
+            if (task != null){
+                CanFin deleteCanFin = new CanFin();
+                deleteCanFin.setInNo(task.getTaskNo());
+                List<CanFin> canFinList = canFinMapper.selectList(new EntityWrapper<CanFin>()
+                        .orderBy("apply_time", true)
+                        .isNotNull("in_no"));
+                if (!canFinList.isEmpty()){
+                    for (CanFin canFin : canFinList){
+                        if (canFin.getInNo().equals(deleteCanFin.getInNo())){
+                            canFinMapper.deleteById(canFin.getId());
+                        }
+                    }
+                }
+                List<CanFin> newCanFinList = canFinMapper.selectList(new EntityWrapper<CanFin>()
+                        .orderBy("apply_time", true));
+                if (!newCanFinList.isEmpty()){
+                    CanFin firstCanFin = newCanFinList.get(0);
+                    firstCanFin.setTaskStatus("canout");
+                    canFinMapper.updateById(firstCanFin);
+                }
+            }
             taskService.cancelWrkMast(workNo, getUserId());
             return R.ok("宸ヤ綔妗e凡鍙栨秷");
         } else if (type == 3) {
diff --git a/src/main/java/com/zy/asrs/entity/AllLocationsVo.java b/src/main/java/com/zy/asrs/entity/AllLocationsVo.java
new file mode 100644
index 0000000..3f7c2bc
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/AllLocationsVo.java
@@ -0,0 +1,36 @@
+package com.zy.asrs.entity.digitaltwin;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author pang.jiabao
+ * @description 鏌ヨ鎵�鏈夊簱浣嶇姸鎬佸拰鐗╂枡-浜屾満搴婁俊鎭寲鏁板瓧瀛敓鐢�
+ * @createDate 2026/1/26 11:13
+ */
+@Data
+public class AllLocationsVo {
+
+    // 搴撲綅鍙�
+    private String locNo;
+
+    // 搴撲綅鐘舵�侊紝O绌哄簱浣嶏紙鑻辨枃涓嶆槸鏁板瓧锛夛紱F 鍦ㄥ簱锛汥 绌烘澘锛汸 鍑哄簱涓紱R 鍑哄簱棰勭害锛汼 鍏ュ簱棰勭害锛涘叾浠� 鍏朵粬锛�
+    private String locSts;
+
+    private List<LocDetl> locDetls  = new ArrayList<>();
+
+    @Data
+    public static class LocDetl {
+
+        @ApiModelProperty(value = "鍟嗗搧缂栧彿")
+        private String matnr;
+
+        @ApiModelProperty(value = "鍟嗗搧鍚嶇О")
+        private String maktx;
+
+        private Double anfme;
+    }
+}
diff --git a/src/main/java/com/zy/asrs/entity/CanFin.java b/src/main/java/com/zy/asrs/entity/CanFin.java
new file mode 100644
index 0000000..fed12f6
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/CanFin.java
@@ -0,0 +1,65 @@
+package com.zy.asrs.entity;
+
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@TableName("can_fin")
+public class CanFin {
+
+    /**
+     * 涓婚敭缂栧彿
+     */
+    @ApiModelProperty(value= "涓婚敭")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 鍏ュ簱鍗曞彿
+    */
+    @TableField("in_no")
+    private String inNo;
+
+    /**
+     * 鍑哄簱鍙�
+     * */
+    @TableField("out_no")
+    private String outNo;
+
+    /**
+     * 鎻掑叆鏃堕棿
+     */
+    @TableField("apply_time")
+    private Date applyTime;
+
+    /**
+     * 浠诲姟绫诲瀷
+     */
+    @TableField("task_type")
+    private String taskType;
+
+    /**
+     * 浠诲姟鐘舵��
+     */
+    @TableField("task_status")
+    private String taskStatus;
+
+    /**
+     * 鍑哄簱绫诲瀷
+     */
+    @TableField("out_type")
+    private String outType;
+
+    /**
+     * agv绫诲瀷
+     */
+    @TableField("agv_type")
+    private String agvType;
+}
diff --git a/src/main/java/com/zy/asrs/entity/Task.java b/src/main/java/com/zy/asrs/entity/Task.java
index cd8db31..6e92715 100644
--- a/src/main/java/com/zy/asrs/entity/Task.java
+++ b/src/main/java/com/zy/asrs/entity/Task.java
@@ -344,6 +344,14 @@
     @TableField("task_no")
     private String taskNo;
 
+    /**
+     * 鏄惁鏄痯da鍙戠殑
+     */
+    @ApiModelProperty(value= "鏄惁鏄疨DA鍙戠殑浠诲姟")
+    @TableField("is_PDA")
+    private String isPda;
+
+
     public Task() {}
 
     public String getYmd$(){
diff --git a/src/main/java/com/zy/asrs/entity/WorkChartAxis.java b/src/main/java/com/zy/asrs/entity/WorkChartAxis.java
index e433b13..d12b030 100644
--- a/src/main/java/com/zy/asrs/entity/WorkChartAxis.java
+++ b/src/main/java/com/zy/asrs/entity/WorkChartAxis.java
@@ -7,9 +7,9 @@
  */
 public class WorkChartAxis {
 	private String ymd;
-    private int inqty;
-    private int outqty;
-    
+	private int inqty;
+	private int outqty;
+
 	public String getYmd() {
 		return ymd;
 	}
diff --git a/src/main/java/com/zy/asrs/entity/mes/MesMatInfo.java b/src/main/java/com/zy/asrs/entity/mes/MesMatInfo.java
index 669d754..505a957 100644
--- a/src/main/java/com/zy/asrs/entity/mes/MesMatInfo.java
+++ b/src/main/java/com/zy/asrs/entity/mes/MesMatInfo.java
@@ -108,7 +108,7 @@
 //    @NotNull
     @JsonProperty("qty")
     @JSONField(name = "qty")
-    private Integer qty;
+    private Double qty;
 
     // 闆朵欢浜岀淮鐮�
     @JsonProperty("ItemBarcode")
diff --git a/src/main/java/com/zy/asrs/entity/mes/TransTask.java b/src/main/java/com/zy/asrs/entity/mes/TransTask.java
index 0b9156b..4bea215 100644
--- a/src/main/java/com/zy/asrs/entity/mes/TransTask.java
+++ b/src/main/java/com/zy/asrs/entity/mes/TransTask.java
@@ -75,4 +75,5 @@
     @JSONField(name = "TuoPanId")
     private String TuoPanId;
 
+    private String isPDA;
 }
diff --git a/src/main/java/com/zy/asrs/entity/param/AbnormalLocDetlParam.java b/src/main/java/com/zy/asrs/entity/param/AbnormalLocDetlParam.java
index 6063621..29c6bce 100644
--- a/src/main/java/com/zy/asrs/entity/param/AbnormalLocDetlParam.java
+++ b/src/main/java/com/zy/asrs/entity/param/AbnormalLocDetlParam.java
@@ -175,7 +175,12 @@
      */
     private Integer nowTime;
 
-
+    /**
+     * 搴撻緞(澶�)锛屽搴斿墠绔殑 storeDate 瀛楁
+     */
+    public Integer getStoreDate() {
+        return this.nowTime;
+    }
     public String getLocNo$() {
         LocMastService service = SpringUtils.getBean(LocMastService.class);
         LocMast locMast = service.selectById(this.locNo);
diff --git a/src/main/java/com/zy/asrs/entity/param/CombParam.java b/src/main/java/com/zy/asrs/entity/param/CombParam.java
index 77f6da8..b873c5f 100644
--- a/src/main/java/com/zy/asrs/entity/param/CombParam.java
+++ b/src/main/java/com/zy/asrs/entity/param/CombParam.java
@@ -24,6 +24,8 @@
 
     private List<CombMat> combMats;
 
+    private Long userId;  // 鏂板瀛楁
+
     @Data
     public static class CombMat {
 
diff --git a/src/main/java/com/zy/asrs/mapper/CanFinMapper.java b/src/main/java/com/zy/asrs/mapper/CanFinMapper.java
new file mode 100644
index 0000000..737b9ee
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/CanFinMapper.java
@@ -0,0 +1,13 @@
+package com.zy.asrs.mapper;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.zy.asrs.entity.CanFin;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface CanFinMapper extends BaseMapper<CanFin> {
+
+}
diff --git a/src/main/java/com/zy/asrs/mapper/WrkDetlLogMapper.java b/src/main/java/com/zy/asrs/mapper/WrkDetlLogMapper.java
index 67a4a26..44d9f4b 100644
--- a/src/main/java/com/zy/asrs/mapper/WrkDetlLogMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/WrkDetlLogMapper.java
@@ -5,6 +5,7 @@
 import org.apache.ibatis.annotations.Insert;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Update;
 import org.springframework.stereotype.Repository;
 
 import java.util.Date;
@@ -40,4 +41,6 @@
                                 @Param("modiTimeEnd") Date modiTimeEnd);
 
 
+    @Update("update asr_wrk_detl_log set io_time = #{ioTime} where wrk_no = #{workNo}")
+    int updateIoTime(@Param("workNo") Integer workNo, @Param("ioTime") Date ioTime);
 }
diff --git a/src/main/java/com/zy/asrs/service/DigitalTwinService.java b/src/main/java/com/zy/asrs/service/DigitalTwinService.java
index 1b02d7d..6173d8f 100644
--- a/src/main/java/com/zy/asrs/service/DigitalTwinService.java
+++ b/src/main/java/com/zy/asrs/service/DigitalTwinService.java
@@ -1,8 +1,11 @@
 package com.zy.asrs.service;
 
+import com.core.common.R;
 import com.zy.asrs.entity.digitaltwin.*;
+import com.zy.asrs.entity.digitaltwin.AllLocationsVo;
 
 import java.util.List;
+import java.util.Map;
 
 public interface DigitalTwinService {
 
@@ -69,4 +72,16 @@
     void locNumCount();
 
     DtEquipmentVo equipment(String areaId);
+
+
+
+
+
+    /**
+     * 鏌ヨ鎵�鏈夊簱浣嶇姸鎬佸拰鐗╂枡-浜屾満搴婁俊鎭寲鏁板瓧瀛敓鐢�
+     */
+    R getAllLocations();
+
+
+    List<Map<String, Object>> getLocalDetal();
 }
diff --git a/src/main/java/com/zy/asrs/service/MesService.java b/src/main/java/com/zy/asrs/service/MesService.java
index f3ba28b..9dab4f0 100644
--- a/src/main/java/com/zy/asrs/service/MesService.java
+++ b/src/main/java/com/zy/asrs/service/MesService.java
@@ -148,5 +148,5 @@
 
     MesReturn queryInventory(String itemno,String orderNo);
 
-    int AGVPause(JSONObject params, int AGVType);
+    int AGVPause(JSONObject params, String Type);
 }
diff --git a/src/main/java/com/zy/asrs/service/OrderPakoutService.java b/src/main/java/com/zy/asrs/service/OrderPakoutService.java
index dff48ff..08049ab 100644
--- a/src/main/java/com/zy/asrs/service/OrderPakoutService.java
+++ b/src/main/java/com/zy/asrs/service/OrderPakoutService.java
@@ -1,5 +1,6 @@
 package com.zy.asrs.service;
 
+import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.baomidou.mybatisplus.service.IService;
 import com.core.common.R;
 import com.zy.asrs.entity.OrderPakout;
diff --git a/src/main/java/com/zy/asrs/service/impl/DigitalTwinServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/DigitalTwinServiceImpl.java
index 935062a..dca7bc0 100644
--- a/src/main/java/com/zy/asrs/service/impl/DigitalTwinServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/DigitalTwinServiceImpl.java
@@ -2,26 +2,28 @@
 
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
+import com.core.common.R;
 import com.zy.asrs.entity.BasCrnp;
 import com.zy.asrs.entity.LocCount;
 import com.zy.asrs.entity.LocDetl;
 import com.zy.asrs.entity.LocMast;
 import com.zy.asrs.entity.digitaltwin.*;
+import com.zy.asrs.entity.digitaltwin.AllLocationsVo;
 import com.zy.asrs.mapper.DigitalTwinMapper;
 import com.zy.asrs.mapper.LocCountMapper;
+import com.zy.asrs.mapper.LocDetlMapper;
 import com.zy.asrs.service.BasCrnpService;
 import com.zy.asrs.service.DigitalTwinService;
+import com.zy.asrs.service.LocDetlService;
 import com.zy.asrs.service.LocMastService;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
@@ -31,6 +33,8 @@
     private DigitalTwinMapper digitalTwinMapper;
     @Resource
     private LocCountMapper locCountMapper;
+    @Autowired
+    private LocDetlMapper locDetlMapper;
 
     /**
      * 鎬昏锛氭�诲簱浣嶃�佸凡鐢ㄥ簱浣嶃�佸墿浣欏簱浣嶃�佷粖鏃ュ嚭搴撱�佷粖鏃ュ叆搴撱�佸墿浣欏簱浣�
@@ -74,15 +78,37 @@
             startTime = calendar.getTime();
             endTime = now;
 
-        } else {
-            SimpleDateFormat sdf =
-                    new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
-
+        }else {
+            SimpleDateFormat sdf;
             try {
-                startTime  = sdf.parse(startDate);
-                endTime = sdf.parse(endDate);
+                // 灏濊瘯瑙f瀽yyyyMMdd鏍煎紡
+                if (startDate.length() == 8 && endDate.length() == 8) {
+                    sdf = new SimpleDateFormat("yyyyMMdd");
+                    startTime = sdf.parse(startDate);
+                    endTime = sdf.parse(endDate);
+                    // 璁剧疆缁撴潫鏃堕棿涓哄綋澶╃殑23:59:59.999
+                    Calendar calendar = Calendar.getInstance();
+                    calendar.setTime(endTime);
+                    calendar.set(Calendar.HOUR_OF_DAY, 23);
+                    calendar.set(Calendar.MINUTE, 59);
+                    calendar.set(Calendar.SECOND, 59);
+                    calendar.set(Calendar.MILLISECOND, 999);
+                    endTime = calendar.getTime();
+                } else {
+                    // 灏濊瘯瑙f瀽yyyy-MM-dd HH:mm:ss.SSS鏍煎紡
+                    sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
+                    startTime = sdf.parse(startDate);
+                    endTime = sdf.parse(endDate);
+                }
             } catch (ParseException e) {
                 e.printStackTrace();
+                // 瑙f瀽澶辫触鏃朵娇鐢ㄩ粯璁ょ殑7澶╂椂闂磋寖鍥�
+                Date now = new Date();
+                Calendar calendar = Calendar.getInstance();
+                calendar.setTime(now);
+                calendar.add(Calendar.DAY_OF_MONTH, -7);
+                startTime = calendar.getTime();
+                endTime = now;
             }
         }
         List<DtOrderVo> dbOrder = digitalTwinMapper.recentOrder(startTime, endTime);
@@ -114,15 +140,37 @@
             startTime = calendar.getTime();
             endTime = now;
 
-        } else {
-            SimpleDateFormat sdf =
-                    new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
-
+        }  else {
+            SimpleDateFormat sdf;
             try {
-                startTime  = sdf.parse(startDate);
-                endTime = sdf.parse(endDate);
+                // 灏濊瘯瑙f瀽yyyyMMdd鏍煎紡
+                if (startDate.length() == 8 && endDate.length() == 8) {
+                    sdf = new SimpleDateFormat("yyyyMMdd");
+                    startTime = sdf.parse(startDate);
+                    endTime = sdf.parse(endDate);
+                    // 璁剧疆缁撴潫鏃堕棿涓哄綋澶╃殑23:59:59.999
+                    Calendar calendar = Calendar.getInstance();
+                    calendar.setTime(endTime);
+                    calendar.set(Calendar.HOUR_OF_DAY, 23);
+                    calendar.set(Calendar.MINUTE, 59);
+                    calendar.set(Calendar.SECOND, 59);
+                    calendar.set(Calendar.MILLISECOND, 999);
+                    endTime = calendar.getTime();
+                } else {
+                    // 灏濊瘯瑙f瀽yyyy-MM-dd HH:mm:ss.SSS鏍煎紡
+                    sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
+                    startTime = sdf.parse(startDate);
+                    endTime = sdf.parse(endDate);
+                }
             } catch (ParseException e) {
                 e.printStackTrace();
+                // 瑙f瀽澶辫触鏃朵娇鐢ㄩ粯璁ょ殑7澶╂椂闂磋寖鍥�
+                Date now = new Date();
+                Calendar calendar = Calendar.getInstance();
+                calendar.setTime(now);
+                calendar.add(Calendar.DAY_OF_MONTH, -7);
+                startTime = calendar.getTime();
+                endTime = now;
             }
         }
 
@@ -301,4 +349,51 @@
 
     // endregion
 
+    // endregion
+    @Resource
+    private LocDetlService locDetlService;
+
+    @Override
+    public R getAllLocations() {
+        List<AllLocationsVo> allLocationsVos = new ArrayList<>();
+        List<LocMast> locMastList = locMastService.selectList(new EntityWrapper<>());
+        locMastList.forEach(locMast -> {
+            AllLocationsVo allLocationsVo = new AllLocationsVo();
+            allLocationsVo.setLocNo(locMast.getLocNo());
+            String locSts = locMast.getLocSts();
+            allLocationsVo.setLocSts(locSts);
+            // 鏈夊簱瀛�
+            if (locSts.equals("F") || locSts.equals("P") || locSts.equals("Q") || locSts.equals("R")) {
+                List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()));
+                if (!locDetls.isEmpty()) {
+                    List<AllLocationsVo.LocDetl> locDetlList = locDetls.stream().map(locDetl -> {
+                                AllLocationsVo.LocDetl locDetl1 = new AllLocationsVo.LocDetl();
+                                BeanUtils.copyProperties(locDetl, locDetl1);
+                                return locDetl1;
+                            }
+                    ).collect(Collectors.toList());
+                    allLocationsVo.setLocDetls(locDetlList);
+                }
+            }
+            allLocationsVos.add(allLocationsVo);
+        });
+        return R.ok(allLocationsVos);
+    }
+
+
+    public List<Map<String, Object>> getLocalDetal() {
+        List<LocDetl> locDetls = locDetlMapper.selectList(new EntityWrapper<>());
+        List<Map<String, Object>> result = new ArrayList<>();
+
+        for (LocDetl locDetl : locDetls) {
+            Map<String, Object> item = new HashMap<>();
+            item.put("zpallet", locDetl.getZpallet());
+            item.put("anfme", locDetl.getAnfme());
+            item.put("matnr", locDetl.getMatnr());
+            item.put("maktx", locDetl.getMaktx());
+            result.add(item);
+        }
+
+        return result;
+    }
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java
index d49c220..d4e7a67 100644
--- a/src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java
@@ -13,6 +13,7 @@
 import com.zy.asrs.entity.mes.*;
 import com.zy.asrs.entity.rcs.*;
 import com.zy.asrs.mapper.AgvInfoMapper;
+import com.zy.asrs.mapper.CanFinMapper;
 import com.zy.asrs.mapper.MatItemBarcodeMapper;
 import com.zy.asrs.service.*;
 import com.zy.asrs.utils.OrderInAndOutUtil;
@@ -22,10 +23,12 @@
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.sql.Time;
 import java.text.ParseException;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -99,6 +102,8 @@
     private DocTypeService docTypeService;
     @Autowired
     private OrderService orderService;
+    @Autowired
+    private CanFinMapper canFinMapper;
 
 
     // region MES鎺ュ彛
@@ -171,8 +176,10 @@
             newTag.setUpdateBy(defaultUserId);
             newTag.setUpdateTime(now);
 
-            if (!tagService.insert(newTag))
+            if (!tagService.insert(newTag)){
+                log.error("鎻掑叆tag澶辫触");
                 return -1;
+            }
             tagId = newTag.getId();
         } else {
             tagId = tag.getId();
@@ -197,10 +204,13 @@
             newMat.setUpdateTime(now);
             newMat.setStatus(1);
             if (mat == null) {
-                if (!matService.insert(newMat))
+                if (!matService.insert(newMat)){
+                    log.error("鎻掑叆澶辫触");
                     return -2;
+                }
             }
         } else {
+            log.error("tagId灏忎簬0");
             return -1;
         }
 
@@ -227,15 +237,25 @@
 
             // 鏍¢獙璁㈠崟鏄惁閲嶅
             OrderPakin order = orderPakinService.selectByNo(entry.getKey());
-            // 濡傛灉鍗曟嵁涓嶅瓨鍦ㄥ垯娣诲姞锛涘鏋滃崟鎹瓨鍦紝浣滀笟涓棤娉曚慨鏀癸紝鍙嶄箣鍒欎慨鏀瑰崟鎹�
+            OrderPakin orderPakin;
+
+            // 濡傛灉鍗曟嵁涓嶅瓨鍦ㄥ垯娣诲姞锛涘鏋滃崟鎹瓨鍦ㄤ笖settle涓�1鍒欒拷鍔犳槑缁嗭紱濡傛灉settle涓�6鍒欏垹闄ゅ悗閲嶆柊鐢熸垚锛涗綔涓氫腑鏃犳硶淇敼
             if (!Cools.isEmpty(order)) {
-                if (order.getSettle() > 1L) {
+                if (order.getSettle() > 1L && order.getSettle() < 6L) {
                     throw new CoolException(entry.getKey() + "姝e湪鍑哄簱锛屾棤娉曚慨鏀瑰崟鎹�");
+                } else if (order.getSettle() == 6L) {
+                    orderPakinService.remove(order.getId());
+                    orderPakin = null;
+                } else if (order.getSettle() == 1L) {
+                    orderPakin = order;
+                } else {
+                    orderPakin = null;
                 }
-                orderPakinService.remove(order.getId());
+            } else {
+                orderPakin = null;
             }
 
-            // 鐢熸垚璁㈠崟
+            // 鐢熸垚璁㈠崟鎴栨洿鏂拌鍗�
             JSONObject newMemo = new JSONObject();
             newMemo.put("sourceNo", matRecvForm.getSourceNo());
             newMemo.put("sourceName", matRecvForm.getSourceName());
@@ -243,21 +263,27 @@
             newMemo.put("itemdata", list);
 
 
-            // 鐢熸垚璁㈠崟
-            OrderPakin orderPakin = new OrderPakin();
-            orderPakin.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
-            orderPakin.setOrderNo(entry.getKey());
-            orderPakin.setOrderTime(DateUtils.convert(now));
-            orderPakin.setDocType(docType);
-            orderPakin.setSettle(1L);
-            orderPakin.setStatus(1);
-            orderPakin.setCreateBy(defaultUserId);
-            orderPakin.setCreateTime(now);
-            orderPakin.setUpdateBy(defaultUserId);
-            orderPakin.setUpdateTime(now);
-            orderPakin.setMemo(JSONObject.toJSONString(newMemo));  //涓哄嚭搴撳畬鎴愬弽棣堜繚瀛�
-            orderPakin.setPakinPakoutStatus(1);
-            orderPakinService.insert(orderPakin);
+            // 濡傛灉璁㈠崟涓嶅瓨鍦ㄦ垨宸插垹闄わ紝鍒欑敓鎴愭柊璁㈠崟
+            if (orderPakin == null) {
+                orderPakin = new OrderPakin();
+                orderPakin.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
+                orderPakin.setOrderNo(entry.getKey());
+                orderPakin.setOrderTime(DateUtils.convert(now));
+                orderPakin.setDocType(docType);
+                orderPakin.setSettle(1L);
+                orderPakin.setStatus(1);
+                orderPakin.setCreateBy(defaultUserId);
+                orderPakin.setCreateTime(now);
+                orderPakin.setMemo(JSONObject.toJSONString(newMemo));
+                orderPakin.setPakinPakoutStatus(1);
+                orderPakinService.insert(orderPakin);
+            } else {
+                // 鏇存柊璁㈠崟鐨刴emo鍜屾洿鏂版椂闂�
+                orderPakin.setMemo(JSONObject.toJSONString(newMemo));
+                orderPakin.setUpdateBy(defaultUserId);
+                orderPakin.setUpdateTime(now);
+                orderPakinService.updateById(orderPakin);
+            }
             if (list != null && !list.isEmpty()) {
                 for (MesMatInfo mesMatInfo : list) {
 
@@ -270,7 +296,7 @@
                     OrderDetlPakin orderDetlPakin = new OrderDetlPakin();
                     orderDetlPakin.setOrderId(orderPakin.getId());
                     orderDetlPakin.setOrderNo(orderPakin.getOrderNo());
-                    orderDetlPakin.setAnfme(Double.valueOf(mesMatInfo.getQty()));
+                    orderDetlPakin.setAnfme(mesMatInfo.getQty());
                     orderDetlPakin.setQty(0.0);
                     orderDetlPakin.setMatnr(mat.getMatnr());
                     orderDetlPakin.setMaktx(mat.getMaktx());
@@ -941,6 +967,7 @@
         if (docType == null) {
             return 0;
         }
+
         //鐢熸垚鍑哄簱鍗�
         if (docType.getPakout() == 1) {
             long settle = 1;
@@ -971,10 +998,47 @@
             orderPakout.setMemo(JSONObject.toJSONString(mesCallOutApply));
             orderPakout.setPakinPakoutStatus(2);
             orderPakout.setCstmrName(mesCallOutApply.getStationId());//agv鐩爣绔欑偣
+/*
+            // 鏌ヨcan_fin琛ㄤ腑apply_time鏈�鏂扮殑璁板綍
+            List<CanFin> canFinList = canFinMapper.selectList(new EntityWrapper<CanFin>()
+                    .orderBy("apply_time", false)
+            );
+            if (!canFinList.isEmpty()) {
+                CanFin firstCanFin = canFinList.get(0);
+                if (firstCanFin.getAgvType().equals("agv-in-out")) {
+                    // 鍙慨鏀归渶瑕佹洿鏂扮殑瀛楁
+                    if (firstCanFin.getOutNo() == null){
+                        firstCanFin.setOutType("waiting");
+                        firstCanFin.setOutNo(mesCallOutApply.getOrderNo());
+                        // 纭繚鍏朵粬瀛楁淇濇寔涓嶅彉
+                        canFinMapper.updateById(firstCanFin);
+                        log.info("宸叉洿鏂癱an_fin琛ㄦ渶鏃╄褰曠殑out_no锛孖D锛歿}锛屽嚭搴撳崟鍙凤細{}",
+                                firstCanFin.getId(), mesCallOutApply.getOrderNo());
+                    }
+                }
+            }
+            */
+
             if (!orderPakoutService.insert(orderPakout)) {
                 log.error("MES淇濆瓨鍑哄簱璁㈠崟锛堝彨鏂欙級涓绘。澶辫触");
                 throw new CoolException("淇濆瓨鍑哄簱璁㈠崟锛堝彨鏂欙級涓绘。澶辫触");
             }
+
+            if (mesCallOutApply.getTransType().equals("瑁呴厤鍑哄簱鍗�")){
+                CanFin canFin = new CanFin();
+                Date time = now;
+                canFin.setAgvType("agv-out");
+                canFin.setOutNo(mesCallOutApply.getOrderNo());
+                List<CanFin> canFinList = canFinMapper.selectList(new EntityWrapper<>());
+                if (canFinList.isEmpty()){
+                    canFin.setTaskStatus("canout");
+                }else {
+                    canFin.setTaskStatus("waiting");
+                }
+                canFin.setApplyTime(time);
+                canFinMapper.insert(canFin);
+            }
+
             Set<String> set = new HashSet<>();
             // 鐢熸垚鏄庣粏
             if (mesCallOutApply.getItemdata() != null && !mesCallOutApply.getItemdata().isEmpty()) {
@@ -1013,7 +1077,8 @@
             //鏈夊灏戠涓嶅悓鐨勯厤鐩樺彿   鍙湁閰嶇洏鍑哄簱鍗曢渶瑕佺煡閬�
             if (mesCallOutApply.getTransType().equals("閰嶇洏鍑哄簱鍗�")) {
                 orderPakout.setPayType(set.size());
-                String shipCode = mesCallOutApply.getItemdata().get(0).getTrayid().split("-")[2];
+                String orderNo = mesCallOutApply.getOrderNo();
+                String shipCode = orderNo.substring(orderNo.lastIndexOf("-") + 1);
                 orderPakout.setShipCode(shipCode);//鍖哄煙  鏄惁鏄壒娈婃墭鐩�
                 orderPakoutService.updateById(orderPakout);
             }
@@ -1136,8 +1201,19 @@
         task.setPltType(transTask.getAgvFactory());//鍗庢檽AGV
         task.setPacked(transTask.getRackNumber());//鏂欐灦鍙�
         task.setCtnType(1);
+        task.setIsPda(transTask.getIsPDA());
 
         if (taskService.insert(task)) {
+            if (transTask.getNextStationId().equals("307")){
+                CanFin canFin = new CanFin();
+                Date time = now;
+//                canFin.setAgvType("agv-in-out");
+                canFin.setAgvType("agv-in");
+                canFin.setInNo(transTask.getTaskno());
+                canFin.setTaskStatus("waiting");
+                canFin.setApplyTime(time);
+                canFinMapper.insert(canFin);
+            }
             result.put("Success", "1");
             result.put("Message", "浠诲姟鎺ユ敹鎴愬姛");
 
@@ -1240,11 +1316,13 @@
         mesReturn.setSuccess("2");
 
         if ("Y".equals(allow.getStatus())) {
-            String TaskNo = allow.getTaskno();
-            if(allow.getTaskno().contains("-")){
-                TaskNo = allow.getTaskno().substring(0, allow.getTaskno().length() - 2);
+
+            // 淇敼鍚庣殑閫昏緫锛氭湁"-"鍒欏幓鎺夋渶鍚庝竴涓�"-"鍙婂悗闈㈠唴瀹癸紝娌℃湁鍒欎繚鎸佸師鏍�
+            String taskNo = allow.getTaskno();
+            if (taskNo.contains("-")) {
+                taskNo = allow.getTaskno().substring(0, taskNo.lastIndexOf("-"));
             }
-            Task task = taskService.selectOne(new EntityWrapper<Task>().eq("task_no", TaskNo));
+            Task task = taskService.selectOne(new EntityWrapper<Task>().eq("task_no", taskNo));
             if (Cools.isEmpty(task)) {
                 mesReturn.setMessage("娌℃湁鎵句釜璇ヤ换鍔$紪鍙�=" + allow.getTaskno() + "鐨凙GV绉诲姩浠诲姟");
             } else {
@@ -1332,13 +1410,14 @@
         mesReturn.setSuccess("2");
 
         if ("Y".equals(allow.getStatus())) {
-            String TaskNo = allow.getTaskno();
-            if(allow.getTaskno().contains("-")){
-                TaskNo = allow.getTaskno().substring(0, allow.getTaskno().length() - 2);
+            // 淇敼鍚庣殑閫昏緫锛氭湁"-"鍒欏幓鎺夋渶鍚庝竴涓�"-"鍙婂悗闈㈠唴瀹癸紝娌℃湁鍒欎繚鎸佸師鏍�
+            String taskNo = allow.getTaskno();
+            if (taskNo.contains("-")) {
+                taskNo = allow.getTaskno().substring(0, taskNo.lastIndexOf("-"));
             }
-            Task task = taskService.selectOne(new EntityWrapper<Task>().eq("task_no", TaskNo));
+            Task task = taskService.selectOne(new EntityWrapper<Task>().eq("task_no", taskNo));
             if (Cools.isEmpty(task)) {
-                mesReturn.setMessage("娌℃湁鎵句釜璇ヤ换鍔$紪鍙�=" + TaskNo + "鐨凙GV绉诲姩浠诲姟");
+                mesReturn.setMessage("娌℃湁鎵句釜璇ヤ换鍔$紪鍙�=" + taskNo + "鐨凙GV绉诲姩浠诲姟");
             } else {
                 //鏌ョ湅鐢宠绔欑偣鐨勬槸娴峰悍杩樻槸鍗庢檽
                 //娴峰悍
@@ -1401,24 +1480,99 @@
     }
 
     @Override
-    public int AGVPause(JSONObject params, int AGVType){
-        MesReturn mesReturn = new MesReturn();
+    public int AGVPause(JSONObject mesInfo, String Type){
 
-        String hik_url = "api/robot/controller/zone/pause";
-        String hx_url = "";
-        String URL = "";
-        if (AGVType == 1){
-            URL = HIK_URL + hik_url;
+        int i = HikPersonIn(mesInfo, Type);
+        int j = HxPersonIn(mesInfo, Type);
+
+        if (i == 1){
+            if (j == 1){
+                return 1;
+            }else
+                return 2;
         }else {
-            URL = HX_URL + hx_url;
+            if (j == 1){
+                return 3;
+            }else
+                return 4;
+        }
+    }
+
+    //浜哄憳鍏ヤ镜绯荤粺娴峰悍瀹炵幇鏂规硶
+    public int HikPersonIn(JSONObject param, String Type) {
+        String hik_blockUrl = "api/robot/controller/zone/blockade";
+        String hik_pauseUrl = "api/robot/controller/zone/pause";
+
+        String BLOCK_URL = HIK_URL + hik_blockUrl;
+        String PAUSE_URL = HIK_URL + hik_pauseUrl;
+
+        JSONObject rcsBlock = new JSONObject();
+        JSONObject rcsPause = new JSONObject();
+
+        rcsBlock.put("mapCode", "BB");
+        rcsPause.put("mapCode", "BB");
+
+        rcsBlock.put("zoneCode", param.getString("AreaCode"));
+        rcsPause.put("zoneCode", param.getString("AreaCode"));
+
+        if (Type.equals("STOP")){
+            rcsBlock.put("invoke", "BLOCKADE");
+            rcsPause.put("invoke","FREEZE");
+        }
+        if (Type.equals("START")){
+            rcsBlock.put("invoke", "OPENUP");
+            rcsPause.put("invoke","RUN");
         }
 
-        String response = RcsServiceImpl.sendPost(URL, JSONObject.toJSONString(params));
-        JSONObject jsonObject = JSON.parseObject(response);
-        if (!StringUtils.isEmpty(response) && jsonObject.getString("code").equals("SUCCESS")) {
+        String blockResponse = RcsServiceImpl.sendPost(BLOCK_URL, JSONObject.toJSONString(rcsBlock));
+        String PauseResponse = RcsServiceImpl.sendPost(PAUSE_URL, JSONObject.toJSONString(rcsPause));
+        JSONObject blockJsonObject = JSON.parseObject(blockResponse);
+        JSONObject pauseJsonObject = JSON.parseObject(PauseResponse);
+        if (!StringUtils.isEmpty(blockResponse) && (blockJsonObject.getString("code").equals("SUCCESS"))) {
+            if (!StringUtils.isEmpty(PauseResponse) && (pauseJsonObject.getString("code").equals("SUCCESS"))) {
                 return 1;
-        }else
-            return 2;
+            }
+            return 0;
+        }
+        //鐩存帴杩斿洖锛屼笉闇�瑕佷俊鎭�
+        return 0;
+    }
+
+    //浜哄憳鍏ヤ镜绯荤粺鍗庢檽瀹炵幇鏂规硶
+    public int HxPersonIn(JSONObject param, String Type) {
+        JSONObject rcsPause = new JSONObject();
+
+        String hx_url = "controller/notify/isstop";
+        String URL = HX_URL + hx_url;
+
+        rcsPause.put("agvno", 0);
+        rcsPause.put("areaNo", param.getString("AreaCode"));
+
+        if (Type.equals("STOP"))
+            rcsPause.put("action", "stop");
+
+        if (Type.equals("START"))
+            rcsPause.put("action", "start");
+
+        if (Type.equals("STOP")){
+            for (int i = 0; i < 10; i++){
+                String response = RcsServiceImpl.sendPost(URL, JSONObject.toJSONString(rcsPause));
+                JSONObject jsonObject = JSON.parseObject(response);
+                if (!StringUtils.isEmpty(response) && (jsonObject.getString("code").equals("SUCCESS") || jsonObject.getInteger("code") == 200)) {
+                    return 1;
+                }else
+                    return 0;
+            }
+        }
+        if (Type.equals("START")){
+            String response = RcsServiceImpl.sendPost(URL, JSONObject.toJSONString(rcsPause));
+            JSONObject jsonObject = JSON.parseObject(response);
+            if (!StringUtils.isEmpty(response) && (jsonObject.getString("code").equals("SUCCESS") || jsonObject.getInteger("code") == 200)) {
+                return 1;
+            }else
+                return 0;
+        }
+        return 0;
     }
 
     // endregion
diff --git a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
index 6364b12..93ae542 100644
--- a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -10,6 +10,7 @@
 import com.zy.asrs.entity.param.*;
 import com.zy.asrs.enums.CommonEnum;
 import com.zy.asrs.enums.LocStsType;
+import com.zy.asrs.mapper.CanFinMapper;
 import com.zy.asrs.mapper.LocMastMapper;
 import com.zy.asrs.mapper.ManLocDetlMapper;
 import com.zy.asrs.service.*;
@@ -33,6 +34,8 @@
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -82,6 +85,8 @@
     private ManLocDetlService manLocDetlService;
     @Autowired
     private ManLocDetlMapper manLocDetlMapper;
+    @Autowired
+    private CanFinMapper canFinMapper;
 
     @Autowired
     private AdjDetlService adjDetlService;
@@ -563,7 +568,8 @@
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void comb(CombParam param, Long userId) {
+    public void
+    comb(CombParam param, Long userId) {
         if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) {
             throw new CoolException(BaseRes.PARAM);
         }
@@ -726,11 +732,20 @@
                 waitPakin.setAppeTime(now);
                 waitPakin.setModiUser(userId);
                 waitPakin.setModiTime(now);
-                waitPakin.setStandby1(detls.getStandby1());//閰嶇洏鍙�
+                if (!detlDto.getStandby1().isEmpty() && detlDto.getStandby1() != null && !detlDto.getStandby1().equals("")){
+                    waitPakin.setStandby1(detls.getStandby1());//閰嶇洏鍙�
+                }
+
                 if (!waitPakinService.insert(waitPakin)) {
                     throw new CoolException("淇濆瓨鍏ュ簱閫氱煡妗eけ璐�");
                 }
             }
+
+//            Date date1 = now;
+//            CanFin canFin = new CanFin();
+//            canFin.setApplyTime(date1);
+//            canFin.setAgvType("agv-in");
+//            canFinMapper.insert(canFin);
 
             Set<String> stringSet = param.getCombMats().stream().map(CombParam.CombMat::getOrderNo).collect(Collectors.toSet());
             stringSet.forEach(orderNo -> {
@@ -1365,6 +1380,12 @@
         // 鐢熸垚宸ヤ綔妗�
         int workNo = commonService.getWorkNo(WorkNoType.PAKOUT.type);
         WrkMast wrkMast = new WrkMast();
+        if (agvTaskNo!=null){
+            wrkMast.setUserNo(agvTaskNo);
+        }else {
+            Date date = new Date();
+            wrkMast.setUserNo(staNo + "aa" + date.getTime());
+        }
         wrkMast.setWrkNo(workNo);
         wrkMast.setIoTime(now);
         wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
@@ -1379,14 +1400,16 @@
         wrkMast.setExitMk("N"); // 閫�鍑�
         wrkMast.setEmptyMk("Y"); // 绌烘澘
         wrkMast.setLinkMis("N");
-        wrkMast.setUserNo(agvTaskNo);
-        wrkMast.setUserNo(String.valueOf(agvTaskNo));
         wrkMast.setAppeUser(userId);
         wrkMast.setAppeTime(now);
         wrkMast.setModiUser(userId);
         wrkMast.setModiTime(now);
         wrkMast.setMemo(staNo);
         wrkMastService.insert(wrkMast);
+        CanFin canFin = new CanFin();
+        canFin.setAgvType("agv-out");
+        canFin.setApplyTime(now);
+        canFinMapper.insert(canFin);
 
         // 鏇存柊搴撲綅鐘舵��
         if (locMast.getLocSts().equals("D")) {
diff --git a/src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java
index e3fa69b..d33aebf 100644
--- a/src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java
@@ -327,8 +327,12 @@
 
         String robotTaskCode = rcsReporterTask.getRobotTaskCode();
         String singleRobotCode = rcsReporterTask.getSingleRobotCode();
-        String[] split = robotTaskCode.split("-");
-        robotTaskCode = split[0];
+
+        // 淇敼鍚庣殑閫昏緫锛氭湁"-"鍒欏幓鎺夋渶鍚庝竴涓�"-"鍙婂悗闈㈠唴瀹癸紝娌℃湁鍒欎繚鎸佸師鏍�
+        if (robotTaskCode.contains("-")) {
+            robotTaskCode = robotTaskCode.substring(0, robotTaskCode.lastIndexOf("-"));
+        }
+
         //鍗庢檽AGV鐘舵�佸弽棣堬紝鍙婄敵璇�
         if(Cools.isEmpty(rcsReporterTask.getExtra())){
             if(Cools.isEmpty(rcsReporterTask.getMethod())){
diff --git a/src/main/java/com/zy/asrs/service/impl/WrkDetlLogServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WrkDetlLogServiceImpl.java
index 69f5ead..55b3418 100644
--- a/src/main/java/com/zy/asrs/service/impl/WrkDetlLogServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WrkDetlLogServiceImpl.java
@@ -1,9 +1,13 @@
 package com.zy.asrs.service.impl;
 
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.zy.asrs.entity.WrkMast;
 import com.zy.asrs.mapper.WrkDetlLogMapper;
 import com.zy.asrs.entity.WrkDetlLog;
 import com.zy.asrs.service.WrkDetlLogService;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.zy.asrs.service.WrkMastService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.Date;
@@ -12,9 +16,17 @@
 @Service("wrkDetlLogService")
 public class WrkDetlLogServiceImpl extends ServiceImpl<WrkDetlLogMapper, WrkDetlLog> implements WrkDetlLogService {
 
+    @Autowired
+    private WrkMastService wrkMastService;
     @Override
     public boolean save(Integer workNo) {
-        return this.baseMapper.save(workNo) > 0;
+        WrkMast mast = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
+                .eq("wrk_no", workNo));
+        int result = this.baseMapper.save(workNo);
+        if (result > 0 && mast != null && mast.getIoTime() != null) {
+            this.baseMapper.updateIoTime(workNo, mast.getIoTime());
+        }
+        return result > 0;
     }
 
     @Override
diff --git a/src/main/java/com/zy/asrs/service/impl/WrkMastLogServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WrkMastLogServiceImpl.java
index 9c1bcb7..979f073 100644
--- a/src/main/java/com/zy/asrs/service/impl/WrkMastLogServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WrkMastLogServiceImpl.java
@@ -38,7 +38,7 @@
         Date now = new Date();
         WrkMastLog wrkMastLog = new WrkMastLog();
         wrkMastLog.setWrkNo(mast.getWrkNo());
-        wrkMastLog.setIoTime(now);
+        wrkMastLog.setIoTime(mast.getIoTime());
         wrkMastLog.setWrkSts(Math.toIntExact(mast.getWrkSts()));
         wrkMastLog.setIoType(mast.getIoType());
         wrkMastLog.setIoPri(mast.getIoPri()); // 浼樺厛绾�
diff --git a/src/main/java/com/zy/asrs/task/AGVTaskReportScheduler.java b/src/main/java/com/zy/asrs/task/AGVTaskReportScheduler.java
index 684dc50..8689217 100644
--- a/src/main/java/com/zy/asrs/task/AGVTaskReportScheduler.java
+++ b/src/main/java/com/zy/asrs/task/AGVTaskReportScheduler.java
@@ -1,14 +1,19 @@
 package com.zy.asrs.task;
 
+import com.alibaba.excel.util.StringUtils;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
+import com.zy.asrs.entity.mes.MesReturn;
+import com.zy.asrs.mapper.CanFinMapper;
 import com.zy.asrs.service.OrderPakoutService;
 import com.zy.asrs.service.TaskService;
 import com.zy.asrs.service.WrkDetlService;
 import com.zy.asrs.service.WrkMastService;
 import com.zy.asrs.service.impl.BasDevpServiceImpl;
+import com.zy.asrs.service.impl.RcsServiceImpl;
 import com.zy.asrs.task.core.ReturnT;
 import com.zy.asrs.task.handler.AGVTaskReportHandler;
 import org.slf4j.Logger;
@@ -39,12 +44,21 @@
     private BasDevpServiceImpl basDevpService;
     @Autowired
     private OrderPakoutService orderPakoutService;
+    @Autowired
+    private CanFinMapper canFinMapper;
+    @Value("${mes.url}")
+    private String MES_URL;
 
     /**
      * 婊℃澘鍜岀┖鏉垮嚭搴撲换鍔★紝鍑哄埌杈撻�佺嚎鍚庡垱寤篈GV鎼繍浠诲姟
      */
     @Scheduled(cron = "0/3 * * * * ? ")
     private void createAGVTask() {
+        try {
+            Thread.sleep(50);
+        } catch (InterruptedException e) {
+            throw new RuntimeException(e);
+        }
         if (!switchErpReportOld) {
             return;
         }
@@ -76,7 +90,7 @@
                 List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
 
                 if (wrkMast.getIoType()==110){
-                    if (wrkMast == null){
+                    if (TaskNo == null){
                         TaskNo = 55555 + "aa" + date.getTime();
                     }
                     taskType = "ZX-AGV-08-1";
@@ -89,7 +103,6 @@
                         }else if (orderPakout.getDocType()==12){
                             taskType = "ZP-AGV";
                         }
-
                     }
                 }
 
@@ -115,6 +128,24 @@
                 if (!taskService.insert(task)) {
                     throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
                 } else {
+                    if (!wrkMast.getBarcode().isEmpty() && !wrkMast.getMemo().isEmpty()) {
+                        JSONObject map = new JSONObject();
+                        map.put("orderNo", TaskNo);
+                        map.put("barCode", wrkMast.getBarcode());
+                        map.put("staNo", wrkMast.getStaNo());
+                        log.info("鏈鍑哄簱鎵樼洏锛歿}, 鐩爣绔檣}", wrkMast.getBarcode(), wrkMast.getMemo());
+                        String url = "ReceiveFinishedPalletCode";
+                        String URL = MES_URL + url;
+                        String response = RcsServiceImpl.sendPost(URL, JSONObject.toJSONString(map));
+                        if (!StringUtils.isEmpty(response) && response.contains("Success")){
+                            MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
+                            if("1".equals(mesReturn.getSuccess())) {
+                                log.info("涓婃姤瀹屾垚 ==> 鏈鍑哄簱鎵樼洏锛歿}, 鐩爣绔檣}", wrkMast.getBarcode(), wrkMast.getMemo());
+                            }else {
+                                log.error("涓婃姤澶辫触 ==> 鏈鍑哄簱鎵樼洏锛歿}, 鐩爣绔檣}", wrkMast.getBarcode(), wrkMast.getMemo());
+                            }
+                        }
+                    }
                     wrkMast.setWrkSts(31L);//31.AGV鎼繍浠诲姟鍒涘缓鎴愬姛
                     wrkMast.setModiTime(date);
                     wrkMastService.updateById(wrkMast);
@@ -126,8 +157,13 @@
     /**
      * AGV 浠诲姟涓嬪彂鎺ュ彛锛屽畾鏃剁粰AGV涓嬪彂浠诲姟
      */
-    @Scheduled(cron = "0/3 * * * * ? ")
+    @Scheduled(cron = "0/5 * * * * ? ")
     private void execute() {
+        try {
+            Thread.sleep(50);
+        } catch (InterruptedException e) {
+            throw new RuntimeException(e);
+        }
         if (!switchErpReportOld) {
             return;
         }
@@ -135,6 +171,50 @@
         List<Task> wrkSts = taskService.selectList(new EntityWrapper<Task>().eq("wrk_sts", 301).orderBy("appe_time"));
         if (wrkSts != null && !wrkSts.isEmpty()) {
             for (Task task : wrkSts) {
+
+                if (task.getStaNo().equals("307") && !task.getTaskType().equals("AGV琛ョ┖鏂欐灦")){
+                    //绛涢�夊叏閮ㄨ繕鏈畬鎴愮殑鍑哄簱浠诲姟
+                    List<OrderPakout> orderPakouts = orderPakoutService.selectList(new EntityWrapper<OrderPakout>()
+                            .in("settle", 1, 2)     // 1琛ㄧず杩樻湭寮�濮嬶紝2琛ㄧず姝e湪鎵ц
+                            .eq("doc_type", 12)
+                            .orderBy("order_time", true));
+                    if (!orderPakouts.isEmpty()) {
+                        //鑾峰彇绗竴鏉″叆搴撳崟
+                        OrderPakout orderPakout = orderPakouts.get(0);
+                        // 濡傛灉绗竴鏉¤繕鏈紑濮嬬殑鍑哄簱浠诲姟鏃堕棿鏃╀簬绗竴鏉℃湭瀹屾垚鐨勫叆搴撲换鍔℃椂闂达紝璺宠繃锛屼笉鎵ц
+                        if (orderPakout.getCreateTime().getTime() < task.getWrkDate().getTime()){
+                            continue;
+                        }
+                    }
+                }
+
+
+//                List<CanFin> canFinList = canFinMapper.selectList(new EntityWrapper<CanFin>()
+//                        .orderBy("apply_time", true)
+//                );
+//                if (!canFinList.isEmpty()) {
+//                    CanFin firstCanFin = canFinList.get(0);
+//                    // 妫�鏌� InNo 鏄惁涓虹┖
+//                    if (firstCanFin.getInNo() != null) {
+//                        // 妫�鏌ュ綋鍓嶄换鍔℃槸鍚︿笌杞簭浠诲姟鐩稿叧
+//                        if (task.getStaNo().equals("307")){
+//                            List<WrkMast> wrkMasts1 = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+//                                    .in("io_type", 1, 10));
+//                            BasDevp basDevp = basDevpService.checkSiteStatus(Integer.parseInt(task.getStaNo()));
+//                            if (basDevp.getWrkNo() != 0 || !wrkMasts1.isEmpty()){
+//                                continue;
+//                            }
+//                        }
+//                    }
+//                    if (firstCanFin.getOutNo() != null){
+//                        if (!task.getSourceStaNo().equals("307")){
+//                            if (!task.getTaskType().equals("AGV琛ョ┖鏂欐灦")){
+//                                continue;
+//                            }
+//                        }
+//                    }
+//                }
+
                 //鏌ヨ鏄惁鏈夋鍦ㄤ綔涓氱殑婧愮珯鍜岀洰鏍囩珯鏈変竴鏍风殑agv鎼繍浠诲姟
                 //濡傛灉鏈夊垯璺宠繃鏈agv鎼繍浠诲姟涓嬪彂
                 Task task1 = taskService.selectOne(new EntityWrapper<Task>()
diff --git a/src/main/java/com/zy/asrs/task/ErrorStockScheduler.java b/src/main/java/com/zy/asrs/task/ErrorStockScheduler.java
index 917cfc4..430243f 100644
--- a/src/main/java/com/zy/asrs/task/ErrorStockScheduler.java
+++ b/src/main/java/com/zy/asrs/task/ErrorStockScheduler.java
@@ -1,18 +1,37 @@
 package com.zy.asrs.task;
 
+import com.alibaba.excel.util.StringUtils;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
+import com.zy.asrs.entity.BasErrLog;
+import com.zy.asrs.entity.mes.MesReturn;
+import com.zy.asrs.service.BasErrLogService;
+import com.zy.asrs.service.impl.RcsServiceImpl;
 import com.zy.asrs.task.core.ReturnT;
 import com.zy.asrs.task.handler.ErrorStockHandler;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
 
 /**
  * Created by vincent on 2020/7/7
  */
 @Component
 public class ErrorStockScheduler {
+
+    @Value("${mes.url}")
+    public String MES_URL;
+
+    @Autowired
+    private BasErrLogService basErrLogService;
 
     private static final Logger log = LoggerFactory.getLogger(ErrorStockScheduler.class);
 
@@ -27,4 +46,59 @@
         }
     }
 
+
+
+    /**
+     * 姣忔棩鏁呴殰淇℃伅涓婃姤
+     */
+    @Scheduled(cron = "0 0 20 * * ? ")
+    public void faultReport() {
+        // 鑾峰彇浠婂ぉ鐨勫紑濮嬫椂闂�
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        calendar.set(Calendar.MILLISECOND, 0);
+        Date todayStart = calendar.getTime();
+
+        // 鑾峰彇浠婂ぉ鐨勭粨鏉熸椂闂�
+        calendar.set(Calendar.HOUR_OF_DAY, 23);
+        calendar.set(Calendar.MINUTE, 59);
+        calendar.set(Calendar.SECOND, 59);
+        calendar.set(Calendar.MILLISECOND, 999);
+        Date todayEnd = calendar.getTime();
+
+        List<BasErrLog> basErrLogs = basErrLogService.selectList(
+                new EntityWrapper<BasErrLog>()
+                        .between("create_time", todayStart, todayEnd)
+                        .orderBy("create_time", false)
+        );
+
+        int totalCount = basErrLogs.size();
+        long totalTime = 0;
+
+        for (BasErrLog basErrLog : basErrLogs) {
+            if (basErrLog.getStartTime() != null && basErrLog.getEndTime() != null) {
+                totalTime += basErrLog.getEndTime().getTime() - basErrLog.getStartTime().getTime();
+            }
+        }
+
+        JSONObject params = new JSONObject();
+        params.put("totalCount", totalCount);
+        params.put("totalTime", totalTime / 1000);
+
+        String url = "ErrorLogReport";
+        String URL = MES_URL + url;
+        String response = RcsServiceImpl.sendPost(URL, JSONObject.toJSONString(params));
+        if (!StringUtils.isEmpty(response) && response.contains("Success")){
+            MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
+            if("1".equals(mesReturn.getSuccess())) {
+                log.info("涓婃姤瀹屾垚 ==> 鏁呴殰娆℃暟锛歿}, 鎬绘椂闀匡細{}", totalCount, totalTime);
+            }else {
+                log.error("涓婃姤澶辫触 ==> 鏁呴殰娆℃暟锛歿}, 鎬绘椂闀匡細{}", totalCount, totalTime);
+            }
+        }
+
+    }
+
 }
diff --git a/src/main/java/com/zy/asrs/task/OrderSyncScheduler.java b/src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
index 1e31768..f03525a 100644
--- a/src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
+++ b/src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
@@ -8,6 +8,7 @@
 import com.zy.asrs.controller.OutController;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.entity.mes.*;
+import com.zy.asrs.mapper.CanFinMapper;
 import com.zy.asrs.service.*;
 import com.zy.asrs.service.impl.RcsServiceImpl;
 import com.zy.asrs.task.core.ReturnT;
@@ -40,6 +41,8 @@
     private OrderService orderService;
     @Autowired
     private ApiLogService apiLogService;
+    @Autowired
+    private TaskService taskService;
     @Resource
     private OrderPakinService orderPakinService;
     @Resource
@@ -69,6 +72,9 @@
 
     @Autowired
     private OutController  outController;
+
+    @Autowired
+    private CanFinMapper canFinMapper;
 
     @Scheduled(cron = "0 0 1 * * ? ")
     public void clearApiLog() {
@@ -257,11 +263,12 @@
     }
 
     // 瑁呴厤鍗曡嚜鍔ㄥ嚭搴�
-    @Scheduled(cron = "0/3 * * * * ? ")
+    @Scheduled(cron = "* * * * * ? ")
 //    @Async("orderThreadPool")
     void AutoOutOrderPinOut() throws InterruptedException {
         String erpReport = Parameter.get().getErpReport();
         if (!Cools.isEmpty(erpReport) && erpReport.equals("true")) {
+            //绛涢�夎繕娌℃墽琛岀殑鍑哄簱浠诲姟
             List<OrderPakout> orderPakouts = orderPakoutService.selectList(new EntityWrapper<OrderPakout>()
                     .eq("settle", 1)
                     .eq("doc_type", 12)
@@ -270,6 +277,51 @@
                 return;
             }
             for (OrderPakout orderPakout : orderPakouts) {
+//                //绛涢�夊叏閮ㄨ繕鏈墽琛岀殑鍏ュ簱浠诲姟
+//                List<Task> wrkSts = taskService.selectList(new EntityWrapper<Task>()
+//                        .eq("sta_no", "307")
+//                        .in("wrk_sts", 301,202)
+//                        .orderBy("wrk_date", true)
+//                );
+//                if (!wrkSts.isEmpty()) {
+//                    //鑾峰彇绗竴鏉″叆搴撳崟
+//                    Task task = wrkSts.get(0);
+//                    // 濡傛灉绗竴鏉¤繕鏈紑濮嬬殑鍑哄簱浠诲姟鏃堕棿鏅氫簬绗竴鏉℃湭瀹屾垚鐨勫叆搴撲换鍔℃椂闂达紝璺宠繃锛屼笉鎵ц
+//                    if (orderPakout.getCreateTime().getTime() > task.getWrkDate().getTime()){
+//                        continue;
+//                    }
+//                }
+
+                String sourceNo = orderPakout.getCstmrName();
+                List<Task> tasks = taskService.selectList(new EntityWrapper<Task>()
+                        .eq("source_sta_no", sourceNo)
+                        .in("wrk_sts", 301, 302, 303));
+                if (!tasks.isEmpty() && tasks != null){
+                    continue;
+                }
+
+//                // 鏌ヨcan_fin琛ㄤ腑鐩稿悓鍗曞彿鐨勫唴瀹�
+//                List<CanFin> conntOut = canFinMapper.selectList(
+//                        new EntityWrapper<CanFin>()
+//                                .eq("out_no", orderPakout.getOrderNo())
+//                );
+//                if (!conntOut.isEmpty()) {
+//                    // 妫�鏌ユ槸鍚︽弧瓒崇户缁墽琛岀殑鏉′欢锛歛gv_type涓篴gv-in-out涓攖ask_type涓篶anout
+//                    boolean canContinue = false;
+//                    for (CanFin canFin : conntOut) {
+////                        if ("agv-in-out".equals(canFin.getAgvType()) && "canout".equals(canFin.getTaskStatus())) {
+//                        if ("agv-out".equals(canFin.getAgvType()) && "canout".equals(canFin.getTaskStatus())) {
+//                            log.info("can_fin琛ㄦ湁婊¤冻鏉′欢鐨勮褰曪紝鎵ц鍑哄簱鍗曪細{}", orderPakout.getOrderNo());
+//                            canContinue = true;
+//                            break;
+//                        }
+//                    }
+//                    if (!canContinue) {
+//                        // 涓嶆弧瓒虫潯浠讹紝璺宠繃鍑哄簱鍗�
+//                        continue;
+//                    }
+//                }
+
                 List<LocDto> locDtos = new ArrayList<>();
                 Boolean boo = false;
 
diff --git a/src/main/java/com/zy/asrs/task/WorkMastScheduler.java b/src/main/java/com/zy/asrs/task/WorkMastScheduler.java
index 1e685d1..33e977c 100644
--- a/src/main/java/com/zy/asrs/task/WorkMastScheduler.java
+++ b/src/main/java/com/zy/asrs/task/WorkMastScheduler.java
@@ -1,12 +1,11 @@
 package com.zy.asrs.task;
 
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
+import com.zy.asrs.entity.BasErrLog;
 import com.zy.asrs.entity.Task;
 import com.zy.asrs.entity.WrkMast;
-import com.zy.asrs.service.DigitalTwinService;
-import com.zy.asrs.service.MesService;
-import com.zy.asrs.service.TaskService;
-import com.zy.asrs.service.WrkMastService;
+import com.zy.asrs.service.*;
 import com.zy.asrs.task.core.ReturnT;
 import com.zy.asrs.task.handler.WorkMastHandler;
 import org.slf4j.Logger;
@@ -39,6 +38,9 @@
     @Resource
     private DigitalTwinService digitalTwinService;
 
+    /**
+     * 瀹氭椂缁熻姣忓ぉ鍓╀綑搴撳瓨
+     */
     @Scheduled(cron = "0 50 23 * * ?")
     private void locNumCount() {
         digitalTwinService.locNumCount();
diff --git a/src/main/java/com/zy/asrs/task/handler/AGVTaskReportHandler.java b/src/main/java/com/zy/asrs/task/handler/AGVTaskReportHandler.java
index f9eb275..9f2675b 100644
--- a/src/main/java/com/zy/asrs/task/handler/AGVTaskReportHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/AGVTaskReportHandler.java
@@ -31,6 +31,7 @@
 
 
     public ReturnT<String> start(Task task) {
+        String taskType = "NB1";
         String SourceStaNoType = "SITE";
         String TargetStaNoType = "SITE";
         //缁檃gv涓嬪彂鐨勪换鍔$被鍨�,榛樿绔欏埌绔�
@@ -42,34 +43,42 @@
         }else if(task.getIoType()==5){
             SourceStaNoType = "ZONE";
         }
-        String taskType = "PP";
         Boolean flag1 = false;
         Boolean flag2 = false;
         Boolean cpFlag1 = false;
         Boolean cpFlag2 = false;
         if(stationProperties.getStation().contains(task.getStaNo())){
-            if (task.getStaNo().equals("Z-LVL18")){
-                taskType = "LJCPIN";
-                cpFlag1 = true;
-            }else {
-                taskType = "LJIN";
-                flag1 = true;
-            }
+            taskType = "LJIN";
+            flag1 = true;
         }
-        if (stationProperties.getStation().contains(task.getSourceStaNo())){
-            if (task.getSourceStaNo().equals("Z-LVL18")){
-                cpFlag2 = true;
-                taskType = "LJCPOUT";
-            }else{
-                taskType = "LJOUT";
-                flag2 = true;
-            }
+        if (stationProperties.getStation().contains(task.getSourceStaNo())) {
+            taskType = "LJOUT";
+            flag2 = true;
         }
-        if(flag1 && flag2){
+        if(flag1 && flag2) {
             taskType = "LJBOTH";
         }
-        if (cpFlag1 && cpFlag2){
-            taskType = "LJCPBOTH";
+        if (task.getStaNo().equals("Z-LVL18")){
+            taskType = "LJCPIN";
+        }
+        if (task.getSourceStaNo().equals("Z-LVL18")){
+            taskType = "LJCPOUT";
+        }
+        if (task.getSourceStaNo().equals("Z-LVL20")||task.getSourceStaNo().equals("Z-LVL21")||task.getSourceStaNo().equals("Z-LVL22")||
+                task.getSourceStaNo().equals("Z-LVL23")||task.getSourceStaNo().equals("Z-LVL24")||task.getSourceStaNo().equals("Z-LVL25")||
+                task.getSourceStaNo().equals("Z-LVL26")||task.getSourceStaNo().equals("Z-LVL27")||task.getSourceStaNo().equals("Z-LVL28")||
+                task.getSourceStaNo().equals("Z-LVL29")||task.getSourceStaNo().equals("Z-LVL30")||task.getSourceStaNo().equals("Z-LVL31")){
+            taskType = "HKCPIN";
+        }
+        if (task.getStaNo().equals("Z-LVL20")||task.getStaNo().equals("Z-LVL21")||task.getStaNo().equals("Z-LVL22")||
+                task.getStaNo().equals("Z-LVL23")||task.getStaNo().equals("Z-LVL24")||task.getStaNo().equals("Z-LVL25")||
+                task.getStaNo().equals("Z-LVL26")||task.getStaNo().equals("Z-LVL27")||task.getStaNo().equals("Z-LVL28")||
+                task.getStaNo().equals("Z-LVL29")||task.getStaNo().equals("Z-LVL30")||task.getStaNo().equals("Z-LVL31")
+        ){
+            taskType = "HKCPOUT";
+        }
+        if (task.getIsPda() != null && task.getIsPda().equals("Y")){
+            taskType = "NB1";
         }
         //AGV鍖哄煙涓棤娉曠敤-
         String StaNo = task.getStaNo();
diff --git a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
index c9a3aed..fab9bcb 100644
--- a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -3,15 +3,18 @@
 import com.alibaba.excel.util.StringUtils;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.core.common.Cools;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.entity.mes.MesReturn;
 import com.zy.asrs.enums.LocStsType;
+import com.zy.asrs.mapper.CanFinMapper;
 import com.zy.asrs.service.*;
 import com.zy.asrs.service.impl.*;
 import com.zy.asrs.task.AbstractHandler;
 import com.zy.asrs.task.core.ReturnT;
+import com.zy.asrs.utils.OrderInAndOutUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -57,6 +60,11 @@
     private TaskDetlService taskDetlService;
     @Autowired
     private BasStationServiceImpl basStationService;
+
+    @Autowired
+    private OrderPakoutService orderPakoutService;
+    @Autowired
+    private CanFinMapper canFinMapper;
     @Value("${mes.url}")
     private String url;
 
@@ -455,13 +463,49 @@
                 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                 return FAIL.setMsg("鏇存柊鍏ュ簱瀹屾垚鐘舵�佸け璐�; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
             }
+            // 灏唚aitPakin琛ㄤ腑鐨勬暟鎹爣璁颁负宸插鐞�
+            if (wrkMast.getIoType() == 1) { // 鍏ㄦ澘鍏ュ簱
+                Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>().eq("zpallet", wrkMast.getBarcode());
+                WaitPakin setParam = new WaitPakin();
+                setParam.setStatus("N");
+                setParam.setModiTime(new Date());
+                waitPakinService.update(setParam, wrapper);
+                log.info("鏇存柊搴撳瓨鎴愬姛锛佹墭鐩樼爜锛歿}", wrkMast.getBarcode());
+            }
         } catch (Exception e) {
             log.error("fail", e);
             e.printStackTrace();
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
             return FAIL.setMsg(e.getMessage());
         }
+        if (wrkMast.getStaNo().equals("307")){
+            try{
+                CanFin canFin = new CanFin();
+                List<CanFin> canFinList = canFinMapper.selectList(
+                        new EntityWrapper<CanFin>()
+                                .orderBy("apply_time", true)
+                );
+                if (canFinList != null){
+                    CanFin firstCanFin = canFinList.get(0);
+                    if (firstCanFin.getAgvType().equals("agv-in")){
+//                    if (firstCanFin.getAgvType().equals("agv-in-out")){
+                        canFinMapper.deleteById(firstCanFin.getId());
 
+                        if (canFinList.size() > 1){
+                            CanFin firstCanFin1 = canFinList.get(1);
+                            firstCanFin1.setTaskStatus("canout");
+                            log.info("can_fin琛ㄥ凡鏇存柊锛屽叆搴撳崟鐘舵�亄}", firstCanFin1.getOutType());
+                            canFinMapper.updateById(firstCanFin1);
+                        }
+                    }
+//                    else if(firstCanFin.getAgvType().equals("agv-in")){
+//                        canFinMapper.deleteById(firstCanFin.getId());
+//                    }
+                }
+            } catch (Exception e) {
+                log.error("鏈鍏ュ簱娌℃湁浠诲姟鍗�");
+            }
+        }
         return SUCCESS;
     }
 
@@ -592,12 +636,84 @@
                 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                 return FAIL.setMsg("鏇存柊鍑哄簱瀹屾垚鐘舵�佸け璐�; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
             }
+            // 妫�鏌ラ厤鐩樺崟鏄惁宸插畬鎴�
+            List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
+            for (WrkDetl wrkDetl : wrkDetls) {
+                if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
+                    OrderInAndOutUtil.checkComplete(Boolean.FALSE, wrkDetl.getOrderNo());
+                    break;
+                }
+            }
         } catch (Exception e) {
             log.error("fail", e);
             e.printStackTrace();
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
             return FAIL.setMsg(e.getMessage());
         }
+
+        if (wrkMast.getStaNo().equals("307")){
+            try{
+                List<CanFin> firstCanFinList = canFinMapper.selectList(
+                        new EntityWrapper<CanFin>()
+                                .orderBy("apply_time", true)
+                );
+                CanFin firstCanfin = firstCanFinList.get(0);
+                if (firstCanfin.getOutNo() != null && firstCanfin.getAgvType().equals("agv-out")){
+                    log.info("can_fin琛ㄥ凡鏇存柊锛屽嚭搴撳崟{}宸插垹闄�",firstCanfin.getOutNo());
+                    canFinMapper.deleteById(firstCanfin.getId());
+                }
+                if (firstCanfin.getOutNo() == null && firstCanfin.getAgvType().equals("agv-out")){
+                    log.info("can_fin琛ㄥ凡鏇存柊锛屽嚭搴撲换鍔″凡鍒犻櫎锛屽綋鍓嶅嚭搴撴棤浠诲姟鍗�");
+                    canFinMapper.deleteById(firstCanfin.getId());
+                }
+                if (firstCanFinList.size() > 1){
+                    CanFin secondCanFin = firstCanFinList.get(1);
+                    secondCanFin.setTaskStatus("canout");
+                    canFinMapper.updateById(secondCanFin);
+                }
+//                else {
+//                OrderPakout isOut = orderPakoutService.selectOne(
+//                                        new EntityWrapper<OrderPakout>()
+//                                                .eq("settle", 2L)
+//                                                .eq("doc_type", 12L));
+//                String outOrderNo = isOut.getOrderNo();
+//                    List<CanFin> canFinList = canFinMapper.selectList(
+//                            new EntityWrapper<CanFin>()
+//                                    .eq("agv_type", "agv-in-out")
+//                                    .orderBy("apply_time", true)
+//                    );
+//                    if (canFinList != null){
+//                        CanFin firstCanFin = canFinList.get(0);
+//
+//                        OrderPakout isOut = orderPakoutService.selectOne(
+//                                new EntityWrapper<OrderPakout>()
+//                                        .eq("orderNo", firstCanFin.getOutNo()));
+//
+//                        String outOrderNo = isOut.getOrderNo();
+//                        if (outOrderNo.equals(firstCanFin.getOutNo())){
+//                            log.info("can_fin琛ㄥ凡鏇存柊锛岃浆搴忓嚭搴撳崟{}宸插垹闄�", firstCanFin.getOutNo());
+//                            canFinMapper.deleteById(firstCanFin.getId());
+//                        }else {
+//                            log.info("鏈壘鍒拌鍑哄簱鍗曪紝can_fin琛ㄦ湭鏇存柊");
+//                        }
+//                        List<CanFin> canFinList1 = canFinMapper.selectList(
+//                                new EntityWrapper<CanFin>()
+//                                        .eq("agv_type", "agv-in-out")
+//                                        .orderBy("apply_time", true));
+//                        if (!canFinList1.isEmpty()){
+//                            CanFin firstCanFin2 = canFinList.get(0);
+//                            firstCanFin2.setTaskType("Y");
+//                            log.info("can_fin琛ㄥ凡鏇存柊锛岃浆搴忓嚭搴撳崟鍙互杞簭", firstCanFin2.getOutNo());
+//                            canFinMapper.updateById(firstCanFin2);
+//                        }
+//                    }
+//                }
+            } catch (Exception e) {
+                log.error("鏈鍑哄簱娌℃湁浠诲姟鍗�");
+                return null;
+            }
+        }
+
         return SUCCESS;
     }
 
@@ -634,16 +750,23 @@
                 map.put("StationId", task.getSourceStaNo());
                 String mesUrl = url+"AGVArrivalCompletedFit";
                 String response = RcsServiceImpl.sendPost(mesUrl, JSONObject.toJSONString(map));
+                log.info("AGV浠诲姟瀹屾垚杞彂MES");
                 if (!StringUtils.isEmpty(response) && response.contains("Success")){
                     MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
                     if("1".equals(mesReturn.getSuccess())) {
+                        log.info("AGV浠诲姟瀹屾垚杞彂MES鎴愬姛");
                         task.setWrkSts(305L);//浠诲姟鐘舵�佷粠304--銆�305
                         task.setModiTime(new Date());
                         taskService.updateById(task);
                     }else {
+                        log.error("AGV浠诲姟瀹屾垚杞彂MES澶辫触");
                         return new ReturnT<>(500, mesReturn.getMessage());
                     }
                 }
+            }else {
+                task.setWrkSts(305L);//浠诲姟鐘舵�佷粠304--銆�305
+                task.setModiTime(new Date());
+                taskService.updateById(task);
             }
         }else {
             task.setWrkSts(305L);//浠诲姟鐘舵�佷粠304--銆�305
diff --git a/src/main/java/com/zy/common/config/AdminInterceptor.java b/src/main/java/com/zy/common/config/AdminInterceptor.java
index 795e7a1..515b0e5 100644
--- a/src/main/java/com/zy/common/config/AdminInterceptor.java
+++ b/src/main/java/com/zy/common/config/AdminInterceptor.java
@@ -122,8 +122,8 @@
             User user = userService.selectById(userLogin.getUserId());
 //            String deToken = Cools.deTokn(token, user.getPassword());
 //            long timestamp = Long.parseLong(deToken.substring(0, 13));
-            // 15鍒嗛挓鍚庤繃鏈�
-            if (System.currentTimeMillis() - userLogin.getCreateTime().getTime() > 900000){
+            // 涓�灏忔椂鍚庤繃鏈�
+            if (System.currentTimeMillis() - userLogin.getCreateTime().getTime() > 3600000){
                 Http.response(response, BaseRes.DENIED);
                 return false;
             }
diff --git a/src/main/java/com/zy/common/config/LogAspect.java b/src/main/java/com/zy/common/config/LogAspect.java
index 533e920..50a63ea 100644
--- a/src/main/java/com/zy/common/config/LogAspect.java
+++ b/src/main/java/com/zy/common/config/LogAspect.java
@@ -28,7 +28,7 @@
 @Order(2)
 public class LogAspect {
 
-    private final List<String> logApiList = Stream.of("digitalTwin", "api/mes", "api/robot")
+    private final List<String> logApiList = Stream.of("api/mes", "api/robot")
             .collect(Collectors.toList());
 
     public LogAspect() {
diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index baf4f20..bf47542 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -171,7 +171,12 @@
         }
 
         Short locType1 = 1;
-        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_sts", "O").eq("loc_type1", locType1).orderBy("lev1").orderBy("bay1").orderBy("row1"));
+        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
+                .eq("loc_sts", "O")
+                .eq("loc_type1", locType1)
+                .orderBy("lev1")
+                .orderBy("bay1")
+                .orderBy("row1"));
         if (locMast == null) {
             log.error("鍏ュ簱璇锋眰搴撲綅澶辫触锛氭棤搴撲綅" + locType1);
             throw new CoolException("鍏ュ簱璇锋眰搴撲綅澶辫触锛氭棤搴撲綅" + locType1);
diff --git a/src/main/java/com/zy/common/web/WcsController.java b/src/main/java/com/zy/common/web/WcsController.java
index 9ac8e9f..30e3918 100644
--- a/src/main/java/com/zy/common/web/WcsController.java
+++ b/src/main/java/com/zy/common/web/WcsController.java
@@ -1,14 +1,18 @@
 package com.zy.common.web;
 
+import com.alibaba.excel.util.StringUtils;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.core.common.Cools;
 import com.core.common.R;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
+import com.zy.asrs.entity.mes.MesReturn;
 import com.zy.asrs.entity.param.EmptyPlateOutParam;
 import com.zy.asrs.entity.result.FindLocNoAttributeVo;
 import com.zy.asrs.service.*;
+import com.zy.asrs.service.impl.RcsServiceImpl;
 import com.zy.common.CodeRes;
 import com.zy.common.model.LocTypeDto;
 import com.zy.common.model.StartupDto;
@@ -17,6 +21,7 @@
 import com.zy.common.web.param.SearchLocParam;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
@@ -54,6 +59,9 @@
     @Autowired
     private TaskService taskService;
 
+    @Value("${mes.url}")
+    public String MES_URL;
+
     // TODO锛氱О閲嶃�佹媿鐓т笂鎶ュ瓨鍌紝CTU鏂欑杩愯浆
 
     @PostMapping("/pakin/loc/v1")
@@ -66,8 +74,29 @@
         if (Cools.isEmpty(param.getSourceStaNo())) {
             return R.error("婧愮珯缂栧彿涓嶈兘涓虹┖");
         }
-        if (Cools.isEmpty(param.getSourceStaNo())) {
-            return R.error("鎵樼洏涓嶈兘涓虹┖鎴栬�呮墭鐩樼爜涓嶄负鍏綅");
+        if (Cools.isEmpty(param.getBarcode()) || param.getBarcode().equals("00000000")) {
+            return R.error(".鎵樼洏鐮佷笉鑳戒负绌烘垨鑰呮墭鐩樼爜涓�0");
+        }
+        if (param.getSourceStaNo() == 301 || param.getSourceStaNo() == 304){
+            String url = "CameraPictureRecognition";
+
+//            return R.error("閰嶇洏涓嶆纭�");
+//            String URL = MES_URL + url;
+//            String URL = "172.26.160.74:8080/basicmodel/WmsFit/Api/CameraPictureRecognition";
+//            try{
+//                String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(param));
+//                if (!StringUtils.isEmpty(response) && response.contains("Success")) {
+//                    MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
+//                    if ("2".equals(mesReturn.getSuccess())) {
+//                        return R.error("閰嶇洏涓嶆纭�");
+//                    }else {
+//                        log.info("閰嶇洏姝g‘锛屽厑璁稿叆搴�");
+//                    }
+//                }
+//            } catch (Exception e) {
+//                return R.error("MES鍦板潃杩炴帴瓒呮椂");
+//            }
+
         }
         List<WaitPakin> waitPakins = null;
         if (param.getIoType() == 1) {
@@ -315,6 +344,8 @@
         }
         //鏌ョ湅鏄惁鏈夌浉鍏崇殑AGV鎼繍浠诲姟瀛樺湪
         List<Task> tasks = taskService.selectList(new EntityWrapper<Task>()
+                .eq("task_type", "AGV琛ョ┖鏂欐灦")
+                .andNew()
                 .in("sta_no", wrkMast.getStaNo(),wrkMast.getMemo())
                 .or()
                 .in("source_sta_no", wrkMast.getStaNo(),wrkMast.getMemo()));
diff --git a/src/main/java/com/zy/system/entity/license/LicenseCheckListener.java b/src/main/java/com/zy/system/entity/license/LicenseCheckListener.java
index 99d99cc..ff2c7f5 100644
--- a/src/main/java/com/zy/system/entity/license/LicenseCheckListener.java
+++ b/src/main/java/com/zy/system/entity/license/LicenseCheckListener.java
@@ -84,29 +84,29 @@
 
                 LicenseVerify licenseVerify = new LicenseVerify();
                 //瀹夎璇佷功
-//                LicenseContent install = licenseVerify.install(param);
+                LicenseContent install = licenseVerify.install(param);
 
                 logger.info("++++++++ 璁稿彲璇佸姞杞界粨鏉� ++++++++");
 
                 logger.info("++++++++ 璁稿彲璇佸姞杞芥爣璁帮紝鎼滅储淇敼 ++++++++");
-                licenseTimer.setSystemSupport(true);
-                licenseTimer.setLicenseDays(9999);
-                return true;
+//                licenseTimer.setSystemSupport(true);
+//                licenseTimer.setLicenseDays(9999);
+//                return true;
 
-//                licenseTimer.setSystemSupport(install!=null);
-//
-//                if (install != null) {
-//                    Date start = new Date();
-//                    Date end = install.getNotAfter();
-//                    Long starTime = start.getTime();
-//                    Long endTime = end.getTime();
-//                    Long num = endTime - starTime;//鏃堕棿鎴崇浉宸殑姣鏁�
-//                    int day = (int) (num / 24 / 60 / 60 / 1000);
-//                    licenseTimer.setLicenseDays(day);
-//                }
-//
-//
-//                return install != null;
+                licenseTimer.setSystemSupport(install!=null);
+
+                if (install != null) {
+                    Date start = new Date();
+                    Date end = install.getNotAfter();
+                    Long starTime = start.getTime();
+                    Long endTime = end.getTime();
+                    Long num = endTime - starTime;//鏃堕棿鎴崇浉宸殑姣鏁�
+                    int day = (int) (num / 24 / 60 / 60 / 1000);
+                    licenseTimer.setLicenseDays(day);
+                }
+
+
+                return install != null;
             } catch (Exception e) {
                 return false;
             }
diff --git a/src/main/java/com/zy/system/timer/LicenseTimer.java b/src/main/java/com/zy/system/timer/LicenseTimer.java
index a56a24c..b8ea349 100644
--- a/src/main/java/com/zy/system/timer/LicenseTimer.java
+++ b/src/main/java/com/zy/system/timer/LicenseTimer.java
@@ -11,8 +11,8 @@
 
     private static int LICENSE_DAYS = 0;//璁稿彲璇佸ぉ鏁�
 
-    //姣忓ぉ鏅氫笂11鐐规洿鏂扮郴缁熸縺娲荤姸鎬�
-    @Scheduled(cron = "0 0 23 * * ? ")
+    //姣忓ぉ13鐐规洿鏂扮郴缁熸縺娲荤姸鎬�
+    @Scheduled(cron = "0 0 20 * * ? ")
     public void timer() {
 //        System.out.println(SYSTEM_SUPPORT);
         //楠岃瘉璁稿彲璇佹槸鍚︽湁鏁�
diff --git a/src/main/java/com/zy/system/timer/LoadingConfigTimer.java b/src/main/java/com/zy/system/timer/LoadingConfigTimer.java
index 12e4a0a..1d3cdd8 100644
--- a/src/main/java/com/zy/system/timer/LoadingConfigTimer.java
+++ b/src/main/java/com/zy/system/timer/LoadingConfigTimer.java
@@ -18,7 +18,7 @@
     /**
      * token鏈夋晥鏈熸椂闂�
      */
-    private Integer tokenExpire = 1000 * 30 * 60;
+    private Integer tokenExpire = 1000 * 60 * 60 * 5;
     /**
      * token鏁伴噺闄愬埗
      */
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 871500f..c0c75c8 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -12,7 +12,7 @@
     driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
     username: sa
     password: sa@123
-    url: jdbc:sqlserver://172.26.11.80:1433;databasename=jnejc-ljqwms
+    url: jdbc:sqlserver://127.0.0.1:1433;databasename=jnejc-ljqwms
 #    username: sa
 #    password: Skyouc#23
 #    url: jdbc:sqlserver://192.168.4.24:1433;databasename=jsxswms
@@ -50,7 +50,7 @@
 
 #License鐩稿叧閰嶇疆
 license:
-  subject: jnejc-ljqasrs
+  subject: jnejc-hkwms
   publicAlias: publicCert
   storePass: public_zhongyang_123456789
   licensePath: license.lic
@@ -61,13 +61,13 @@
   # 鍙屾繁
   doubleDeep: true
   # 鍙屾繁搴撲綅鎺掑彿
-  doubleLocs: 1,4,5,8,9,12,13,16
+  doubleLocs: 3,8,9,12,13,16
   # 涓�涓爢鍨涙満璐熻矗鐨勮揣鏋舵帓鏁�
   groupCount: 4
   # 宸︽繁搴撲綅鎺掑彿
-  doubleLocsLeft: 1,5,9,13
+  doubleLocsLeft: 3,9,13
   # 鍙虫繁搴撲綅鎺掑彿
-  doubleLocsRight: 4,8,12,16
+  doubleLocsRight: 8,12,16
 # wms鍙傛暟閰嶇疆
 wms-parameter:
   # 鑷姩琛ョ┖鏉垮姛鑳藉紑鍏�
@@ -134,8 +134,9 @@
 
 #mes瀵规帴
 mes:
-
-  url: http://172.26.160.5:80/dev-api/basicmodel/WmsFit/Api/
+  url: http://192.9.100.173:8088/prod-api/basicmodel/WmsFit/Api/
+#  url: http://172.26.160.73:8080/basicmodel/WmsFit/Api/
+#  url: http://172.26.160.5:8080/basicmodel/WmsFit/Api/
   #榛樿鎺ュ彛鎿嶄綔浜哄憳id
   defaultUserId: 30
 
diff --git a/src/main/resources/license.lic b/src/main/resources/license.lic
index 22364dc..a6bdd04 100644
--- a/src/main/resources/license.lic
+++ b/src/main/resources/license.lic
Binary files differ
diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml
index 2f71db0..2731013 100644
--- a/src/main/resources/logback-spring.xml
+++ b/src/main/resources/logback-spring.xml
@@ -20,7 +20,7 @@
     </appender>
 
     <!-- 鏃ュ織淇濆瓨璺緞 -->
-    <property name="LOG_PATH" value="D:/wmslogs/jg" />
+    <property name="LOG_PATH" value="D:/ljqwmslogs/ljq" />
 
     <!--info绾у埆-->
     <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
diff --git a/src/main/resources/mapper/TaskMapper.xml b/src/main/resources/mapper/TaskMapper.xml
index 86e6ec7..37b366b 100644
--- a/src/main/resources/mapper/TaskMapper.xml
+++ b/src/main/resources/mapper/TaskMapper.xml
@@ -9,7 +9,7 @@
 
     </resultMap>
     <select id="selectToBeCompleteData" resultType="com.zy.asrs.entity.Task">
-        select * from agv_task where wrk_sts = 304 order by upd_mk,error_time,io_time,wrk_no
+        select * from agv_task where wrk_sts = 305 order by upd_mk,error_time,io_time,wrk_no
     </select>
 
 </mapper>
diff --git a/src/main/webapp/views/pakStore/groupinto.html b/src/main/webapp/views/pakStore/groupinto.html
new file mode 100644
index 0000000..b8eba31
--- /dev/null
+++ b/src/main/webapp/views/pakStore/groupinto.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all">
+    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../static/css/common.css" media="all">
+    <style>
+        html {
+            height: 100%;
+            padding: 10px;
+            background-color: #f1f1f1;
+            box-sizing: border-box;
+        }
+        body {
+            background-color: #fff;
+            border-radius: 5px;
+            box-shadow: 0 0 3px rgba(0,0,0,.3);
+        }
+
+        .function-area {
+            padding: 20px 50px;
+        }
+        .function-btn {
+            font-size: 16px;
+            padding: 1px 2px;
+            width: 100px;
+            height: 50px;
+            border-color: #2b425b;
+            border-radius: 4px;
+            border-width: 2px;
+            background: none;
+            border-style: solid;
+            transition: 0.4s;
+            cursor: pointer;
+            letter-spacing: 1.5px;
+        }
+        .function-btn:hover {
+            background-color: #2b425b;
+            color: #fff;
+        }
+
+        .layui-layer-page .layui-layer-content {
+            position: relative;
+            overflow: visible !important;
+        }
+
+        #mat-query {
+            display: none;
+        }
+
+        #staNoSpan {
+            text-align: center;
+            display: inline-block;
+            width: 100px;
+            font-size: 13px;
+        }
+        .layui-btn-container .layui-form-select {
+            display: inline-block;
+            width: 150px;
+            height: 30px;
+        }
+        .layui-btn-container .layui-form-select.layui-form-selected {
+            display: inline-block;
+            width: 150px;
+        }
+        .layui-btn-container .layui-select-title input {
+            font-size: 13px;
+        }
+        .layui-btn-container .layui-anim.layui-anim-upbit dd {
+            font-size: 13px;
+        }
+
+        #btn-comb {
+            margin-left: 60px;
+            display: none;
+        }
+    </style>
+</head>
+<body>
+<!-- 鍔熻兘鍖� -->
+<div class="function-area">
+    <button id="mat-query" class="function-btn">鎻愬彇鍟嗗搧</button>
+</div>
+
+<hr>
+
+<!-- 琛ㄦ牸 -->
+<div style="padding-bottom: 5px; margin-bottom: 45px">
+
+    <!-- 澶撮儴 -->
+    <script type="text/html" id="toolbar">
+        <div class="layui-form">
+            <div class="layui-btn-container">
+                <!-- 1.閫夋嫨鍏ュ簱鍙� -->
+                <span id="staNoSpan">鍏ュ簱鍙o細</span>
+                <select id="putSiteSelect" lay-verify="required">
+                    <option value="">璇烽�夋嫨绔欑偣</option>
+                </select>
+                <!-- 2.鍚姩鍏ュ簱 -->
+                <button class="layui-btn layui-btn-normal layui-btn-lg" id="btn-comb" lay-event="comb" style="">鍚姩鍏ュ簱</button>
+                
+            </div>
+        </div>
+    </script>
+
+    <!-- 琛� -->
+    <script type="text/html" id="operate">
+        <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="remove">绉婚櫎</a>
+    </script>
+
+    <table class="layui-table" id="chooseData" lay-filter="chooseData"></table>
+</div>
+
+<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script>
+<script type="text/javascript" src="../../static/js/pakStore/pakStore.js" charset="utf-8"></script>
+
+<script type="text/template" id="putSiteSelectTemplate">
+    {{#each data}}
+        <option value="{{this}}">{{this}}</option>
+    {{/each}}
+</script>
+</body>
+</html>
+

--
Gitblit v1.9.1