From 2dc12d419733c094bb0bbc7ef4f7a32d5067cfb9 Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期三, 03 十二月 2025 17:27:32 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/entity/mes/TransInOutStationAllow.java    |   13 
 src/main/java/com/zy/asrs/entity/BlockStation.java                  |   81 
 src/main/java/com/zy/asrs/entity/mes/TransTask.java                 |   68 
 src/main/java/com/zy/asrs/entity/Task.java                          |    7 
 src/main/java/com/zy/asrs/entity/digitaltwin/DtLocVo.java           |    2 
 src/main/java/com/zy/asrs/entity/mes/MesMatRecvForm.java            |   17 
 src/main/java/com/zy/common/config/WebConfig.java                   |   17 
 src/main/resources/libs/framework-3.2.0.jar                         |    0 
 src/main/java/com/zy/asrs/entity/LocCount.java                      |   41 
 src/main/java/com/zy/asrs/service/MesService.java                   |  154 +
 src/main/java/com/zy/asrs/entity/mes/MesItemBarCode.java            |   34 
 src/main/java/com/zy/asrs/entity/digitaltwin/DtDetainMatVo.java     |   28 
 src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java          | 1090 +++++++++++++
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java         |   11 
 src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java          |  614 +++++++
 src/main/resources/application-dev.yml                              |   39 
 src/main/resources/mapper/BlockTaskMapper.xml                       |   24 
 src/main/java/com/zy/asrs/service/RcsService.java                   |   66 
 src/main/java/com/zy/system/timer/LicenseTimer.java                 |    2 
 src/main/java/com/zy/asrs/controller/MesController.java             |  100 +
 src/main/webapp/static/js/common.js                                 |    2 
 src/main/resources/mapper/ViewDigitalTwinMapper.xml                 |   79 
 src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java         |   15 
 src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java      |    5 
 src/main/resources/logback-spring.xml                               |    3 
 src/main/java/com/zy/asrs/entity/rcs/RcsReturn.java                 |   20 
 src/main/java/com/zy/asrs/mapper/AgvInfoMapper.java                 |   11 
 src/main/java/com/zy/asrs/task/WorkMastScheduler.java               |    5 
 src/main/java/com/zy/asrs/task/OrderSyncScheduler.java              |   64 
 src/main/java/com/zy/asrs/entity/mes/TransArrivalStation.java       |   61 
 src/main/java/com/zy/asrs/mapper/BlockTaskMapper.java               |   16 
 src/main/java/com/zy/asrs/entity/mes/MesInApply.java                |  124 +
 src/main/java/com/zy/asrs/entity/rcs/RcsReporterTask.java           |   18 
 src/main/webapp/views/pda/matQuery.html                             |   13 
 src/main/java/com/zy/asrs/mapper/BlockStationMapper.java            |   14 
 src/main/java/com/zy/asrs/entity/mes/MesReturn.java                 |   38 
 src/main/java/com/zy/asrs/controller/NodeController.java            |    2 
 src/main/java/com/zy/asrs/entity/LocDetl.java                       |    3 
 src/main/java/com/zy/common/route/RouteFilter.java                  |  159 +
 src/main/java/com/zy/asrs/entity/digitaltwin/DtLocDetailVo.java     |   30 
 src/main/java/com/zy/asrs/entity/mes/MesOutFeedback.java            |   45 
 src/main/java/com/zy/asrs/entity/digitaltwin/DtOrderVo.java         |   15 
 src/main/java/com/zy/asrs/entity/mes/TransParent.java               |   31 
 src/main/java/com/zy/asrs/entity/rcs/RcsTaskTargetRoute.java        |   22 
 src/main/java/com/zy/asrs/entity/AgvInfo.java                       |   53 
 src/main/java/com/zy/asrs/entity/mes/TransTaskFeedback.java         |   17 
 src/main/webapp/static/js/mat/mat.js                                |   92 
 src/main/java/com/zy/asrs/entity/BlockTask.java                     |   74 
 src/main/webapp/views/pda/comb.html                                 |    6 
 src/main/java/com/zy/asrs/controller/DigitalTwinController.java     |  310 +++
 src/main/java/com/zy/asrs/entity/mes/MesOutApply.java               |   46 
 src/main/java/com/zy/common/web/WcsController.java                  |    2 
 pom.xml                                                             |   39 
 src/main/java/com/zy/asrs/entity/mes/MesCallOutApply.java           |   61 
 src/main/java/com/zy/asrs/service/impl/MatServiceImpl.java          |    3 
 src/main/java/com/zy/asrs/entity/mes/MesMatInfo.java                |   67 
 src/main/java/META-INF/MANIFEST.MF                                  |    3 
 src/main/java/com/zy/asrs/entity/digitaltwin/DtEquipmentVo.java     |    2 
 src/main/java/com/zy/asrs/service/DigitalTwinService.java           |   70 
 src/main/java/com/zy/common/config/LogAspect.java                   |  112 +
 src/main/java/com/zy/asrs/task/BlockScheduler.java                  |   26 
 src/main/java/com/zy/asrs/mapper/LocCountMapper.java                |   24 
 src/main/java/com/zy/asrs/entity/mes/MesParent.java                 |   39 
 src/main/resources/mapper/BlockStationMapper.xml                    |   24 
 src/main/java/com/zy/asrs/entity/mes/MesItemDetails.java            |   19 
 src/main/java/com/zy/asrs/entity/rcs/RcsReporterEqpt.java           |   20 
 src/main/java/com/zy/asrs/mapper/DigitalTwinMapper.java             |   26 
 src/main/java/com/zy/asrs/entity/WrkMast.java                       |    7 
 src/main/java/com/zy/asrs/entity/mes/MesRecvFeedback.java           |   32 
 src/main/java/com/zy/asrs/entity/rcs/RcsTaskCancel.java             |   17 
 src/main/java/com/zy/asrs/entity/rcs/RcsTaskSubmit.java             |   29 
 src/main/java/com/zy/asrs/enums/RcsRetMethodEnum.java               |   38 
 src/main/java/com/zy/asrs/entity/digitaltwin/DtInAndOutBoundVo.java |   17 
 src/main/java/com/zy/asrs/entity/rcs/RcsTaskContinue.java           |   20 
 src/main/webapp/views/basWhs/basWhs.html                            |    5 
 src/main/webapp/views/pda/login.html                                |    3 
 src/main/java/com/zy/asrs/controller/RcsController.java             |   44 
 src/main/java/com/zy/asrs/entity/rcs/RcsEqptNotify.java             |   16 
 src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java        |   14 
 src/main/resources/mapper/LocCountMapper.xml                        |   42 
 src/main/java/com/zy/asrs/entity/digitaltwin/DtOverviewVo.java      |   24 
 src/main/java/com/zy/asrs/service/impl/DigitalTwinServiceImpl.java  |  272 +++
 82 files changed, 4,822 insertions(+), 96 deletions(-)

diff --git a/pom.xml b/pom.xml
index 4e61b50..2b75c60 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,13 +9,13 @@
         <relativePath/>
     </parent>
     <groupId>com.zy</groupId>
-    <artifactId>asrs</artifactId>t
+    <artifactId>asrs</artifactId>
     <version>1.1.1</version>
     <packaging>war</packaging>
 
     <properties>
         <java.version>1.8</java.version>
-        <cool.version>3.4.0</cool.version>
+        <cool.version>3.2.0</cool.version>
         <mysql-driver.version>5.1.47</mysql-driver.version>
         <mybatis-plus.version>2.3.2</mybatis-plus.version>
         <fastjson.version>1.2.58</fastjson.version>
@@ -44,6 +44,8 @@
             <groupId>cn.cool</groupId>
             <artifactId>framework</artifactId>
             <version>${cool.version}</version>
+            <scope>system</scope>
+            <systemPath>${project.basedir}/src/main/resources/libs/framework-3.2.0.jar</systemPath>
         </dependency>
         <dependency>
             <groupId>org.apache.tika</groupId>
@@ -103,6 +105,8 @@
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
+<!--            <version>1.18.30</version>-->
+<!--            <optional>true</optional>-->
             <version>1.16.22</version>
             <scope>provided</scope>
         </dependency>
@@ -120,13 +124,42 @@
     </dependencies>
 
     <build>
-        <finalName>wms</finalName>
+        <finalName>djwms</finalName>
         <plugins>
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
             </plugin>
+<!--            <plugin>-->
+<!--                <groupId>org.apache.maven.plugins</groupId>-->
+<!--                <artifactId>maven-compiler-plugin</artifactId>-->
+<!--                <version>3.10.1</version>-->
+<!--                <configuration>-->
+<!--                    <source>1.8</source>-->
+<!--                    <target>1.8</target>-->
+<!--                    <encoding>UTF-8</encoding>-->
+<!--                    <compilerArgs>-->
+<!--                        <arg>-parameters</arg>-->
+<!--                    </compilerArgs>-->
+<!--                    <compilerArguments>-->
+<!--                        <extdirs>${project.basedir}/src/main/resources/libs</extdirs>-->
+<!--                    </compilerArguments>-->
+<!--                </configuration>-->
+<!--            </plugin>-->
         </plugins>
+
+<!--        <resources>-->
+<!--            <resource>-->
+<!--                <directory>src/main/resources</directory>-->
+<!--                <includes>-->
+<!--&lt;!&ndash;                    <include>**/log/**</include>&ndash;&gt;-->
+<!--                    <include>**/libs/**</include>-->
+<!--&lt;!&ndash;                    <include>**/*.properties</include>&ndash;&gt;-->
+<!--&lt;!&ndash;                    <include>**/*.xml</include>&ndash;&gt;-->
+<!--                </includes>-->
+<!--                <filtering>false</filtering>-->
+<!--            </resource>-->
+<!--        </resources>-->
     </build>
 
 </project>
diff --git a/src/main/java/META-INF/MANIFEST.MF b/src/main/java/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..6f8a9a7
--- /dev/null
+++ b/src/main/java/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Main-Class: com.zy.Boot
+
diff --git a/src/main/java/com/zy/asrs/controller/DigitalTwinController.java b/src/main/java/com/zy/asrs/controller/DigitalTwinController.java
new file mode 100644
index 0000000..06e3892
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/DigitalTwinController.java
@@ -0,0 +1,310 @@
+package com.zy.asrs.controller;
+
+import com.core.common.R;
+import com.zy.asrs.entity.LocDetl;
+import com.zy.asrs.entity.LocMast;
+import com.zy.asrs.entity.digitaltwin.*;
+import com.zy.asrs.service.DigitalTwinService;
+import com.zy.common.web.BaseController;
+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.util.ArrayList;
+import java.util.List;
+
+@RequestMapping("/digitalTwin")
+@RestController
+public class DigitalTwinController extends BaseController {
+
+    @Resource
+    private DigitalTwinService digitalTwinService;
+
+    /**
+     * 鏁版嵁鎬昏
+     *
+     * @param areaId    搴撳尯缂栫爜
+     * @return
+     */
+    @RequestMapping(value = "/overview")
+//    @ManagerAuth
+    public R overview(@RequestParam(required = false) String areaId){
+
+        //digitalTwinService.overview(areaId);
+
+        DtOverviewVo dtOverviewVo = DtOverviewVo.builder()
+                .totalLoc(999)
+                .useLoc(900)
+                .idleLoc(99)
+                .todayOutbound(160)
+                .todayWarehousing(170)
+                .remainingStock(180)
+                .build();
+
+        return R.ok().add(dtOverviewVo);
+    }
+
+    /**
+     * 杩戞湡璁㈠崟锛堥粯璁�7澶╋級
+     *
+     * @param startDate 鏍煎紡锛歽yyyMMdd锛�20251022
+     * @param endDate   鏍煎紡锛歽yyyMMdd锛�20251027
+     * @return
+     */
+    @RequestMapping(value = "/recentOrder")
+//    @ManagerAuth
+    public R recentOrder(@RequestParam(required = false) String startDate,
+                         @RequestParam(required = false) String endDate){
+
+//        digitalTwinService.order(startDate, endDate);
+
+        DtOrderVo dtOrderVo = DtOrderVo.builder()
+                .orderDate("2025-10-22")
+                .orderNum(156)
+                .build();
+        DtOrderVo dtOrderVo2 = DtOrderVo.builder()
+                .orderDate("2025-10-23")
+                .orderNum(166)
+                .build();
+        List<DtOrderVo> orderVoList = new ArrayList<>();
+        orderVoList.add(dtOrderVo);
+        orderVoList.add(dtOrderVo2);
+
+        return R.ok().add(orderVoList);
+    }
+
+    /**
+     * 杩戞湡鍓╀綑搴撲綅锛堥粯璁�7澶╋級
+     *
+     * @param areaId    搴撳尯缂栫爜
+     * @param startDate 鏍煎紡锛歽yyyMMdd锛�20251022
+     * @param endDate   鏍煎紡锛歽yyyMMdd锛�20251027
+     * @return
+     */
+    @RequestMapping(value = "/recentIdleLoc")
+//    @ManagerAuth
+    public R recentIdleLoc(@RequestParam(required = false) String areaId,
+                           @RequestParam(required = false) String startDate,
+                         @RequestParam(required = false) String endDate){
+
+//        digitalTwinService.recentLoc(areaId, startDate, endDate);
+
+        DtLocVo dtLocVo = DtLocVo.builder()
+                .locDate("2025-10-22")
+                .idleNum(208)
+                .build();
+        DtLocVo dtLocVo2 = DtLocVo.builder()
+                .locDate("2025-10-23")
+                .idleNum(177)
+                .build();
+        List<DtLocVo> locVoList = new ArrayList<>();
+        locVoList.add(dtLocVo);
+        locVoList.add(dtLocVo2);
+
+        return R.ok().add(locVoList);
+    }
+
+    /**
+     * 杩戞湡鍑哄叆搴擄紙榛樿7澶╋級
+     *
+     * @param areaId    搴撳尯缂栫爜
+     * @param startDate 鏍煎紡锛歽yyyMMdd锛�20251022
+     * @param endDate   鏍煎紡锛歽yyyMMdd锛�20251027
+     * @return
+     */
+    @RequestMapping(value = "/recentInAndOutBound")
+//    @ManagerAuth
+    public R recentInAndOutBound(@RequestParam(required = false) String areaId,
+                           @RequestParam(required = false) String startDate,
+                           @RequestParam(required = false) String endDate){
+
+//        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);
+    }
+
+    /**
+     * 杩戞湡鍛嗘粸鍝侊紙榛樿瓒�30澶╋級
+     *
+     * @param areaId    搴撳尯缂栫爜
+     * @param overDayNum 鍛嗘粸鍝佸ぉ鏁帮紝榛樿30澶�
+     * @return
+     */
+    @RequestMapping(value = "/recentDetainMat")
+//    @ManagerAuth
+    public R recentDetainMat(@RequestParam(required = false) String areaId,
+                             @RequestParam(required = false) Integer overDayNum,
+                             @RequestParam(required = false) Integer pageIndex,
+                             @RequestParam(required = false) Integer pageSize){
+
+//        digitalTwinService.recentDetainMat(areaId, overDayNum, pageIndex, pageSize);
+
+        DtDetainMatVo dtDetainMatVo = DtDetainMatVo.builder()
+                .belongAreaId("A1")
+                .belongAreaName("鍒�鍏峰簱")
+                .matId("mat10001")
+                .matName("閬撳叿鎶�")
+                .lokId("loc1001")
+                .lokName("搴撲綅10001")
+                .detainTime(765)
+                .inBoundTime("2025-10-11T11:15:16")
+                .build();
+        DtDetainMatVo dtDetainMatVo2 = DtDetainMatVo.builder()
+                .belongAreaId("A1")
+                .belongAreaName("鍒�鍏峰簱")
+                .matId("mat10002")
+                .matName("閬撳叿鎶�")
+                .lokId("loc1002")
+                .lokName("搴撲綅10002")
+                .detainTime(665)
+                .inBoundTime("2025-10-10T11:15:16")
+                .build();
+        List<DtDetainMatVo> detainMatVoList = new ArrayList<>();
+        detainMatVoList.add(dtDetainMatVo);
+        detainMatVoList.add(dtDetainMatVo2);
+
+        return R.ok().add(detainMatVoList);
+    }
+
+    /**
+     * 璁惧杩愯淇℃伅
+     *
+     * @param areaId
+     * @return
+     */
+    @RequestMapping(value = "/equipment")
+//    @ManagerAuth
+    public R equipment(@RequestParam(required = false) String areaId){
+
+        DtEquipmentVo dtDetainMatVo = DtEquipmentVo.builder()
+                .equipmentId("eq1001")
+                .equipmentName("鍫嗗灈鏈�1")
+                .equipmentType(1)
+                .belongAreaId("A1")
+                .belongAreaName("鍒�鍏峰簱")
+                .verticalSpeed(288)
+                .horizontalSpeed(203)
+                .voltage(48)
+                .status(1)
+                .operateMethod(1)
+                .build();
+        DtEquipmentVo dtDetainMatVo2 = DtEquipmentVo.builder()
+                .equipmentId("eq1002")
+                .equipmentName("鍫嗗灈鏈�2")
+                .equipmentType(1)
+                .belongAreaId("A1")
+                .belongAreaName("鍒�鍏峰簱")
+                .verticalSpeed(208)
+                .horizontalSpeed(253)
+                .voltage(48)
+                .status(1)
+                .operateMethod(1)
+                .build();
+        List<DtEquipmentVo> dtEquipmentVoList = new ArrayList<>();
+        dtEquipmentVoList.add(dtDetainMatVo);
+        dtEquipmentVoList.add(dtDetainMatVo2);
+
+        return R.ok().add(dtEquipmentVoList);
+    }
+
+    /**
+     * 搴撲綅鍜屽簱瀛樿鎯�
+     *
+     * @param areaId
+     * @return
+     */
+    @RequestMapping(value = "/warehouseDetail")
+//    @ManagerAuth
+    public R warehouseDetail(@RequestParam(required = false) String areaId){
+
+//        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("鐗╂枡鍚嶇О");
+        locDetl.setAnfme(100.0);
+        locDetl.setStandby3("AAA,BBB,CCC");
+        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("鍒�鍏峰簱");
+        locDetl.setMatnr("mat10001");
+        locDetl.setMaktx("鐗╂枡鍚嶇О");
+        locDetl.setAnfme(100.0);
+        locDetl.setStandby3("AAA1,BBB1,CCC1");
+        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);
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/MesController.java b/src/main/java/com/zy/asrs/controller/MesController.java
new file mode 100644
index 0000000..6a0cde5
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/MesController.java
@@ -0,0 +1,100 @@
+package com.zy.asrs.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.core.common.R;
+import com.zy.asrs.entity.mes.*;
+import com.zy.asrs.service.MesService;
+import com.zy.common.web.BaseController;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+@RestController
+public class MesController extends BaseController {
+
+    @Resource
+    private MesService mesService;
+
+
+    // 鐗╂枡淇℃伅鍚屾
+    @PostMapping("/api/mes/synMatInfo")
+    public MesReturn synMatInfo(@RequestBody MesMatInfo param){
+
+        MesReturn mesReturn = new MesReturn();
+        mesReturn.setSuccess(mesService.synMatInfo(param) == 1 ? "1" : "2");
+        return mesReturn;
+    }
+
+    // 鍑哄簱鐢宠
+    @PostMapping("/api/mes/outBoundOrder")
+    public MesReturn outBoundOrder(@RequestBody MesInApply param){
+
+        MesReturn mesReturn = new MesReturn();
+        mesReturn.setSuccess(mesService.outBoundOrder(param) == 1 ? "1" : "2");
+        return mesReturn;
+    }
+
+//    // 鍑哄簱鐢宠锛堝彨鏂欙級锛岃閰嶅簱銆佹粦鍧楀簱
+//    @PostMapping("/api/mes/callOutBoundOrder")
+//    public MesReturn callOutBoundOrder(@RequestBody MesCallOutApply param){
+//
+//        MesReturn mesReturn = new MesReturn();
+//        mesReturn.setSuccess(mesService.callOutBoundOrder(param) == 1 ? "1" : "2");
+//        return mesReturn;
+//    }
+
+    // 鍏ュ簱鐢宠
+    @PostMapping("/api/mes/inBoundOrder")
+    public MesReturn inBoundOrder(@RequestBody MesInApply param){
+
+        MesReturn mesReturn = new MesReturn();
+        mesReturn.setSuccess(mesService.inBoundOrder(param, 0) == 1 ? "1" : "2");
+        return mesReturn;
+    }
+
+    // 鍏ョ珯鍏佽
+    @PostMapping("/api/mes/allowInStation")
+    public MesReturn allowInStation(@RequestBody TransInOutStationAllow param){
+
+        return mesService.allowInStation(param);
+    }
+
+    // 绂荤珯鍏佽锛岃閰嶅簱銆佹粦鍧楀簱
+    @PostMapping("/api/mes/allowOutStation")
+    public MesReturn allowOutStation(@RequestBody TransInOutStationAllow param){
+
+        return mesService.allowOutStation(param);
+    }
+
+    // 涓嬪彂杩愯緭浠诲姟
+    @PostMapping("/api/mes/submitTask")
+    public JSONObject submitTask(@RequestBody TransTask param){
+
+        return mesService.submitTask(param);
+    }
+
+    // 鎺ュ彈鎴愬搧鍒�鍙互鍏ュ簱浜岀淮鐮�
+    @PostMapping("/api/mes/inBoundItemBarcode")
+    public MesReturn inBoundItemBarcode(@RequestBody MesItemBarCode param){
+
+        MesReturn mesReturn = new MesReturn();
+        mesReturn.setSuccess("1"); // TODO:寰呯紦瀛樻垚鍝佸垁浜岀淮鐮侊紱
+        return mesReturn;
+    }
+
+
+    // region 娴嬭瘯
+    @GetMapping("/api/mes/transDj")
+    public int transDj(@RequestParam String taskNo,@RequestParam String djNo){
+
+        return mesService.transDj(taskNo,djNo);
+    }
+
+    // 閫�绌烘墭鐩樿繑鍥炰骇绾� pda涓婃搷浣滅┖鎵樿繑鍥炰骇绾�
+    @GetMapping("/tkt")
+    public R tkt(@RequestParam String taskNo){
+         return mesService.tkt(taskNo);
+    }
+    // endregion
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/NodeController.java b/src/main/java/com/zy/asrs/controller/NodeController.java
index 6ae3b3c..28f2f27 100644
--- a/src/main/java/com/zy/asrs/controller/NodeController.java
+++ b/src/main/java/com/zy/asrs/controller/NodeController.java
@@ -35,7 +35,7 @@
 import java.net.URLEncoder;
 import java.util.*;
 
-import static jdk.nashorn.api.scripting.ScriptUtils.convert;
+//import static jdk.nashorn.api.scripting.ScriptUtils.convert;
 
 @RestController
 public class NodeController extends BaseController {
diff --git a/src/main/java/com/zy/asrs/controller/RcsController.java b/src/main/java/com/zy/asrs/controller/RcsController.java
new file mode 100644
index 0000000..0f0d58e
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/RcsController.java
@@ -0,0 +1,44 @@
+package com.zy.asrs.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.zy.asrs.entity.mes.TransParent;
+import com.zy.asrs.entity.rcs.RcsReporterEqpt;
+import com.zy.asrs.entity.rcs.RcsReporterTask;
+import com.zy.asrs.entity.rcs.RcsReturn;
+import com.zy.asrs.service.RcsService;
+import com.zy.common.web.BaseController;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+public class RcsController extends BaseController {
+
+    @Resource
+    private RcsService rcsService;
+
+
+    // 鍙嶉浠诲姟鎵ц缁撴灉
+    @PostMapping("/api/robot/reporter/task")
+    public RcsReturn reporterTask(@RequestBody RcsReporterTask param){
+
+        return rcsService.reporterTask(param);
+    }
+
+    // 鍙嶉灏侀攣鍖猴紙鑷姩闂級鐢宠
+    @PostMapping("/api/robot/reporter/eqpt")
+    public RcsReturn reporterEqpt(@RequestBody RcsReporterEqpt param){
+
+        return rcsService.reporterEqpt(param);
+    }
+
+    // 鍗庢檽AGV鐢宠杩涘叆浜х嚎锛堝厜骞曪級
+    @PostMapping("/api/robot/apply/inLine")
+    public JSONObject hxApplyInLine(@RequestBody TransParent param){
+
+        return rcsService.hxApplyInLine(param);
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/AgvInfo.java b/src/main/java/com/zy/asrs/entity/AgvInfo.java
new file mode 100644
index 0000000..cc55161
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/AgvInfo.java
@@ -0,0 +1,53 @@
+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.io.Serializable;
+
+@Data
+@TableName("agv_info")
+public class AgvInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 涓婚敭锛岃澶囩紪鍙�
+     */
+    @ApiModelProperty(value= "涓婚敭")
+    @TableId(value = "agvNo", type = IdType.AUTO)
+    private String agvNo;
+
+    /**
+     * 璁惧鍚嶇О
+     */
+    @ApiModelProperty(value= "璁惧鍚嶇О")
+    @TableField("agv_name")
+    private String agvName;
+
+    /**
+     * 璁惧绫诲瀷锛�1 agv锛�2 ctu锛�
+     */
+    @ApiModelProperty(value= "璁惧绫诲瀷")
+    @TableField("agv_type")
+    private String agvType;
+
+    /**
+     * 璁惧鍘傚锛�1 娴峰悍锛�2 鍗庢檽锛�
+     */
+    @ApiModelProperty(value= "璁惧绫诲瀷")
+    @TableField("agv_factory")
+    private Integer agvFactory;
+
+    /**
+     * 鎵�灞炲簱鍖�
+     */
+    @ApiModelProperty(value= "鎵�灞炲簱鍖�")
+    @TableField("belong_area")
+    private String belongArea;
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/BlockStation.java b/src/main/java/com/zy/asrs/entity/BlockStation.java
new file mode 100644
index 0000000..eacfac8
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/BlockStation.java
@@ -0,0 +1,81 @@
+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.io.Serializable;
+
+@Data
+@TableName("agv_block_station")
+public class BlockStation implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 涓婚敭
+     */
+    @ApiModelProperty(value= "涓婚敭")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 绔欑偣缂栧彿
+     */
+    @ApiModelProperty(value= "绔欑偣id")
+    @TableField("dev_no")
+    private String devNo;
+
+    /**
+     * 绔欑偣鍚嶇О
+     */
+    @ApiModelProperty(value= "绔欑偣鍚嶇О")
+    @TableField("dec_name")
+    private String decName;
+
+    /**
+     * 灏侀攣鍖篿d
+     */
+    @ApiModelProperty(value= "灏侀攣鍖篿d")
+    @TableField("block_no")
+    private String blockNo;
+
+    /**
+     * 灏侀攣鍖哄悕绉�
+     */
+    @ApiModelProperty(value= "灏侀攣鍖哄悕绉�")
+    @TableField("block_name")
+    private String blockName;
+
+    /**
+     * 鎵�灞炲簱鍖篿d
+     */
+    @ApiModelProperty(value= "鎵�灞炲簱鍖篿d")
+    @TableField("area_id")
+    private String areaId;
+
+    /**
+     * 鎵�灞炲簱鍖哄悕绉�
+     */
+    @ApiModelProperty(value= "鎵�灞炲簱鍖哄悕绉�")
+    @TableField("area_name")
+    private String areaName;
+
+    /**
+     * 鐘舵�侊紝0 绌洪棽锛�1 娴峰悍灏侀攣涓紱2 鍗庢檽灏侀攣涓紱-1 寮傚父锛�
+     */
+    @ApiModelProperty(value= "鐘舵��")
+    @TableField("status")
+    private Integer status;
+
+    /**
+     * 灏侀攣鍖哄唴agv鏁伴噺
+     */
+    @ApiModelProperty(value= "鐘舵��")
+    @TableField("agv_num")
+    private Integer agvNum;
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/BlockTask.java b/src/main/java/com/zy/asrs/entity/BlockTask.java
new file mode 100644
index 0000000..c88a819
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/BlockTask.java
@@ -0,0 +1,74 @@
+package com.zy.asrs.entity;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@TableName("agv_block_task")
+public class BlockTask implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 涓婚敭锛岃姹傚彿
+     */
+    @ApiModelProperty(value= "涓婚敭")
+    @TableId(value = "task_code")
+    private String taskCode;
+
+    /**
+     * 璇锋眰鏃堕棿
+     */
+    @ApiModelProperty(value= "璇锋眰鏃堕棿")
+    @TableField("apply_time")
+    private Date applyTime;
+
+    /**
+     * 灏侀攣鍖篿d
+     */
+    @ApiModelProperty(value= "灏侀攣鍖篿d")
+    @TableField("block_no")
+    private String blockNo;
+
+    /**
+     * 灏侀攣鍖哄悕绉�
+     */
+    @ApiModelProperty(value= "灏侀攣鍖哄悕绉�")
+    @TableField("block_name")
+    private String blockName;
+
+    /**
+     * 杩涘叆鏂规硶锛孉PPLY_LOCK 鐢宠灏侀攣鍖猴紱RELEASE_EQPT 閲婃斁灏侀攣鍖猴紱
+     */
+    @ApiModelProperty(value= "杩涘叆鏂规硶")
+    @TableField("method")
+    private String method;
+
+    /**
+     * 鏄惁瀹屾垚锛�1 瀹屾垚锛�0 鏈畬鎴愶紱
+     */
+    @ApiModelProperty(value= "鏄惁瀹屾垚")
+    @TableField("completed")
+    private Integer completed;
+
+    /**
+     * 瀹屾垚鏃堕棿
+     */
+    @ApiModelProperty(value= "瀹屾垚鏃堕棿")
+    @TableField("completed_time")
+    private Date completedTime;
+
+    /**
+     * agv鍘傚锛�1 娴峰悍锛�2 鍗庢檽锛�
+     */
+    @ApiModelProperty(value= "agv鍘傚")
+    @TableField("agv_factory")
+    private Integer agvFactory;
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/LocCount.java b/src/main/java/com/zy/asrs/entity/LocCount.java
new file mode 100644
index 0000000..905c944
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/LocCount.java
@@ -0,0 +1,41 @@
+package com.zy.asrs.entity;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@TableName("asr_loc_count")
+public class LocCount {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 鏃ユ湡
+     */
+    @ApiModelProperty(value= "鏃ユ湡锛屾牸寮忥細20250101")
+    @TableField("date")
+    private Integer date;
+
+    /**
+     * 搴撳尯鍙�
+     */
+    @ApiModelProperty(value= "搴撳尯鍙�")
+    @TableField("area_id")
+    private String areaId;
+
+    /**
+     * 搴撲綅鏁伴噺
+     */
+    @ApiModelProperty(value= "搴撲綅鏁伴噺")
+    @TableField("loc_num")
+    private Integer locNum;
+
+    /**
+     * 鍓╀綑搴撲綅鏁伴噺
+     */
+    @ApiModelProperty(value= "鍓╀綑搴撲綅鏁伴噺")
+    @TableField("remain_num")
+    private Integer remainNum;
+}
diff --git a/src/main/java/com/zy/asrs/entity/LocDetl.java b/src/main/java/com/zy/asrs/entity/LocDetl.java
index c95626c..a7ee8a4 100644
--- a/src/main/java/com/zy/asrs/entity/LocDetl.java
+++ b/src/main/java/com/zy/asrs/entity/LocDetl.java
@@ -121,7 +121,8 @@
     private Double weight;
 
     @ApiModelProperty(value= "闀垮害")
-    private Double man_length;
+    @TableField("man_length")
+    private Double manLength;
 
     @ApiModelProperty(value= "浣撶Н")
     private Double volume;
diff --git a/src/main/java/com/zy/asrs/entity/Task.java b/src/main/java/com/zy/asrs/entity/Task.java
index 79496f2..cca3135 100644
--- a/src/main/java/com/zy/asrs/entity/Task.java
+++ b/src/main/java/com/zy/asrs/entity/Task.java
@@ -334,6 +334,13 @@
     @TableField("take_none")
     private String takeNone;
 
+    /**
+     * 澶栭儴浠诲姟缂栧彿
+     */
+    @ApiModelProperty(value= "澶栭儴浠诲姟缂栧彿")
+    @TableField("task_no")
+    private String taskNo;
+
     public Task() {}
 
     public String getYmd$(){
diff --git a/src/main/java/com/zy/asrs/entity/WrkMast.java b/src/main/java/com/zy/asrs/entity/WrkMast.java
index 1bf9d7a..daf4250 100644
--- a/src/main/java/com/zy/asrs/entity/WrkMast.java
+++ b/src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -325,6 +325,13 @@
     @TableField("take_none")
     private String takeNone;
 
+    /**
+     * 澶栭儴浠诲姟缂栧彿
+     */
+    @ApiModelProperty(value= "澶栭儴浠诲姟缂栧彿")
+    @TableField("task_no")
+    private String taskNo;
+
     public WrkMast() {}
 
     public String getYmd$(){
diff --git a/src/main/java/com/zy/asrs/entity/digitaltwin/DtDetainMatVo.java b/src/main/java/com/zy/asrs/entity/digitaltwin/DtDetainMatVo.java
new file mode 100644
index 0000000..29129c9
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/digitaltwin/DtDetainMatVo.java
@@ -0,0 +1,28 @@
+package com.zy.asrs.entity.digitaltwin;
+
+import lombok.Builder;
+import lombok.Data;
+
+// 鏁板瓧瀛敓锛氬憜婊炲搧淇℃伅
+@Data
+@Builder
+public class DtDetainMatVo {
+
+    // 褰掑睘搴撳尯ID
+    private String belongAreaId;
+    // 褰掑睘搴撳尯鍚嶇О
+    private String belongAreaName;
+    // 鐗╂枡ID
+    private String matId;
+    // 鐗╂枡鍚嶇О
+    private String matName;
+    // 鎵�灞炲簱浣岻D
+    private String lokId;
+    // 鎵�灞炲簱浣嶅悕绉�
+    private String lokName;
+    // 鍛嗘粸鏃堕棿锛岃绠楀崟浣嶏細鍒嗛挓
+    private Integer detainTime;
+    // 鍏ュ簱鏃堕棿锛屾牸寮忥細2025-10-11T11:15:16锛岄鐣�
+    private String inBoundTime;
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/result/DtEquipmentVo.java b/src/main/java/com/zy/asrs/entity/digitaltwin/DtEquipmentVo.java
similarity index 94%
rename from src/main/java/com/zy/asrs/entity/result/DtEquipmentVo.java
rename to src/main/java/com/zy/asrs/entity/digitaltwin/DtEquipmentVo.java
index c14e2ad..67d9fe7 100644
--- a/src/main/java/com/zy/asrs/entity/result/DtEquipmentVo.java
+++ b/src/main/java/com/zy/asrs/entity/digitaltwin/DtEquipmentVo.java
@@ -1,4 +1,4 @@
-package com.zy.asrs.entity.result;
+package com.zy.asrs.entity.digitaltwin;
 
 import lombok.Builder;
 import lombok.Data;
diff --git a/src/main/java/com/zy/asrs/entity/digitaltwin/DtInAndOutBoundVo.java b/src/main/java/com/zy/asrs/entity/digitaltwin/DtInAndOutBoundVo.java
new file mode 100644
index 0000000..e983dbe
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/digitaltwin/DtInAndOutBoundVo.java
@@ -0,0 +1,17 @@
+package com.zy.asrs.entity.digitaltwin;
+
+import lombok.Builder;
+import lombok.Data;
+
+// 鏁板瓧瀛敓锛氭寜澶╁嚭鍏ュ簱鏁伴噺
+@Data
+@Builder
+public class DtInAndOutBoundVo {
+
+    // 鏃ユ湡
+    private String boundDate;
+    // 鍏ュ簱鏁伴噺
+    private Integer inBoundNum;
+    // 鍑哄簱鏁伴噺
+    private Integer outBoundNum;
+}
diff --git a/src/main/java/com/zy/asrs/entity/digitaltwin/DtLocDetailVo.java b/src/main/java/com/zy/asrs/entity/digitaltwin/DtLocDetailVo.java
new file mode 100644
index 0000000..1c64747
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/digitaltwin/DtLocDetailVo.java
@@ -0,0 +1,30 @@
+package com.zy.asrs.entity.digitaltwin;
+
+import com.zy.asrs.entity.LocDetl;
+import com.zy.asrs.entity.LocMast;
+import lombok.Data;
+
+@Data
+public class DtLocDetailVo  {
+
+    // 搴撲綅鍙�
+    private String locNo;
+    // 搴撲綅鐘舵�侊紝O绌哄簱浣嶏紙鑻辨枃涓嶆槸鏁板瓧锛夛紱F 鍦ㄥ簱锛汥 绌烘澘锛汸 鍑哄簱涓紱R 鍑哄簱棰勭害锛汼 鍏ュ簱棰勭害锛涘叾浠� 鍏朵粬锛�
+    private String locSts;
+    // 搴撳尯id
+    private Long areaId;
+    // 搴撳尯鍚嶇О
+    private String areaName;
+    // 鎺�
+    private Integer row1;
+    // 鍒�
+    private Integer bay1;
+    // 灞�
+    private Integer lev1;
+
+    // 搴撲綅淇℃伅
+    private LocMast locMast;
+    // 搴撳瓨淇℃伅
+    private LocDetl locDetl;
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/result/DtLocVo.java b/src/main/java/com/zy/asrs/entity/digitaltwin/DtLocVo.java
similarity index 84%
rename from src/main/java/com/zy/asrs/entity/result/DtLocVo.java
rename to src/main/java/com/zy/asrs/entity/digitaltwin/DtLocVo.java
index d46ce47..cf48386 100644
--- a/src/main/java/com/zy/asrs/entity/result/DtLocVo.java
+++ b/src/main/java/com/zy/asrs/entity/digitaltwin/DtLocVo.java
@@ -1,4 +1,4 @@
-package com.zy.asrs.entity.result;
+package com.zy.asrs.entity.digitaltwin;
 
 import lombok.Builder;
 import lombok.Data;
diff --git a/src/main/java/com/zy/asrs/entity/digitaltwin/DtOrderVo.java b/src/main/java/com/zy/asrs/entity/digitaltwin/DtOrderVo.java
new file mode 100644
index 0000000..b2f206a
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/digitaltwin/DtOrderVo.java
@@ -0,0 +1,15 @@
+package com.zy.asrs.entity.digitaltwin;
+
+import lombok.Builder;
+import lombok.Data;
+
+// 鏁板瓧瀛敓锛氭寜澶╄鍗曟暟閲�
+@Data
+@Builder
+public class DtOrderVo {
+
+    // 鏃ユ湡
+    private String orderDate;
+    // 璁㈠崟鏁伴噺
+    private Integer orderNum;
+}
diff --git a/src/main/java/com/zy/asrs/entity/digitaltwin/DtOverviewVo.java b/src/main/java/com/zy/asrs/entity/digitaltwin/DtOverviewVo.java
new file mode 100644
index 0000000..aba1e9b
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/digitaltwin/DtOverviewVo.java
@@ -0,0 +1,24 @@
+package com.zy.asrs.entity.digitaltwin;
+
+import lombok.Builder;
+import lombok.Data;
+
+// 鏁板瓧瀛敓锛氭寜澶╁嚭搴撱�佸叆搴撴暟閲�
+@Data
+@Builder
+public class DtOverviewVo {
+
+    // 鎬诲簱浣�
+    private Integer totalLoc;
+    // 宸茬敤搴撲綅
+    private Integer useLoc;
+    // 鍓╀綑搴撲綅
+    private Integer idleLoc;
+    // 浠婃棩鍑哄簱
+    private Integer todayOutbound;
+    // 浠婃棩鍏ュ簱
+    private Integer todayWarehousing;
+    // 鍓╀綑搴撳瓨
+    private Integer remainingStock;
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/mes/MesCallOutApply.java b/src/main/java/com/zy/asrs/entity/mes/MesCallOutApply.java
new file mode 100644
index 0000000..1d141cf
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/mes/MesCallOutApply.java
@@ -0,0 +1,61 @@
+package com.zy.asrs.entity.mes;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+// 鍑哄簱鐢宠锛堝彨鏂欙級
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class MesCallOutApply extends MesParent {
+
+//    // 浠诲姟缂栧彿
+//    private String taskno;
+//    // 浠诲姟鍚嶇О
+//    private String taskname;
+//    // 鐢熶骇璁㈠崟鍙�
+//    @JsonProperty("OrderNo")
+//    private String OrderNo;
+    // 杩愯緭绫诲瀷锛屽瓧鍏稿��(wms_tranfs_type) 06 瑁呴厤棰嗘枡锛�01锛氱┖鎵�
+    @JsonProperty("TransType")
+    @JSONField(name = "TransType")
+    private String TransType;
+//    // 鐢熶骇绾跨紪鐮�
+//    @JsonProperty("ProductLineId")
+//    private String ProductLineId;
+//    // 宸ヤ綅缂栫爜
+//    @JsonProperty("StationId")
+//    private String StationId;
+    // 褰撳墠宸ュ簭
+    @JsonProperty("CurProcess")
+    @JSONField(name = "CurProcess")
+    private String CurProcess;
+    // 閰嶇洏淇℃伅
+    @JsonProperty("Itemdata")
+    @JSONField(name = "Itemdata")
+    private List<MesOutApplyItem> Itemdata;
+
+    // 锛坰fc_shop_route_consume锛塵es涓厤鐩樿〃鍚�
+    @Data
+    public static class MesOutApplyItem {
+
+        // 閰嶇洏鍙�
+        private String trayid;
+        // 闆朵欢缂栫爜
+        @JsonProperty("Itemno")
+        @JSONField(name = "Itemno")
+        private String Itemno;
+        // 鏁伴噺
+        @JsonProperty("Qty")
+        @JSONField(name = "Qty")
+        private Integer Qty;
+        // 鐗╂枡浜岀淮鐮�
+        @JsonProperty("ItemBarcode")
+        @JSONField(name = "ItemBarcode")
+        private String ItemBarcode;
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/mes/MesInApply.java b/src/main/java/com/zy/asrs/entity/mes/MesInApply.java
new file mode 100644
index 0000000..a32f03a
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/mes/MesInApply.java
@@ -0,0 +1,124 @@
+package com.zy.asrs.entity.mes;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+// MES鍏ュ簱鐢宠\鍏ュ簱瀹屾垚
+//@EqualsAndHashCode(callSuper = true)
+@Data
+public class MesInApply  {  //extends MesParent
+
+//    public MesInApply() {
+//        Details = new ArrayList<>();
+//    }
+
+    // 鍗曟嵁绫诲瀷锛�0 閲囪喘鍏ュ簱锛�1 鐢熶骇鍏ュ簱锛�2 閫�璐у叆搴擄紱
+    @JsonProperty("billType")
+    @JSONField(name = "billType")
+    private String billType;
+
+    //    // 鐢熶骇绾跨紪鐮�
+    @JsonProperty("productLineId")
+    private String productLineId;
+//    // 宸ヤ綅缂栫爜
+    @JsonProperty("stationId")
+    private String stationId;
+
+    // 鐢熶骇璁㈠崟鍙�
+    @JsonProperty("orderNo")
+    @JSONField(name = "orderNo")
+    private String orderNo;
+
+    // agv浠诲姟鍙�
+    @JsonProperty("taskNo")
+    @JSONField(name = "taskNo")
+    private String taskNo;
+
+    // agv杩愯緭绫诲瀷
+    @JsonProperty("transType")
+    @JSONField(name = "transType")
+    private String transType;
+
+    // 鏃堕棿锛屾牸寮忥細2025-11-19 10:11:12
+    @JsonProperty("createTime")
+    @JSONField(name = "createTime")
+    private String createTime;
+
+    // 鍏ュ簱璇︽儏
+    @JsonProperty("details")
+    @JSONField(name = "details")
+    private List<MesItemDetails> details;
+
+//    @Data
+//    @NoArgsConstructor
+//    public static class ItemDetails {
+//
+//        // 鐗╂枡缂栫爜
+//        @JsonProperty("itemNo")
+//        @JSONField(name = "itemNo")
+//        private String itemNo;
+//
+//        // 鏁伴噺
+//        @JsonProperty("anfme")
+//        @JSONField(name = "anfme")
+//        private String anfme;
+//    }
+
+
+
+//
+////    // 浠诲姟缂栧彿
+////    private String taskno;
+////    // 浠诲姟鍚嶇О
+////    private String taskname;
+////    // 鐢熶骇绾跨紪鐮�
+////    @JsonProperty("ProductLineId")
+////    private String ProductLineId;
+////    // 宸ヤ綅缂栫爜
+////    @JsonProperty("StationId")
+////    private String StationId;
+//    // 闆朵欢缂栫爜
+//    @JsonProperty("Itemno")
+//    @JSONField(name = "Itemno")
+//    private String Itemno;
+////    // 鎵樼洏鏉$爜
+////    @JsonProperty("TuoPanId")
+////    @JSONField(name = "TuoPanId")
+////    private String TuoPanId;
+//    // 鏁伴噺锛屾墭鐩橀浂浠舵暟閲�
+//    @JsonProperty("Qty")
+//    @JSONField(name = "Qty")
+//    private Float Qty;
+//    // 鐗堟湰鍙�
+//    @JsonProperty("VersionNo")
+//    @JSONField(name = "VersionNo")
+//    private String VersionNo;
+////    // 鐢熶骇璁㈠崟鍙�
+////    @JsonProperty("OrderNo")
+////    private String OrderNo;
+//    // 閰嶇洏淇℃伅
+//    @JsonProperty("ProductInfo")
+//    @JSONField(name = "ProductInfo")
+//    private List<ProductInfo> ProductInfo;
+//
+//    @Data
+//    @NoArgsConstructor
+//    public static class ProductInfo {
+//
+//        // 鐗╂枡浜岀淮鐮�
+//        @JsonProperty("ItemBarcode")
+//        @JSONField(name = "ItemBarcode")
+//        private String ItemBarcode;
+//        // 璐ㄩ噺鐘舵��
+//        @JsonProperty("QualityStatus")
+//        @JSONField(name = "QualityStatus")
+//        private Integer QualityStatus;
+//    }
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/mes/MesItemBarCode.java b/src/main/java/com/zy/asrs/entity/mes/MesItemBarCode.java
new file mode 100644
index 0000000..418b1c6
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/mes/MesItemBarCode.java
@@ -0,0 +1,34 @@
+package com.zy.asrs.entity.mes;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+@Data
+public class MesItemBarCode {
+
+    // 鍒�鍏稲FID鐮�
+    @JSONField(name = "ToolRfidCode")
+    @JsonProperty("ToolRfidCode")
+    private String ToolRfidCode;
+
+    // 鍒�鍏峰悕绉�
+    @JSONField(name = "ToolName")
+    @JsonProperty("ToolName")
+    private String ToolName;
+
+    // 鍒�鍏风绫荤紪鐮�
+    @JSONField(name = "ToolCode")
+    @JsonProperty("ToolCode")
+    private String ToolCode;
+
+    // 鏈哄簥鍒�鍙�
+    @JSONField(name = "MachineToolNo")
+    @JsonProperty("MachineToolNo")
+    private String MachineToolNo;
+
+    // 鐗堟湰
+    @JSONField(name = "Version")
+    @JsonProperty("Version")
+    private String Version;
+}
diff --git a/src/main/java/com/zy/asrs/entity/mes/MesItemDetails.java b/src/main/java/com/zy/asrs/entity/mes/MesItemDetails.java
new file mode 100644
index 0000000..25efb10
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/mes/MesItemDetails.java
@@ -0,0 +1,19 @@
+package com.zy.asrs.entity.mes;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+@Data
+public class MesItemDetails {
+
+    // 鐗╂枡缂栫爜
+    @JsonProperty("itemNo")
+    @JSONField(name = "itemNo")
+    private String itemNo;
+
+    // 鏁伴噺
+    @JsonProperty("anfme")
+    @JSONField(name = "anfme")
+    private Double anfme;
+}
diff --git a/src/main/java/com/zy/asrs/entity/mes/MesMatInfo.java b/src/main/java/com/zy/asrs/entity/mes/MesMatInfo.java
new file mode 100644
index 0000000..8a79db4
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/mes/MesMatInfo.java
@@ -0,0 +1,67 @@
+package com.zy.asrs.entity.mes;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+// MES鐗╂枡淇℃伅
+@Data
+public class MesMatInfo {
+
+    // 鐗╂枡缂栫爜锛屽敮涓�鏍囪瘑
+    @NotNull
+    private String item_no;
+    // 鐗╂枡鍚嶇О
+    @NotNull
+    private String description;
+    // 鍗曚綅
+    private String unit_of_measure;
+    // 鐗╂枡绫诲瀷
+    @NotNull
+    private String item_type;
+    // 鏉愯川
+    private String cz;
+    // 閲嶉噺
+    private float weight;
+    // 鐗╂枡灞炴��
+    @NotNull
+    private String classification_code;
+    // 鍥惧彿
+    private String drawing_no;
+    // 璁捐澶囨敞
+    private String item_comments;
+    // 鍒涘缓鏃堕棿锛宼imestamp
+    private String create_date;
+    // 鏈�杩戜竴娆′慨鏀规椂闂达紝timestamp
+    private String modified_date1;
+    // 鏈�杩戜慨鏀逛汉
+    private String modified_operator1;
+    // 鐢熶骇鍗曚綅
+    private String dept;
+    // 鏄惁鍏抽敭浠�
+    private String gt_code;
+    // 瑙勬牸鍨嬪彿
+    private String specification;
+    // 宸ヨ壓澶囨敞
+    private String proc_comments;
+    // 宸ヨ壓淇敼浜�
+    private String proc_operator;
+    // 宸ヨ壓淇敼鏃堕棿锛宼imestamp
+    private String proc_modified_date;
+    // ABC鐮�
+    private String abc_code;
+    // 渚涘簲鍟嗙紪鐮�
+    private String vendor_no;
+    // 鐗堟湰鍙�
+    private String drawing_version;
+    // 鐢熶骇璁㈠崟鍙�
+    @NotNull
+    @JsonProperty("OrderNo")
+//    @JSONField(name = "OrderNo")
+    private String OrderNo;
+    // 鏈崟鍏ュ簱鏁伴噺
+    @NotNull
+    private Float qty;
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/mes/MesMatRecvForm.java b/src/main/java/com/zy/asrs/entity/mes/MesMatRecvForm.java
new file mode 100644
index 0000000..1633242
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/mes/MesMatRecvForm.java
@@ -0,0 +1,17 @@
+package com.zy.asrs.entity.mes;
+
+import lombok.Data;
+
+// MES鍙戝嚭鐨勯鏂欏叆搴撳崟
+@Data
+public class MesMatRecvForm {
+
+    // 鏉ユ簮鍗曞彿
+    private String source_no;
+    // 鏉ユ簮鍗曞悕绉�
+    private String source_name;
+    // 鎿嶄綔浜�
+    private String operuser;
+    // 鐗╂枡淇℃伅
+    private MesMatInfo itemdata;
+}
diff --git a/src/main/java/com/zy/asrs/entity/mes/MesOutApply.java b/src/main/java/com/zy/asrs/entity/mes/MesOutApply.java
new file mode 100644
index 0000000..5915993
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/mes/MesOutApply.java
@@ -0,0 +1,46 @@
+package com.zy.asrs.entity.mes;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+// 鍑哄簱鐢宠
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class MesOutApply extends MesParent {
+
+//    // 浠诲姟缂栧彿
+//    private String taskno;
+//    // 浠诲姟鍚嶇О
+//    private String taskname;
+//    // 鐢熶骇璁㈠崟鍙�
+//    @JsonProperty("OrderNo")
+//    @JSONField(name = "OrderNo")
+//    private String OrderNo;
+    // 杩愯緭绫诲瀷锛屽瓧鍏稿��(wms_tranfs_type) 06 瑁呴厤棰嗘枡锛�01锛氱┖鎵�
+    @JsonProperty("TransType")
+    @JSONField(name = "TransType")
+    private String TransType;
+    // 闆朵欢缂栫爜
+    @JsonProperty("Itemno")
+    @JSONField(name = "Itemno")
+    private String Itemno;
+    // 鏁伴噺
+    @JsonProperty("Qty")
+    @JSONField(name = "Qty")
+    private Integer Qty;
+//    // 鐢熶骇绾跨紪鐮�
+//    @JsonProperty("ProductLineId")
+//    @JSONField(name = "ProductLineId")
+//    private String ProductLineId;
+//    // 宸ヤ綅缂栫爜
+//    @JsonProperty("StationId")
+//    @JSONField(name = "StationId")
+//    private String StationId;
+    // 鐗╂枡浜岀淮鐮�
+    @JsonProperty("ItemBarcode")
+    @JSONField(name = "ItemBarcode")
+    private String ItemBarcode;
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/mes/MesOutFeedback.java b/src/main/java/com/zy/asrs/entity/mes/MesOutFeedback.java
new file mode 100644
index 0000000..11a5af0
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/mes/MesOutFeedback.java
@@ -0,0 +1,45 @@
+package com.zy.asrs.entity.mes;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+// 杩斿洖MES鍑哄簱瀹屾垚
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class MesOutFeedback extends MesParent {
+
+//    // 浠诲姟缂栧彿
+//    private String taskno;
+//    // 浠诲姟鍚嶇О
+//    private String taskname;
+//    // 鐢熶骇绾跨紪鐮�
+//    @JsonProperty("ProductLineId")
+//    @JSONField(name = "ProductLineId")
+//    private String ProductLineId;
+//    // 宸ヤ綅缂栫爜
+//    @JsonProperty("StationId")
+//    @JSONField(name = "StationId")
+//    private String StationId;
+    // 闆朵欢缂栫爜
+    @JsonProperty("Itemno")
+    @JSONField(name = "Itemno")
+    private String Itemno;
+    // 鎵樼洏鏉$爜
+    @JsonProperty("TuoPanId")
+    @JSONField(name = "TuoPanId")
+    private String TuoPanId;
+    // 鏁伴噺锛屾墭鐩橀浂浠舵暟閲�
+    @JsonProperty("Qty")
+    @JSONField(name = "Qty")
+    private Integer Qty;
+    // 鐗╂枡浜岀淮鐮�
+    @JsonProperty("ItemBarcode")
+    @JSONField(name = "ItemBarcode")
+    private String ItemBarcode;
+//    // 鐢熶骇璁㈠崟鍙�
+//    @JsonProperty("OrderNo")
+//    @JSONField(name = "OrderNo")
+//    private String OrderNo;
+}
diff --git a/src/main/java/com/zy/asrs/entity/mes/MesParent.java b/src/main/java/com/zy/asrs/entity/mes/MesParent.java
new file mode 100644
index 0000000..4433877
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/mes/MesParent.java
@@ -0,0 +1,39 @@
+package com.zy.asrs.entity.mes;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+@Data
+public class MesParent {
+
+    // 浠诲姟缂栧彿
+    @JsonProperty("taskno")
+    @JSONField(name = "taskno")
+    private String taskno;
+    // 浠诲姟鍚嶇О
+    @JsonProperty("taskname")
+    @JSONField(name = "taskname")
+    private String taskname;
+    // 鐢熶骇璁㈠崟鍙�
+    @JsonProperty("OrderNo")
+    @JSONField(name = "OrderNo")
+    private String OrderNo;
+    // 鐢熶骇绾跨紪鐮�
+    @JsonProperty("ProductLineId")
+    @JSONField(name = "ProductLineId")
+    private String ProductLineId;
+    // 宸ヤ綅缂栫爜
+    @JsonProperty("StationId")
+    @JSONField(name = "StationId")
+    private String StationId;
+//    // 闆朵欢缂栫爜
+//    @JsonProperty("Itemno")
+//    @JSONField(name = "Itemno")
+//    private String Itemno;
+//    // 鏁伴噺锛屾墭鐩橀浂浠舵暟閲�
+//    @JsonProperty("Qty")
+//    @JSONField(name = "Qty")
+//    private Float Qty;
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/mes/MesRecvFeedback.java b/src/main/java/com/zy/asrs/entity/mes/MesRecvFeedback.java
new file mode 100644
index 0000000..af4addb
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/mes/MesRecvFeedback.java
@@ -0,0 +1,32 @@
+package com.zy.asrs.entity.mes;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+import java.util.List;
+
+// 鍏ュ簱鍙嶉
+@Data
+public class MesRecvFeedback {
+
+    // 鏉ユ簮鍗曞彿
+    private String source_no;
+    // 鎿嶄綔浜�
+    private String operuser;
+    // 鍙嶉淇℃伅
+    private List<MesRecvFeedbackItem> itemdata;
+
+    @Data
+    public static class MesRecvFeedbackItem {
+
+        // 鐗╂枡缂栫爜
+        private String item_no;
+        // 鐢熶骇璁㈠崟鍙�
+        @JSONField(name = "OrderNo")
+        private String OrderNo;
+        // 鏈崟鍏ュ簱鏁伴噺
+        private Integer qty;
+        // 鏈崟瀹為檯鏁伴噺
+        private Integer real_qty;
+    }
+}
diff --git a/src/main/java/com/zy/asrs/entity/mes/MesReturn.java b/src/main/java/com/zy/asrs/entity/mes/MesReturn.java
new file mode 100644
index 0000000..c00f657
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/mes/MesReturn.java
@@ -0,0 +1,38 @@
+package com.zy.asrs.entity.mes;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+// MES鎺ュ彛杩斿洖缁撴灉
+public class MesReturn {
+
+    // 1锛氭垚鍔燂紱2锛氬け璐�
+    @JsonProperty("Success")
+    private String Success;
+    // 澶辫触娑堟伅
+    @JsonProperty("Message")
+    private String Message;
+
+    @JsonProperty("Success")
+    public String getSuccess() {
+        return Success;
+    }
+
+    @JsonProperty("Success")
+    public void setSuccess(String success) {
+        this.Success = success;
+    }
+
+    @JsonProperty("Message")
+    public String getMessage() {
+        return Message;
+    }
+
+    @JsonProperty("Message")
+    public void setMessage(String message) {
+        this.Message = message;
+    }
+
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/mes/TransArrivalStation.java b/src/main/java/com/zy/asrs/entity/mes/TransArrivalStation.java
new file mode 100644
index 0000000..236655f
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/mes/TransArrivalStation.java
@@ -0,0 +1,61 @@
+package com.zy.asrs.entity.mes;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+// 鍒扮珯瀹屾垚
+//@EqualsAndHashCode(callSuper = true)
+@Data
+public class TransArrivalStation {
+    // 浠诲姟缂栧彿
+    @JsonProperty("taskno")
+    @JSONField(name = "taskno")
+    private String taskno;
+    // 浠诲姟鍚嶇О
+    @JsonProperty("taskname")
+    @JSONField(name = "taskname")
+    private String taskname;
+    // 鐢熶骇璁㈠崟鍙�
+    @JsonProperty("OrderNo")
+    @JSONField(name = "OrderNo")
+    private String OrderNo;
+    // 鐢熶骇绾跨紪鐮�
+    @JsonProperty("ProductLineId")
+    @JSONField(name = "ProductLineId")
+    private String ProductLineId;
+    // 宸ヤ綅缂栫爜
+    @JsonProperty("StationID")
+    @JSONField(name = "StationID")
+    private String StationID;
+
+    // 鍒扮珯绫诲瀷锛�06锛氳閰嶉鏂欙紝07锛氳閰嶅叆搴擄紝08锛氳閰嶈浆搴�
+    @JsonProperty("Daotype")
+    @JSONField(name = "Daotype")
+    private String Daotype;
+    // 鎵樼洏鏉$爜
+    @JsonProperty("TuoPanId")
+    @JSONField(name = "TuoPanId")
+    private String TuoPanId;
+
+    // AGV缂栫爜
+    @JsonProperty("AgvCode")
+    @JSONField(name = "AgvCode")
+    private String AgvCode;
+    // 鐗╂枡缂栫爜
+    @JsonProperty("Itemno")
+    @JSONField(name = "Itemno")
+    private String Itemno;
+    // 闆朵欢鐮�
+    @JsonProperty("ItemBarcode")
+    @JSONField(name = "ItemBarcode")
+    private List<String> ItemBarcode;
+
+    // 鍒�鏋剁紪鍙�
+    @JsonProperty("DJNo")
+    @JSONField(name = "DJNo")
+    private String DJNo;
+}
diff --git a/src/main/java/com/zy/asrs/entity/mes/TransInOutStationAllow.java b/src/main/java/com/zy/asrs/entity/mes/TransInOutStationAllow.java
new file mode 100644
index 0000000..73565ca
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/mes/TransInOutStationAllow.java
@@ -0,0 +1,13 @@
+package com.zy.asrs.entity.mes;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+// 鍏ョ珯鍏佽銆佺绔欏厑璁�
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class TransInOutStationAllow extends TransParent {
+
+    // 鏄惁鍏佽锛孻 鍏佽锛汵锛屼笉鍏佽
+    private String status;
+}
diff --git a/src/main/java/com/zy/asrs/entity/mes/TransParent.java b/src/main/java/com/zy/asrs/entity/mes/TransParent.java
new file mode 100644
index 0000000..fc44cf7
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/mes/TransParent.java
@@ -0,0 +1,31 @@
+package com.zy.asrs.entity.mes;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+// 鍑哄叆绔欒姹傜户鎵跨埗绫伙細鍏ョ珯璇锋眰銆佸叆绔欏厑璁搞�佺绔欒姹傘�佺绔欏厑璁搞�佺绔欏畬鎴�
+@Data
+public class TransParent {
+
+    // 浠诲姟缂栧彿锛寃cs_task_header琛ㄤ腑鐨則ask_no
+    private String taskno;
+    // 浠诲姟鍚嶇О锛寃cs_task_header琛ㄤ腑鐨則ask_name
+    private String taskname;
+    // AGV缂栫爜
+    @JsonProperty("AgvCode")
+    @JSONField(name = "AgvCode")
+    private String AgvCode;
+    // 杩愯緭绫诲瀷
+    @JsonProperty("TransType")
+    @JSONField(name = "TransType")
+    private String TransType;
+    // 鐢熶骇绾跨紪鐮�
+    @JsonProperty("ProductLineId")
+    @JSONField(name = "ProductLineId")
+    private String ProductLineId;
+    // 宸ヤ綅缂栫爜
+    @JsonProperty("StationId")
+    @JSONField(name = "StationId")
+    private String StationId;
+}
diff --git a/src/main/java/com/zy/asrs/entity/mes/TransTask.java b/src/main/java/com/zy/asrs/entity/mes/TransTask.java
new file mode 100644
index 0000000..2539d83
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/mes/TransTask.java
@@ -0,0 +1,68 @@
+package com.zy.asrs.entity.mes;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+// MES杩愯緭浠诲姟
+@Data
+public class TransTask {
+
+    // 浠诲姟缂栧彿锛寃cs_task_header琛ㄤ腑鐨則ask_no
+    private String taskno;
+    // 浠诲姟鍚嶇О锛寃cs_task_header琛ㄤ腑鐨則ask_name
+    private String taskname;
+    // 鐢熶骇璁㈠崟鍙�
+    @JsonProperty("OrderNo")
+    @JSONField(name = "OrderNo")
+    private String OrderNo;
+    // 杩愯緭绫诲瀷锛�01锛氱┖鎵橈紝02锛氭瘺鍧紝03锛氭垚鍝侊紝04锛氳浆搴忥紝鏈帴鍙d负杞簭
+    @JsonProperty("TransType")
+    @JSONField(name = "TransType")
+    private String TransType;
+    // 褰撳墠宸ュ簭锛岄�氳繃褰撳墠浠诲姟
+    @JsonProperty("CurProcess")
+    @JSONField(name = "CurProcess")
+    private String CurProcess;
+    // 璧风偣缂栫爜
+    @JsonProperty("CurStationId")
+    @JSONField(name = "CurStationId")
+    private String CurStationId;
+    // 涓嬩竴宸ヤ綅锛岄粯璁よ鍒掍笅涓�宸ュ簭锛屽彲鎵嬪伐璋冩暣
+    @JsonProperty("NextProcess")
+    @JSONField(name = "NextProcess")
+    private String NextProcess;
+    // 缁堢偣缂栫爜
+    @JsonProperty("NextStationId")
+    @JSONField(name = "NextStationId")
+    private String NextStationId;
+    // 闆朵欢缂栫爜
+    @JsonProperty("Itemno")
+    @JSONField(name = "Itemno")
+    private String Itemno;
+    // 鏁伴噺
+    @JsonProperty("Qty")
+    @JSONField(name = "Qty")
+    private Integer Qty;
+    // 鐢熶骇绾跨紪鐮�
+    @JsonProperty("ProductLineId")
+    @JSONField(name = "ProductLineId")
+    private String ProductLineId;
+    // 鐗╂枡浜岀淮鐮�
+    @JsonProperty("ItemBarcode")
+    @JSONField(name = "ItemBarcode")
+    private String ItemBarcode;
+    // 鎿嶄綔绫诲瀷锛�1 鏂板浠诲姟锛�2 淇敼浠诲姟锛�3 鍙栨秷浠诲姟锛涳紙RCS鎵ц鍚庢棤娉曞彇娑堬級
+    @JsonProperty("OperateType")
+    @JSONField(name = "OperateType")
+    private Integer OperateType;
+    // 鎸囧畾AGV鍘傚锛�1 娴峰悍锛�2 鍗庢檽锛涘崕鏅撲笌娴峰悍AGV杩愯浇鑳藉姏涓嶅悓锛孧ES鍙寜闇�姹傛寚瀹�
+    @JsonProperty("AgvFactory")
+    @JSONField(name = "AgvFactory")
+    private Integer AgvFactory;
+
+    // 鍒�鏋剁紪鍙�
+    @JsonProperty("DJNo")
+    private String djNo;
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/mes/TransTaskFeedback.java b/src/main/java/com/zy/asrs/entity/mes/TransTaskFeedback.java
new file mode 100644
index 0000000..41451a8
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/mes/TransTaskFeedback.java
@@ -0,0 +1,17 @@
+package com.zy.asrs.entity.mes;
+
+import lombok.Data;
+
+// MES杩愯緭浠诲姟鍙嶉
+@Data
+public class TransTaskFeedback {
+
+    // 浠诲姟缂栧彿锛寃cs_task_header琛ㄤ腑鐨則ask_no
+    private String taskno;
+    // 浠诲姟鍚嶇О锛寃cs_task_header琛ㄤ腑鐨則ask_name
+    private String taskname;
+    // 浠诲姟鎵ц缁撴灉锛�1 瀹屾垚锛�2 澶辫触锛�
+    private Integer result;
+    // 澶辫触鍘熷洜
+    private String failMsg;
+}
diff --git a/src/main/java/com/zy/asrs/entity/rcs/RcsEqptNotify.java b/src/main/java/com/zy/asrs/entity/rcs/RcsEqptNotify.java
new file mode 100644
index 0000000..ee980cc
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/rcs/RcsEqptNotify.java
@@ -0,0 +1,16 @@
+package com.zy.asrs.entity.rcs;
+
+import lombok.Data;
+
+// 閫氱煡杩涘叆
+@Data
+public class RcsEqptNotify {
+
+    // 灏侀攣鍖虹紪鍙�
+    private String eqptCode;
+    // 鐢宠缂栧彿锛屽彲浣跨敤 UUID
+    private String taskCode;
+    // 浠诲姟鎵ц鐘舵�侊細鍙墿灞曟灇涓惧�笺�傞鍒舵灇涓惧�硷細1 鍙互杩涘叆灏侀攣鍖猴紱
+    private String actionStatus;
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/rcs/RcsReporterEqpt.java b/src/main/java/com/zy/asrs/entity/rcs/RcsReporterEqpt.java
new file mode 100644
index 0000000..7f8a3ce
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/rcs/RcsReporterEqpt.java
@@ -0,0 +1,20 @@
+package com.zy.asrs.entity.rcs;
+
+import lombok.Data;
+
+// 璇锋眰杩涘叆灏侀攣鍖恒�佸叆绔欍�佺绔欑瓑
+@Data
+public class RcsReporterEqpt {
+
+    // 灏侀攣鍖虹紪鍙�
+    private String eqptCode;
+    // 灏侀攣鍖哄悕绉�
+    private String eqptName;
+    // 鐢宠缂栧彿锛屽彲浣跨敤 UUID
+    private String taskCode;
+    // 浠诲姟鎵ц鏂规硶锛屼笌璁惧鐩稿叧锛屽彲鎵╁睍鏋氫妇鍊笺�� 棰勫埗鏋氫妇鍊硷細APPLY_LOCK 鐢宠灏侀攣鍖猴紱RELEASE_EQPT 閲婃斁灏侀攣鍖猴紱
+    private String method;
+    // agv鍘傚锛�1 娴峰悍锛�2 鍗庢檽
+    private Integer agvFactory;
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/rcs/RcsReporterTask.java b/src/main/java/com/zy/asrs/entity/rcs/RcsReporterTask.java
new file mode 100644
index 0000000..3fc7170
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/rcs/RcsReporterTask.java
@@ -0,0 +1,18 @@
+package com.zy.asrs.entity.rcs;
+
+import com.alibaba.fastjson.JSONObject;
+import lombok.Data;
+
+// 浠诲姟鎵ц鍙嶉
+@Data
+public class RcsReporterTask {
+
+    // 浠诲姟鍙�
+    private String robotTaskCode;
+    // 褰撳墠鎵ц浠诲姟鐨勬満鍣ㄤ汉鍞竴鏍囪瘑銆�
+    private String singleRobotCode;
+    // 鐩爣璺緞搴忓垪锛�0 璧风偣搴忓彿锛�1 缁堢偣搴忓彿銆�
+    private Integer currentSeq;
+    // 璇︾粏淇℃伅
+    private JSONObject extra;
+}
diff --git a/src/main/java/com/zy/asrs/entity/rcs/RcsReturn.java b/src/main/java/com/zy/asrs/entity/rcs/RcsReturn.java
new file mode 100644
index 0000000..7f32fe5
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/rcs/RcsReturn.java
@@ -0,0 +1,20 @@
+package com.zy.asrs.entity.rcs;
+
+import com.alibaba.fastjson.JSONObject;
+import lombok.Data;
+
+// 娴峰悍杩斿洖
+@Data
+public class RcsReturn {
+
+    // SUCCESS 鎴愬姛
+//    Err_TaskTypeNotSupport 浠诲姟绫诲瀷涓嶆敮鎸�
+//    Err_RobotGroupsNotMatch 鏈哄櫒浜鸿祫婧愮粍缂栧彿涓庝换鍔′笉鍖归厤锛屾棤娉曡皟搴�
+//    Err_RobotCodeNotMatch 鏈哄櫒浜虹紪鍙蜂笌浠诲姟涓嶅尮閰嶏紝鏃犳硶璋冨害
+//    Err_TargetRouteError 浠诲姟璺緞鍙傛暟鏈夎
+    private String code;
+
+    private String message;
+
+    private JSONObject data;
+}
diff --git a/src/main/java/com/zy/asrs/entity/rcs/RcsTaskCancel.java b/src/main/java/com/zy/asrs/entity/rcs/RcsTaskCancel.java
new file mode 100644
index 0000000..2c925b3
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/rcs/RcsTaskCancel.java
@@ -0,0 +1,17 @@
+package com.zy.asrs.entity.rcs;
+
+import lombok.Data;
+
+// 鍙栨秷浠诲姟
+@Data
+public class RcsTaskCancel {
+
+    // 浠诲姟鍙凤紝鍏ㄥ眬鍞竴
+    private String robotTaskCode;
+    // 浠诲姟鍙栨秷绫诲瀷
+    //鍙栨秷(鍘熻蒋鍙栨秷)
+    //CANCEL
+    //浜哄伐浠嬪叆(鍘熺‖鍙栨秷)
+    //DROP
+    private String cancelType;
+}
diff --git a/src/main/java/com/zy/asrs/entity/rcs/RcsTaskContinue.java b/src/main/java/com/zy/asrs/entity/rcs/RcsTaskContinue.java
new file mode 100644
index 0000000..87d8d7b
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/rcs/RcsTaskContinue.java
@@ -0,0 +1,20 @@
+package com.zy.asrs.entity.rcs;
+
+import lombok.Data;
+
+// 缁х画鎵ц浠诲姟
+@Data
+public class RcsTaskContinue {
+
+    // 浠诲姟閾剧紪鍙�
+    private String robotTaskCode;
+    // 瑙﹀彂绫诲瀷锛�
+    //SITE 绔欑偣缂栧彿瑙﹀彂
+    //CARRIER 杞藉叿缂栧彿瑙﹀彂
+    //ROBOT 杞﹀彿瑙﹀彂
+    //TASK 浠诲姟閾剧紪鍙疯Е鍙�
+    private String triggerType;
+    // 涓� triggerType 瀵瑰簲鐨勮Е鍙戠紪鍙�
+    private String triggerCode;
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/rcs/RcsTaskSubmit.java b/src/main/java/com/zy/asrs/entity/rcs/RcsTaskSubmit.java
new file mode 100644
index 0000000..eed3e7f
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/rcs/RcsTaskSubmit.java
@@ -0,0 +1,29 @@
+package com.zy.asrs.entity.rcs;
+
+import lombok.Data;
+
+import java.util.List;
+
+// RCS浠诲姟涓嬪彂
+@Data
+public class RcsTaskSubmit {
+
+    // 浠诲姟绫诲瀷锛屾灇涓惧�硷細TRANSPORT鎼繍銆�
+    private String taskType = "TRANSPORT";
+    // 鎵ц姝ラ闆嗗悎銆傛湰娆′换鍔℃満鍣ㄤ汉闇�瑕佹墽琛岀殑鍏抽敭璺緞锛屽簭鍙�0浠h〃璧风偣锛屽簭鍙�1浠h〃缁堢偣銆�
+    private List<RcsTaskTargetRoute> targetRoute;
+    // 浠诲姟鍞竴缂栧彿,濡傛灉涓虹┖锛岀郴缁熺敓鎴愪换鍔″彿骞惰繑鍥炪��
+    private String robotTaskCode;
+    // 浠诲姟鎵ц鐨勫垵濮嬩紭鍏堥『搴忥紝鏁板�艰秺澶э紝浼樺厛绾ц秺楂樸��
+    private Integer initPriority;
+    // 瑕佹眰璋冨害绯荤粺浠呭湪褰撳墠鎸囧畾鐨勮寖鍥村唴閫夋嫨鏈哄櫒浜烘墽琛岃浠诲姟銆傚彲鑳藉嚭鐜颁换鍔′笌鏈哄櫒浜虹被鍨嬩笉鍖归厤鐨勫紓甯革紝闇�瑕佷笟鍔$郴缁熺‘淇濅换鍔′笌鏈哄櫒浜虹被鍨嬬殑鍖归厤銆傚鏋滀笉鎸囧畾锛屽垯璋冨害绯荤粺浼氬湪鎵�鏈夊彲鐢ㄦ満鍣ㄤ汉鐨勮寖鍥村唴瀵绘壘鏈�浼樻柟妗堛��
+    // 鍥哄畾鏋氫妇鍊硷細 GROUPS 鏈哄櫒浜鸿祫婧愮粍缂栧彿锛汻OBOTS 鏈哄櫒浜虹紪鍙凤紱
+    private String robotType;
+    // 涓� robotType 鍖归厤鐨勮祫婧愮被鍨嬪敮涓�鏍囪瘑銆傛敮鎸佸崟涓拰澶氫釜缂栧彿銆傝嫢鍐欏叆澶氫釜缂栧彿鏃讹紝涔嬮棿鐢ㄩ�楀彿闅斿紑銆�
+    private String robotCode;
+    // 鑳藉惁鎵撴柇锛�1:鍙墦鏂紝璇ヨ揣鏋朵腑閫旀湁鍏朵粬浠诲姟鏃讹紝鎵撴柇褰撳墠浠诲姟銆�0:涓嶅彲鎵撴柇锛岃璐ф灦涓�旀湁鍏朵粬浠诲姟鏃讹紝涓嶈兘鎵撴柇褰撳墠浠诲姟銆傞粯璁や笉鍙墦鏂��
+    private String interrupt;
+    // 浠诲姟缁勭紪鍙凤紝鍏ㄥ眬鍞竴銆�
+    private String groupCode;
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/rcs/RcsTaskTargetRoute.java b/src/main/java/com/zy/asrs/entity/rcs/RcsTaskTargetRoute.java
new file mode 100644
index 0000000..4083d9f
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/rcs/RcsTaskTargetRoute.java
@@ -0,0 +1,22 @@
+package com.zy.asrs.entity.rcs;
+
+import lombok.Data;
+
+// 浠诲姟璺嚎
+@Data
+public class RcsTaskTargetRoute {
+
+    // 鐩爣璺緞搴忓垪銆�0 璧风偣搴忓彿锛� 1 缁堢偣搴忓彿銆�
+    private Integer seq;
+    // 鐩爣绫诲瀷銆傚彲鎵╁睍鏋氫妇鍊笺�傞鍒舵灇涓惧�硷細SITE 绔欑偣鍒悕锛�
+    private String type = "SITE";
+    // 绔欑偣缂栧彿
+    private String code;
+    // 鏈哄櫒浜哄埌杈剧洰鏍囦綅缃悗鐨勬搷浣溿�傞鍒舵灇涓惧�硷細COLLECT鍙栬揣锛汥ELIVERY閫佽揣锛�
+    private String operation;
+    // 瑕佹眰璋冨害绯荤粺浠呭湪褰撳墠鎸囧畾鐨勮寖鍥村唴閫夋嫨鏈哄櫒浜烘墽琛岃姝ラ銆傚浐瀹氭灇涓惧�硷細GROUPS鏈哄櫒浜鸿祫婧愮粍缂栧彿锛汻OBOTS鏈哄櫒浜虹紪鍙凤紱
+    private String robotType;
+    // 涓� robotType 鍖归厤鐨勮祫婧愮被鍨嬪敮涓�鏍囪瘑銆�
+    private String robotCode;
+
+}
diff --git a/src/main/java/com/zy/asrs/enums/RcsRetMethodEnum.java b/src/main/java/com/zy/asrs/enums/RcsRetMethodEnum.java
new file mode 100644
index 0000000..6c4fdf9
--- /dev/null
+++ b/src/main/java/com/zy/asrs/enums/RcsRetMethodEnum.java
@@ -0,0 +1,38 @@
+package com.zy.asrs.enums;
+
+public enum RcsRetMethodEnum {
+
+    TASK_START("start", "浠诲姟寮�濮�"),
+    TASK_END("end", "浠诲姟瀹屾垚"),
+    TASK_OUT_BIN("outbin", "璧板嚭鍌ㄤ綅"),
+
+    APPLY_IN_STATION("applyInStation", "鍏ョ珯璇锋眰"),
+    APPLY_OFF_STATION("applyOutStation", "绂荤珯璇锋眰"),
+    ARRIVE_ON_STATION("arriveOnStation", "鍒扮珯瀹屾垚"),
+    ARRIVE_OFF_STATION("arriveOffStation", "绂荤珯瀹屾垚");
+
+    private String code;
+    private String message;
+
+    RcsRetMethodEnum(String code, String message) {
+        this.code = code;
+        this.message = message;
+    }
+
+    public static RcsRetMethodEnum getEnum(String code) {
+        for (RcsRetMethodEnum method : RcsRetMethodEnum.values()) {
+            if (method.getCode().equals(code)) {
+                return method;
+            }
+        }
+        return null;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+}
diff --git a/src/main/java/com/zy/asrs/mapper/AgvInfoMapper.java b/src/main/java/com/zy/asrs/mapper/AgvInfoMapper.java
new file mode 100644
index 0000000..b267eb2
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/AgvInfoMapper.java
@@ -0,0 +1,11 @@
+package com.zy.asrs.mapper;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.zy.asrs.entity.AgvInfo;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface AgvInfoMapper extends BaseMapper<AgvInfo> {
+}
diff --git a/src/main/java/com/zy/asrs/mapper/BlockStationMapper.java b/src/main/java/com/zy/asrs/mapper/BlockStationMapper.java
new file mode 100644
index 0000000..504c4d8
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/BlockStationMapper.java
@@ -0,0 +1,14 @@
+package com.zy.asrs.mapper;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.zy.asrs.entity.BlockStation;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface BlockStationMapper extends BaseMapper<BlockStation> {
+
+    Integer addByBlockNo(@Param("blockNo")String blockNo, @Param("status")int status);
+}
diff --git a/src/main/java/com/zy/asrs/mapper/BlockTaskMapper.java b/src/main/java/com/zy/asrs/mapper/BlockTaskMapper.java
new file mode 100644
index 0000000..83c4135
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/BlockTaskMapper.java
@@ -0,0 +1,16 @@
+package com.zy.asrs.mapper;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.zy.asrs.entity.BlockTask;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface BlockTaskMapper extends BaseMapper<BlockTask> {
+
+    BlockTask findTop();
+
+    BlockTask findByTaskCode(@Param("taskCode")String taskCode);
+}
diff --git a/src/main/java/com/zy/asrs/mapper/DigitalTwinMapper.java b/src/main/java/com/zy/asrs/mapper/DigitalTwinMapper.java
new file mode 100644
index 0000000..33f1999
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/DigitalTwinMapper.java
@@ -0,0 +1,26 @@
+package com.zy.asrs.mapper;
+
+import com.zy.asrs.entity.digitaltwin.DtDetainMatVo;
+import com.zy.asrs.entity.digitaltwin.DtInAndOutBoundVo;
+import com.zy.asrs.entity.digitaltwin.DtOrderVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface DigitalTwinMapper {
+
+    List<Double> overview(@Param("areaId")String areaId);
+
+    List<DtOrderVo> recentOrder(@Param("startTime")String startTime, @Param("endTime")String endTime);
+
+    List<DtInAndOutBoundVo> recentInBound(@Param("areaId")String areaId, @Param("startTime")String startTime, @Param("endTime")String endTime);
+
+    List<DtInAndOutBoundVo> recentOutBound(@Param("areaId")String areaId, @Param("startTime")String startTime, @Param("endTime")String endTime);
+
+    List<DtDetainMatVo> recentDetainMat(@Param("areaId")String areaId, @Param("startTime")String startTime,
+                                        @Param("pageIndex")Integer pageIndex, @Param("pageSize")Integer pageSize);
+}
diff --git a/src/main/java/com/zy/asrs/mapper/LocCountMapper.java b/src/main/java/com/zy/asrs/mapper/LocCountMapper.java
new file mode 100644
index 0000000..5456834
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/LocCountMapper.java
@@ -0,0 +1,24 @@
+package com.zy.asrs.mapper;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.zy.asrs.entity.LocCount;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface LocCountMapper extends BaseMapper<LocCount> {
+
+    List<LocCount> getByAreaAndDate(@Param("areaId")String areaId, @Param("startDate")int startDate, @Param("endDate")int endDate);
+
+    List<LocCount> getByDate(@Param("startDate")int startDate, @Param("endDate")int endDate);
+
+    Integer insertOrUpdate(@Param("model")LocCount model);
+
+    List<LocCount> totalLoc();
+
+    List<LocCount> useLoc();
+}
diff --git a/src/main/java/com/zy/asrs/service/DigitalTwinService.java b/src/main/java/com/zy/asrs/service/DigitalTwinService.java
new file mode 100644
index 0000000..d56961f
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/DigitalTwinService.java
@@ -0,0 +1,70 @@
+package com.zy.asrs.service;
+
+import com.zy.asrs.entity.digitaltwin.*;
+
+import java.util.List;
+
+public interface DigitalTwinService {
+
+    /**
+     * 鎬昏锛氭�诲簱浣嶃�佸凡鐢ㄥ簱浣嶃�佸墿浣欏簱浣嶃�佷粖鏃ュ嚭搴撱�佷粖鏃ュ叆搴撱�佸墿浣欏簱浣�
+     *
+     * @param areaId
+     * @return
+     */
+    DtOverviewVo overview(String areaId);
+
+    /**
+     * 杩戞湡璁㈠崟锛岄粯璁�7澶�
+     *
+     * @param startDate
+     * @param endDate
+     * @return
+     */
+    List<DtOrderVo> order(String startDate, String endDate);
+
+    /**
+     * 杩戞湡鍑哄簱銆佸叆搴撴暟閲忥紝榛樿7澶�
+     *
+     * @param areaId
+     * @param startDate
+     * @param endDate
+     * @return
+     */
+    List<DtInAndOutBoundVo> inAndOutBound(String areaId, String startDate, String endDate);
+
+    /**
+     * 杩戞湡杩戞湡鍛嗘粸鍝佷俊鎭紝榛樿瓒呰繃30澶╀负鍛嗘粸鍝�
+     *
+     * @param areaId
+     * @param overDayNum
+     * @param pageIndex
+     * @param pageSize
+     * @return
+     */
+    List<DtDetainMatVo> recentDetainMat(String areaId, Integer overDayNum, Integer pageIndex, Integer pageSize);
+
+    /**
+     * 鏌ヨ搴撳瓨鍜屽簱浣嶈缁嗕俊鎭�
+     *
+     * @param areaId
+     * @return
+     */
+    List<DtLocDetailVo> warehouseDetail(String areaId);
+
+    /**
+     * 杩戞湡鍓╀綑搴撲綅鏁伴噺锛岄粯璁�7澶�
+     *
+     * @param areaId
+     * @param startDate
+     * @param endDate
+     * @return
+     */
+    List<DtLocVo> recentLoc(String areaId, String startDate, String endDate);
+
+    /**
+     * 瀹氭湡缁熻鍓╀綑搴撳瓨
+     *
+     */
+    void locNumCount();
+}
diff --git a/src/main/java/com/zy/asrs/service/MesService.java b/src/main/java/com/zy/asrs/service/MesService.java
new file mode 100644
index 0000000..de5936b
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/MesService.java
@@ -0,0 +1,154 @@
+package com.zy.asrs.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.core.common.R;
+import com.zy.asrs.entity.mes.*;
+import com.zy.asrs.entity.rcs.RcsReporterTask;
+
+import java.text.ParseException;
+
+public interface MesService {
+
+//    /**
+//     * 鐗╂枡淇℃伅鍚屾
+//     *
+//     * @param matRecvForm
+//     * @return
+//     */
+//    MesReturn matInfoAndInBound(MesMatRecvForm matRecvForm);
+
+    /**
+     * 鏂板銆佷慨鏀圭墿鏂欎俊鎭�
+     *
+     * @param mesMatInfo
+     * @return 1 鎴愬姛锛�-1 淇濆瓨鐗╂枡绫诲瀷澶辫触锛�-2 淇濆瓨鐗╂枡澶辫触锛�
+     * @throws ParseException
+     */
+    int synMatInfo(MesMatInfo mesMatInfo);
+
+    /**
+     * 瀹為檯鍏ュ簱鍙嶉
+     * 瑙﹀彂鏉′欢锛氶拡瀵瑰師鏂欏嚭搴撴鏌ュ啀鍏ュ簱鐨勬儏鍐�
+     * 鎺ㄩ�佹椂鏈猴細褰撴墍鏈夎揣鐗╅兘鍏ュ簱鏃舵帹閫�
+     *
+     * @param orderNo
+     * @return
+     */
+    int recvFeedback(String orderNo);
+
+    /**
+     * 鍑哄簱鐢宠
+     *
+     * @param mesOutApply
+     * @return
+     */
+    int outBoundOrder(MesInApply mesOutApply);
+
+    /**
+     * 鍑哄簱鐢宠锛堝彨鏂欙級锛岄綈濂楁�ч厤鐩�
+     *
+     * @param mesCallOutApply
+     * @return
+     */
+    int callOutBoundOrder(MesCallOutApply mesCallOutApply);
+
+    /**
+     * 鍑哄簱瀹屾垚
+     *
+     * @param orderNo
+     * @return
+     */
+    int outFeedback(String orderNo);
+
+    /**
+     * 鍏ュ簱瀹屾垚
+     *
+     * @param orderNo
+     * @return
+     */
+    int inFeedback(String orderNo);
+
+    /**
+     * 鍏ュ簱鐢宠
+     *
+     * @param mesInApply
+     * @return
+     */
+    int inBoundOrder(MesInApply mesInApply, int check);
+
+    int transDj(String taskNo,String djNo);
+
+    /**
+     * 9.1涓嬪彂杩愯緭浠诲姟
+     *
+     * @param transTask
+     * @return
+     */
+    JSONObject submitTask(TransTask transTask);
+
+    /**
+     * 9.2杩斿洖浠诲姟鎵ц缁撴灉
+     *
+     * @param rcsReporterTask
+     * @return
+     */
+    int reporterTask(RcsReporterTask rcsReporterTask);
+
+    /**
+     * 9.8鐢宠鍗庢檽AGV杩涘叆鐢熶骇绾�
+     *
+     * @param apply
+     * @return
+     */
+    String applyInLine(TransParent apply);
+
+    /**
+     * 鍏ョ珯璇锋眰锛氳浆鍙慉GV->鍏ョ珯璇锋眰->缁橫ES
+     *
+     * @param apply
+     * @return
+     */
+    int applyInStation(TransParent apply);
+
+    /**
+     * 鍏ョ珯鍏佽锛氳浆鍙慚ES->鍏佽鍏ョ珯->缁橝GV
+     *
+     * @param allow
+     * @return
+     */
+    MesReturn allowInStation(TransInOutStationAllow allow);
+
+    /**
+     * 鍒扮珯瀹屾垚锛氳浆鍙慉GV->鍒扮珯瀹屾垚->缁橫ES
+     *
+     * @param arrivalStation
+     * @return
+     */
+    int arriveOnStation(TransArrivalStation arrivalStation,String path);
+
+    /**
+     * 绂荤珯璇锋眰锛氳浆鍙慉GV->绂荤珯璇锋眰->缁橫ES
+     *
+     * @param apply
+     * @return
+     */
+    int applyOutStation(TransParent apply);
+
+    /**
+     * 绂荤珯鍏佽锛氳浆鍙慚ES->鍏佽绂荤珯->缁橝GV
+     *
+     * @param allow
+     * @return
+     */
+    MesReturn allowOutStation(TransInOutStationAllow allow);
+
+    /**
+     * 绂荤珯瀹屾垚锛氳浆鍙慉GV->绂荤珯瀹屾垚->缁橫ES
+     *
+     * @param apply
+     * @return
+     */
+    int outStation(TransParent apply);
+
+    R tkt(String taskNo);
+}
diff --git a/src/main/java/com/zy/asrs/service/RcsService.java b/src/main/java/com/zy/asrs/service/RcsService.java
new file mode 100644
index 0000000..8fddd1c
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/RcsService.java
@@ -0,0 +1,66 @@
+package com.zy.asrs.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.zy.asrs.entity.mes.TransInOutStationAllow;
+import com.zy.asrs.entity.mes.TransParent;
+import com.zy.asrs.entity.rcs.*;
+
+public interface RcsService {
+
+    /**
+     * 绠$悊灏侀攣鍖鸿繘鍏�
+     *
+     */
+    void managerBlock();
+
+    /**
+     * 2.1.2浠诲姟涓嬪彂鎺ュ彛
+     *
+     * @param rcsTaskSubmit
+     * @param rcsFactory 1 娴峰悍锛�2 鍗庢檽锛�
+     * @return
+     */
+    int submitTask(RcsTaskSubmit rcsTaskSubmit, int rcsFactory);
+
+    /**
+     * 2.1.3浠诲姟缁х画鎵ц鎺ュ彛
+     *
+     * @param rcsTaskContinue
+     * @param rcsFactory
+     * @return
+     */
+    int continueTask(RcsTaskContinue rcsTaskContinue, int rcsFactory);
+
+    /**
+     * 2.1.4浠诲姟鍙栨秷鎺ュ彛
+     *
+     * @param rcsTaskCancel
+     * @param rcsFactory
+     * @return
+     */
+    int cancelTask(RcsTaskCancel rcsTaskCancel, int rcsFactory);
+
+    /**
+     * 2.2.1浠诲姟鎵ц鍥為
+     *
+     * @param rcsReporterTask
+     * @return
+     */
+    RcsReturn reporterTask(RcsReporterTask rcsReporterTask);
+
+    /**
+     * 2.2.4璇锋眰澶栬鎺ュ彛锛岃姹傚皝閿佸尯
+     *
+     * @param rcsReporterEqpt
+     * @return
+     */
+    RcsReturn reporterEqpt(RcsReporterEqpt rcsReporterEqpt);
+
+    /**
+     * 9.7鐢宠杩涘叆鐢熶骇绾�
+     *
+     * @param apply
+     * @return
+     */
+    JSONObject hxApplyInLine(TransParent apply);
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/DigitalTwinServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/DigitalTwinServiceImpl.java
new file mode 100644
index 0000000..ede00fc
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/DigitalTwinServiceImpl.java
@@ -0,0 +1,272 @@
+package com.zy.asrs.service.impl;
+
+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.mapper.DigitalTwinMapper;
+import com.zy.asrs.mapper.LocCountMapper;
+import com.zy.asrs.service.DigitalTwinService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class DigitalTwinServiceImpl implements DigitalTwinService {
+
+    @Resource
+    private DigitalTwinMapper digitalTwinMapper;
+    @Resource
+    private LocCountMapper locCountMapper;
+
+    /**
+     * 鎬昏锛氭�诲簱浣嶃�佸凡鐢ㄥ簱浣嶃�佸墿浣欏簱浣嶃�佷粖鏃ュ嚭搴撱�佷粖鏃ュ叆搴撱�佸墿浣欏簱浣�
+     *
+     * @param areaId
+     * @return
+     */
+    public DtOverviewVo overview(String areaId) {
+
+        List<Double> dbOverview = digitalTwinMapper.overview(areaId);
+        if (dbOverview != null && !dbOverview.isEmpty()){
+            DtOverviewVo dtOverviewVo = DtOverviewVo.builder()
+                .totalLoc((int)Math.round(dbOverview.get(0)))
+                    .useLoc((int)Math.round(dbOverview.get(1)))
+                    .remainingStock((int)Math.round(dbOverview.get(2)))
+                    .todayWarehousing((int)Math.round(dbOverview.get(3)))
+                    .todayOutbound((int)Math.round(dbOverview.get(4)))
+                    .build();
+            dtOverviewVo.setIdleLoc(dtOverviewVo.getTotalLoc() - dtOverviewVo.getUseLoc());
+            return dtOverviewVo;
+        }
+        return DtOverviewVo.builder().build();
+    }
+
+    /**
+     * 杩戞湡璁㈠崟锛岄粯璁�7澶�
+     *
+     * @param startDate
+     * @param endDate
+     * @return
+     */
+    public List<DtOrderVo> order(String startDate, String endDate) {
+
+        String startTime;
+        String endTime;
+        if (startDate == null || endDate == null || startDate.isEmpty() || endDate.isEmpty()){
+            Date now = new Date();
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(now);
+            calendar.add(Calendar.DAY_OF_MONTH, -7);
+            Date start = calendar.getTime();
+
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+            endDate = sdf.format(now);
+            startDate = sdf.format(start);
+        }
+        startTime = startDate.substring(0, 4) + "-" + startDate.substring(4, 6) + "-" + startDate.substring(6, 8) + "00:00:00";
+        endTime = endDate.substring(0, 4) + "-" + endDate.substring(4, 6) + "-" + endDate.substring(6, 8) + "00:00:00";
+        List<DtOrderVo> dbOrder = digitalTwinMapper.recentOrder(startTime, endTime);
+        // 绌烘棩鏈熻ˉ鍏�
+
+
+        return dbOrder;
+    }
+
+    /**
+     * 杩戞湡鍑哄簱銆佸叆搴撴暟閲忥紝榛樿7澶�
+     *
+     * @param areaId
+     * @param startDate
+     * @param endDate
+     * @return
+     */
+    public List<DtInAndOutBoundVo> inAndOutBound(String areaId, String startDate, String endDate) {
+
+        List<DtInAndOutBoundVo> dtInAndOutBoundVos = new ArrayList<>();
+
+        String startTime;
+        String endTime;
+        if (startDate == null || endDate == null || startDate.isEmpty() || endDate.isEmpty()){
+            Date now = new Date();
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(now);
+            calendar.add(Calendar.DAY_OF_MONTH, -7);
+            Date start = calendar.getTime();
+
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+            endDate = sdf.format(now);
+            startDate = sdf.format(start);
+        }
+        startTime = startDate.substring(0, 4) + "-" + startDate.substring(4, 6) + "-" + startDate.substring(6, 8) + "00:00:00";
+        endTime = endDate.substring(0, 4) + "-" + endDate.substring(4, 6) + "-" + endDate.substring(6, 8) + "00:00:00";
+        List<DtInAndOutBoundVo> dtInBoundVos = digitalTwinMapper.recentInBound(areaId, startTime, endTime);
+        List<DtInAndOutBoundVo> dtOutBoundVos = digitalTwinMapper.recentOutBound(areaId, startTime, endTime);
+
+        // 鏍煎紡鏁寸悊
+
+        return dtInAndOutBoundVos;
+    }
+
+    /**
+     * 杩戞湡杩戞湡鍛嗘粸鍝佷俊鎭紝榛樿瓒呰繃30澶╀负鍛嗘粸鍝�
+     *
+     * @param areaId
+     * @param overDayNum
+     * @param pageIndex
+     * @param pageSize
+     * @return
+     */
+    public List<DtDetainMatVo> recentDetainMat(String areaId, Integer overDayNum, Integer pageIndex, Integer pageSize) {
+
+        overDayNum = overDayNum == null ? 30 : overDayNum;
+        pageIndex = pageIndex == null ? 1 : pageIndex;
+        pageSize = pageSize == null ? 1000000 : pageSize;
+
+        Date now = new Date();
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(now);
+        calendar.add(Calendar.DAY_OF_MONTH, -overDayNum);
+        Date start = calendar.getTime();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String startTime = sdf.format(start);
+
+        List<DtDetainMatVo> dbDetainMats = digitalTwinMapper.recentDetainMat(areaId, startTime, pageIndex, pageSize);
+
+        return dbDetainMats;
+    }
+
+    /**
+     * 鏌ヨ搴撳瓨鍜屽簱浣嶈缁嗕俊鎭�
+     *
+     * @param areaId
+     * @return
+     */
+    public List<DtLocDetailVo> warehouseDetail(String areaId) {
+        List<DtLocDetailVo> locDetailVos = new ArrayList<>();
+
+        List<LocMast> locMasts = new ArrayList<>();
+        List<LocDetl> locDetls = new ArrayList<>();
+
+        for (LocMast locMast : locMasts) {
+            DtLocDetailVo dtLocDetailVo = new DtLocDetailVo();
+            dtLocDetailVo.setLocMast(locMast);
+            dtLocDetailVo.setLocNo(locMast.getLocNo());
+            dtLocDetailVo.setLocSts(locMast.getLocSts());
+            dtLocDetailVo.setRow1(locMast.getRow1());
+            dtLocDetailVo.setBay1(locMast.getBay1());
+            dtLocDetailVo.setLev1(locMast.getLev1());
+            for (LocDetl locDetl : locDetls) {
+                List<LocDetl> locDetl1 = locDetls.parallelStream().filter(a -> a.getLocNo().equals(locDetl.getLocNo())).collect(Collectors.toList());
+                if (locDetl1 != null && locDetl1.size() == 1) {
+                    dtLocDetailVo.setLocDetl(locDetl1.get(0));
+                    dtLocDetailVo.setAreaId(locDetl.getAreaId());
+                    dtLocDetailVo.setAreaName(locDetl.getAreaName());
+                }
+            }
+            locDetailVos.add(dtLocDetailVo);
+        }
+
+        return locDetailVos;
+    }
+
+    /**
+     * 杩戞湡鍓╀綑搴撲綅鏁伴噺锛岄粯璁�7澶�
+     *
+     * @param areaId
+     * @param startDate
+     * @param endDate
+     * @return
+     */
+    public List<DtLocVo> recentLoc(String areaId, String startDate, String endDate) {
+
+        List<DtLocVo> locVos = new ArrayList<>();
+
+        if (startDate == null || endDate == null || startDate.isEmpty() || endDate.isEmpty()){
+            Date now = new Date();
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(now);
+            calendar.add(Calendar.DAY_OF_MONTH, -7);
+            Date start = calendar.getTime();
+
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+            endDate = sdf.format(now);
+            startDate = sdf.format(start);
+        }
+
+        List<LocCount> locCounts;
+        if(areaId.isEmpty()){
+            locCounts = locCountMapper.getByDate(Integer.parseInt(startDate), Integer.parseInt(endDate));
+        } else {
+            locCounts = locCountMapper.getByAreaAndDate(areaId, Integer.parseInt(startDate), Integer.parseInt(endDate));
+        }
+
+        for (LocCount locCount : locCounts) {
+            String date = locCount.getDate().toString();
+            String locDate = date.substring(0, 4) + "-" + date.substring(4, 6) + "-" + date.substring(6, 8);
+            DtLocVo dtLocVo = DtLocVo.builder()
+                    .locDate(locDate)
+                    .idleNum(locCount.getRemainNum())
+                    .build();
+            locVos.add(dtLocVo);
+        }
+
+        return locVos;
+    }
+
+    /**
+     * 瀹氭湡缁熻鍓╀綑搴撳瓨
+     *
+     */
+    public void locNumCount() {
+
+        List<LocCount> result = new ArrayList<>();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+        String date = sdf.format(new Date());
+
+        List<LocCount> totalLoc = locCountMapper.totalLoc();
+        List<LocCount> useLoc = locCountMapper.useLoc();
+        for (LocCount locCount : totalLoc) {
+            LocCount locCount1 = new LocCount();
+            locCount1.setDate(Integer.valueOf(date));
+            locCount1.setAreaId(locCount.getAreaId());
+            locCount1.setLocNum(locCount1.getLocNum());
+            for (LocCount locCount2 : useLoc) {
+                if(locCount1.getAreaId().equals(locCount2.getAreaId())){
+                    locCount1.setRemainNum(locCount1.getLocNum() - locCount2.getLocNum());
+                }
+            }
+            result.add(locCount1);
+        }
+
+        for (LocCount locCount  : result) {
+            locCountMapper.insertOrUpdate(locCount);
+        }
+    }
+
+
+    // region 鏁板瓧瀛敓
+
+    // 鏁板瓧瀛敓鏁村悎
+
+    // 鏈哄櫒鐘舵�佹暣鍚�
+
+    // endregion
+
+
+
+    // region 绔嬪簱璋冨害
+
+    // 鍫嗗灈鏈哄瓨鍙�
+
+    // 杈撻�佺嚎鎷嶇収銆佺О閲�
+
+    // endregion
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/MatServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MatServiceImpl.java
index f2fddbd..14f9d42 100644
--- a/src/main/java/com/zy/asrs/service/impl/MatServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MatServiceImpl.java
@@ -23,7 +23,8 @@
     }
     @Override
     public Page<Mat> getPage2(Page page, String tagId, Object matnr, Object maktx, Object specs) {
-        return page.setRecords(baseMapper.listByPage2(page, tagId, matnr, maktx, specs));
+
+        return page.setRecords(baseMapper.listByPage2(page, "1".equals(tagId) ? "2" : tagId, matnr, maktx, specs));
     }
 
 
diff --git a/src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java
new file mode 100644
index 0000000..2b93d99
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java
@@ -0,0 +1,1090 @@
+package com.zy.asrs.service.impl;
+
+import com.alibaba.excel.util.DateUtils;
+import com.alibaba.excel.util.StringUtils;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.R;
+import com.core.common.SnowflakeIdWorker;
+import com.core.exception.CoolException;
+import com.zy.asrs.entity.*;
+import com.zy.asrs.entity.mes.*;
+import com.zy.asrs.entity.param.CombParam;
+import com.zy.asrs.entity.rcs.*;
+import com.zy.asrs.mapper.AgvInfoMapper;
+import com.zy.asrs.service.*;
+import com.zy.common.model.enums.WorkNoType;
+import com.zy.common.service.CommonService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.text.ParseException;
+import java.time.OffsetDateTime;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+public class MesServiceImpl implements MesService {
+
+    @Value("${mes.url}")
+    public String MES_URL;
+    @Value("${dj.url}")
+    public String DJ_URL;
+    @Value("${wms.currentName}")
+    public String WMS_CURRENT_NAME;
+    @Value("${mes.defaultUserId}")
+    public long defaultUserId;
+    @Value("${wms.wmsTransStartStation1}")
+    public String WMS_TRANS_START_STATION_1;
+
+
+    @Resource
+    private RcsService rcsService;
+    @Resource
+    private MatService matService;
+    @Resource
+    private TagService tagService;
+    @Resource
+    private OrderPakinService orderPakinService;
+    @Resource
+    private OrderDetlPakinService orderDetlPakinService;
+    @Resource
+    private OrderPakoutService orderPakoutService;
+    @Resource
+    private OrderDetlPakoutService orderDetlPakoutService;
+    @Resource
+    private MobileService mobileService;
+    @Resource
+    private WaitPakinService waitPakinService;
+    @Resource
+    private TaskService taskService;
+    @Resource
+    private TaskDetlService taskDetlService;
+    @Resource
+    private SnowflakeIdWorker snowflakeIdWorker;
+    @Resource
+    private CommonService commonService;
+    @Resource
+    private AgvInfoMapper agvInfoMapper;
+
+
+    // region MES鎺ュ彛
+
+//    /**
+//     * 鐗╂枡淇℃伅鍚屾锛孧ES->WMS
+//     * 鍚屾鐗╂枡淇℃伅->鍏ュ簱鍗�
+//     *
+//     * @param matRecvForm
+//     * @return
+//     */
+//    @Transactional(rollbackFor = Exception.class)
+//    public MesReturn matInfoAndInBound(MesMatRecvForm matRecvForm) {
+//
+//        MesReturn mesReturn = new MesReturn();
+//
+//        // 1銆佺墿鏂欎俊鎭悓姝�
+//        try {
+//            if (synMatInfo(matRecvForm.getItemdata()) == 1) {
+//                // 2銆佺敓鎴愬叆搴撳崟
+//                try {
+//                    MesInApply mesInApply = new MesInApply();
+//                    mesInApply.setItemno(matRecvForm.getItemdata().getItem_no());
+//                    mesInApply.setQty(matRecvForm.getItemdata().getQty());
+//                    mesInApply.setOrderNo(matRecvForm.getItemdata().getOrderNo());
+//                    if (inBoundOrder(mesInApply, 1) == 1) {
+//                        mesReturn.setSuccess("1");
+//                    } else {
+//                        mesReturn.setSuccess("2");
+//                        mesReturn.setMessage("鐢熸垚鍏ュ簱璁㈠崟澶辫触");
+//                    }
+//                } catch (Exception e) {
+//                    mesReturn.setSuccess("2");
+//                    mesReturn.setMessage("鐢熸垚鍏ュ簱璁㈠崟澶辫触");
+//                    log.error("MES鐗╂枡淇℃伅鍚屾鎺ュ彛锛岀敓鎴愬叆搴撹鍗曢敊璇�", e);
+//                }
+//            } else {
+//                mesReturn.setSuccess("2");
+//                mesReturn.setMessage("鍚屾鐗╂枡淇℃伅澶辫触");
+//            }
+//        } catch (Exception e) {
+//            mesReturn.setSuccess("2");
+//            mesReturn.setMessage("鍚屾鐗╂枡淇℃伅澶辫触");
+//            log.error("MES鐗╂枡淇℃伅鍚屾鎺ュ彛锛屽悓姝ョ墿鏂欓敊璇�", e);
+//        }
+//
+//        return mesReturn;
+//    }
+
+    /**
+     * 鏂板銆佷慨鏀圭墿鏂欎俊鎭�
+     *
+     * @param mesMatInfo
+     * @return 1 鎴愬姛锛�-1 淇濆瓨鐗╂枡绫诲瀷澶辫触锛�-2 淇濆瓨鐗╂枡澶辫触锛�
+     * @throws ParseException
+     */
+    public int synMatInfo(MesMatInfo mesMatInfo)  {
+
+        try {
+            // 瑙勫垯瀹氫箟锛氶粯璁ょ3灞備负鍚屾鐨勭墿鏂欑被鍨�
+            long secondPath = 2;
+            String secondParentName = WMS_CURRENT_NAME;
+//        long locType = 1;
+            long userId = defaultUserId;
+//            if (mesMatInfo.getModified_operator1() != null && !mesMatInfo.getModified_operator1().isEmpty()) {
+//                userId = Long.parseLong(mesMatInfo.getModified_operator1());
+//            }
+            Date now = new Date();
+            if (mesMatInfo.getModified_date1() != null && !mesMatInfo.getModified_date1().isEmpty()) {
+                now = Date.from(OffsetDateTime.parse(mesMatInfo.getModified_date1()).toInstant());
+            }
+
+            // 鐗╂枡绫诲瀷鏇存柊
+            EntityWrapper<Tag> wrapper = new EntityWrapper<>();
+            wrapper.eq("name", mesMatInfo.getItem_type());
+            Tag tag = tagService.selectByName(mesMatInfo.getItem_type(), 3);
+            if (tag == null || StringUtils.isEmpty(tag.getName())) {
+                Tag newTag = new Tag();
+                newTag.setName(mesMatInfo.getItem_type());
+                newTag.setParentId(secondPath);
+                newTag.setParentName(secondParentName);
+                newTag.setPath("2");
+                newTag.setPathName(secondParentName);
+                newTag.setLevel(3);
+                newTag.setStatus(1);
+                newTag.setCreateBy(userId);
+                newTag.setCreateTime(now);
+                newTag.setUpdateBy(userId);
+                newTag.setUpdateTime(now);
+
+                if (!tagService.insert(newTag))
+                    return -1;
+            }
+
+            // 鐗╂枡鏇存柊
+            long tagId = tagService.selectByName(mesMatInfo.getItem_type(), 3).getId();
+            Mat mat = matService.selectByMatnr(mesMatInfo.getItem_no());
+            Mat newMat = new Mat();
+            newMat.setMatnr(mesMatInfo.getItem_no());
+            newMat.setMaktx(mesMatInfo.getDescription());
+            newMat.setTagId(tagId);
+            newMat.setLocType(tagId);   //locType
+            newMat.setSpecs(mesMatInfo.getSpecification());
+            newMat.setUnit("浠�");   //缁熶竴涓轰欢锛宮esMatInfo.getUnit_of_measure()
+            newMat.setModel(mesMatInfo.getClassification_code());
+            newMat.setMemo(JSONObject.toJSONString(mesMatInfo));
+            newMat.setCreateBy(userId);
+            newMat.setCreateTime(now);
+            newMat.setUpdateBy(userId);
+            newMat.setUpdateTime(now);
+            newMat.setStatus(1);
+            if (mat == null) {
+                if (!matService.insert(newMat))
+                    return -2;
+            } else {
+                JSONObject dbMemo = JSONObject.parseObject(mat.getMemo());
+//            dbMemo.remove("OrderNo");
+//            dbMemo.remove("qty");
+            JSONObject newMemo = JSONObject.parseObject(newMat.getMemo());
+//            newMemo.remove("OrderNo");
+//            newMemo.remove("qty");
+                if (!dbMemo.equals(newMemo)) {
+                    newMat.setId(mat.getId());
+                    if (!matService.updateById(newMat))
+                        return -2;
+                }
+            }
+
+            return 1;
+        } catch (Exception e) {
+            log.error("鍚屾鐗╂枡澶辫触", e);
+            return -1;
+        }
+    }
+
+    /**
+     * 瀹為檯鍏ュ簱鍙嶉
+     * 瑙﹀彂鏉′欢锛氶拡瀵瑰師鏂欏嚭搴撴鏌ュ啀鍏ュ簱鐨勬儏鍐�
+     * 鎺ㄩ�佹椂鏈猴細褰撹鍗曞畬鎴愭椂鎺ㄩ��
+     *
+     * @param orderNo
+     * @return
+     */
+    public int recvFeedback(String orderNo) {
+
+        // 鎸夊崟鍙锋煡璇�
+        OrderPakin order = orderPakinService.selectByNo(orderNo);
+        if (order != null && order.getSettle() == 4) {   // 鏍¢獙鏄惁瀹屾垚
+//            List<MesRecvFeedback.MesRecvFeedbackItem> list = new ArrayList<>();
+            JSONObject dbMemo = JSONObject.parseObject(order.getMemo());
+            List<MesItemDetails> details = new ArrayList<>();
+            EntityWrapper<OrderDetlPakin> wrapper = new EntityWrapper<>();
+            wrapper.eq("order_no", orderNo);
+            List<OrderDetlPakin> orderDetlPakins = orderDetlPakinService.selectList(wrapper);
+            if (orderDetlPakins != null && !orderDetlPakins.isEmpty()) {
+                for (OrderDetlPakin orderDetl : orderDetlPakins) {
+                    int qty = Integer.parseInt(dbMemo.getString("qty"));
+                    double real_qty = Double.parseDouble(orderDetl.getQty().toString());
+                    MesItemDetails detail = new MesItemDetails();
+                    detail.setItemNo(orderDetl.getMatnr());
+                    detail.setAnfme(real_qty);
+                    details.add(detail);
+//                    MesRecvFeedback.MesRecvFeedbackItem item = new MesRecvFeedback.MesRecvFeedbackItem();
+//                    item.setItem_no(orderDetl.getMatnr());
+//                    item.setOrderNo(orderNo);
+//                    item.setQty(qty);
+//                    item.setReal_qty(real_qty);
+//                    list.add(item);
+                }
+            }
+
+//            MesRecvFeedback mesRecvFeedback = new MesRecvFeedback();
+//            mesRecvFeedback.setSource_no(dbMemo.getString("source_no"));
+//            mesRecvFeedback.setOperuser(dbMemo.getString("operuser"));
+//            mesRecvFeedback.setItemdata(list);
+
+            MesInApply mesRecvFeedback = new MesInApply();
+            mesRecvFeedback.setBillType(dbMemo.getString("billType"));
+            mesRecvFeedback.setOrderNo(dbMemo.getString("orderNo"));
+            mesRecvFeedback.setCreateTime(dbMemo.getString("createTime"));
+            mesRecvFeedback.setDetails(details);
+
+            String url = DJ_URL + "api/InboundOrder/WmsInFinish";
+            String response = RcsServiceImpl.sendPost(url, mesRecvFeedback.toString());
+            if (!StringUtils.isEmpty(response) && response.contains("Success")){
+                MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
+                if("1".equals(mesReturn.getSuccess())) {
+                    return 1;
+                }
+            }
+        }
+
+        return 0;
+    }
+
+    /**
+     * 鍑哄簱鐢宠
+     * 鍔犲伐搴撱�佸垁鍏峰簱
+     *
+     * @param mesOutApply
+     * @return 1 鎴愬姛锛�-1 璁㈠崟閲嶅锛�
+     */
+    public int outBoundOrder(MesInApply mesOutApply){
+
+        // docType鏍规嵁搴撶被鍨嬬‘瀹�
+        long docType = 7;
+        long settle = 1;
+
+        // 鏍¢獙璁㈠崟鏄惁閲嶅
+        OrderPakout order = orderPakoutService.selectByNo(mesOutApply.getOrderNo());
+        if (order != null && !StringUtils.isEmpty(order.getOrderNo())) {
+            return -1;
+        }
+
+        // 鐢熸垚璁㈠崟
+        Date now = new Date();
+        OrderPakout orderPakout = new OrderPakout();
+        orderPakout.setUuid( String.valueOf(snowflakeIdWorker.nextId()));
+        orderPakout.setOrderNo(mesOutApply.getOrderNo());
+        orderPakout.setOrderTime(com.core.common.DateUtils.convert(now));
+        orderPakout.setDocType(docType);
+        orderPakout.setSettle(settle);
+        orderPakout.setStatus(1);
+        orderPakout.setCreateBy(defaultUserId);
+        orderPakout.setCreateTime(now);
+        orderPakout.setUpdateBy(defaultUserId);
+        orderPakout.setUpdateTime(now);
+        orderPakout.setMemo(JSONObject.toJSONString(mesOutApply));
+        orderPakout.setPakinPakoutStatus(2);
+        if (!orderPakoutService.insert(orderPakout)) {
+            log.error("MES淇濆瓨鍑哄簱璁㈠崟涓绘。澶辫触");
+            throw new CoolException("淇濆瓨鍑哄簱璁㈠崟涓绘。澶辫触");
+        }
+
+        // 鐢熸垚鏄庣粏
+        for (MesItemDetails item : mesOutApply.getDetails()) {
+            Mat mat = matService.selectByMatnr(item.getItemNo());
+            OrderDetlPakout orderDetlPakout = new OrderDetlPakout();
+            orderDetlPakout.setOrderId(orderPakout.getId());
+            orderDetlPakout.setOrderNo(orderPakout.getOrderNo());
+            orderDetlPakout.setAnfme(Double.valueOf(item.getAnfme()));
+            orderDetlPakout.setQty(0.0);
+            orderDetlPakout.setMatnr(mat.getMatnr());
+            orderDetlPakout.setMaktx(mat.getMaktx());
+            orderDetlPakout.setSpecs(mat.getSpecs());
+            orderDetlPakout.setModel(mat.getModel());
+            orderDetlPakout.setCreateBy(defaultUserId);
+            orderDetlPakout.setCreateTime(now);
+            orderDetlPakout.setUpdateBy(defaultUserId);
+            orderDetlPakout.setUpdateTime(now);
+            orderDetlPakout.setStatus(1);
+            orderDetlPakout.setPakinPakoutStatus(2);
+            if (!orderDetlPakoutService.insert(orderDetlPakout)) {
+                log.error("MES淇濆瓨鍑哄簱璁㈠崟鏄庣粏妗eけ璐�");
+                throw new CoolException("淇濆瓨鍑哄簱璁㈠崟鏄庣粏妗eけ璐�");
+            }
+        }
+
+        // TODO锛欳TU鍑哄簱鍔ㄤ綔
+
+        // todo 鍛煎彨agv浜х嚎鍙栫┖鏂欐灦
+        // TODO锛氳嫢AGV鍜岃緭閫佺嚎娌℃湁瀹夊叏浜や簰锛屽垯瑕佷繚璇佺珛搴撳嚭璐у畬鎴愬悗鍐嶅懠鍙獳GV銆�
+        // 绔嬪簱鐢熸垚璁㈠崟鍚庯紝鑷姩璋冨害AGV浠庝骇绾胯繍杈撶┖鍒�鏋惰嚦绔嬪簱缂撳瓨鍖恒��
+        try {
+            if (!StringUtils.isEmpty(mesOutApply.getTaskNo()) && !StringUtils.isEmpty(mesOutApply.getStationId())) {
+                TransTask transTask = new TransTask();
+                transTask.setTaskno(mesOutApply.getTaskNo());
+//                        transTask.setTaskname(mesOutApply.getTaskname());
+                transTask.setOrderNo(mesOutApply.getOrderNo());
+                transTask.setTransType("02");    //杩愬洖鍒�鏋舵椂榛樿02锛堜笅绌烘墭锛� mesOutApply.getTransType()
+                transTask.setCurProcess(mesOutApply.getProductLineId());
+                transTask.setCurStationId(mesOutApply.getStationId());
+//                        transTask.setNextProcess();
+                transTask.setNextStationId(WMS_TRANS_START_STATION_1);
+//                transTask.setItemno(mesOutApply.getItemNo());
+                transTask.setQty(0);
+                transTask.setProductLineId(mesOutApply.getProductLineId());
+//                        transTask.setItemBarcode(codes);
+//                        transTask.setTuoPanId(entry.getKey());
+                transTask.setOperateType(1);
+                transTask.setAgvFactory(1);
+                JSONObject sendAgvTask = submitTask(transTask);
+                if (!"1".equals(sendAgvTask.getString("Success"))) {
+                    log.error("鍑哄簱涓嬪彂agv杩愯緭浠诲姟澶辫触", JSONObject.toJSONString(transTask));
+                }
+
+
+//                // 鎸夐浂浠朵簩缁寸爜鏌ヨ鏈夊嚑涓墭锛屽鎵樼敓鎴愬涓换鍔★紝姣忔墭瀵瑰簲闆朵欢浜岀淮鐮�
+////                String barCode = barCodeListToStr(mesOutApply.getItemBarcode());
+//                EntityWrapper<MatItemBarcode> matItemBarcodeEntityWrapper = new EntityWrapper<>();
+//                matItemBarcodeEntityWrapper.in("item_barcode", barCode);
+//                List<MatItemBarcode> barcodes = matItemBarcodeMapper.selectList(matItemBarcodeEntityWrapper);
+//                if (barcodes != null) {
+//                    Map<String, List<MatItemBarcode>> map = barcodes.stream().collect(Collectors.groupingBy(MatItemBarcode::getZapplet));
+//                    for (Map.Entry<String, List<MatItemBarcode>> entry : map.entrySet()) {
+//                        List<MatItemBarcode> list = entry.getValue();
+//                        List<String> codes = new ArrayList<>();
+//                        for (MatItemBarcode zapllet : list) {
+//                            codes.add(zapllet.getItemBarcode());
+//                        }
+//
+//
+//                    }
+//                }
+            }
+        } catch (Exception e) {
+            log.error("涓嬪彂AGV杩愯緭浠诲姟澶辫触", e);
+        }
+        return 1;
+    }
+
+    public int transDj(String taskNo,String djNo) {
+        try {
+            EntityWrapper<Task> wapper = new EntityWrapper<>();
+            wapper.eq("task_no", taskNo).orderBy("wrk_date");
+            Task task = taskService.selectOne(wapper);
+            if (task != null) {
+                JSONObject memo = JSONObject.parseObject(task.getMemo());
+
+                TransTask transTask = new TransTask();
+                transTask.setTaskno(taskNo + "_1");
+//                        transTask.setTaskname(mesOutApply.getTaskname());
+                transTask.setOrderNo(memo.getString("OrderNo"));
+                transTask.setTransType("05");    //閫佸垁鏃堕粯璁�05锛堜笂鍒�锛�
+                transTask.setCurStationId(WMS_TRANS_START_STATION_1);
+                transTask.setNextProcess(memo.getString("ProductLineId"));
+                transTask.setNextStationId(memo.getString("CurStationId"));
+//                transTask.setItemno(mesOutApply.getItemNo());
+//                transTask.setQty(0);
+                transTask.setProductLineId(memo.getString("ProductLineId"));
+//                        transTask.setItemBarcode(codes);
+//                        transTask.setTuoPanId(entry.getKey());
+                transTask.setOperateType(1);
+                transTask.setAgvFactory(1);
+                transTask.setDjNo(djNo);
+                JSONObject sendAgvTask = submitTask(transTask);
+                if (!"1".equals(sendAgvTask.getString("Success"))) {
+                    log.error("涓婂垁涓嬪彂agv杩愯緭浠诲姟澶辫触", JSONObject.toJSONString(transTask));
+                }
+            }
+        } catch (Exception e) {
+            log.error("涓婂垁涓嬪彂AGV杩愯緭浠诲姟澶辫触", e);
+        }
+
+        return 1;
+    }
+
+    /**
+     * 鍏ュ簱鐢宠
+     *
+     * @param mesInApply
+     * @return 1 鎴愬姛锛�-1 鍏ュ簱璁㈠崟閲嶅锛�0 閮ㄥ垎澶辫触锛�
+     */
+    public int inBoundOrder(MesInApply mesInApply, int check){
+
+        // docType鏍规嵁搴撶被鍨嬬‘瀹�
+        long docType = 4;
+        long settle = 1;
+
+        // 鏍¢獙璁㈠崟鏄惁閲嶅
+        OrderPakin order = orderPakinService.selectByNo(mesInApply.getOrderNo());
+        if (order != null && !StringUtils.isEmpty(order.getOrderNo())) {
+            return -1;
+        }
+
+        // 鐢熸垚璁㈠崟
+        Date now = new Date();
+        OrderPakin orderPakin = new OrderPakin();
+        orderPakin.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
+        orderPakin.setOrderNo(mesInApply.getOrderNo());
+        orderPakin.setOrderTime(com.core.common.DateUtils.convert(now));
+        orderPakin.setDocType(docType);
+        orderPakin.setSettle(settle);
+        orderPakin.setStatus(1);
+        orderPakin.setCreateBy(defaultUserId);
+        orderPakin.setCreateTime(now);
+        orderPakin.setUpdateBy(defaultUserId);
+        orderPakin.setUpdateTime(now);
+        orderPakin.setMemo(JSONObject.toJSONString(mesInApply));  //涓哄嚭搴撳畬鎴愬弽棣堜繚瀛�
+        orderPakin.setPakinPakoutStatus(1);
+        if (!orderPakinService.insert(orderPakin)) {
+            log.error("MES淇濆瓨鍏ュ簱璁㈠崟涓绘。澶辫触");
+            throw new CoolException("淇濆瓨鍏ュ簱璁㈠崟涓绘。澶辫触");
+        }
+
+        // 鐢熸垚鏄庣粏
+        for (MesItemDetails item : mesInApply.getDetails()) {
+            Mat mat = matService.selectByMatnr(item.getItemNo());
+            OrderDetlPakin orderDetlPakin = new OrderDetlPakin();
+            orderDetlPakin.setOrderId(orderPakin.getId());
+            orderDetlPakin.setOrderNo(orderPakin.getOrderNo());
+            orderDetlPakin.setAnfme(Double.valueOf(item.getAnfme()));
+            orderDetlPakin.setQty(0.0);
+            orderDetlPakin.setMatnr(mat.getMatnr());
+            orderDetlPakin.setMaktx(mat.getMaktx());
+            orderDetlPakin.setSpecs(mat.getSpecs());
+            orderDetlPakin.setModel(mat.getModel());
+//            if (mesInApply.getDetails() != null) {
+//                orderDetlPakin.setStandby1(JSONObject.toJSONString(mesInApply.getProductInfo())); //闆朵欢璇︽儏瀛樺湪澶囬��1
+//            }
+            orderDetlPakin.setStandby2(String.valueOf(check));  //淇濆瓨榻愬鎬ф鏌ユ爣璇嗭紝1 妫�鏌ワ紱0 涓嶆鏌ワ紱
+            orderDetlPakin.setCreateBy(defaultUserId);
+            orderDetlPakin.setCreateTime(now);
+            orderDetlPakin.setUpdateBy(defaultUserId);
+            orderDetlPakin.setUpdateTime(now);
+            orderDetlPakin.setStatus(1);
+            orderDetlPakin.setPakinPakoutStatus(1);
+            if (!orderDetlPakinService.insert(orderDetlPakin)) {
+                log.error("MES淇濆瓨鍏ュ簱璁㈠崟鏄庣粏妗eけ璐�1");
+                throw new CoolException("淇濆瓨鍏ュ簱璁㈠崟鏄庣粏妗eけ璐�1");
+            }
+        }
+
+
+
+//        // TODO:鏄惁缁戝畾璐х墿鍜屾墭鐩�?
+//        if (!StringUtils.isEmpty(mesInApply.getTuoPanId())) {
+//            CombParam combParam = new CombParam();
+//            combParam.setOrderNo(mesInApply.getOrderNo());
+//            combParam.setBarcode(mesInApply.getTuoPanId());
+//            List<CombParam.CombMat> combMats = new ArrayList<>();
+//            CombParam.CombMat combMat = new CombParam.CombMat();
+//            combMat.setOrderNo(mesInApply.getOrderNo());
+//            combMat.setMatnr(mat.getMatnr());
+//            combMat.setMaktx(mat.getMaktx());
+//            combMat.setSpecs(mat.getSpecs());
+//            combMat.setAnfme(Double.valueOf(mesInApply.getQty()));
+////            combMat.setBatch("1");
+//            combMats.add(combMat);
+//            combParam.setCombMats(combMats);
+//            // 缁勬墭
+//            mobileService.comb(combParam, defaultUserId);
+//        }
+
+        return 1;
+    }
+
+    /**
+     * 鍑哄簱鐢宠锛堝彨鏂欙級
+     * 瑁呴厤搴撱�佹粦鍧楀簱
+     *
+     * @param mesCallOutApply
+     * @return
+     */
+    public int callOutBoundOrder(MesCallOutApply mesCallOutApply){
+
+        // docType鏍规嵁搴撶被鍨嬬‘瀹�
+        long docType = 7;
+        long settle = 1;
+
+        // 鏍¢獙璁㈠崟鏄惁閲嶅
+        OrderPakout order = orderPakoutService.selectByNo(mesCallOutApply.getOrderNo());
+        if (order != null && !StringUtils.isEmpty(order.getOrderNo())) {
+            return -1;
+        }
+
+        // 鐢熸垚璁㈠崟
+        Date now = new Date();
+        OrderPakout orderPakout = new OrderPakout();
+        orderPakout.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
+        orderPakout.setOrderNo(mesCallOutApply.getOrderNo());
+        orderPakout.setOrderTime(com.core.common.DateUtils.convert(now));
+        orderPakout.setDocType(docType);
+        orderPakout.setSettle(settle);
+        orderPakout.setStatus(1);
+        orderPakout.setCreateBy(defaultUserId);
+        orderPakout.setCreateTime(now);
+        orderPakout.setUpdateBy(defaultUserId);
+        orderPakout.setUpdateTime(now);
+        orderPakout.setMemo(JSONObject.toJSONString(mesCallOutApply));
+        orderPakout.setPakinPakoutStatus(2);
+        if (!orderPakoutService.insert(orderPakout)) {
+            log.error("MES淇濆瓨鍑哄簱璁㈠崟锛堝彨鏂欙級涓绘。澶辫触");
+            throw new CoolException("淇濆瓨鍑哄簱璁㈠崟锛堝彨鏂欙級涓绘。澶辫触");
+        }
+
+        // 鐢熸垚鏄庣粏
+        if (mesCallOutApply.getItemdata() != null && !mesCallOutApply.getItemdata().isEmpty()) {
+            for (MesCallOutApply.MesOutApplyItem mesOutApplyItem : mesCallOutApply.getItemdata()) {
+                Mat mat = matService.selectByMatnr(mesOutApplyItem.getItemno());
+                OrderDetlPakout orderDetlPakout = new OrderDetlPakout();
+                orderDetlPakout.setOrderId(orderPakout.getId());
+                orderDetlPakout.setOrderNo(orderPakout.getOrderNo());
+                orderDetlPakout.setAnfme(Double.valueOf(mesOutApplyItem.getQty()));
+                orderDetlPakout.setQty(0.0);
+                orderDetlPakout.setMatnr(mat.getMatnr());
+                orderDetlPakout.setMaktx(mat.getMaktx());
+                orderDetlPakout.setSpecs(mat.getSpecs());
+                orderDetlPakout.setModel(mat.getModel());
+                orderDetlPakout.setThreeCode(mesOutApplyItem.getItemBarcode());
+                orderDetlPakout.setStandby1(mesOutApplyItem.getTrayid());   //淇濆瓨閰嶇洏鍙凤紝闈炴墭鐩樺彿
+                orderDetlPakout.setCreateBy(defaultUserId);
+                orderDetlPakout.setCreateTime(now);
+                orderDetlPakout.setUpdateBy(defaultUserId);
+                orderDetlPakout.setUpdateTime(now);
+                orderDetlPakout.setStatus(1);
+                orderDetlPakout.setPakinPakoutStatus(2);
+                if (!orderDetlPakoutService.insert(orderDetlPakout)) {
+                    log.error("MES淇濆瓨鍑哄簱璁㈠崟锛堝彨鏂欙級鏄庣粏妗eけ璐�");
+                    throw new CoolException("淇濆瓨鍑哄簱璁㈠崟锛堝彨鏂欙級鏄庣粏妗eけ璐�");
+                }
+            }
+        }
+
+        return 1;
+    }
+
+    /**
+     * 鍑哄簱瀹屾垚
+     *
+     * @param orderNo
+     * @return
+     */
+    public int outFeedback(String orderNo) {
+
+        int success = 0;
+
+        OrderPakout order = orderPakoutService.selectByNo(orderNo);
+        if (order != null && order.getSettle() == 4) {   // 鏍¢獙鏄惁瀹屾垚
+            List<MesItemDetails> details = new ArrayList<>();
+            JSONObject dbMemo = JSONObject.parseObject(order.getMemo());
+            EntityWrapper<OrderDetlPakout> wrapper = new EntityWrapper<>();
+            wrapper.eq("order_no", orderNo);
+            List<OrderDetlPakout> orderDetlPakouts = orderDetlPakoutService.selectList(wrapper);
+            if (orderDetlPakouts != null && !orderDetlPakouts.isEmpty()) {
+                for (OrderDetlPakout orderDetl : orderDetlPakouts) {
+                    double real_qty = Double.parseDouble(orderDetl.getQty().toString());
+                    MesItemDetails detail = new MesItemDetails();
+                    detail.setItemNo(orderDetl.getMatnr());
+                    detail.setAnfme(real_qty);
+                    details.add(detail);
+
+//                    StringBuilder palletId = new StringBuilder();
+//                    EntityWrapper<WaitPakin> wrapper2 = new EntityWrapper<>();
+//                    wrapper2.eq("order_no", orderDetl.getOrderNo());
+//                    List<WaitPakin> waitPakins = waitPakinService.selectList(wrapper2);
+//                    for (WaitPakin waitPakin : waitPakins) {
+//                        palletId.append(waitPakin.getZpallet()).append(",");
+//                    }
+//
+//                    MesOutFeedback mesOutFeedback = new MesOutFeedback();
+//                    mesOutFeedback.setTaskno(dbMemo.getString("taskno"));
+//                    mesOutFeedback.setTaskname(dbMemo.getString("taskname"));
+//                    mesOutFeedback.setProductLineId(dbMemo.getString("ProductLineId"));
+//                    mesOutFeedback.setStationId(dbMemo.getString("StationID"));
+//                    mesOutFeedback.setItemno(orderDetl.getMatnr());
+//                    if (!StringUtils.isEmpty(palletId.toString())) {
+//                        mesOutFeedback.setTuoPanId(palletId.substring(0, palletId.length() - 1));
+//                    }
+//                    mesOutFeedback.setQty(Integer.parseInt(orderDetl.getQty().toString()));
+//                    mesOutFeedback.setItemBarcode(dbMemo.getString("ItemBarcode"));
+//                    mesOutFeedback.setOrderNo(orderNo);
+                }
+
+                MesInApply mesOutFeedback = new MesInApply();
+                mesOutFeedback.setBillType(dbMemo.getString("billType"));
+                mesOutFeedback.setOrderNo(dbMemo.getString("orderNo"));
+                mesOutFeedback.setCreateTime(dbMemo.getString("createTime"));
+                mesOutFeedback.setDetails(details);
+                String url = DJ_URL + "api/OutboundOrder/WmsOutFinish";
+                String response = RcsServiceImpl.sendPost(url, mesOutFeedback.toString());
+                if (!StringUtils.isEmpty(response) && response.contains("Success")){
+                    MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
+                    if("1".equals(mesReturn.getSuccess())) {
+                        success++;
+                    }
+                }
+
+                if (success == orderDetlPakouts.size()) {
+                    success = 1;
+                } else {
+                    success = 0;
+                }
+            }
+        }
+
+        return success;
+    }
+
+    /**
+     * 鍏ュ簱瀹屾垚
+     *
+     * @param orderNo
+     * @return
+     */
+    public int inFeedback(String orderNo) {
+
+        int success = 0;
+        int recvFeedback = 0;
+
+        OrderPakin order = orderPakinService.selectByNo(orderNo);
+        if (order != null && order.getSettle() == 4) {   // 鏍¢獙鏄惁瀹屾垚
+            EntityWrapper<OrderDetlPakin> wrapper = new EntityWrapper<>();
+            wrapper.eq("order_no", orderNo);
+            List<OrderDetlPakin> orderDetlPakins = orderDetlPakinService.selectList(wrapper);
+            if (orderDetlPakins != null && !orderDetlPakins.isEmpty()) {
+                for (OrderDetlPakin orderDetl : orderDetlPakins) {
+                    MesInApply result = JSONObject.parseObject(order.getMemo(), MesInApply.class);
+//                    result.setAnfme(Float.parseFloat(orderDetl.getAnfme().toString()));
+
+                    String url = MES_URL + "api/order/inComplete";
+                    String response = RcsServiceImpl.sendPost(url, result.toString());
+                    if (!StringUtils.isEmpty(response) && response.contains("Success")){
+                        MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
+                        if("1".equals(mesReturn.getSuccess())) {
+                            success++;
+                        }
+                    }
+
+                    if ("1".equals(orderDetl.getStandby2())) {
+                        recvFeedback++;
+                    }
+                }
+
+                // 鍏ュ簱鍥為
+                if (recvFeedback > 0) {
+                    recvFeedback(orderNo);
+                }
+
+                if (success == orderDetlPakins.size()) {
+                    success = 1;
+                } else {
+                    success = 0;
+                }
+            }
+        }
+
+        return success;
+    }
+
+    // endregion
+
+
+    // region 鎼繍浠诲姟璋冨害
+
+    // route杞彂3涓猈CS浠诲姟
+
+    /**
+     * 9.1涓嬪彂杩愯緭浠诲姟
+     * TODO:鍏朵粬搴撶殑浠诲姟鍏ㄩ儴杞埌婊戝潡搴撶粺涓�璋冨害
+     *
+     * @param transTask
+     * @return
+     */
+    @Transactional
+    public JSONObject submitTask(TransTask transTask) {
+
+        JSONObject result = new JSONObject();
+        result.put("taskno", transTask.getTaskno());
+
+        // 閲嶅鎬ф牎楠�
+        EntityWrapper<Task> wrapper = new EntityWrapper<>();
+        wrapper.eq("task_no", transTask.getTaskno());
+        List<Task> tasks = taskService.selectList(wrapper);
+        if (tasks != null && !tasks.isEmpty()) {
+            result.put("Success", "2");
+            result.put("Message", "浠诲姟閲嶅鍙戦��");
+            return result;
+        }
+
+        try {
+            int workNo = commonService.getWorkNo(WorkNoType.OTHER.type);
+            Date now = new Date();
+            Task task = new Task();
+            task.setWrkNo(workNo);
+            task.setTaskType("AGV");
+            task.setWrkSts(301L);
+            task.setIoType(3);
+            task.setIoPri(10.00);
+            task.setWrkDate(now);
+            task.setStaNo(transTask.getNextStationId());
+            task.setSourceStaNo(transTask.getCurStationId());
+            task.setModiUser(defaultUserId);
+            task.setModiTime(now);
+            task.setAppeUser(defaultUserId);
+            task.setAppeTime(now);
+            task.setTaskNo(transTask.getTaskno());
+            task.setMemo(JSONObject.toJSONString(transTask));
+
+            if (taskService.insert(task)) {
+                Mat mat = matService.selectByMatnr("emptyDj");
+                TaskDetl taskDetl = new TaskDetl();
+                taskDetl.setWrkNo(task.getWrkNo());
+                taskDetl.setIoTime(task.getIoTime());
+                taskDetl.setMatnr(mat.getMatnr());
+                taskDetl.setAnfme(0.0);
+                taskDetl.setStandby1(String.valueOf(transTask.getQty()));
+                taskDetl.setMaktx(mat.getMaktx());
+                taskDetl.setSpecs(mat.getSpecs());
+                taskDetl.setOrderNo(transTask.getOrderNo());
+                taskDetl.setModiUser(defaultUserId);
+                taskDetl.setModiTime(now);
+                taskDetl.setAppeUser(defaultUserId);
+                taskDetl.setAppeTime(now);
+                taskDetlService.insert(taskDetl);
+
+//                EntityWrapper<WaitPakin> wrapper1 = new EntityWrapper<>();
+//                wrapper1.eq("order_no", transTask.getTaskno())
+//                        .eq("matnr", mat.getMatnr())
+//                        .eq("anfme", transTask.getQty());
+//                WaitPakin waitPakin = waitPakinService.selectOne(wrapper1);
+//                if (waitPakin != null)
+//                {
+//                    TaskDetl taskDetl = new TaskDetl();
+//                    taskDetl.setWrkNo(task.getWrkNo());
+//                    taskDetl.setIoTime(task.getIoTime());
+//                    taskDetl.setMatnr(transTask.getItemno());
+//                taskDetl.setAnfme(Double.valueOf(transTask.getQty()));
+//                    taskDetl.setAnfme(0.0);
+//                    taskDetl.setStandby1(String.valueOf(transTask.getQty()));
+//                    taskDetl.setZpallet(waitPakin.getZpallet());
+//                    taskDetl.setMaktx(mat.getMaktx());
+//                    taskDetl.setSpecs(mat.getSpecs());
+//                    taskDetl.setOrderNo(transTask.getOrderNo());
+//                    taskDetl.setModiUser(defaultUserId);
+//                    taskDetl.setModiTime(now);
+//                    taskDetl.setAppeUser(defaultUserId);
+//                    taskDetl.setAppeTime(now);
+//                    taskDetlService.insert(taskDetl);
+//                }
+//                else {
+//                    result.put("Success", "2");
+//                    result.put("Message", "鎺ユ敹浠诲姟澶辫触");
+//                    // Throw
+//                }
+
+                // 涓嬪彂缁橰CS
+                RcsTaskSubmit rcsTaskSubmit = new RcsTaskSubmit();
+                rcsTaskSubmit.setRobotTaskCode(transTask.getTaskno());
+                rcsTaskSubmit.setInitPriority(10);  //榛樿10
+                List<RcsTaskTargetRoute> targetRouteList = new ArrayList<>();
+                RcsTaskTargetRoute startRoute = new RcsTaskTargetRoute();
+                startRoute.setSeq(0);
+                startRoute.setCode(transTask.getCurStationId());
+                startRoute.setOperation("COLLECT");
+                targetRouteList.add(startRoute);
+                RcsTaskTargetRoute endRoute = new RcsTaskTargetRoute();
+                endRoute.setSeq(1);
+                endRoute.setCode(transTask.getNextStationId());
+                endRoute.setOperation("DELIVERY");
+                targetRouteList.add(endRoute);
+                rcsTaskSubmit.setTargetRoute(targetRouteList);
+
+                // 杞彂缁欐捣搴锋垨鍗庢檽RCS
+                int success = rcsService.submitTask(rcsTaskSubmit, transTask.getAgvFactory());
+                if (success == 1) {
+                    result.put("Success", "1");
+                    result.put("Message", "浠诲姟鎺ユ敹鎴愬姛");
+                } else {
+                    result.put("Success", "2");
+                    result.put("Message", "浠诲姟涓嬪彂缁橰CS澶辫触");
+                }
+            } else {
+                result.put("Success", "2");
+                result.put("Message", "鎺ユ敹浠诲姟澶辫触");
+            }
+        } catch (Exception e) {
+            log.error("涓嬪彂杩愯緭浠诲姟閿欎綅 - {}", transTask, e);
+        }
+
+        return result;
+    }
+
+    /**
+     * 9.2杩斿洖浠诲姟鎵ц缁撴灉
+     *
+     * @param rcsReporterTask
+     * @return
+     */
+    public int reporterTask(RcsReporterTask rcsReporterTask) {
+
+        // 缁撴灉姹囨��
+        boolean completed = true;
+        EntityWrapper<Task> wrapper = new EntityWrapper<>();
+        wrapper.eq("task_no", rcsReporterTask.getRobotTaskCode());
+        List<Task> tasks = taskService.selectList(wrapper);
+        if (tasks != null && !tasks.isEmpty()) {
+            for (Task task : tasks) {
+                if (task.getWrkSts() != 304) {   // TODO锛氱‘璁ゅ畬鎴愶紝鍙兘瀛樺湪澶氱洏浠诲姟
+                    completed = false;
+                }
+            }
+        }
+
+        if (completed) {
+            TransTaskFeedback transTaskFeedback = new TransTaskFeedback();
+            transTaskFeedback.setTaskno(rcsReporterTask.getRobotTaskCode());
+//            transTaskFeedback.setTaskname();
+            transTaskFeedback.setResult(1);
+
+            String url = MES_URL + "api/task/reporter";
+            String response = RcsServiceImpl.sendPost(url, transTaskFeedback.toString());
+            if (!StringUtils.isEmpty(response) && response.contains("Success")){
+                MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
+                if("1".equals(mesReturn.getSuccess())) {
+                    return 1;
+                }
+            }
+        }
+
+        return 0;
+    }
+
+    /**
+     * 9.8鐢宠鍗庢檽AGV杩涘叆鐢熶骇绾�
+     *
+     * @param apply
+     * @return
+     */
+    public String applyInLine(TransParent apply) {
+
+        String url = MES_URL + "api/apply/inLine";
+        String response = RcsServiceImpl.sendPost(url, apply.toString());
+        if (!StringUtils.isEmpty(response) && response.contains("Success")){
+            JSONObject jsonObject = JSONObject.parseObject(response);
+            if("1".equals(jsonObject.getString("Success"))) {
+                return jsonObject.getJSONObject("Data").getString("status");
+            }
+        }
+
+        return "N";
+    }
+
+    /**
+     * 鍏ョ珯璇锋眰锛氳浆鍙慉GV->鍏ョ珯璇锋眰->缁橫ES
+     *
+     * @param apply
+     * @return
+     */
+    public int applyInStation(TransParent apply) {
+
+        String url = MES_URL + (apply.getProductLineId().equals("LL") ? "AGVTransportPalletNotice" : "Aprs/AGVTransportPalletNotice");
+        String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(apply));
+        if (!StringUtils.isEmpty(response) && response.contains("Success")){
+            MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
+            if("1".equals(mesReturn.getSuccess())) {
+                return 1;
+            }
+        }
+
+        return 0;
+    }
+
+    /**
+     * 鍏ョ珯鍏佽锛氳浆鍙慚ES->鍏佽鍏ョ珯->缁橝GV
+     *
+     * @param allow
+     * @return
+     */
+    public MesReturn allowInStation(TransInOutStationAllow allow) {
+
+        MesReturn mesReturn = new MesReturn();
+        mesReturn.setSuccess("1");
+
+        if ("Y".equals(allow.getStatus())) {
+            RcsTaskContinue rcsTaskContinue = new RcsTaskContinue();
+            rcsTaskContinue.setRobotTaskCode(allow.getTaskno());
+            rcsTaskContinue.setTriggerType("TASK");
+            rcsTaskContinue.setTriggerCode(allow.getTaskno());
+//            rcsTaskContinue.setTriggerType("ROBOT");
+//            rcsTaskContinue.setTriggerCode(allow.getAgvCode());
+
+            int success = rcsService.continueTask(rcsTaskContinue, checkRcsFactory(allow.getAgvCode()));
+            mesReturn.setSuccess(success == 1 ? "1" : "2");
+            mesReturn.setMessage(success == 1 ? "" : "杞彂缁橰CS澶辫触");
+        }
+
+        return mesReturn;
+    }
+
+    /**
+     * 鍒扮珯瀹屾垚锛氳浆鍙慉GV->鍒扮珯瀹屾垚->缁橫ES
+     *
+     * @param arrivalStation
+     * @return
+     */
+    public int arriveOnStation(TransArrivalStation arrivalStation,String path) {
+
+        String url = MES_URL + path;
+        String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(arrivalStation));
+        if (!StringUtils.isEmpty(response) && response.contains("Success")){
+            MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
+            if("1".equals(mesReturn.getSuccess())) {
+                return 1;
+            }
+        }
+
+        return 0;
+    }
+
+    /**
+     * 绂荤珯璇锋眰锛氳浆鍙慉GV->绂荤珯璇锋眰->缁橫ES
+     *
+     * @param apply
+     * @return
+     */
+    public int applyOutStation(TransParent apply) {
+
+        String url = MES_URL + "api/apply/outStation";
+        String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(apply));
+        if (!StringUtils.isEmpty(response) && response.contains("Success")){
+            MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
+            if("1".equals(mesReturn.getSuccess())) {
+                return 1;
+            }
+        }
+
+        return 0;
+    }
+
+    /**
+     * 绂荤珯鍏佽锛氳浆鍙慚ES->鍏佽绂荤珯->缁橝GV
+     *
+     * @param allow
+     * @return
+     */
+    public MesReturn allowOutStation(TransInOutStationAllow allow) {
+
+        MesReturn mesReturn = new MesReturn();
+        mesReturn.setSuccess("1");
+
+        if ("Y".equals(allow.getStatus())) {
+            RcsTaskContinue rcsTaskContinue = new RcsTaskContinue();
+            rcsTaskContinue.setRobotTaskCode(allow.getTaskno());
+            rcsTaskContinue.setTriggerType("TASK");
+            rcsTaskContinue.setTriggerCode(allow.getTaskno());
+
+            int success = rcsService.continueTask(rcsTaskContinue, checkRcsFactory(allow.getAgvCode()));
+            mesReturn.setSuccess(success == 1 ? "1" : "2");
+            mesReturn.setMessage(success == 1 ? "" : "杞彂缁橰CS澶辫触");
+        }
+
+        return mesReturn;
+    }
+
+    /**
+     * 绂荤珯瀹屾垚锛氳浆鍙慉GV->绂荤珯瀹屾垚->缁橫ES
+     *
+     * @param apply
+     * @return
+     */
+    public int outStation(TransParent apply) {
+
+        String url = MES_URL + (apply.getProductLineId().equals("LL") ? "AGVDepartureCompleted" : "Aprs/AGVDepartureCompleted");
+        String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(apply));
+        if (!StringUtils.isEmpty(response) && response.contains("Success")){
+            MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
+            if("1".equals(mesReturn.getSuccess())) {
+                return 1;
+            }
+        }
+
+        return 0;
+    }
+
+    @Override
+    public R tkt(String taskNo) {
+        boolean flag = false;
+        try {
+            EntityWrapper<Task> wapper = new EntityWrapper<>();
+            wapper.eq("task_no", taskNo).orderBy("wrk_date",false);
+            Task task = taskService.selectOne(wapper);
+            // 涓嬪彂缁橰CS
+            RcsTaskSubmit rcsTaskSubmit = new RcsTaskSubmit();
+            rcsTaskSubmit.setRobotTaskCode(taskNo + "-1");
+            rcsTaskSubmit.setInitPriority(10);  //榛樿10
+            List<RcsTaskTargetRoute> targetRouteList = new ArrayList<>();
+            RcsTaskTargetRoute startRoute = new RcsTaskTargetRoute();
+            startRoute.setSeq(0);
+            startRoute.setCode(task.getStaNo());
+            startRoute.setOperation("COLLECT");
+            targetRouteList.add(startRoute);
+            RcsTaskTargetRoute endRoute = new RcsTaskTargetRoute();
+            endRoute.setSeq(1);
+            endRoute.setCode(task.getSourceStaNo());
+            endRoute.setOperation("DELIVERY");
+            targetRouteList.add(endRoute);
+            rcsTaskSubmit.setTargetRoute(targetRouteList);
+            // 鏇存柊璧风偣鍜岀粓鐐�
+            String memo = task.getMemo();
+            TransTask transTask = JSONObject.parseObject(memo, TransTask.class);
+            transTask.setCurStationId(task.getSourceStaNo());
+            transTask.setNextStationId(task.getStaNo());
+            transTask.setTransType("01"); // 涓嬬┖鎵�
+            // 鏇存柊agv浠诲姟璧风偣鍜岀粓鐐�
+            task.setTaskNo(taskNo + "-1");
+            task.setSourceStaNo(transTask.getCurStationId());
+            task.setStaNo(transTask.getNextStationId());
+            task.setMemo(JSONObject.toJSONString(transTask));
+            taskService.updateById(task);
+            // 杞彂缁欐捣搴锋垨鍗庢檽RCS
+            int success = rcsService.submitTask(rcsTaskSubmit, transTask.getAgvFactory());
+
+            if (success == 1) {
+                flag = true;
+            }
+        } catch (Exception e) {
+            log.error("绌烘墭鍥炰骇绾垮彂AGV杩愯緭浠诲姟澶辫触", e);
+        }
+
+        return flag ?R.ok() : R.parse("绌烘墭鍥炰骇绾垮懠鍙玜gv澶辫触");
+    }
+
+    // endregion
+
+    /**
+     * 鏌ヨRcs鍦板潃
+     *
+     * @param agvNo
+     * @return 1 娴峰悍锛�2 鍗庢檽
+     */
+    private int checkRcsFactory(String agvNo) {
+
+        AgvInfo agvInfo = agvInfoMapper.selectById(agvNo);
+        return agvInfo.getAgvFactory();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java
new file mode 100644
index 0000000..baffd2c
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java
@@ -0,0 +1,614 @@
+package com.zy.asrs.service.impl;
+
+import com.alibaba.excel.util.StringUtils;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.zy.asrs.entity.*;
+import com.zy.asrs.entity.mes.TransArrivalStation;
+import com.zy.asrs.entity.mes.TransParent;
+import com.zy.asrs.entity.rcs.*;
+import com.zy.asrs.enums.RcsRetMethodEnum;
+import com.zy.asrs.mapper.BlockStationMapper;
+import com.zy.asrs.mapper.BlockTaskMapper;
+import com.zy.asrs.service.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.io.*;
+import java.net.ConnectException;
+import java.net.SocketTimeoutException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.nio.charset.StandardCharsets;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+@Slf4j
+@Service
+public class RcsServiceImpl implements RcsService {
+
+    // 娴峰悍RCS鍦板潃
+    @Value("${hik.url}")
+    private String HIK_URL;
+    // 鍗庢檽RCS鍦板潃
+    @Value("${hx.url}")
+    private String HX_URL;
+    @Value("${mes.defaultUserId}")
+    public long defaultUserId;
+
+
+    @Resource
+    private MesService mesService;
+    @Resource
+    private TaskService taskService;
+    @Resource
+    private BlockStationMapper blockStationMapper;
+    @Resource
+    private BlockTaskMapper blockTaskMapper;
+    @Resource
+    private TaskDetlServiceImpl taskDetlService;
+    @Resource
+    private WrkMastService wrkMastService;
+
+
+    // region 灏侀攣鍖洪�昏緫锛岀洰鍓嶅彧鏈変竴涓ぇ灏侀攣鍖猴紝浠诲姟鍏ㄩ儴杞埌婊戝潡搴撳鐞嗭紝鎴栫洿鎺ュ啓鍒版粦鍧楀簱
+
+    /**
+     * 鐢宠灏侀攣鍖鸿姹�
+     *
+     * @param apply
+     * @return
+     */
+    private int applyBlock(RcsReporterEqpt apply) {
+
+        BlockTask blockTask = new BlockTask();
+        blockTask.setTaskCode(apply.getTaskCode());
+        blockTask.setApplyTime(new Date());
+        blockTask.setBlockNo(apply.getEqptCode());
+        blockTask.setBlockName(apply.getEqptName());
+        blockTask.setMethod(apply.getMethod());
+        blockTask.setCompleted(0);
+
+        return blockTaskMapper.insert(blockTask);
+    }
+
+    /**
+     * 绠$悊灏侀攣鍖鸿繘鍏�
+     * TODO:澧炲姞閿侀槻鍐茬獊锛屽彲鑳戒负鍒嗗竷寮忛攣锛屽畾鏈�5绉掑惊鐜皟鐢�
+     *
+     */
+    public void managerBlock() {
+
+       try {
+           BlockTask firstTask = blockTaskMapper.findTop();
+           if (firstTask == null) {
+               return;
+           }
+           EntityWrapper<BlockStation> wrapper = new EntityWrapper<>();
+           wrapper.eq("block_no", firstTask.getBlockNo());
+           List<BlockStation> stations = blockStationMapper.selectList(wrapper);
+           if (!stations.isEmpty()) {
+               boolean locked = false;
+               for (BlockStation station : stations) {
+                   // 鍙厑璁�1涓巶瀹惰澶囪繘鍏ュ皝閿佸尯锛宻tatus鐘舵�侊細0 绌洪棽锛�1 娴峰悍灏侀攣涓紱2 鍗庢檽灏侀攣涓紱-1 寮傚父锛�
+                   if (station.getStatus() > 0 && !station.getStatus().equals(firstTask.getAgvFactory())) {
+                       locked = true;
+                       break;
+                   }
+               }
+
+               if (!locked) {
+                   // 灏侀攣鐘舵��
+                   int success = blockStationMapper.addByBlockNo(firstTask.getBlockNo(), firstTask.getAgvFactory());
+                   if (success > 0) {
+                       // 閫氱煡RCS
+                       RcsEqptNotify notify = new RcsEqptNotify();
+                       notify.setEqptCode(firstTask.getBlockNo());
+                       notify.setTaskCode(firstTask.getTaskCode());
+                       notify.setActionStatus("1");
+                       notifyEqpt(notify, firstTask.getAgvFactory());
+                   }
+               }
+           }
+       } catch (Exception e) {
+           log.error("绠$悊灏侀攣鍖哄紓甯�", e);
+       }
+    }
+
+    /**
+     * 绂诲紑閲婃斁灏侀攣鍖鸿姹�
+     * TODO:澧炲姞閿侀槻鍐茬獊锛屽彲鑳戒负鍒嗗竷寮忛攣
+     *
+     * @param apply
+     * @return
+     */
+    private int releaseBlock(RcsReporterEqpt apply) {
+
+        BlockTask task = blockTaskMapper.findByTaskCode(apply.getTaskCode());
+
+        EntityWrapper<BlockStation> wrapper = new EntityWrapper<>();
+        wrapper.eq("block_no", task.getBlockNo());
+        List<BlockStation> stations = blockStationMapper.selectList(wrapper);
+        if (!stations.isEmpty()) {
+            // 鍏堝畬鎴愪换鍔�
+            task.setCompleted(1);
+            task.setCompletedTime(new Date());
+            int updateTask = blockTaskMapper.updateById(task);
+            // 鍐嶆洿鏂板皝閿佸尯鏁伴噺
+            for (BlockStation station : stations) {
+                if (station.getAgvNum() - 1 == 0) {
+                    station.setStatus(0);
+                }
+                station.setAgvNum(station.getAgvNum() - 1);
+                int updateBlock = blockStationMapper.updateById(station);
+            }
+        }
+
+        return 1;
+    }
+
+    // endregion
+
+
+    // region 娴峰悍RCS锛孉GV
+
+    /**
+     * 2.1.2浠诲姟涓嬪彂鎺ュ彛
+     * 鍘傚锛氭捣閲忋�佸崕鏅�
+     *
+     * @param rcsTaskSubmit
+     * @param rcsFactory 1 娴峰悍锛�2 鍗庢檽锛�
+     * @return
+     */
+    public int submitTask(RcsTaskSubmit rcsTaskSubmit, int rcsFactory){
+        return 1;
+
+//        String url = rcsFactory == 2 ? HX_URL :HIK_URL + "api/robot/controller/task/submit";
+//        String response = sendPost(url, rcsTaskSubmit.toString());
+//        if (!StringUtils.isEmpty(response) && response.contains("code")){
+//            RcsReturn rcsReturn = JSONObject.parseObject(response, RcsReturn.class);
+//            if("SUCCESS".equals(rcsReturn.getCode())) {
+//                JSONObject data = rcsReturn.getData();
+//                String robotTaskCode = data.getString("robotTaskCode");
+//                if (robotTaskCode.equals(rcsTaskSubmit.getRobotTaskCode())){
+//                    return 1;
+//                }
+//            }
+//        }
+//
+//        return 0;
+    }
+
+    /**
+     * 2.1.3浠诲姟缁х画鎵ц鎺ュ彛
+     *
+     * @param rcsTaskContinue
+     * @param rcsFactory
+     * @return
+     */
+    public int continueTask(RcsTaskContinue rcsTaskContinue, int rcsFactory){
+
+        String url = rcsFactory == 2 ? HX_URL :HIK_URL + "api/robot/controller/task/extend/continue";
+        String response = sendPost(url, rcsTaskContinue.toString());
+        if (!StringUtils.isEmpty(response) && response.contains("code")){
+            RcsReturn rcsReturn = JSONObject.parseObject(response, RcsReturn.class);
+            if("SUCCESS".equals(rcsReturn.getCode())) {
+                JSONObject data = rcsReturn.getData();
+                String robotTaskCode = data.getString("robotTaskCode");
+                if (robotTaskCode.equals(rcsTaskContinue.getRobotTaskCode())) {
+                    return 1;
+                }
+            }
+        }
+
+        return 0;
+    }
+
+    /**
+     * 2.1.4浠诲姟鍙栨秷鎺ュ彛
+     *
+     * @param rcsTaskCancel
+     * @param rcsFactory
+     * @return
+     */
+    public int cancelTask(RcsTaskCancel rcsTaskCancel, int rcsFactory){
+
+        String url = rcsFactory == 2 ? HX_URL :HIK_URL  + "api/robot/controller/task/cancel";
+        String response = sendPost(url, rcsTaskCancel.toString());
+        if (!StringUtils.isEmpty(response) && response.contains("code")){
+            RcsReturn rcsReturn = JSONObject.parseObject(response, RcsReturn.class);
+            if("SUCCESS".equals(rcsReturn.getCode())) {
+                JSONObject data = rcsReturn.getData();
+                String robotTaskCode = data.getString("robotTaskCode");
+                if (robotTaskCode.equals(rcsTaskCancel.getRobotTaskCode())) {
+                    return 1;
+                }
+            }
+        }
+
+        return 0;
+    }
+
+    /**
+     * 2.1.15澶栬鎵ц閫氱煡鎺ュ彛锛岄�氱煡杩涘叆灏侀攣鍖�
+     *
+     * @param rcsEqptNotify
+     * @param rcsFactory
+     * @return
+     */
+    private int notifyEqpt(RcsEqptNotify rcsEqptNotify, int rcsFactory){
+
+        String url = rcsFactory == 2 ? HX_URL :HIK_URL + "api/wcs/robot/eqpt/notify";
+        String response = sendPost(url, rcsEqptNotify.toString());
+        if (!StringUtils.isEmpty(response) && response.contains("code")){
+            RcsReturn rcsReturn = JSONObject.parseObject(response, RcsReturn.class);
+            if("SUCCESS".equals(rcsReturn.getCode())) {
+                JSONObject data = rcsReturn.getData();
+                String applyCode = data.getString("taskCode");  //鐢宠璇锋眰缂栧彿锛岄潪浠诲姟缂栧彿
+                if (applyCode.equals(rcsEqptNotify.getTaskCode())) {
+                    return 1;
+                }
+            }
+        }
+
+        return 0;
+    }
+
+    /**
+     * 2.2.1浠诲姟鎵ц鍥為
+     * 鍘傚锛氭捣閲忋�佸崕鏅�
+     *
+     * @param rcsReporterTask
+     * @return
+     */
+    public RcsReturn reporterTask(RcsReporterTask rcsReporterTask) {
+
+        RcsReturn rcsReturn = new RcsReturn();
+
+        String robotTaskCode = rcsReporterTask.getRobotTaskCode();
+        String singleRobotCode = rcsReporterTask.getSingleRobotCode();
+        JSONObject values = rcsReporterTask.getExtra().getJSONObject("values");
+        // start : 浠诲姟寮�濮嬶紱outbin : 璧板嚭鍌ㄤ綅锛沞nd : 浠诲姟瀹屾垚
+        String method = values.getString("method");
+        String carrierType = values.getString("carrierType");
+
+        try {
+            if ("Q3".equals(carrierType) || "Q8".equals(carrierType)) {    //AGV
+                EntityWrapper<Task> wrapper = new EntityWrapper<>();
+                wrapper.eq("task_no", robotTaskCode);
+                Task task = taskService.selectOne(wrapper);
+                if (task == null || !task.getTaskNo().equals(robotTaskCode)) {
+                    rcsReturn.setCode("Err_RobotCodeNotMatch");
+                    rcsReturn.setMessage("");
+                    JSONObject data = new JSONObject();
+                    data.put("robotTaskCode", robotTaskCode);
+                    rcsReturn.setData(data);
+                    return rcsReturn;
+                }
+                JSONObject memo = JSONObject.parseObject(task.getMemo());
+
+                switch (Objects.requireNonNull(RcsRetMethodEnum.getEnum(method))) {
+                    case TASK_START: {
+                        task.setWrkSts(302L);   // 301 浠诲姟涓嬪彂銆�302 浠诲姟鎵ц銆�303 浠诲姟涓柇銆�304 浠诲姟缁撴潫
+                        task.setModiTime(new Date());
+                        task.setModiUser(defaultUserId);
+                        taskService.updateById(task);
+                    } break;
+//                    case TASK_OUT_BIN: {} break;
+                    case TASK_END: {
+                        // 鏇存柊浠诲姟鐘舵�佺瓑鍐呴儴閫昏緫
+                        task.setWrkSts(304L);   // 301 浠诲姟涓嬪彂銆�302 浠诲姟鎵ц銆�303 浠诲姟涓柇銆�304 浠诲姟缁撴潫
+                        task.setModiTime(new Date());
+                        task.setModiUser(defaultUserId);
+                        taskService.updateById(task);
+                        // 浠诲姟瀹屾垚
+                        mesService.reporterTask(rcsReporterTask);
+
+//                    EntityWrapper<TaskDetl> wapper2 = new EntityWrapper<>();
+//                    wapper2.eq("wrk_no", task.getWrkNo())
+//                            .eq("matnr", memo.getString("ItemNo"))
+//                            .eq("order_no", memo.getString("OrderNo"));
+//                    TaskDetl taskDetl = taskDetlService.selectOne(wapper2);
+//                    taskDetl.setAnfme()
+//                    taskDetlService.updateById();
+
+//                    // 301 浠诲姟涓嬪彂銆�302 浠诲姟鎵ц銆�303 浠诲姟涓柇銆�304 浠诲姟缁撴潫
+//                    taskService.completeWrkMast();
+//                    taskDetlService.
+
+                    } break;
+                    case APPLY_IN_STATION:
+                    case APPLY_OFF_STATION:
+                    case ARRIVE_OFF_STATION: {
+                        TransParent apply = new TransParent();
+                        apply.setTaskno(robotTaskCode);
+                        apply.setTaskname(memo.getString("taskName"));
+                        apply.setAgvCode(singleRobotCode);
+                        apply.setTransType(memo.getString("TransType"));
+                        apply.setProductLineId(memo.getString("ProductLineId"));
+//                        apply.setStationId(task.getStaNo());
+                        String transType = memo.getString("TransType");
+                        if(transType.equals("02") || transType.equals("04") || transType.equals("06")) {
+                            apply.setStationId(task.getSourceStaNo());
+                        } else {
+                            apply.setStationId(task.getStaNo());
+                        }
+                        if (RcsRetMethodEnum.APPLY_IN_STATION.getCode().equals(method)) {
+                            mesService.applyInStation(apply);
+                        } else if (RcsRetMethodEnum.APPLY_OFF_STATION.getCode().equals(method)) {
+                            mesService.applyOutStation(apply);
+                        } else if (RcsRetMethodEnum.ARRIVE_OFF_STATION.getCode().equals(method)) {
+                            mesService.outStation(apply);
+                        }
+                    } break;
+                    case ARRIVE_ON_STATION: {
+                        EntityWrapper<TaskDetl> wapper2 = new EntityWrapper<>();
+                        wapper2.eq("wrk_no", task.getWrkNo())
+//                                .eq("matnr", memo.getString("Itemno"))
+                                .eq("order_no", memo.getString("OrderNo"));
+                        TaskDetl taskDetl = taskDetlService.selectOne(wapper2);
+                        TransArrivalStation arrivalStation = new TransArrivalStation();
+                        arrivalStation.setTaskno(robotTaskCode);
+                        arrivalStation.setTaskname(memo.getString("taskName"));
+                        arrivalStation.setTuoPanId(taskDetl == null || taskDetl.getZpallet() == null ? "" : taskDetl.getZpallet());
+                        arrivalStation.setDaotype(memo.getString("TransType"));
+                        arrivalStation.setProductLineId(memo.getString("ProductLineId"));
+//                        arrivalStation.setStationId(task.getStaNo());
+                        arrivalStation.setOrderNo(memo.getString("OrderNo"));
+                        String transType = memo.getString("TransType");
+                        String dJNo = memo.getString("djNo");
+                        arrivalStation.setDJNo(dJNo);
+                        if(transType.equals("02") || transType.equals("04") || transType.equals("06")) {
+                            arrivalStation.setStationID(task.getSourceStaNo());
+                        } else {
+                            arrivalStation.setStationID(task.getStaNo());
+                        }
+                        String path;
+                        if(transType.equals("05") || transType.equals("06")) {
+                            path = "ToolArrivalNotice";
+                        } else {
+                            path = "AGVArrivalCompleted";
+                        }
+                        if(transType.equals("01") && arrivalStation.getStationID().contains("XL") || arrivalStation.getStationID().contains("TOOL")) {
+                            path = "ToolArrivalNotice";
+                        }
+                        mesService.arriveOnStation(arrivalStation,path);
+                    } break;
+                    default: {} break;
+                }
+            } else if ("CTU".equals(carrierType)) { //CTU
+                EntityWrapper<WrkMast> wrapper = new EntityWrapper<>();
+                wrapper.eq("task_no", robotTaskCode);
+                WrkMast task = wrkMastService.selectOne(wrapper);
+                if (task == null || !task.getTaskNo().equals(robotTaskCode)) {
+                    rcsReturn.setCode("Err_RobotCodeNotMatch");
+                    rcsReturn.setMessage("");
+                    JSONObject data = new JSONObject();
+                    data.put("robotTaskCode", robotTaskCode);
+                    rcsReturn.setData(data);
+                    return rcsReturn;
+                }
+//                JSONObject memo = JSONObject.parseObject(task.getMemo());
+
+                switch (Objects.requireNonNull(RcsRetMethodEnum.getEnum(method))) {
+                    case TASK_START: {
+//                        task.setWrkSts(302L);   // 301 浠诲姟涓嬪彂銆�302 浠诲姟鎵ц銆�303 浠诲姟涓柇銆�304 浠诲姟缁撴潫
+//                        task.setModiTime(new Date());
+//                        task.setModiUser(defaultUserId);
+//                        taskService.updateById(task);
+                    } break;
+//                    case TASK_OUT_BIN: {} break;
+                    case TASK_END: {
+                        // 鏇存柊浠诲姟鐘舵�佺瓑鍐呴儴閫昏緫
+                        long wrkSts = task.getWrkSts(); // 1.鍏ュ簱锛�101.鍑哄簱锛�
+                        if (task.getIoType() == 1) {
+                            wrkSts = 4L;
+                        } else if (task.getIoType() == 101) {
+                            wrkSts = 14L;
+                        }
+
+                        task.setWrkSts(wrkSts); // 4.鍏ュ簱瀹屾垚锛�14.宸插嚭搴撴湭纭锛�
+                        task.setModiTime(new Date());
+                        task.setModiUser(defaultUserId);
+                        wrkMastService.updateById(task);
+
+                        // TODO锛氫换鍔″畬鎴愯Е鍙戝嚭鍏ュ簱鍙樻洿鎿嶄綔
+
+
+//                        // 鍏ュ簱瀹屾垚
+//                        mesService.inFeedback(memo.getString("OrderNo"));
+//                        // 鍑哄簱瀹屾垚
+//                        mesService.outFeedback(memo.getString("OrderNo"));
+                    } break;
+                    default: {} break;
+                }
+            }
+
+            // 杩斿洖RCS
+            rcsReturn.setCode("SUCCESS");
+            rcsReturn.setMessage("");
+            JSONObject data = new JSONObject();
+            data.put("robotTaskCode", robotTaskCode);
+            rcsReturn.setData(data);
+        } catch (Exception e) {
+            log.error("RCS鍙嶉浠诲姟杩涘害澶勭悊寮傚父 - {}", rcsReporterTask, e);
+            rcsReturn.setCode("Err_Internal");
+            rcsReturn.setMessage("鍐呴儴澶勭悊寮傚父");
+            JSONObject data = new JSONObject();
+            data.put("robotTaskCode", robotTaskCode);
+            rcsReturn.setData(data);
+        }
+
+        return rcsReturn;
+    }
+
+    /**
+     * 2.2.4璇锋眰澶栬鎺ュ彛锛堣姹傚皝閿佸尯锛�
+     * 鍘傚锛氭捣閲忋�佸崕鏅�
+     *
+     * @param rcsReporterEqpt
+     * @return
+     */
+    public RcsReturn reporterEqpt(RcsReporterEqpt rcsReporterEqpt){
+
+        int success = 0;
+        if ("APPLY_LOCK".equals(rcsReporterEqpt.getMethod())) { //鐢宠
+            success = applyBlock(rcsReporterEqpt);
+        } else if ("RELEASE_EQPT".equals(rcsReporterEqpt.getMethod())) { //閲婃斁
+            success = releaseBlock(rcsReporterEqpt);
+        }
+
+        // 杩斿洖RCS
+        RcsReturn rcsReturn = new RcsReturn();
+        rcsReturn.setCode(success > 0 ? "SUCCESS" : "Err_Internal");
+        rcsReturn.setMessage(success > 0 ? "" : "鍐呴儴閿欒");
+        JSONObject data = new JSONObject();
+        data.put("extra", null);
+        rcsReturn.setData(data);
+
+        return rcsReturn;
+    }
+
+    // endregion
+
+
+    // region 娴峰悍CTU 鍒�鍏峰簱
+
+    // TODO: CTU涓婂眰缁勫弬寮曠敤锛�
+
+    // 2.1.2浠诲姟涓嬪彂鎺ュ彛
+
+    // 2.1.3浠诲姟缁х画鎵ц鎺ュ彛
+
+    // 2.1.4浠诲姟鍙栨秷鎺ュ彛
+
+    // 2.2.1浠诲姟鎵ц鍥為
+
+////    @Transactional(rollbackFor = Exception.class)
+//    public void receiveTaskStatus(RcsReporterTask callbackParam, String method, String stockType, Long hostId) {
+//
+//        JSONObject values = callbackParam.getExtra().getJSONObject("values");
+//        EntityWrapper<Task> wapper = new EntityWrapper<>();
+//        wapper.eq("task_no", callbackParam.getRobotTaskCode());
+//        Task task = taskService.selectOne(wapper);
+//        if (task == null && !StringUtils.isEmpty(task.getWrkNo())) {
+//            if (1 == task.getIoType()) {   // 鍏ュ簱
+//                // 鏇存柊搴撳瓨
+//
+//                // 鏇存柊浠诲姟鐘舵��
+//            } else if (101 == task.getIoType()) {    // 鍑哄簱
+//                // 鏇存柊搴撳瓨
+//
+//                // 鏇存柊浠诲姟鐘舵��
+//
+//                // 璐х墿鍜屾墭鐩樿В缁�
+//            }
+//        }
+//    }
+
+    // endregion
+
+
+    // region 鍗庢檽RCS
+
+    /**
+     * 9.7鐢宠杩涘叆鐢熶骇绾�
+     *
+     * @param apply
+     * @return
+     */
+    public JSONObject hxApplyInLine(TransParent apply) {
+
+        String status = mesService.applyInLine(apply);
+        JSONObject result = new JSONObject();
+        result.put("Success", 1);
+        result.put("Message", status);
+        JSONObject data = new JSONObject();
+        data.put("status", status);
+        result.put("Data", data);
+
+        return result;
+    }
+
+    // endregion
+
+    // region httpUtil
+
+    /**
+     * 鍚戞寚瀹� URL 鍙戦�丳OST鏂规硶鐨勮姹�
+     *
+     * @param url 鍙戦�佽姹傜殑 URL
+     * @param param 璇锋眰鍙傛暟锛岃姹傚弬鏁板簲璇ユ槸 name1=value1&name2=value2 鐨勫舰寮忋��
+     * @return 鎵�浠h〃杩滅▼璧勬簮鐨勫搷搴旂粨鏋�
+     */
+    public static String sendPost(String url, String param) {
+        PrintWriter out = null;
+        BufferedReader in = null;
+        StringBuilder result = new StringBuilder();
+        try
+        {
+            log.info("sendPost - {} - {}", url, param);
+            URL realUrl = new URL(url);
+            URLConnection conn = realUrl.openConnection();
+            conn.setRequestProperty("accept", "*/*");
+            conn.setRequestProperty("connection", "Keep-Alive");
+            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+            conn.setRequestProperty("Accept-Charset", "utf-8");
+            conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
+            conn.setConnectTimeout(5000);
+            conn.setReadTimeout(5000);
+            conn.setDoOutput(true);
+            conn.setDoInput(true);
+            out = new PrintWriter(conn.getOutputStream());
+            out.print(param);
+            out.flush();
+            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
+            String line;
+            while ((line = in.readLine()) != null)
+            {
+                result.append(line);
+            }
+            log.info("recv - {}", result);
+        }
+        catch (ConnectException e)
+        {
+            log.error("璋冪敤HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e);
+        }
+        catch (SocketTimeoutException e)
+        {
+            log.error("璋冪敤HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e);
+        }
+        catch (IOException e)
+        {
+            log.error("璋冪敤HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e);
+        }
+        catch (Exception e)
+        {
+            log.error("璋冪敤HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e);
+        }
+        finally
+        {
+            try
+            {
+                if (out != null)
+                {
+                    out.close();
+                }
+                if (in != null)
+                {
+                    in.close();
+                }
+            }
+            catch (IOException ex)
+            {
+                log.error("璋冪敤in.close Exception, url=" + url + ",param=" + param, ex);
+            }
+        }
+        return result.toString();
+    }
+
+    // endregion
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
index 86a7212..a36baea 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -370,6 +370,12 @@
                 wrkDetl.setAppeUser(userId);
                 wrkDetl.setModiTime(now);
                 wrkDetl.setModiUser(userId);
+                wrkDetl.setMatnr(detlDto.getLocDetl().getMatnr());
+                wrkDetl.setMaktx(detlDto.getLocDetl().getMaktx());
+                wrkDetl.setUnit(detlDto.getLocDetl().getUnit());
+                wrkDetl.setSpecs(detlDto.getLocDetl().getSpecs());
+                wrkDetl.setUnit(detlDto.getLocDetl().getUnit());
+                wrkDetl.setModel(detlDto.getLocDetl().getModel());
                 if (!wrkDetlService.insert(wrkDetl)) {
                     throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
                 }
@@ -457,6 +463,11 @@
             wrkDetl.setAppeUser(userId);
             wrkDetl.setModiTime(now);
             wrkDetl.setModiUser(userId);
+            wrkDetl.setMatnr(orderDetl.getMatnr());
+            wrkDetl.setMaktx(orderDetl.getMaktx());
+            wrkDetl.setSpecs(orderDetl.getSpecs());
+            wrkDetl.setModel(orderDetl.getModel());
+            wrkDetl.setUnit(orderDetl.getUnit());
             if (!wrkDetlService.insert(wrkDetl)) {
                 throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
             }
diff --git a/src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java
index 3eaaa7a..9cd517b 100644
--- a/src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java
@@ -45,6 +45,11 @@
             wrkDetl.setAppeTime(now);
             wrkDetl.setModiUser(userId);
             wrkDetl.setModiTime(now);
+            wrkDetl.setMatnr(mat.getMatnr());
+            wrkDetl.setMaktx(mat.getMaktx());
+            wrkDetl.setSpecs(mat.getSpecs());
+            wrkDetl.setModel(mat.getModel());
+            wrkDetl.setUnit(mat.getUnit());
             if (!this.insert(wrkDetl)) {
                 throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触");
             }
diff --git a/src/main/java/com/zy/asrs/task/BlockScheduler.java b/src/main/java/com/zy/asrs/task/BlockScheduler.java
new file mode 100644
index 0000000..3c2ca15
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/BlockScheduler.java
@@ -0,0 +1,26 @@
+package com.zy.asrs.task;
+
+import com.zy.asrs.service.RcsService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+@Slf4j
+@Component
+public class BlockScheduler {
+
+    @Resource
+    private RcsService rcsService;
+
+    /**
+     * 绠$悊灏侀攣鍖鸿姹�
+     *
+     */
+    @Scheduled(cron = "0/3 * * * * ? ")
+    private void execute(){
+//        rcsService.managerBlock();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/task/OrderSyncScheduler.java b/src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
index ef69df3..82bba23 100644
--- a/src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
+++ b/src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
@@ -2,8 +2,9 @@
 
 import com.core.common.Cools;
 import com.zy.asrs.entity.Order;
-import com.zy.asrs.service.ApiLogService;
-import com.zy.asrs.service.OrderService;
+import com.zy.asrs.entity.OrderPakin;
+import com.zy.asrs.entity.OrderPakout;
+import com.zy.asrs.service.*;
 import com.zy.asrs.task.core.ReturnT;
 import com.zy.asrs.task.handler.OrderSyncHandler;
 import com.zy.asrs.utils.OrderInAndOutUtil;
@@ -15,6 +16,7 @@
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
+import javax.annotation.Resource;
 import java.util.List;
 
 /**
@@ -30,6 +32,12 @@
     private OrderService orderService;
     @Autowired
     private ApiLogService apiLogService;
+    @Resource
+    private OrderPakinService orderPakinService;
+    @Resource
+    private OrderPakoutService orderPakoutService;
+    @Resource
+    private MesService mesService;
 
     @Value("${erp.switch.ErpReportOld}")
     private boolean ErpReportOld;
@@ -104,23 +112,43 @@
 //    @Scheduled(cron = "0/30 * * * * ? ")
     @Async("orderThreadPool")
     public void completeAndReportOrderReport() {
-        if (!ErpReportOld){
-            return;
-        }
-        String erpReport = Parameter.get().getErpReport();
-        if (!Cools.isEmpty(erpReport) && erpReport.equals("true")) {
-            List<Order> orders = orderService.selectComplete();
-            for (Order order : orders) {
-                try {
-                    ReturnT<String> result = orderSyncHandler.startOrderReport(order);
-                    if (!result.isSuccess()) {
-                        log.error("鍗曟嵁[orderNo={}]涓婃姤erp澶辫触", order.getOrderNo());
-                    }
-                } catch (Exception e) {
-                    log.error(e.getMessage());
-                    log.error("鍗曟嵁[orderNo={}]涓婃姤erp澶辫触", order.getOrderNo());
-                }
+
+        // 鍏ュ簱瀹屾垚
+        List<OrderPakin> pakins = orderPakinService.selectComplete();
+        for (OrderPakin orderPakin : pakins) {
+            try {
+                 mesService.inFeedback(orderPakin.getOrderNo());
+            } catch (Exception e) {
+                log.error("鎺ㄩ�佸叆搴撳畬鎴愪俊鎭敊璇�, order{}", orderPakin, e);
             }
         }
+
+        List<OrderPakout> pakouts = orderPakoutService.selectComplete();
+        for (OrderPakout orderPakout : pakouts) {
+            try {
+                mesService.outFeedback(orderPakout.getOrderNo());
+            } catch (Exception e) {
+                log.error("鎺ㄩ�佸嚭搴撳畬鎴愪俊鎭敊璇�, order{}", orderPakout, e);
+            }
+        }
+
+//        if (!ErpReportOld){
+//            return;
+//        }
+//        String erpReport = Parameter.get().getErpReport();
+//        if (!Cools.isEmpty(erpReport) && erpReport.equals("true")) {
+//            List<Order> orders = orderService.selectComplete();
+//            for (Order order : orders) {
+//                try {
+//                    ReturnT<String> result = orderSyncHandler.startOrderReport(order);
+//                    if (!result.isSuccess()) {
+//                        log.error("鍗曟嵁[orderNo={}]涓婃姤erp澶辫触", order.getOrderNo());
+//                    }
+//                } catch (Exception e) {
+//                    log.error(e.getMessage());
+//                    log.error("鍗曟嵁[orderNo={}]涓婃姤erp澶辫触", order.getOrderNo());
+//                }
+//            }
+//        }
     }
 }
diff --git a/src/main/java/com/zy/asrs/task/WorkMastScheduler.java b/src/main/java/com/zy/asrs/task/WorkMastScheduler.java
index 0d39e15..714bd84 100644
--- a/src/main/java/com/zy/asrs/task/WorkMastScheduler.java
+++ b/src/main/java/com/zy/asrs/task/WorkMastScheduler.java
@@ -2,6 +2,7 @@
 
 import com.zy.asrs.entity.Task;
 import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.service.MesService;
 import com.zy.asrs.service.TaskService;
 import com.zy.asrs.service.WrkMastService;
 import com.zy.asrs.task.core.ReturnT;
@@ -12,6 +13,7 @@
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
+import javax.annotation.Resource;
 import java.util.Date;
 import java.util.List;
 
@@ -29,6 +31,9 @@
     private WorkMastHandler workMastHandler;
     @Autowired
     private TaskService taskService;
+    @Resource
+    private MesService mesService;
+    // TODO锛歳eporterTask()
 
     @Scheduled(cron = "0/3 * * * * ? ")
     private void execute(){
diff --git a/src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java b/src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java
index 002d171..761e68a 100644
--- a/src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java
@@ -8,10 +8,7 @@
 import com.zy.asrs.entity.DocType;
 import com.zy.asrs.entity.Order;
 import com.zy.asrs.entity.OrderDetl;
-import com.zy.asrs.service.ApiLogService;
-import com.zy.asrs.service.DocTypeService;
-import com.zy.asrs.service.OrderDetlService;
-import com.zy.asrs.service.OrderService;
+import com.zy.asrs.service.*;
 import com.zy.asrs.task.AbstractHandler;
 import com.zy.asrs.task.core.ReturnT;
 import com.zy.asrs.utils.OrderInAndOutUtil;
@@ -26,6 +23,7 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -46,6 +44,14 @@
     private ApiLogService apiLogService;
     @Autowired
     private DocTypeService docTypeService;
+    @Resource
+    private MesService mesService;
+    //TODO锛氬畬鎴愯鍗曟椂鎺ㄩ�丮ES recvFeedback(orderNo);
+    // mesService.inFeedback(memo.getString("OrderNo"));
+    //                        // 鍑哄簱瀹屾垚
+    //                        mesService.outFeedback(memo.getString("OrderNo"));
+
+
 
     @Transactional
     public ReturnT<String> startOrderIssuedOnceMore(Order order) {
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 2d3edb0..4d77aac 100644
--- a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -131,6 +131,11 @@
                             locDetl.setZpallet(wrkDetl.getZpallet()); // 鎵樼洏鏉$爜
                             locDetl.setModiTime(now);
                             locDetl.setAppeTime(now);
+                            locDetl.setMatnr(wrkDetl.getMatnr());
+                            locDetl.setMaktx(wrkDetl.getMaktx());
+                            locDetl.setSpecs(wrkDetl.getSpecs());
+                            locDetl.setUnit(wrkDetl.getUnit());
+                            locDetl.setZpallet(wrkDetl.getZpallet());
                             if (!locDetlService.insert(locDetl)) {
 //                                exceptionHandle("鍏ㄦ澘鍏ュ簱 ===>> 娣诲姞搴撳瓨鏄庣粏澶辫触锛沎workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                                 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -202,6 +207,11 @@
                             locDetl.setZpallet(wrkDetl.getZpallet()); // 鎵樼洏鏉$爜
                             locDetl.setModiTime(now);
                             locDetl.setAppeTime(now);
+                            locDetl.setMatnr(wrkDetl.getMatnr());
+                            locDetl.setMaktx(wrkDetl.getMaktx());
+                            locDetl.setSpecs(wrkDetl.getSpecs());
+                            locDetl.setUnit(wrkDetl.getUnit());
+                            locDetl.setZpallet(wrkDetl.getZpallet());
                             if (!locDetlService.insert(locDetl)) {
                                 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                                 return FAIL.setMsg("鎷f枡閫斾腑骞舵澘 ===>> 娣诲姞搴撳瓨鏄庣粏澶辫触; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
@@ -308,6 +318,11 @@
                             locDetl.setZpallet(wrkDetl.getZpallet()); // 鎵樼洏鏉$爜
                             locDetl.setModiTime(now);
                             locDetl.setAppeTime(now);
+                            locDetl.setMatnr(wrkDetl.getMatnr());
+                            locDetl.setMaktx(wrkDetl.getMaktx());
+                            locDetl.setSpecs(wrkDetl.getSpecs());
+                            locDetl.setUnit(wrkDetl.getUnit());
+                            locDetl.setZpallet(wrkDetl.getZpallet());
                             if (!locDetlService.insert(locDetl)) {
                                 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                                 return FAIL.setMsg("骞舵澘鍏ュ簱 ===>> 鏂板搴撳瓨鏄庣粏澶辫触; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
diff --git a/src/main/java/com/zy/common/config/LogAspect.java b/src/main/java/com/zy/common/config/LogAspect.java
new file mode 100644
index 0000000..533e920
--- /dev/null
+++ b/src/main/java/com/zy/common/config/LogAspect.java
@@ -0,0 +1,112 @@
+package com.zy.common.config;
+
+import com.core.common.R;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import java.rmi.NoSuchObjectException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * Created by Administrator on 2019-07-09.
+ */
+@Component
+@Aspect
+@Slf4j
+@Order(2)
+public class LogAspect {
+
+    private final List<String> logApiList = Stream.of("digitalTwin", "api/mes", "api/robot")
+            .collect(Collectors.toList());
+
+    public LogAspect() {
+    }
+
+    /**
+     * 鍒囧叆鐐�
+     */
+    @Pointcut("execution(* com.zy.asrs.controller.*.*(..))") // && !execution(* com.lg.iac.controller.PictureController.*(..))
+    public void controllerPc() {
+    }
+
+    /**
+     * 鐜粫閫氱煡
+     * @param pjp ProceedingJoinPoint
+     * @return 鏂规硶缁撴灉
+     */
+    @Around("controllerPc()")
+    public Object around(ProceedingJoinPoint pjp) {
+        try {
+            ServletRequestAttributes attributes = Optional.ofNullable((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+                    .orElseThrow(() -> new NoSuchObjectException("鍓嶇疆閫氱煡涓幏鍙栫殑 ServletRequestAttributes 瀵硅薄涓虹┖"));
+            HttpServletRequest request = attributes.getRequest();
+
+            if(urlContain(request.getRequestURL().toString())){
+                // 鍓嶇疆閫氱煡
+                log.info("------銆愬墠缃�氱煡銆�------");
+                // 璁板綍璇锋眰鍐呭
+                log.info("娴忚鍣ㄨ緭鍏ョ殑缃戝潃锛歿}", request.getRequestURL().toString());
+                log.info("HTTP_METHOD锛歿}", request.getMethod());
+                log.info("IP锛歿}", request.getRemoteAddr());
+                log.info("鎵ц鐨勪笟鍔℃柟娉曞悕锛歿}", pjp.getSignature().getDeclaringTypeName() + "." + pjp.getSignature().getName());
+                log.info("涓氬姟鏂规硶鑾峰緱鐨勫弬鏁帮細{}", Arrays.toString(pjp.getArgs()));
+
+                Object result = pjp.proceed();
+
+                // 鍚庣疆閫氱煡
+                log.info("------銆愬悗缃�氱煡銆�------");
+                log.info("{}鏂规硶鐨勮繑鍥炲�硷細{}", pjp.getSignature().getName(), result);
+                return result;
+            } else {
+                return pjp.proceed();
+            }
+        } catch (Throwable e) {
+            // 寮傚父閫氱煡
+            log.error("------銆愬紓甯搁�氱煡銆�------");
+            log.error("{}鏂规硶寮傚父锛屽弬鏁帮細{}锛屽紓甯革細", pjp.getSignature().getName(), Arrays.toString(pjp.getArgs()), e);
+            return R.error("鏈嶅姟鍣ㄥ鐞嗘暟鎹紓甯�");
+        } finally {
+            try{
+                ServletRequestAttributes attributes = Optional.ofNullable((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+                        .orElseThrow(() -> new NoSuchObjectException("鍓嶇疆閫氱煡涓幏鍙栫殑 ServletRequestAttributes 瀵硅薄涓虹┖"));
+                HttpServletRequest request = attributes.getRequest();
+                if(urlContain(request.getRequestURL().toString())){
+                    // 鏈�缁堥�氱煡
+                    log.info("------銆愭渶缁堥�氱煡銆�------");
+                    log.info("{}鏂规硶鎵ц缁撴潫", pjp.getSignature().getName());
+                }
+            } catch (Exception ignored){
+            }
+        }
+    }
+
+    /**
+     * 鏄惁涓嶅寘鍚繃婊ゆ棩蹇楁帴鍙�
+     *
+     * @param url
+     * @return
+     */
+    private boolean urlContain(String url){
+        boolean have = false;
+        for(String str : logApiList){
+            if(url.contains(str)){
+                have = true;
+                return have;
+            }
+        }
+        return have;
+    }
+
+}
diff --git a/src/main/java/com/zy/common/config/WebConfig.java b/src/main/java/com/zy/common/config/WebConfig.java
index 91f0c82..6695972 100644
--- a/src/main/java/com/zy/common/config/WebConfig.java
+++ b/src/main/java/com/zy/common/config/WebConfig.java
@@ -1,7 +1,8 @@
 package com.zy.common.config;
 
-import com.zy.common.constant.MesConstant;
-import com.zy.common.utils.Http;
+//import com.zy.common.constant.MesConstant;
+//import com.zy.common.route.RouteFilter;
+//import com.zy.common.utils.Http;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.web.servlet.FilterRegistrationBean;
 import org.springframework.context.annotation.Bean;
@@ -15,6 +16,7 @@
 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -30,11 +32,22 @@
 
     @Override
     public void addInterceptors(InterceptorRegistry registry) {
+//        registry.addInterceptor(new RouteFilter())
+//                .addPathPatterns("/api/robot") // 鎷︽埅璺緞
+//                .excludePathPatterns("/static/**"); // 鎺掗櫎闈欐�佽祫婧�
         registry.addInterceptor(adminInterceptor)
                 .addPathPatterns("/**")
         ;
     }
 
+//    @Bean
+//    public RequestMappingHandlerMapping requestMappingHandlerMapping() {
+//        RequestMappingHandlerMapping handlerMapping = new CustomRequestMappingHandlerMapping();
+//        handlerMapping.setOrder(0);
+//        handlerMapping.setInterceptors(new RouteFilter());
+//        return handlerMapping;
+//    }
+
     @Override
     public void addCorsMappings(CorsRegistry registry) {
         registry.addMapping("/**")
diff --git a/src/main/java/com/zy/common/route/RouteFilter.java b/src/main/java/com/zy/common/route/RouteFilter.java
new file mode 100644
index 0000000..1b7a07e
--- /dev/null
+++ b/src/main/java/com/zy/common/route/RouteFilter.java
@@ -0,0 +1,159 @@
+package com.zy.common.route;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.zy.asrs.entity.AgvInfo;
+import com.zy.asrs.entity.rcs.RcsReporterEqpt;
+import com.zy.asrs.entity.rcs.RcsReporterTask;
+import com.zy.asrs.entity.rcs.RcsReturn;
+import com.zy.asrs.mapper.AgvInfoMapper;
+import com.zy.asrs.service.RcsService;
+import com.zy.asrs.service.impl.RcsServiceImpl;
+import lombok.Value;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.tika.utils.StringUtils;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.nio.charset.StandardCharsets;
+
+@Slf4j
+@Component
+public class RouteFilter implements HandlerInterceptor {
+
+    private static final String[] WAREHOUSE_CODE = {"dj", "jg", "ljq", "hk"};
+//    private static final String[] WAREHOUSE = {"鍒�鍏峰簱", "鍔犲伐搴�", "鑱旂粨鍣ㄨ閰嶅簱", "婊戝潡搴�"};
+//    @Value("${mes}")
+    private static Integer CURRENT_WMS_ID = 4;  //婊戝潡
+
+    @Resource
+    private RcsService rcsService;
+    @Resource
+    private AgvInfoMapper agvInfoMapper;
+
+
+    // 璇锋眰鍓�
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+
+//        if (findIndex(request) != CURRENT_WMS_ID) {
+//            // 杞彂
+//            // 鑾峰彇RequestDispatcher瀵硅薄
+//            RequestDispatcher dispatcher = request.getRequestDispatcher("/SecondServlet");
+//
+//            // 杞彂璇锋眰鍒癝econdServlet
+//            dispatcher.forward(request, response);
+//
+////            forward(request);
+//        }
+
+        forward(request, response);
+
+//        long startTime = System.currentTimeMillis();
+//        System.out.println("preHandle锛孖n:" + startTime);
+//        request.setAttribute("startTime", startTime);
+        return true;
+    }
+
+    // TODO:璇锋眰杞彂涓庡搷搴旈噸瀹氬悜  //TODO:HttpServletRequest璇诲彇涓�娆″悗涓嶈兘鍐嶄娇鐢紝闇�閲嶆瀯涓嬮�昏緫椤哄簭
+    private void forward(HttpServletRequest request, HttpServletResponse response) throws IOException {
+
+        String url = request.getRequestURI();
+        StringBuilder body = new StringBuilder();
+
+        BufferedReader in = new BufferedReader(new InputStreamReader(request.getInputStream(), StandardCharsets.UTF_8));
+        String line;
+        while ((line = in.readLine()) != null) {
+            body.append(line);
+        }
+        JSONObject bodyJson = JSONObject.parseObject(body.toString());
+        String singleRobotCode = bodyJson.getString("singleRobotCode");
+        if (!StringUtils.isBlank(singleRobotCode)) {    //浠诲姟鍥為鎺ュ彛
+            int index = findIndex(singleRobotCode);
+            if (index != CURRENT_WMS_ID) {
+                String wmsId = WAREHOUSE_CODE[index - 1];  //瀛樺偍鎵�鏈堿GV鎵�灞炲簱鍖�
+                url = url.replace(WAREHOUSE_CODE[CURRENT_WMS_ID - 1], wmsId);
+
+                // 杞彂
+                String returns = RcsServiceImpl.sendPost(url, body.toString());
+                log.info("杞彂璇锋眰url:{}锛宐ody:{}锛岃繑鍥烇細{}", url, body, returns);
+                response(response, returns);
+            } else {
+                // 鍐呴儴閫昏緫澶勭悊
+                RcsReporterTask param = JSONObject.toJavaObject(bodyJson, RcsReporterTask.class);
+                RcsReturn rcsReturn = rcsService.reporterTask(param);
+
+                response(response, rcsReturn.toString());
+            }
+        } else {    //璇锋眰澶栬锛堝皝閿佸尯锛夛紝灏侀攣鍖虹敱褰撳墠绋嬪簭绠$悊涓嶈浆鍙�
+            RcsReporterEqpt param = JSONObject.toJavaObject(bodyJson, RcsReporterEqpt.class);
+            RcsReturn rcsReturn = rcsService.reporterEqpt(param);
+
+            response(response, rcsReturn.toString());
+        }
+    }
+
+    private int findIndex(String agvNo) {
+
+        AgvInfo agvInfo = agvInfoMapper.selectById(agvNo);
+        if (agvInfo != null) {
+            return Integer.parseInt(agvInfo.getBelongArea());
+        }
+        return -1;
+    }
+
+    public static void response(HttpServletResponse response, String baseRes){
+        response.setCharacterEncoding("utf-8");
+        response.setContentType("application/json; charset=utf-8");
+        try (PrintWriter out = response.getWriter()) {
+            out.print(JSON.toJSONString(baseRes));
+            out.flush();
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+//            e.printStackTrace();
+        }
+    }
+
+//    public static void response(HttpServletResponse response, String baseRes){
+//        response.setCharacterEncoding("utf-8");
+//        response.setContentType("application/json; charset=utf-8");
+//        try (PrintWriter out = response.getWriter()) {
+//            R r = R.parse(baseRes);
+//            JSONObject jsonObject = new JSONObject();
+//            jsonObject.put("total", "0");
+//            jsonObject.put("record", "");
+//            r.add(jsonObject);
+//            out.print(JSON.toJSONString(r));
+//            out.flush();
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//    }
+
+//    /**
+//     * 璁剧疆webflux妯″瀷鍝嶅簲
+//     *
+//     * @param response ServerHttpResponse
+//     * @param contentType content-type
+//     * @param status http鐘舵�佺爜
+//     * @param code 鍝嶅簲鐘舵�佺爜
+//     * @param value 鍝嶅簲鍐呭
+//     * @return Mono<Void>
+//     */
+//    public static Mono<Void> webFluxResponseWriter(ServerHttpResponse response, String contentType, HttpStatus status, Object value, int code)
+//    {
+//        response.setStatusCode(status);
+//        response.getHeaders().add(HttpHeaders.CONTENT_TYPE, contentType);
+//        RcsReturn<?> result = RcsReturn.fail(code, value.toString());
+//        DataBuffer dataBuffer = response.bufferFactory().wrap(JSON.toJSONString(result).getBytes());
+//        return response.writeWith(Mono.just(dataBuffer));
+//    }
+
+
+}
diff --git a/src/main/java/com/zy/common/web/WcsController.java b/src/main/java/com/zy/common/web/WcsController.java
index c0c677f..405d9ba 100644
--- a/src/main/java/com/zy/common/web/WcsController.java
+++ b/src/main/java/com/zy/common/web/WcsController.java
@@ -51,6 +51,8 @@
     @Autowired
     private WorkService workService;
 
+    // TODO锛氱О閲嶃�佹媿鐓т笂鎶ュ瓨鍌紝CTU鏂欑杩愯浆
+
     @PostMapping("/pakin/loc/v1")
     @ResponseBody
     public synchronized R getLocNo(@RequestBody SearchLocParam param) {
diff --git a/src/main/java/com/zy/system/timer/LicenseTimer.java b/src/main/java/com/zy/system/timer/LicenseTimer.java
index a56a24c..cf71c0e 100644
--- a/src/main/java/com/zy/system/timer/LicenseTimer.java
+++ b/src/main/java/com/zy/system/timer/LicenseTimer.java
@@ -26,7 +26,7 @@
     }
 
     public void setSystemSupport(boolean systemSupport) {
-        SYSTEM_SUPPORT = systemSupport;
+        SYSTEM_SUPPORT = true; // systemSupport;
     }
 
     public int getLicenseDays() {
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index ffa0b84..d10f336 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -1,5 +1,5 @@
 server:
-  port: 8080
+  port: 8088
   servlet:
     context-path: /@pom.build.finalName@
 
@@ -11,8 +11,11 @@
   datasource:
     driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
     username: sa
-    password: Skyouc#23
-    url: jdbc:sqlserver://127.0.0.1:1433;databasename=jsxswms
+    password: sa@123
+    url: jdbc:sqlserver://127.0.0.1:1433;databasename=djwms
+#    username: sa
+#    password: Skyouc#23
+#    url: jdbc:sqlserver://192.168.4.24:1433;databasename=jsxswms
   mvc:
     static-path-pattern: /**
   redis:
@@ -109,4 +112,32 @@
     acctID: "647e849ab6fa0f"
     username: "llw"
     password: "666666"
-    lcid: 2052
\ No newline at end of file
+    lcid: 2052
+
+#鍒嗗簱閰嶇疆
+wms:
+  #褰撳墠鏄鍑犲簱
+  currentId: 4
+  #褰撳墠搴撳悕绉�
+  currentName: 婊戝潡瑁呴厤搴�
+  #绔嬪簱AGV鑷姩杩愯揣鍑哄簱鍙g紪鐮�
+  wmsTransStartStation1: 1013
+
+#mes瀵规帴
+mes:
+  url: http://172.26.11.250/dev-api/basicmodel/Api/WMS/
+  #榛樿鎺ュ彛鎿嶄綔浜哄憳id
+  defaultUserId: 30
+
+#娴峰悍瀵规帴
+hik:
+  url: http://127.0.0.1:8089/hik/
+
+#鍗庢檽瀵规帴
+hx:
+  url: http://127.0.0.1:8089/hx/
+
+#鍒�鍏风鐞嗙郴缁熷鎺�
+dj:
+  url: http://172.26.11.2/
+
diff --git a/src/main/resources/libs/framework-3.2.0.jar b/src/main/resources/libs/framework-3.2.0.jar
new file mode 100644
index 0000000..503dc7b
--- /dev/null
+++ b/src/main/resources/libs/framework-3.2.0.jar
Binary files differ
diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml
index f72c762..b377c17 100644
--- a/src/main/resources/logback-spring.xml
+++ b/src/main/resources/logback-spring.xml
@@ -19,6 +19,9 @@
         </encoder>
     </appender>
 
+    <!-- 鏃ュ織淇濆瓨璺緞 -->
+    <property name="LOG_PATH" value="D:/wmslogs/dj" />
+
     <!--info绾у埆-->
     <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
         <file>${LOG_PATH}/info.log</file>
diff --git a/src/main/resources/mapper/BlockStationMapper.xml b/src/main/resources/mapper/BlockStationMapper.xml
new file mode 100644
index 0000000..bb688ac
--- /dev/null
+++ b/src/main/resources/mapper/BlockStationMapper.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zy.asrs.mapper.BlockStationMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.BlockStation">
+        <result column="task_code" property="taskCode" />
+        <result column="apply_time" property="applyTime" />
+        <result column="block_no" property="blockNo" />
+        <result column="block_name" property="blockName" />
+        <result column="method" property="method" />
+        <result column="completed" property="completed" />
+        <result column="agv_factory" property="agvFactory" />
+    </resultMap>
+
+    <update id="addByBlockNo">
+        UPDATE agv_block_station SET status = #{status}, agv_num = ISNULL(agv_num, 0) + 1 WHERE block_no = #{blockNo}
+    </update>
+
+    <update id="delByBlockNo">
+        UPDATE agv_block_station SET status = #{status}, agv_num = ISNULL(agv_num, 0) - 1 WHERE block_no = #{blockNo}
+    </update>
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/BlockTaskMapper.xml b/src/main/resources/mapper/BlockTaskMapper.xml
new file mode 100644
index 0000000..1c22bf0
--- /dev/null
+++ b/src/main/resources/mapper/BlockTaskMapper.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zy.asrs.mapper.BlockTaskMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.BlockTask">
+        <result column="task_code" property="taskCode" />
+        <result column="apply_time" property="applyTime" />
+        <result column="block_no" property="blockNo" />
+        <result column="block_name" property="blockName" />
+        <result column="method" property="method" />
+        <result column="completed" property="completed" />
+        <result column="agv_factory" property="agvFactory" />
+    </resultMap>
+
+    <select id="findTop" resultType="com.zy.asrs.entity.BlockTask">
+        SELECT TOP 1 * FROM agv_block_task WHERE completed = 0 AND method = 'APPLY_LOCK' ORDER BY apply_time ASC
+    </select>
+
+    <select id="findByTaskCode" resultType="com.zy.asrs.entity.BlockTask">
+        SELECT * FROM agv_block_task WHERE method = 'APPLY_LOCK' AND completed = 0 AND task_code = #{taskCode}
+    </select>
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/LocCountMapper.xml b/src/main/resources/mapper/LocCountMapper.xml
new file mode 100644
index 0000000..60bc842
--- /dev/null
+++ b/src/main/resources/mapper/LocCountMapper.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zy.asrs.mapper.LocCountMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.LocCount">
+        <result column="date" property="date" />
+        <result column="area_id" property="areaId" />
+        <result column="loc_num" property="locNum" />
+        <result column="remain_num" property="remainNum" />
+    </resultMap>
+
+    <select id="getByAreaAndDate" resultType="com.zy.asrs.entity.LocCount">
+        SELECT * FROM asr_loc_count
+        WHERE area_id = #{areaId} AND date &gt; #{startDate} AND date &lt; #{endDate}
+    </select>
+
+    <select id="getByDate" resultType="com.zy.asrs.entity.LocCount">
+        SELECT date, SUM(ISNULL(loc_num, 0)) AS loc_num, SUM(ISNULL(remain_num, 0)) AS remain_num
+        FROM asr_loc_count
+        GROUP BY date
+    </select>
+
+    <insert id="insertOrUpdate" parameterType="com.zy.asrs.entity.LocCount">
+        IF EXISTS (SELECT date FROM asr_loc_count WHERE date = #{model.date} AND area_id = #{model.areaId})
+            INSERT INTO asr_loc_count(date, area_id, loc_num, remain_num)
+            VALUES (#{model.date}, #{model.areaId}, #{model.locNum}, #{model.remainNum})
+        ELSE
+            UPDATE asr_loc_count SET loc_num = #{model.locNum}, remain_num = #{model.remainNum}
+    </insert>
+
+    <select id="totalLoc" resultType="com.zy.asrs.entity.LocCount">
+        SELECT area_id, COUNT(*) AS loc_num FROM asr_loc_mast WHERE loc_sts != 'Z' GROUP BY area_id
+    </select>
+
+    <select id="useLoc" resultType="com.zy.asrs.entity.LocCount">
+        SELECT area_id, COUNT(*) AS loc_num FROM asr_loc_mast
+        WHERE loc_sts = 'F' or loc_sts = 'P' or loc_sts = 'Q' or loc_sts = 'R' or loc_sts = 'S' or loc_sts = 'X'
+        GROUP BY area_id
+    </select>
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/ViewDigitalTwinMapper.xml b/src/main/resources/mapper/ViewDigitalTwinMapper.xml
new file mode 100644
index 0000000..4f909df
--- /dev/null
+++ b/src/main/resources/mapper/ViewDigitalTwinMapper.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zy.asrs.mapper.DigitalTwinMapper">
+
+    <!--鎬昏锛氭�诲簱浣嶃�佸凡鐢ㄥ簱浣嶃�佷粖鏃ュ簱瀛樸�佷粖鏃ュ嚭搴撱�佷粖鏃ュ叆搴�-->
+    <select id="overview" resultType="Double">
+        SELECT COUNT(*) FROM asr_loc_mast WHERE loc_sts != 'Z'
+            <if test="areaId != null">
+                and area_id = #{areaId}
+            </if>
+        UNION ALL
+        SELECT COUNT(*) FROM asr_loc_mast WHERE loc_sts = 'F' or loc_sts = 'P' or loc_sts = 'Q' or loc_sts = 'R' or loc_sts = 'S' or loc_sts = 'X'
+        <if test="areaId != null">
+            and area_id = #{areaId}
+        </if>
+        UNION ALL
+        SELECT ISNULL(SUM(anfme), 0) FROM asr_loc_detl
+        <if test="areaId != null">
+            WHERE area_id = #{areaId}
+        </if>
+        UNION ALL
+        SELECT ISNULL(SUM(anfme), 0) FROM asr_wrkin_view WHERE CONVERT(VARCHAR, io_time, 23) = CONVERT(VARCHAR, GETDATE(), 23)
+        <if test="areaId != null">
+            and area_id = #{areaId}
+        </if>
+        UNION ALL
+        SELECT ISNULL(SUM(anfme), 0) FROM asr_wrkout_view WHERE CONVERT(VARCHAR, io_time, 23) = CONVERT(VARCHAR, GETDATE(), 23)
+        <if test="areaId != null">
+            and area_id = #{areaId}
+        </if>
+    </select>
+
+    <select id="recentOrder" resultType="com.zy.asrs.entity.digitaltwin.DtOrderVo">
+        SELECT CONVERT(VARCHAR, order_time, 23) as orderDate, COUNT(*) AS orderNum
+        FROM man_order
+        WHERE order_time BETWEEN #{startTime} AND #{endTime}
+        GROUP BY CONVERT(VARCHAR, order_time, 23)
+    </select>
+
+    <select id="recentInBound" resultType="com.zy.asrs.entity.digitaltwin.DtInAndOutBoundVo">
+        SELECT CONVERT(VARCHAR, io_time, 23) AS boundDate, SUM(anfme) AS inBoundNum
+        FROM asr_wrkin_view
+        WHERE io_time BETWEEN #{startTime} AND #{endTime}
+        <if test="areaId != null">
+            and area_id = #{areaId}
+        </if>
+        GROUP BY CONVERT(VARCHAR, io_time, 23)
+    </select>
+
+    <select id="recentOutBound" resultType="com.zy.asrs.entity.digitaltwin.DtInAndOutBoundVo">
+        SELECT CONVERT(VARCHAR, io_time, 23) AS boundDate, SUM(anfme) AS outBoundNum
+        FROM asr_wrkout_view
+        WHERE io_time BETWEEN #{startTime} AND #{endTime}
+        <if test="areaId != null">
+            and area_id = #{areaId}
+        </if>
+        GROUP BY CONVERT(VARCHAR, io_time, 23)
+    </select>
+
+    <select id="recentDetainMat" resultType="com.zy.asrs.entity.digitaltwin.DtDetainMatVo">
+        select
+        *
+        from (
+            select
+                ROW_NUMBER() OVER(Order by t.io_time desc) as row , *
+            from (
+                SELECT area_id AS belongAreaId, area_name AS belongAreaName, matnr AS matId, maktx AS matName,
+                       loc_no AS lokId, '' AS lokName,
+                       DATEDIFF(MINUTE, appe_time, GETDATE()) AS detainTime, appe_time AS inBoundTime
+                    FROM asr_loc_detl WHERE appe_time &lt; #{startTime}
+                <if test="areaId != null">
+                    and area_id = #{areaId}
+                </if>
+                ) t
+        ) a where 1=1 and a.row between ((#{pageIndex}-1)*#{pageSize}+1) and (#{pageIndex}*#{pageSize})
+    </select>
+
+</mapper>
diff --git a/src/main/webapp/static/js/common.js b/src/main/webapp/static/js/common.js
index 4d9623f..889358d 100644
--- a/src/main/webapp/static/js/common.js
+++ b/src/main/webapp/static/js/common.js
@@ -1,4 +1,4 @@
-var baseUrl = "/wms";
+var baseUrl = "/djwms";
 
 // 璇︽儏绐楀彛-楂樺害
 var detailHeight = '80%';
diff --git a/src/main/webapp/static/js/mat/mat.js b/src/main/webapp/static/js/mat/mat.js
index 777cab7..b0a0202 100644
--- a/src/main/webapp/static/js/mat/mat.js
+++ b/src/main/webapp/static/js/mat/mat.js
@@ -211,52 +211,52 @@
                     });
                 }
                 break;
-            case "batchModifties":
-                var selected = checkStatus.data;
-                if (selected.length === 0) {
-                    layer.msg('璇烽�夋嫨淇敼鏁版嵁');
-                } else {
-                    let selIds = selected.map(item => {
-                       return  item.id
-                    });
-                    layer.open({
-                        type: 1,
-                        title: '鎵归噺淇敼',
-                        area: ['500px'],
-                        shadeClose: true,
-                        content: $('#batchModifties'),
-                        success: function (layero, index) {
-                            layer.iframeAuto(index);
-                            form.on('submit(batchModify)', function (data) {
-                                let params = {...data?.field}
-                                params.id = selIds
-                                $.ajax({
-                                    url: baseUrl + "/mat/batch/auth",
-                                    headers: {'token': localStorage.getItem('token')},
-                                    data: JSON.stringify(params),
-                                    dataType: 'json',
-                                    contentType: 'application/json;charset=UTF-8',
-                                    method: 'POST',
-                                    success: function (res) {
-                                        layer.closeAll();
-                                        if (res.code === 200) {
-
-                                        } else if (res.code === 403) {
-                                            top.location.href = baseUrl + "/";
-                                        } else {
-                                            layer.msg(res.msg)
-                                        }
-                                    }
-                                });
-                                layer.closeAll();
-                            });
-                        },
-                        end: function () {
-
-                        }
-                    });
-                }
-                break;
+            // case "batchModifties":
+            //     var selected = checkStatus.data;
+            //     if (selected.length === 0) {
+            //         layer.msg('璇烽�夋嫨淇敼鏁版嵁');
+            //     } else {
+            //         let selIds = selected.map(item => {
+            //            return  item.id
+            //         });
+            //         layer.open({
+            //             type: 1,
+            //             title: '鎵归噺淇敼',
+            //             area: ['500px'],
+            //             shadeClose: true,
+            //             content: $('#batchModifties'),
+            //             success: function (layero, index) {
+            //                 layer.iframeAuto(index);
+            //                 form.on('submit(batchModify)', function (data) {
+            //                     let params = {...data?.field}
+            //                     params.id = selIds
+            //                     $.ajax({
+            //                         url: baseUrl + "/mat/batch/auth",
+            //                         headers: {'token': localStorage.getItem('token')},
+            //                         data: JSON.stringify(params),
+            //                         dataType: 'json',
+            //                         contentType: 'application/json;charset=UTF-8',
+            //                         method: 'POST',
+            //                         success: function (res) {
+            //                             layer.closeAll();
+            //                             if (res.code === 200) {
+            //
+            //                             } else if (res.code === 403) {
+            //                                 top.location.href = baseUrl + "/";
+            //                             } else {
+            //                                 layer.msg(res.msg)
+            //                             }
+            //                         }
+            //                     });
+            //                     layer.closeAll();
+            //                 });
+            //             },
+            //             end: function () {
+            //
+            //             }
+            //         });
+            //     }
+            //     break;
             default:
                 break;
         }
diff --git a/src/main/webapp/views/basWhs/basWhs.html b/src/main/webapp/views/basWhs/basWhs.html
index 615c3e9..432053a 100644
--- a/src/main/webapp/views/basWhs/basWhs.html
+++ b/src/main/webapp/views/basWhs/basWhs.html
@@ -31,7 +31,8 @@
 
 <!-- 琛ㄦ牸 -->
 <div class="layui-form">
-    <table class="layui-hide" id="basWhsType" lay-filter="basWhsType"></table>
+<!--    <table class="layui-hide" id="basWhsType" lay-filter="basWhsType"></table>-->
+    <table class="layui-hide" id="basWhs" lay-filter="basWhs"></table>
 </div>
 <script type="text/html" id="toolbar">
     <div class="layui-btn-container">
@@ -49,7 +50,7 @@
 <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/basWhsType/basWhsType.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/basWhs/basWhs.js" charset="utf-8"></script>
 
 <iframe id="detail-iframe" scrolling="auto" style="display:none;"></iframe>
 
diff --git a/src/main/webapp/views/pda/comb.html b/src/main/webapp/views/pda/comb.html
index 4739ffb..13b9cb1 100644
--- a/src/main/webapp/views/pda/comb.html
+++ b/src/main/webapp/views/pda/comb.html
@@ -54,11 +54,11 @@
             limit: 500,
             cellMinWidth: 50,
             cols: [[
-                {fixed: 'left', align: 'center', field: 'count', title: '鏁伴噺', style:'color: blue', width:50},
+                {fixed: 'left', align: 'center', field: 'anfme', title: '鏁伴噺', style:'color: blue', width:50},
                 {field: 'matnr', align: 'center', title: '鍟嗗搧缂栧彿'},
                 {field: 'maktx', align: 'center', title: '鍟嗗搧鍚嶇О'}
             ]],
-            done: function (res, curr, count) {
+            done: function (res, curr, anfme) {
             }
         });
 
@@ -100,7 +100,7 @@
         let toPush = true;
         for (var j=0;j<matData.length;j++){
             if (data.matnr === matData[j].matnr) {
-                matData[j].count = Number(matData[j].count) + Number(data.count);
+                matData[j].anfme = Number(matData[j].anfme) + Number(data.anfme);
                 toPush  = false;
             }
         }
diff --git a/src/main/webapp/views/pda/login.html b/src/main/webapp/views/pda/login.html
index a03b30f..c326171 100644
--- a/src/main/webapp/views/pda/login.html
+++ b/src/main/webapp/views/pda/login.html
@@ -123,7 +123,8 @@
             debugger
             $.ajax({
                 url: baseUrl+"/login.action",
-                data: user,
+                headers: {'Content-Type': 'application/json'},
+                data: JSON.stringify(user),
                 method: 'POST',
                 success: function (res) {
                     if (res.code === 200){
diff --git a/src/main/webapp/views/pda/matQuery.html b/src/main/webapp/views/pda/matQuery.html
index 1c2b07b..7883180 100644
--- a/src/main/webapp/views/pda/matQuery.html
+++ b/src/main/webapp/views/pda/matQuery.html
@@ -124,9 +124,10 @@
             success: function (res) {
                 if (res.code === 200) {
                     if (res.data != null) {
-                        $('#matName').val(res.data.matName);
-                        $('#str1').val(res.data.str1);
-                        $('#str2').val(res.data.str2);
+                        console.log(res.data)
+                        $('#matName').val(res.data.maktx);
+                        $('#str1').val(res.data.unit);
+                        $('#str2').val(res.data.specs);
                         countDom.val(initMatCount);
                         $('#count').focus().select();
                     }
@@ -144,9 +145,9 @@
      */
     function confirm(){
         var data = {
-            matNo: $('#matNo').val(),
-            matName: $('#matName').val(),
-            count: countDom.val()
+            matnr: $('#matNo').val(),
+            maktx: $('#matName').val(),
+            anfme: Number(countDom.val())
         };
         parent.addTableData(data);
         parent.layer.close(parent.matCodeLayerIdx);

--
Gitblit v1.9.1