From 44b6b79dd5dee0ebbd2d11b08abbc2be275bed58 Mon Sep 17 00:00:00 2001
From: zwl <1051256694@qq.com>
Date: 星期一, 09 二月 2026 16:10:17 +0800
Subject: [PATCH] #

---
 src/main/resources/mapper/WrkMastLogMapper.xml                     |    1 
 src/main/java/com/zy/api/service/impl/HmesApiServiceImpl.java      |  228 ++++-
 src/main/java/com/zy/asrs/controller/LocMastController.java        |   55 +
 src/main/java/com/zy/asrs/entity/BasCrnp.java                      |    6 
 src/main/java/com/zy/api/entity/StationProtocol.java               |   28 
 src/main/java/com/zy/asrs/controller/WaitPakinController.java      |   21 
 src/main/java/com/zy/common/model/StartupDto.java                  |    6 
 src/main/java/com/zy/asrs/utils/Utils.java                         |   53 +
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java        |   37 
 src/main/java/com/zy/asrs/entity/Mat.java                          |   29 
 src/main/resources/application-dev.yml                             |   28 
 src/main/java/com/zy/asrs/entity/LocMast.java                      |    4 
 src/main/java/com/zy/common/service/CommonService.java             |   90 -
 src/main/java/com/zy/api/controller/params/WorkTaskParams.java     |    7 
 src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java        |   33 
 src/main/java/com/zy/api/controller/params/ReceviceTaskParams.java |    7 
 src/main/java/com/zy/asrs/task/WorkMastScheduler.java              |  146 +++
 src/main/java/com/zy/asrs/entity/WrkMastLog.java                   |    1 
 src/main/java/com/zy/asrs/task/OrderSyncScheduler.java             |  179 +++-
 src/main/java/com/zy/common/model/LocTypeDto.java                  |    4 
 src/main/java/com/zy/api/service/WcsApiService.java                |    5 
 src/main/webapp/static/js/waitPakin/waitPakin.js                   |   47 +
 src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java       |    2 
 src/main/java/com/zy/asrs/service/impl/WrkMastLogServiceImpl.java  |    7 
 src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java     |   38 
 src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java        |    2 
 src/main/java/com/zy/api/entity/DeviceStatusVo.java                |   32 
 src/main/java/com/zy/asrs/entity/LocAroundBind.java                |   15 
 src/main/java/com/zy/asrs/controller/OrderPakinController.java     |    5 
 src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java       |  400 +++++++---
 src/main/java/com/zy/asrs/utils/OrderExcelListener.java            |    2 
 src/main/java/com/zy/api/entity/DeviceConfig.java                  |   18 
 src/main/java/com/zy/asrs/controller/WrkMastLogController.java     |   11 
 src/main/java/com/zy/common/web/WcsController.java                 |   88 ++
 src/main/resources/mapper/LocAroundBindMapper.xml                  |    4 
 src/main/java/com/zy/asrs/entity/param/OpenOrderPakoutParam.java   |   15 
 src/main/java/com/zy/api/controller/HmesApiController.java         |   20 
 src/main/java/com/zy/common/model/DetlDto.java                     |    3 
 src/main/resources/mapper/StaDescMapper.xml                        |    2 
 src/main/java/com/zy/asrs/controller/OutController.java            |    4 
 src/main/webapp/views/locMast/locMast.html                         |    5 
 src/main/java/com/zy/asrs/controller/OpenController.java           |  160 ++++
 src/main/java/com/zy/asrs/entity/param/QueryTaskParam.java         |   10 
 src/main/java/com/zy/asrs/entity/WrkMast.java                      |   12 
 src/main/java/com/zy/asrs/service/impl/WaitPakinServiceImpl.java   |    8 
 src/main/resources/mapper/WrkMastMapper.xml                        |    4 
 src/main/java/com/zy/api/service/impl/HWmsApiServiceImpl.java      |    2 
 src/main/java/com/zy/asrs/service/impl/OrderPakinServiceImpl.java  |    2 
 src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java         |    6 
 src/main/java/com/zy/asrs/controller/OrderPakoutController.java    |   12 
 src/main/webapp/views/locMast/locMast_detail.html                  |   12 
 src/main/java/com/zy/api/entity/DualCrnProtocol.java               |   64 +
 src/main/java/com/zy/api/service/HmesApiService.java               |    3 
 src/main/java/com/zy/asrs/service/impl/OrderPakoutServiceImpl.java |    2 
 src/main/java/com/zy/api/controller/WcsApiController.java          |   70 +
 src/main/java/com/zy/asrs/entity/WaitPakin.java                    |    6 
 src/main/java/com/zy/asrs/service/WaitPakinService.java            |    2 
 src/main/java/com/zy/common/web/param/SearchLocParam.java          |    3 
 src/main/webapp/static/js/orderPakout/order.js                     |    1 
 src/main/java/com/zy/api/entity/CrnProtocol.java                   |   48 +
 src/main/webapp/static/js/locMast/locMast.js                       |    2 
 61 files changed, 1,650 insertions(+), 467 deletions(-)

diff --git a/src/main/java/com/zy/api/controller/HmesApiController.java b/src/main/java/com/zy/api/controller/HmesApiController.java
index 3ac42f5..dcbc9aa 100644
--- a/src/main/java/com/zy/api/controller/HmesApiController.java
+++ b/src/main/java/com/zy/api/controller/HmesApiController.java
@@ -2,9 +2,11 @@
 
 
 import com.core.annotations.ManagerAuth;
+import com.core.common.Cools;
 import com.core.common.R;
 import com.zy.api.controller.params.ReceviceTaskParams;
 import com.zy.api.service.HmesApiService;
+import com.zy.asrs.entity.param.OpenOrderPakoutParam;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -29,15 +31,21 @@
      * @date 2026/1/10 10:40
      * @return com.core.common.R
      */
-    @ManagerAuth
+//    @ManagerAuth
     @ApiOperation("涓嬪彂鐢熶骇浠诲姟")
     @PostMapping("/work/tasks")
-    public R menauWork(@RequestBody ReceviceTaskParams params) {
+    public R menauWork(@RequestBody OpenOrderPakoutParam params) {
         if (Objects.isNull(params)) {
             return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
         }
-        if (Objects.isNull(params.getDeviceNo())) {
-            return R.error("鏈哄彴鍙蜂笉鑳戒负绌猴紒锛�");
+        if (Cools.isEmpty(params.getOrderNo())) {
+            return R.error("鍗曟嵁缂栧彿[orderNo]涓嶈兘涓虹┖");
+        }
+        if (Cools.isEmpty(params.getBillType())) {
+            return R.error("鍗曟嵁绫诲瀷[BillType]涓嶈兘涓虹┖");
+        }
+        if (Cools.isEmpty(params.getMatList())) {
+            return R.error("鍗曟嵁鏄庣粏[orderDetails]涓嶈兘涓虹┖");
         }
 
         return hmesApiService.pubWorkTask(params);
@@ -50,14 +58,14 @@
      * @param params
      * @return com.core.common.R
      */
-    @ManagerAuth
+//    @ManagerAuth
     @ApiOperation("绌跨嚎瀹屾垚")
     @PostMapping("/work/release/lock")
     public R releaseLock(@RequestBody ReceviceTaskParams params) {
         if (Objects.isNull(params)) {
             return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
         }
-        if (Objects.isNull(params.getDeviceNo())) {
+        if (Objects.isNull(params.getDevNo())) {
             return R.error("鏈哄彴鍙蜂笉鑳戒负绌猴紒锛�");
         }
 
diff --git a/src/main/java/com/zy/api/controller/WcsApiController.java b/src/main/java/com/zy/api/controller/WcsApiController.java
index 6047d43..7a050d7 100644
--- a/src/main/java/com/zy/api/controller/WcsApiController.java
+++ b/src/main/java/com/zy/api/controller/WcsApiController.java
@@ -1,19 +1,23 @@
 package com.zy.api.controller;
 
 
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.annotations.ManagerAuth;
 import com.core.common.R;
 import com.zy.api.controller.params.ReceviceTaskParams;
 import com.zy.api.controller.params.WorkTaskParams;
 import com.zy.api.service.WcsApiService;
+import com.zy.asrs.entity.LocAroundBind;
+import com.zy.asrs.entity.WaitPakin;
+import com.zy.asrs.service.LocAroundBindService;
+import com.zy.asrs.service.WaitPakinService;
+import com.zy.asrs.utils.Utils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
 import java.util.Objects;
 
 @Api("WCS浜や簰鎺ュ彛")
@@ -23,7 +27,11 @@
 
     @Autowired
     private WcsApiService wcsApiService;
+    @Autowired
+    private WaitPakinService waitPakinService;
 
+    @Autowired
+    private LocAroundBindService locAroundBindService;
     /**
      * 閫氱煡WCS閿佸畾鍛ㄨ竟搴撲綅锛屽強绂佹浠诲姟鎵ц
      * @author Ryan
@@ -37,7 +45,7 @@
         if (Objects.isNull(params)) {
             return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
         }
-        if (Objects.isNull(params.getDeviceNo())) {
+        if (Objects.isNull(params.getDevNo())) {
             return R.error("鏈哄彴鍙蜂笉鑳戒负绌猴紒锛�");
         }
 
@@ -52,10 +60,10 @@
      * @param params
      * @return com.core.common.R
      */
-    @ManagerAuth
+//    @ManagerAuth
     @ApiOperation("鍫嗗灈鏈哄洖搴撴惉杩愭寚浠�")
     @PostMapping("/back/loc")
-    public R backLoc(@RequestBody WorkTaskParams params) {
+    public synchronized R backLoc(@RequestBody String params) {
         if (Objects.isNull(params)) {
             return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
         }
@@ -81,7 +89,7 @@
     }
 
     @ManagerAuth
-    @ApiOperation("璁惧鎵ц鐘舵�佸洖鍐�")
+    @ApiOperation("璁惧鎵ц鐘舵�佸洖鍐�-wcs浠诲姟瀹屾垚鍥炲啓")
     @PostMapping("/openapi/report")
     public R receviceTaskFromWcs(@RequestBody ReceviceTaskParams params) {
         if (Objects.isNull(params)) {
@@ -91,5 +99,51 @@
 
     }
 
+    @ManagerAuth
+    @ApiOperation("鑾峰彇缁勬墭鍏ュ簱鎵樼洏淇℃伅")
+    @PostMapping("/openapi/waitPakins")
+    public R waitPakins() {
+        List<WaitPakin> waitPakins = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("io_status", "N"));
+        return R.ok().add(waitPakins);
 
+    }
+
+    @ManagerAuth
+    @ApiOperation("鑾峰彇鏈哄彴搴撲綅鐨勬暟缁�")
+    @GetMapping("/openapi/arr")
+    public R arr() {
+        int i = 0;
+        int[] k = new  int[] { 3, 0, 4, 1, 5, 2};
+        int c=0;
+        int h=0;
+        int i1 = 15;
+        List<LocAroundBind> locAroundBinds = locAroundBindService.selectList(new EntityWrapper<LocAroundBind>().orderBy("dev_id"));
+        String[] arr = new String[90];
+        for (LocAroundBind locAroundBind : locAroundBinds) {
+            String s = Utils.WMSLocToWCSLoc(locAroundBind.getBlocNo());
+            int index = i*6+k[c];
+            arr[index] = s;
+            c++;
+            if (c==k.length) {
+                c=0;
+                i++;
+            }
+            if (i==i1){
+                i=0;
+                h++;
+                System.out.print("[");
+                for (int j=0;j<i1*6;j++){
+                    System.out.print(arr[j]+",");
+                }
+                System.out.println("]");
+                if (h==2){
+                    i1 = 13;
+                }else if (h==3){
+                   i1 = 8;
+                }
+            }
+        }
+        return R.ok();
+
+    }
 }
diff --git a/src/main/java/com/zy/api/controller/params/ReceviceTaskParams.java b/src/main/java/com/zy/api/controller/params/ReceviceTaskParams.java
index c5349a6..ecf4ecf 100644
--- a/src/main/java/com/zy/api/controller/params/ReceviceTaskParams.java
+++ b/src/main/java/com/zy/api/controller/params/ReceviceTaskParams.java
@@ -14,7 +14,7 @@
 public class ReceviceTaskParams implements Serializable {
 
     @ApiModelProperty("鏈哄彴鍙�")
-    private String deviceNo;
+    private String devNo;
 
     @ApiModelProperty("娴佹按鍙�")
     private Integer id;
@@ -29,7 +29,7 @@
     private String taskNo;
 
     @ApiModelProperty("WMS浠诲姟鍙�")
-    private String wrkNo;
+    private String superTaskNo;
 
     @ApiModelProperty("娑堟伅绫诲瀷锛歵ask_complete銆乼ask_cancel")
     private String msgType;
@@ -43,4 +43,7 @@
     @ApiModelProperty("閲嶉噺")
     private Double weight;
 
+    @ApiModelProperty("Y锛氬喕缁�  N:瑙e喕")
+    private String freeze;
+
 }
diff --git a/src/main/java/com/zy/api/controller/params/WorkTaskParams.java b/src/main/java/com/zy/api/controller/params/WorkTaskParams.java
index 010893b..8c462b9 100644
--- a/src/main/java/com/zy/api/controller/params/WorkTaskParams.java
+++ b/src/main/java/com/zy/api/controller/params/WorkTaskParams.java
@@ -24,6 +24,12 @@
     @ApiModelProperty("搴撲綅缂栫爜")
     private String locNo;
 
+    //婧愬簱浣�
+    private String sourceLocNo;
+
+    //婧愮珯鐐�
+    private String sourceStaNo;
+
     @ApiModelProperty("鏉$爜")
     private String barcode;
 
@@ -39,4 +45,5 @@
     @ApiModelProperty("鏄惁浣欐枡")
     private Integer isSuplus;
 
+
 }
diff --git a/src/main/java/com/zy/api/entity/CrnProtocol.java b/src/main/java/com/zy/api/entity/CrnProtocol.java
new file mode 100644
index 0000000..6480801
--- /dev/null
+++ b/src/main/java/com/zy/api/entity/CrnProtocol.java
@@ -0,0 +1,48 @@
+package com.zy.api.entity;
+
+import lombok.Data;
+import java.util.Map;
+
+@Data
+public class CrnProtocol {
+    private Integer crnNo;
+    private Integer mode;           // 1=Manual, 2=Auto, 3=Computer
+    private Object modeType;        // Enum: CrnModeType
+    private Integer alarm;          // Error code
+    private Integer taskNo;         // Task number
+    private Integer status;         // Current status code
+    private Object statusType;      // Enum: CrnStatusType
+    private Integer bay;            // Current bay
+    private Integer level;          // Current level
+    private Integer forkPos;        // Fork position code
+    private Object forkPosType;     // Enum: CrnForkPosType
+    private Integer liftPos;        // Lift position code
+    private Object liftPosType;     // Enum: CrnLiftPosType
+    private Integer walkPos;        // 0=In Position, 1=Not in Position
+    private Integer loaded;         // 1=Loaded, 0=Empty
+
+    // Speed and Distance
+    private Double xSpeed;
+    private Double ySpeed;
+    private Double zSpeed;
+    private Double xDistance;
+    private Double yDistance;
+    private Double xDuration;
+    private Double yDuration;
+
+    // Other Info
+    private String lastIo;          // "I"=Inbound, "O"=Outbound
+    private Integer crnLane;        // Lane number
+    private float weight;
+    private String barcode;
+    private Long deviceDataLog;
+    private Long lastCommandTime;
+
+    // Reserved/Temp
+    private Integer temp1;
+    private Integer temp2;
+    private Integer temp3;
+    private Integer temp4;
+
+    private Map<String, Object> extend;
+}
\ No newline at end of file
diff --git a/src/main/java/com/zy/api/entity/DeviceConfig.java b/src/main/java/com/zy/api/entity/DeviceConfig.java
new file mode 100644
index 0000000..6487cb4
--- /dev/null
+++ b/src/main/java/com/zy/api/entity/DeviceConfig.java
@@ -0,0 +1,18 @@
+package com.zy.api.entity;
+
+import lombok.Data;
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class DeviceConfig implements Serializable {
+    private Integer id;
+    private String ip;
+    private Integer port;
+    private String threadImpl;
+    private Date createTime;
+    private String deviceType;
+    private Integer deviceNo;
+    private Integer fake;
+    private String fakeInitStatus;
+}
diff --git a/src/main/java/com/zy/api/entity/DeviceStatusVo.java b/src/main/java/com/zy/api/entity/DeviceStatusVo.java
new file mode 100644
index 0000000..20cd184
--- /dev/null
+++ b/src/main/java/com/zy/api/entity/DeviceStatusVo.java
@@ -0,0 +1,32 @@
+package com.zy.api.entity;
+
+import lombok.Data;
+import java.util.List;
+
+/**
+ * Device Status Response Object
+ * Corresponds to the map returned by OpenController.getDeviceStatus
+ */
+@Data
+public class DeviceStatusVo {
+    /**
+     * Stacker Crane (CRN) Data List
+     */
+    private List<CrnProtocol> crnList;
+
+    /**
+     * RGV Device Config List
+     * Note: The controller returns the DeviceConfig list for RGV, not the protocol status list.
+     */
+    private List<DeviceConfig> rgvList;
+
+    /**
+     * Dual-Station Stacker Crane Data List
+     */
+    private List<DualCrnProtocol> dualCrnList;
+
+    /**
+     * Conveyor Station Data List
+     */
+    private List<StationProtocol> stationList;
+}
diff --git a/src/main/java/com/zy/api/entity/DualCrnProtocol.java b/src/main/java/com/zy/api/entity/DualCrnProtocol.java
new file mode 100644
index 0000000..1199f70
--- /dev/null
+++ b/src/main/java/com/zy/api/entity/DualCrnProtocol.java
@@ -0,0 +1,64 @@
+package com.zy.api.entity;
+import lombok.Data;
+import java.util.Map;
+
+@Data
+public class DualCrnProtocol {
+    private Integer crnNo;
+    private Integer mode;
+    private Object modeType;        // Enum: DualCrnModeType
+    private Integer alarm;
+
+    // Station 1 Data
+    private Integer taskNo;
+    private Integer status;
+    private Object statusType;      // Enum: DualCrnStatusType
+    private Integer bay;
+    private Integer level;
+    private Integer forkPos;
+    private Object forkPosType;     // Enum: DualCrnForkPosType
+    private Integer liftPos;
+    private Object liftPosType;     // Enum: DualCrnLiftPosType
+    private Integer walkPos;
+    private Integer loaded;
+    private Integer taskReceive;
+
+    // Station 2 Data
+    private Integer taskNoTwo;
+    private Integer statusTwo;
+    private Object statusTypeTwo;
+    private Integer bayTwo;
+    private Integer levelTwo;
+    private Integer forkPosTwo;
+    private Object forkPosTypeTwo;
+    private Integer liftPosTwo;
+    private Object liftPosTypeTwo;
+    private Integer walkPosTwo;
+    private Integer loadedTwo;
+    private Integer taskReceiveTwo;
+
+    // Movement Data (Integer type in DualCrnProtocol)
+    private Integer xSpeed;
+    private Integer ySpeed;
+    private Integer zSpeed;
+    private Integer xDistance;
+    private Integer yDistance;
+    private Integer xDuration;
+    private Integer yDuration;
+
+    // Other Info
+    private Integer goodsType;
+    private String barcode;
+    private String lastIo;
+    private Integer crnLane;
+    private Long deviceDataLog;
+    private Long lastCommandTime;
+
+    // Reserved/Temp
+    private Integer temp1;
+    private Integer temp2;
+    private Integer temp3;
+    private Integer temp4;
+
+    private Map<String, Object> extend;
+}
diff --git a/src/main/java/com/zy/api/entity/StationProtocol.java b/src/main/java/com/zy/api/entity/StationProtocol.java
new file mode 100644
index 0000000..1c7e121
--- /dev/null
+++ b/src/main/java/com/zy/api/entity/StationProtocol.java
@@ -0,0 +1,28 @@
+package com.zy.api.entity;
+import lombok.Data;
+import java.util.Map;
+
+@Data
+public class StationProtocol {
+    private Integer stationId;      // Station ID
+    private Integer taskNo;         // Task number
+    private Integer targetStaNo;    // Target Station ID
+
+    // Status Flags
+    private boolean autoing;        // Auto mode
+    private boolean loading;        // Has goods
+    private boolean inEnable;       // Inbound enabled
+    private boolean outEnable;      // Outbound enabled
+    private boolean emptyMk;        // Empty pallet mark
+    private boolean fullPlt;        // Full pallet
+    private boolean runBlock;       // Running blocked
+    private boolean enableIn;       // Start inbound
+
+    private Integer palletHeight;
+    private Integer error;          // Error code
+    private String errorMsg;        // Error message
+    private String barcode;
+    private Double weight;
+
+    private Map<String, Object> extend;
+}
\ No newline at end of file
diff --git a/src/main/java/com/zy/api/service/HmesApiService.java b/src/main/java/com/zy/api/service/HmesApiService.java
index d8b247c..8930fae 100644
--- a/src/main/java/com/zy/api/service/HmesApiService.java
+++ b/src/main/java/com/zy/api/service/HmesApiService.java
@@ -2,10 +2,11 @@
 
 import com.core.common.R;
 import com.zy.api.controller.params.ReceviceTaskParams;
+import com.zy.asrs.entity.param.OpenOrderPakoutParam;
 
 public interface HmesApiService {
 
-    R pubWorkTask(ReceviceTaskParams params);
+    R pubWorkTask(OpenOrderPakoutParam params);
 
     R releaseLock(ReceviceTaskParams params);
 }
diff --git a/src/main/java/com/zy/api/service/WcsApiService.java b/src/main/java/com/zy/api/service/WcsApiService.java
index a1e03bc..8f9b247 100644
--- a/src/main/java/com/zy/api/service/WcsApiService.java
+++ b/src/main/java/com/zy/api/service/WcsApiService.java
@@ -24,7 +24,7 @@
      * @param params
      * @return com.core.common.R
      */
-    R backLocs(WorkTaskParams params);
+    R backLocs(String params);
 
     /**
      * 涓嬪彂浠诲姟鑷砏CS
@@ -53,4 +53,7 @@
      * @return com.core.common.R
      */
     R receviceTaskFromWcs(ReceviceTaskParams params);
+
+    //杈撳叆搴撲綅鑷姩鍐荤粨绠楀嚭鐩搁偦搴撲綅搴忓彿
+    Integer[] freezeLocAround(Integer locId);
 }
diff --git a/src/main/java/com/zy/api/service/impl/HWmsApiServiceImpl.java b/src/main/java/com/zy/api/service/impl/HWmsApiServiceImpl.java
index 2195be9..4d926b3 100644
--- a/src/main/java/com/zy/api/service/impl/HWmsApiServiceImpl.java
+++ b/src/main/java/com/zy/api/service/impl/HWmsApiServiceImpl.java
@@ -443,7 +443,7 @@
                 orderItem.setMatnr(matnr.getMatnr());
                 orderItem.setMaktx(matnr.getMaktx());
                 orderItem.setBrand(matnr.getBrand());
-                orderItem.setBatch(1 + "");
+                orderItem.setBatch("");
                 orderItem.setStandby1(item.getPro_id());
                 // 鍏宠仈涓婂姞娲惧伐鍗曞彿+闆朵欢浠g爜+渚涘簲鍟嗕唬鐮�
                 orderItem.setThreeCode(item.getTotal_serial());
diff --git a/src/main/java/com/zy/api/service/impl/HmesApiServiceImpl.java b/src/main/java/com/zy/api/service/impl/HmesApiServiceImpl.java
index 05ea761..4bd4a81 100644
--- a/src/main/java/com/zy/api/service/impl/HmesApiServiceImpl.java
+++ b/src/main/java/com/zy/api/service/impl/HmesApiServiceImpl.java
@@ -1,26 +1,27 @@
 package com.zy.api.service.impl;
 
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
 import com.core.common.R;
+import com.core.common.SnowflakeIdWorker;
 import com.core.exception.CoolException;
 import com.zy.api.controller.params.ReceviceTaskParams;
 import com.zy.api.service.HmesApiService;
 import com.zy.api.service.WcsApiService;
-import com.zy.asrs.entity.BasDevice;
-import com.zy.asrs.entity.LocAroundBind;
-import com.zy.asrs.entity.LocMast;
+import com.zy.asrs.entity.*;
+import com.zy.asrs.entity.param.OpenOrderPakoutParam;
 import com.zy.asrs.enums.LocStsType;
-import com.zy.asrs.service.BasDeviceService;
-import com.zy.asrs.service.LocAroundBindService;
-import com.zy.asrs.service.LocMastService;
+import com.zy.asrs.service.*;
+import com.zy.asrs.service.impl.LocDetlServiceImpl;
+import com.zy.asrs.service.impl.OrderDetlPakoutServiceImpl;
+import com.zy.asrs.service.impl.OrderPakoutServiceImpl;
+import com.zy.common.model.DetlDto;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.Arrays;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
@@ -37,54 +38,149 @@
 
     @Autowired
     private WcsApiService wcsApiService;
+
+    @Autowired
+    private OrderService orderService;
+
+    @Autowired
+    private DocTypeService docTypeService;
+
+    @Autowired
+    private SnowflakeIdWorker snowflakeIdWorker;
+
+    @Autowired
+    private MatService matService;
+
+    @Autowired
+    private OrderDetlService orderDetlService;
+    @Autowired
+    private OrderPakoutServiceImpl orderPakoutService;
+    @Autowired
+    private OrderDetlPakoutServiceImpl orderDetlPakoutService;
+    @Autowired
+    private LocDetlServiceImpl locDetlService;
+
+
     /**
      * 鎺ユ敹MES绌跨嚎浠诲姟
      * @author Ryan
      * @date 2026/1/10 10:54
-     * @param params
+     * @param param
      * @return com.core.common.R
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public R pubWorkTask(ReceviceTaskParams params) {
-        if (Objects.isNull(params) || Objects.isNull(params.getDeviceNo())) {
-            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
-        }
-        BasDevice basDevice = basDeviceService.selectOne(new EntityWrapper<BasDevice>()
-                .eq("status", 1)
-                .eq("dev_no", params.getDeviceNo()));
-        if (Objects.isNull(basDevice)) {
-            throw new CoolException("鏈哄彴淇℃伅涓嶅瓨鍦ㄦ垨宸茬鐢紒锛�");
-        }
-        List<LocAroundBind> binds = locAroundBindService.selectList(new EntityWrapper<LocAroundBind>().eq("dev_no", basDevice.getDevNo()));
-        if (Objects.isNull(binds) || binds.isEmpty()) {
-            throw new CoolException("鏈哄彴鏈粦瀹氬伐浣滅珯鍙帮紒锛�");
-        }
-        Set<String> locs = binds.stream().map(LocAroundBind::getBlocNo).collect(Collectors.toSet());
-
-        LocMast locMasts = locMastService.selectOne(new EntityWrapper<LocMast>()
-                .in("loc_no", locs)
-                .eq("loc_sts", LocStsType.LOC_STS_TYPE_F.type)
-                .orderAsc(Arrays.asList("loc_no"))
-                .last("OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY"));
-
-        if (Objects.isNull(locMasts)) {
-            throw new CoolException("鏈煡鍒板彲宸ヤ綔绾胯酱锛侊紒");
-        }
-
-        //todo 閿佸簱浣嶉渶WCS閿佸畾锛堢浉鍏冲簱浣嶏紝涓嶅彲鎵ц浠诲姟鎿嶄綔锛屼笉鑳藉彧鍦╓MS閿佸畾锛�
-        List<LocMast> locMs = locMastService.selectList(new EntityWrapper<LocMast>()
-                .eq("frozen", 0).eq("deleted", 0)
-                .in("loc_no", locs)
-                .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type));
-        locMs.forEach(loc -> {
-            loc.setLocSts(LocStsType.LOC_STS_TYPE_X.type);
-            if (!locMastService.updateById(loc)) {
-                throw new CoolException("宸ヤ綔鍙板懆杈瑰簱浣嶇鐢ㄥけ璐ワ紝涓嶅彲鎵ц绌跨嚎鎿嶄綔锛侊紒");
+    public R pubWorkTask(OpenOrderPakoutParam param) {
+        OrderPakout order = orderPakoutService.selectByNo(param.getOrderNo());
+        // 濡傛灉鍗曟嵁涓嶅瓨鍦ㄥ垯娣诲姞锛涘鏋滃崟鎹瓨鍦紝浣滀笟涓棤娉曚慨鏀癸紝鍙嶄箣鍒欎慨鏀瑰崟鎹�
+        if (!Cools.isEmpty(order)) {
+            if (order.getSettle() > 1L) {
+                throw new CoolException(param.getOrderNo() + "姝e湪鍑哄簱锛屾棤娉曚慨鏀瑰崟鎹�");
             }
-        });
-
-        return R.ok("鍙墽琛岀┛绾垮姩浣�!!");
+            orderPakoutService.remove(order.getId());
+        }
+        DocType docType = docTypeService.selectOrAdd(param.getBillType(), Boolean.FALSE);
+        Date now = new Date();
+        // 鍗曟嵁涓绘。
+        order = new OrderPakout(
+                String.valueOf(snowflakeIdWorker.nextId()),    // 缂栧彿[闈炵┖]
+                param.getOrderNo(),    // 璁㈠崟缂栧彿
+                DateUtils.convert(now),    // 鍗曟嵁鏃ユ湡
+                docType.getDocId(),    // 鍗曟嵁绫诲瀷
+                null,    // 椤圭洰缂栧彿
+                null,    //
+                null,    // 璋冩嫧椤圭洰缂栧彿
+                null,    // 鍒濆绁ㄦ嵁鍙�
+                null,    // 绁ㄦ嵁鍙�
+                null,    // 瀹㈡埛缂栧彿
+                null,    // 瀹㈡埛
+                null,    // 鑱旂郴鏂瑰紡
+                null,    // 鎿嶄綔浜哄憳
+                null,    // 鍚堣閲戦
+                null,    // 浼樻儬鐜�
+                null,    // 浼樻儬閲戦
+                null,    // 閿�鍞垨閲囪喘璐圭敤鍚堣
+                null,    // 瀹炰粯閲戦
+                null,    // 浠樻绫诲瀷
+                null,    // 涓氬姟鍛�
+                null,    // 缁撶畻澶╂暟
+                null,    // 閭垂鏀粯绫诲瀷
+                null,    // 閭垂
+                null,    // 浠樻鏃堕棿
+                null,    // 鍙戣揣鏃堕棿
+                null,    // 鐗╂祦鍚嶇О
+                null,    // 鐗╂祦鍗曞彿
+                1L,    // 璁㈠崟鐘舵��
+                1,    // 鐘舵��
+                9995L,    // 娣诲姞浜哄憳
+                now,    // 娣诲姞鏃堕棿
+                9995L,    // 淇敼浜哄憳
+                now,    // 淇敼鏃堕棿
+                null    // 澶囨敞
+        );
+        if (!orderPakoutService.insert(order)) {
+            throw new CoolException("鐢熸垚鍗曟嵁涓绘。澶辫触锛岃鑱旂郴绠$悊鍛�");
+        }
+        // 鍗曟嵁鏄庣粏妗�
+        List<DetlDto> list = new ArrayList<>();
+        List<DetlDto> orderDetails = param.getMatList();
+        for (DetlDto detail : orderDetails) {
+            DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(),detail.getBrand(),detail.getDevNo(),detail.getStandby2(),detail.getStandby3(),detail.getLineNumber(),
+                    detail.getBoxType1(),detail.getBoxType2(),detail.getBoxType3(), detail.getAnfme());
+            if (DetlDto.hasLineNumber(list, dto)) {
+                DetlDto detlDto = DetlDto.findLineNumber(list, dto.getMatnr(), dto.getBatch(),dto.getBrand(),dto.getDevNo(),dto.getStandby2(),dto.getStandby3(),dto.getLineNumber(),
+                        dto.getBoxType1(),dto.getBoxType2(),dto.getBoxType3());
+                assert detlDto != null;
+                detlDto.setAnfme(detlDto.getAnfme() + detail.getAnfme());
+            } else {
+                list.add(dto);
+            }
+        }
+        //涓嬪彂鐨勮鍗曟槑缁嗭紝鏌ョ湅搴撳瓨鏄惁鏈夎冻澶熺殑搴撳瓨锛屾帓闄ゆ満鍙扮殑搴撲綅
+        for (DetlDto detail : list) {
+            List<LocDetl> matnr = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("matnr", detail.getMatnr()));
+            Double count=0.0;
+            for (LocDetl detl : matnr) {
+                LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", detl.getLocNo()).eq("loc_sts","F"));
+                if (locMast != null) {
+                    LocAroundBind bLocNo = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>().eq("b_loc_no", locMast.getLocNo()));
+                    if (Cools.isEmpty(bLocNo)) {
+                        count=detl.getAnfme()+count;
+                    }
+                }
+            }
+            if (count<detail.getAnfme()) {
+                return R.error("鐗╂枡="+detail.getMatnr()+"搴撳瓨涓嶈冻鏃犳硶鐢熸垚璁㈠崟");
+            }
+        }
+        for (DetlDto detlDto : list) {
+            Mat mat = matService.selectByMatnr(detlDto.getMatnr());
+            if (Cools.isEmpty(mat)) {
+                throw new CoolException(detlDto.getMatnr() + "缂栧彿鍟嗗搧妫�绱㈠け璐ワ紝璇峰厛娣诲姞鍟嗗搧");
+            }
+            OrderDetlPakout orderDetl = new OrderDetlPakout();
+            orderDetl.sync(mat);
+            orderDetl.setLineNumber(detlDto.getLineNumber());
+            orderDetl.setBatch(detlDto.getBatch());
+            orderDetl.setAnfme(detlDto.getAnfme());
+            orderDetl.setBrand(detlDto.getBrand());
+            orderDetl.setStandby1(detlDto.getStandby1());
+            orderDetl.setStandby2(detlDto.getStandby2());
+            orderDetl.setStandby3(detlDto.getStandby3());
+            orderDetl.setOrderId(order.getId());
+            orderDetl.setOrderNo(order.getOrderNo());
+            orderDetl.setCreateBy(9527L);
+            orderDetl.setCreateTime(now);
+            orderDetl.setUpdateBy(9527L);
+            orderDetl.setUpdateTime(now);
+            orderDetl.setStatus(1);
+            orderDetl.setQty(0.0D);
+            orderDetl.setPakinPakoutStatus(2);
+            if (!orderDetlPakoutService.insert(orderDetl)) {
+                throw new CoolException("鐢熸垚鍗曟嵁鏄庣粏澶辫触锛岃鑱旂郴绠$悊鍛�");
+            }
+        }
+        return  R.ok();
     }
 
     /**
@@ -97,37 +193,31 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public R releaseLock(ReceviceTaskParams params) {
-        if (Objects.isNull(params) || Objects.isNull(params.getDeviceNo())) {
+        if (Objects.isNull(params) || Objects.isNull(params.getDevNo())) {
             return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
         }
+
+        Integer frozen = params.getFreeze().equals("Y") ? 1 : 0;
+        String s = params.getFreeze().equals("Y") ? "鍐荤粨" : "瑙e喕";
         BasDevice basDevice = basDeviceService.selectOne(new EntityWrapper<BasDevice>()
                 .eq("status", 1)
-                .eq("dev_no", params.getDeviceNo()));
+                .eq("dev_no", params.getDevNo()));
         if (Objects.isNull(basDevice)) {
             throw new CoolException("鏈哄彴淇℃伅涓嶅瓨鍦ㄦ垨宸茬鐢紒锛�");
         }
-        List<LocAroundBind> binds = locAroundBindService.selectList(new EntityWrapper<LocAroundBind>().eq("dev_no", basDevice.getDevNo()));
+        List<LocAroundBind> binds = locAroundBindService.selectList(new EntityWrapper<LocAroundBind>()
+                .eq("dev_no", basDevice.getType())
+                .eq("freeze", frozen==1? 0:1));
         if (Objects.isNull(binds) || binds.isEmpty()) {
-            throw new CoolException("鏈哄彴鏈粦瀹氬伐浣滅珯鍙帮紒锛�");
-        }
-        Set<String> locs = binds.stream().map(LocAroundBind::getBlocNo).collect(Collectors.toSet());
-
-        List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().in("loc_no", locs)
-                .eq("frozen", 0).eq("deleted", 0)
-                .eq("loc_sts", LocStsType.LOC_STS_TYPE_X.type));
-        if (Objects.isNull(locMasts) || locMasts.isEmpty()) {
-            throw new CoolException("娌℃湁绂佺敤搴撲綅锛屼笉闇�瑕侀噴鏀撅紒锛�");
+            throw new CoolException("鏈哄彴涓嶉渶瑕�"+s+"锛侊紒");
         }
 
-        locMasts.forEach(loc -> {
-           loc.setLocSts(LocStsType.LOC_STS_TYPE_O.type);
-           if (!locMastService.updateById(loc)) {
-               throw new CoolException("搴撲綅閲婃斁澶辫触锛岃妫�鏌ュ悗鍐嶆搷浣滐紒锛�");
+        binds.forEach(loc -> {
+           loc.setFreeze(frozen);
+           if (!locAroundBindService.updateById(loc)) {
+               throw new CoolException("搴撲綅"+s+"澶辫触锛岃妫�鏌ュ悗鍐嶆搷浣滐紒锛�");
            }
         });
-
-//        wcsApiService.reportLockLocs(locs, "lock");
-
-        return R.ok("閲婃斁鎴愬姛 锛侊紒");
+        return R.ok(s+"鎴愬姛 锛侊紒");
     }
 }
diff --git a/src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java b/src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java
index 09a4c8a..3b3fc44 100644
--- a/src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java
+++ b/src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java
@@ -11,13 +11,14 @@
 import com.zy.api.service.WcsApiService;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.service.*;
-import com.zy.asrs.service.impl.LocDetlServiceImpl;
-import com.zy.asrs.service.impl.MatServiceImpl;
-import com.zy.asrs.service.impl.WrkDetlServiceImpl;
+import com.zy.asrs.utils.Utils;
 import com.zy.common.constant.MesConstant;
+import com.zy.common.service.CommonService;
 import com.zy.common.utils.HttpHandler;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -28,6 +29,7 @@
 import java.util.Set;
 import java.util.stream.Collectors;
 
+@Slf4j
 @Service
 public class WcsApiServiceImpl implements WcsApiService {
 
@@ -47,6 +49,19 @@
     private MatService matService;
     @Autowired
     private LocDetlService locDetlService;
+    @Value("${wcs.address.URL}")
+    private String wcs_address;
+
+    @Value("${wcs.address.createOutTask}")
+    private String getWcs_address;
+
+    @Value("${wcs.address.createInTask}")
+    private String createInTask;
+
+    @Value("${wcs.address.createLocMoveTask}")
+    private String createLocMoveTask;
+    @Autowired
+    private CommonService commonService;
 
     /**
      * 閫氱煡WCS閿佸畾搴撲綅锛屽強绂佹褰撳墠搴撲綅鐨勪竴鍒囨搷浣�
@@ -61,7 +76,7 @@
     public R lockLocs(ReceviceTaskParams params) {
         BasDevice basDevice = basDeviceService.selectOne(new EntityWrapper<BasDevice>()
                 .eq("status", 1)
-                .eq("dev_no", params.getDeviceNo()));
+                .eq("dev_no", params.getDevNo()));
         if (Objects.isNull(basDevice)) {
             throw new CoolException("鏈哄彴淇℃伅涓嶅瓨鍦ㄦ垨宸茬鐢紒锛�");
         }
@@ -86,15 +101,15 @@
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public R backLocs(WorkTaskParams params) {
-        if (Objects.isNull(params.getWrkNo())) {
-            throw new CoolException("宸ヤ綔鍙蜂笉鑳戒负绌猴紒锛�");
-        }
+    public R backLocs(String params) {
+//        if (Objects.isNull(params.getWrkNo())) {
+//            throw new CoolException("宸ヤ綔鍙蜂笉鑳戒负绌猴紒锛�");
+//        }
 //        String wrkCode = params.getTaskNo();
 //       if (wrkCode.contains("-1")) {
 //           throw new CoolException("閰嶅浠诲姟缂栫爜閿欒锛岃妫�鏌ュ悗閲嶆柊涓婁紶锛侊紒");
 //       }
-        WrkMast mast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", params.getWrkNo()));
+        WrkMast mast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", params));
         if (Objects.isNull(mast)) {
             throw new CoolException("浠诲姟涓嶅瓨鍦紒锛�");
         }
@@ -132,27 +147,98 @@
         if (Objects.isNull(params.getLocNo())) {
             return R.error("鐩爣搴撲綅涓嶈兘涓虹┖锛侊紒");
         }
-        String url = MesConstant.PUB_TASK_IN;
-        if (Objects.isNull(params.getType()) && params.getType().equals("out")) {
-            url = MesConstant.PUB_TASK_OUT;
+        String url = createInTask;
+        if (!Objects.isNull(params.getType()) && params.getType().equals("out")) {
+            url = getWcs_address;
+        }else if (!Objects.isNull(params.getType()) && params.getType().equals("move")) {
+            url = createLocMoveTask;
         }
         String response;
+        R r = R.ok();
         try {
+            log.info("涓嬪彂鎼繍浠诲姟缁檞cs="+JSON.toJSONString(params));
             response = new HttpHandler.Builder()
-                    .setUri(MesConstant.URL)
+                    .setUri(wcs_address)
                     .setPath(url)
                     .setJson(JSON.toJSONString(params))
                     .build()
                     .doPost();
-            R result = JSON.parseObject(response, R.class);
+            JSONObject jsonObject = JSON.parseObject(response);
+            log.info("涓嬪彂浠诲姟缁檞cs鐨勮繑鍥炲��="+response);
+            Integer code = jsonObject.getInteger("code");
 
-            if (result.get("code").equals("200")) {
+            if (code==200) {
+                WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", params.getTaskNo()));
+                if (!Objects.isNull(wrkMast)) {
+                    if (wrkMast.getIoType()==1 || wrkMast.getIoType()==10) {
+                        wrkMast.setWrkSts(2L);
+                        wrkMast.setModiTime(new Date());
+                        wrkMastService.updateById(wrkMast);
+                    }else if(wrkMast.getIoType()==2){
+                        wrkMast.setWrkSts(2L);
+                        wrkMast.setModiTime(new Date());
+                        wrkMastService.updateById(wrkMast);
+                        String s = Utils.convertLocFormat(params.getLocNo());
+                        LocAroundBind bind = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>()
+                                .eq("b_loc_no", s));
+                        if (!Objects.isNull(bind)) {
+                            bind.setFreeze(1);
+                            locAroundBindService.updateById(bind);
+                            //鍐荤粨鐩搁偦搴撲綅
+                            Integer[] aroundIds = freezeLocAround(bind.getOrderNo());
+                            if (aroundIds != null) {
+                                for (Integer id : aroundIds) {
+                                    if (id != null && id > 0) {
+                                        LocAroundBind aroundBind = locAroundBindService.selectOne(
+                                                new EntityWrapper<LocAroundBind>()
+                                                        .eq("dev_id", bind.getDevId())
+                                                        .eq("order_no", id));
+                                        if (aroundBind != null) {
+                                            aroundBind.setFreeze(1);
+                                            locAroundBindService.updateById(aroundBind);
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }else if (wrkMast.getIoType()==101){
+                        wrkMast.setWrkSts(12L);
+                        wrkMast.setModiTime(new Date());
+                        wrkMastService.updateById(wrkMast);
+                        //鍑哄簱涓烘満鍙板伐浣嶆椂锛屽喕缁撶浉瀵规湁鐨勫簱浣�,鍙婄浉閭诲簱浣�
+                        String s = Utils.convertLocFormat(params.getLocNo());
+                        LocAroundBind bind = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>()
+                                .eq("b_loc_no", s));
+                        if (!Objects.isNull(bind)&&Cools.isEmpty(wrkMast.getStaNo())) {
+                            bind.setFreeze(1);
+                            locAroundBindService.updateById(bind);
+                            //鍐荤粨鐩搁偦搴撲綅
+                            Integer[] aroundIds = freezeLocAround(bind.getOrderNo());
+                            if (aroundIds != null) {
+                                for (Integer id : aroundIds) {
+                                    if (id != null && id > 0) {
+                                        LocAroundBind aroundBind = locAroundBindService.selectOne(
+                                                new EntityWrapper<LocAroundBind>()
+                                                        .eq("dev_id", bind.getDevId())
+                                                        .eq("order_no", id));
+                                        if (aroundBind != null) {
+                                            aroundBind.setFreeze(1);
+                                            locAroundBindService.updateById(aroundBind);
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
                 //TODO 涓婃姤鏄惁鎴愬姛
+            }else {
+                r =R.error();
             }
         } catch (IOException e) {
             throw new RuntimeException(e);
         }
-        return null;
+        return r;
     }
 
 
@@ -202,70 +288,129 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public R receviceTaskFromWcs(ReceviceTaskParams params) {
-        if (Objects.isNull(params.getWrkNo())) {
+        log.info("wcs浠诲姟鍙嶉="+JSON.toJSONString(params));
+        if (Objects.isNull(params.getSuperTaskNo())) {
             throw new CoolException("WMS浠诲姟鍙蜂笉鑳戒负绌猴紒锛�");
         }
         if (Objects.isNull(params.getNotifyType())) {
             throw new CoolException("鍔ㄤ綔绫诲瀷涓嶈兘涓虹┖锛侊紒");
         }
-        WrkMast mast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", params.getWrkNo()));
+        WrkMast mast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", params.getSuperTaskNo()));
         if (Objects.isNull(mast)) {
             throw new CoolException("浠诲姟妗d笉瀛樺湪锛侊紒");
         }
+
+
         if (params.getNotifyType().equals("task")) {
             //浠诲姟
             if (params.getMsgType().equals("task_complete")) {
-                if (!Objects.isNull(mast.getWrkCode())) {
-                    if (mast.getOveMk().equals("N") && !Cools.isEmpty(mast.getIsSuplus())) {
-                        throw new CoolException("浠诲姟鏈笂鎶ラ噸閲忥紝鏃犳硶瀹岀粨浠诲姟锛侊紒");
+                //绉伴噸
+                if ((mast.getIoType()==1||mast.getIoType()==10)&&mast.getWrkSts() == 2 && Cools.isEmpty(mast.getStaNo())) {
+                    Double weight = 0.0;
+                    if (!Cools.isEmpty(params.getData())){
+                        JSONObject jsonObject = JSONObject.parseObject(params.getData());
+                        weight=jsonObject.getDouble("weight");
                     }
-                }
-                if (mast.getIoType() == 1) {
-                    mast.setWrkSts(4L);
-                } else if (mast.getIoType() == 101) {
-                    mast.setWrkSts(14L);
-                }
-                if (!wrkMastService.updateById(mast)) {
-                    throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
-                }
-            } else if (params.getMsgType().equals("task_cancel")) {
-                //todo 鍙栨秷浠诲姟
-            }
-        } else if (params.getNotifyType().equals("weight")) {
-            //绉伴噸
-            if (mast.getWrkSts() == 2) {
-                if (mast.getIoType() == 10) {
-                    //绌烘澘鍏ュ簱浠诲姟妗�
-                    LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>()
-                            .eq("barcode", mast.getBarcode())
-                            .eq("loc_no", mast.getSourceLocNo()));
-                    if (Objects.isNull(locDetl)) {
-                        throw new CoolException("鏄庣粏鏁版嵁涓嶅瓨鍦紒锛�");
-                    }
-                    Mat matnr = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", locDetl.getMatnr()));
-                    if (Objects.isNull(matnr)) {
-                        throw new CoolException("鐗╂枡鍩虹淇℃伅涓嶅瓨鍦紒锛�");
-                    }
-                    Double val = Math.round((params.getWeight() - matnr.getSafeQty()) * 10000) / 10000.0;
-                    if (val.compareTo(0.0) > 0) {
-                        WrkDetl wrkDetl = new WrkDetl();
-                        BeanUtils.copyProperties(locDetl, wrkDetl);
-                        wrkDetl.setWrkNo(mast.getWrkNo());
-                        wrkDetl.setStockQty(locDetl.getAnfme());
-                        wrkDetl.setIoTime(new Date());
-                        wrkDetl.setWeight(params.getWeight());
-                        //浣欐枡闀垮害
-                        wrkDetl.setAnfme(val * matnr.getVolume());
-                        mast.setIoType(1);
-                        mast.setIsSuplus(1);
+                    if (mast.getIoType() == 10) {
+                        //绌烘澘鍏ュ簱浠诲姟妗�
+                        LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>()
+                                .eq("zpallet", mast.getBarcode())
+                                .eq("loc_no", mast.getSourceLocNo()));
+                        if (Objects.isNull(locDetl)) {
+                            throw new CoolException("鏄庣粏鏁版嵁涓嶅瓨鍦紒锛�");
+                        }
+                        Mat matnr = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", locDetl.getMatnr()));
+                        if (Objects.isNull(matnr)) {
+                            throw new CoolException("鐗╂枡鍩虹淇℃伅涓嶅瓨鍦紒锛�");
+                        }
+                        if (!Cools.isEmpty(weight)) {
+                            Double val = Math.round((weight - matnr.getSafeQty()) * 10000) / 10000.0;
+                            if (val.compareTo(0.0) > 0) {
+                                WrkDetl wrkDetl = new WrkDetl();
+                                BeanUtils.copyProperties(locDetl, wrkDetl);
+                                wrkDetl.setWrkNo(mast.getWrkNo());
+                                wrkDetl.setStockQty(locDetl.getAnfme());
+                                wrkDetl.setIoTime(new Date());
+                                wrkDetl.setWeight(weight);
+                                wrkDetl.setIoTime(mast.getIoTime());
+                                //浣欐枡闀垮害
+                                wrkDetl.setAnfme(val * matnr.getVolume());
+                                if (!wrkDetlService.insert(wrkDetl)){
+                                    throw new CoolException("鏃犳硶鏂板鏄庣粏锛侊紒");
+                                }
+                                mast.setIoType(1);
+                                mast.setIsSuplus(1);
+                                mast.setOveMk("Y");
+                                if (!wrkMastService.updateById(mast)) {
+                                    throw new CoolException("浠诲姟妗d慨鏀瑰け璐ワ紒锛�");
+                                }
+                                // 鏇存柊鍘熷嚭搴撳崟
+
+                                if (!Cools.isEmpty(mast.getWrkCode())) {
+                                    String wrkNo = mast.getWrkCode();
+                                    WrkMast orgWrk = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", wrkNo));
+                                    if (Objects.isNull(orgWrk)) {
+                                        throw new CoolException("鏁版嵁閿欒锛屼富浠诲姟妗d笉瀛樺湪鎴栧凡鍒犻櫎锛侊紒");
+                                    }
+                                    orgWrk.setOveMk("Y");
+                                    if (!wrkMastService.updateById(orgWrk)) {
+                                        throw new CoolException("浠诲姟妗d慨鏀瑰け璐ワ紒锛�");
+                                    }
+                                    WrkDetl detl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkNo));
+                                    if (Objects.isNull(detl)) {
+                                        throw new CoolException("瀛愪换鍔℃。鏄庣粏涓嶅瓨鍦紒锛�");
+                                    }
+//                                    //搴撳瓨鍑忓幓绉伴噸闀垮害
+//                                    Double v = Math.round((wrkDetl.getStockQty() - realQty) * 10000) / 10000.0;
+//                                    //鍘熷嚭涓烘暟閲忎笌鐪熷疄鏁伴噺浜掓崲锛屼繚鎸佷竴鑷存��
+//                                    detl.setAnfme(v);
+//                                    detl.setWeight(weight);
+                                    if (!wrkDetlService.update(detl, new EntityWrapper<WrkDetl>().eq("wrk_no", wrkNo).eq("matnr", detl.getMatnr()).eq("barcode", detl.getBarcode()))) {
+                                        throw new CoolException("鍘熶换鍔℃。鏄庣粏淇敼澶辫触锛侊紒");
+                                    }
+                                } else {
+                                    throw new CoolException("浠诲姟鍙锋埅鍙栧け璐ワ紝璇锋鏌ヤ富浠诲姟妗d换妗rkCode瀛楁");
+                                }
+                            }
+                        }
+                    } else {
+                        WrkDetl wrkDetl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", mast.getWrkNo()));
+                        if (Objects.isNull(wrkDetl)) {
+                            throw new CoolException("鏁版嵁閿欒锛屼换鍔℃槑缁嗕笉瀛樺湪锛侊紒");
+                        }
+                        Mat matnr = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", wrkDetl.getMatnr()));
+                        if (Objects.isNull(matnr)) {
+                            throw new CoolException("鐗╂枡鍩虹淇℃伅涓嶅瓨鍦紒锛�");
+                        }
+                        Double realQty = Math.round((wrkDetl.getStockQty() - wrkDetl.getAnfme()) * 10000) / 10000.0;
+                        if (!Cools.isEmpty(weight)) {
+                            Double val = Math.round((weight - 2.35) * 10000) / 10000.0;
+                            //绉伴噸鍚庯紝璁$畻鍑虹湡瀹為暱搴�
+                            realQty = val * matnr.getVolume();
+                            if (realQty<matnr.getSafeQty()){
+                                wrkDetlService.delete(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkDetl.getWrkNo()));
+                                mast.setIoType(10);
+                                mast.setEmptyMk("Y");
+                            }else{
+                                wrkDetl.setAnfme(realQty);
+                                wrkDetl.setWeight(weight);
+                                if (!wrkDetlService.update(wrkDetl, new EntityWrapper<WrkDetl>().eq("wrk_no", mast.getWrkNo()).eq("matnr", wrkDetl.getMatnr()).eq("barcode", wrkDetl.getBarcode()))) {
+                                    throw new CoolException("浠诲姟妗f槑缁嗕慨鏀瑰け璐ワ紒锛�");
+                                }
+                            }
+
+                        }
+
+
                         mast.setOveMk("Y");
                         if (!wrkMastService.updateById(mast)) {
                             throw new CoolException("浠诲姟妗d慨鏀瑰け璐ワ紒锛�");
                         }
+
                         // 鏇存柊鍘熷嚭搴撳崟
-                        int indexOf = mast.getWrkCode().indexOf("-1");
-                        if (indexOf != -1) {
-                            String wrkNo = mast.getWrkCode().substring(0, indexOf);
+//                        int indexOf = mast.getWrkCode().indexOf("-1");
+                        if (!Cools.isEmpty(mast.getWrkCode())) {
+                            String wrkNo = mast.getWrkCode();
                             WrkMast orgWrk = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", wrkNo));
                             if (Objects.isNull(orgWrk)) {
                                 throw new CoolException("鏁版嵁閿欒锛屼富浠诲姟妗d笉瀛樺湪鎴栧凡鍒犻櫎锛侊紒");
@@ -274,74 +419,93 @@
                             if (!wrkMastService.updateById(orgWrk)) {
                                 throw new CoolException("浠诲姟妗d慨鏀瑰け璐ワ紒锛�");
                             }
-                            //绉伴噸鍚庯紝璁$畻鍑虹湡瀹為暱搴�
-                            Double realQty = val * matnr.getVolume();
+                            WrkDetl detl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkNo));
+                            if (Objects.isNull(detl)) {
+                                throw new CoolException("瀛愪换鍔℃。鏄庣粏涓嶅瓨鍦紒锛�");
+                            }
                             //搴撳瓨鍑忓幓绉伴噸闀垮害
                             Double v = Math.round((wrkDetl.getStockQty() - realQty) * 10000) / 10000.0;
                             //鍘熷嚭涓烘暟閲忎笌鐪熷疄鏁伴噺浜掓崲锛屼繚鎸佷竴鑷存��
-                            wrkDetl.setAnfme(v);
-                            wrkDetl.setWeight(params.getWeight());
-                            if (!wrkDetlService.insert(wrkDetl)) {
-                                throw new CoolException("鏄庣粏淇濆瓨澶辫触锛侊紒");
+                            detl.setAnfme(v);
+                            detl.setWeight(weight);
+                            if (!wrkDetlService.update(detl, new EntityWrapper<WrkDetl>().eq("wrk_no", wrkNo).eq("matnr", detl.getMatnr()).eq("barcode", detl.getBarcode()))) {
+                                throw new CoolException("鍘熶换鍔℃。鏄庣粏淇敼澶辫触锛侊紒");
                             }
                         } else {
                             throw new CoolException("浠诲姟鍙锋埅鍙栧け璐ワ紝璇锋鏌ヤ富浠诲姟妗d换妗rkCode瀛楁");
                         }
                     }
-                } else {
-                    WrkDetl wrkDetl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", mast.getWrkNo()));
-                    if (Objects.isNull(wrkDetl)) {
-                        throw new CoolException("鏁版嵁閿欒锛屼换鍔℃槑缁嗕笉瀛樺湪锛侊紒");
-                    }
-                    Mat matnr = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", wrkDetl.getMatnr()));
-                    if (Objects.isNull(matnr)) {
-                        throw new CoolException("鐗╂枡鍩虹淇℃伅涓嶅瓨鍦紒锛�");
-                    }
-                    Double val = Math.round((params.getWeight() - matnr.getSafeQty()) * 10000) / 10000.0;
-                    //绉伴噸鍚庯紝璁$畻鍑虹湡瀹為暱搴�
-                    Double realQty = val * matnr.getVolume();
-                    wrkDetl.setAnfme(realQty);
-                    wrkDetl.setWeight(params.getWeight());
-                    if (!wrkDetlService.update(wrkDetl, new EntityWrapper<WrkDetl>().eq("wrk_no", mast.getWrkNo()).eq("matnr", wrkDetl.getMatnr()).eq("barcode", wrkDetl.getBarcode()))) {
-                        throw new CoolException("浠诲姟妗f槑缁嗕慨鏀瑰け璐ワ紒锛�");
-                    }
-                    mast.setOveMk("Y");
-                    if (!wrkMastService.updateById(mast)) {
-                        throw new CoolException("浠诲姟妗d慨鏀瑰け璐ワ紒锛�");
-                    }
+                }
 
-                    // 鏇存柊鍘熷嚭搴撳崟
-                    int indexOf = mast.getWrkCode().indexOf("-1");
-                    if (indexOf != -1) {
-                        String wrkNo = mast.getWrkCode().substring(0, indexOf);
-                        WrkMast orgWrk = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", wrkNo));
-                        if (Objects.isNull(orgWrk)) {
-                            throw new CoolException("鏁版嵁閿欒锛屼富浠诲姟妗d笉瀛樺湪鎴栧凡鍒犻櫎锛侊紒");
-                        }
-                        orgWrk.setOveMk("Y");
-                        if (!wrkMastService.updateById(orgWrk)) {
-                            throw new CoolException("浠诲姟妗d慨鏀瑰け璐ワ紒锛�");
-                        }
-                        WrkDetl detl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkNo));
-                        if (Objects.isNull(detl)) {
-                            throw new CoolException("瀛愪换鍔℃。鏄庣粏涓嶅瓨鍦紒锛�");
-                        }
-                        //搴撳瓨鍑忓幓绉伴噸闀垮害
-                        Double v = Math.round((wrkDetl.getStockQty() - realQty) * 10000) / 10000.0;
-                        //鍘熷嚭涓烘暟閲忎笌鐪熷疄鏁伴噺浜掓崲锛屼繚鎸佷竴鑷存��
-                        detl.setAnfme(v);
-                        detl.setWeight(params.getWeight());
-                        if (!wrkDetlService.update(detl, new EntityWrapper<WrkDetl>().eq("wrk_no", wrkNo).eq("matnr", detl.getMatnr()).eq("barcode", detl.getBarcode()))) {
-                            throw new CoolException("鍘熶换鍔℃。鏄庣粏淇敼澶辫触锛侊紒");
-                        }
-                    } else {
-                        throw new CoolException("浠诲姟鍙锋埅鍙栧け璐ワ紝璇锋鏌ヤ富浠诲姟妗d换妗rkCode瀛楁");
+                if (!Objects.isNull(mast.getWrkCode())) {
+                    if (mast.getOveMk().equals("N") && !Cools.isEmpty(mast.getIsSuplus())) {
+                        throw new CoolException("浠诲姟鏈笂鎶ラ噸閲忥紝鏃犳硶瀹岀粨浠诲姟锛侊紒");
                     }
                 }
-            } else {
-                throw new CoolException("鏁版嵁閿欒锛屽綋鍓嶄换鍔$姸鎬佹湁璇� 锛�");
+                if (mast.getIoType() == 1 || mast.getIoType() == 2 ||mast.getIoType() == 10) {
+                    mast.setWrkSts(4L);
+                } else if ((mast.getIoType() == 101||mast.getIoType()==110) && mast.getWrkSts()<14) {
+                    mast.setWrkSts(14L);
+                    if(Cools.isEmpty(mast.getStaNo())){
+                        mast.setOveMk("Y");
+                    }
+                }
+                if (!wrkMastService.updateById(mast)) {
+                    throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+                }
+            } else if (params.getMsgType().equals("task_cancel")) {
+                //todo 鍙栨秷浠诲姟
+            }else if (params.getMsgType().equals("task_arrive")) {
+                //鍒拌揪鐩殑鍦�
+                //濡傛灉鍑哄簱浠诲姟鏄法鍖哄垯闇�瑕佺敓鎴愭柊鐨勫叆搴撲换鍔″叆搴�
+                if(!Cools.isEmpty(mast.getLocNo())){
+                    mast.setOnlineYn("N");//绛夊緟鐢熸垚璺ㄥ尯鍏ュ簱浠诲姟
+                }
+                mast.setWrkSts(14L);
+                if(Cools.isEmpty(mast.getStaNo())){
+                    mast.setOveMk("Y");
+                }
+                mast.setModiTime(new Date());
+                if (!wrkMastService.updateById(mast)) {
+                    throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+                }
             }
+        } else if (params.getNotifyType().equals("weight")) {
+
         }
         return R.ok();
     }
+    //杈撳叆搴撲綅鑷姩鍐荤粨绠楀嚭鐩搁偦搴撲綅搴忓彿
+    @Override
+    public Integer[] freezeLocAround(Integer locId) {
+        Integer[] locAround = new Integer[3];
+        if (Objects.isNull(locId)) {
+            throw new CoolException("搴撲綅ID涓嶈兘涓虹┖锛侊紒");
+        }else if (locId==1){
+            locAround[0] = 2;
+            locAround[1] = 3;
+            locAround[2] = 5;
+        }else if (locId==2){
+            locAround[0] = 1;
+            locAround[1] = 6;
+            locAround[2] = 0;
+        }else if (locId==3){
+            locAround[0] = 1;
+            locAround[1] = 4;
+            locAround[2] = 0;
+        }else if (locId==4){
+            locAround[0] = 5;
+            locAround[1] = 3;
+            locAround[2] = 0;
+        }else if (locId==5){
+            locAround[0] = 4;
+            locAround[1] = 1;
+            locAround[2] = 6;
+        }else if (locId==6){
+            locAround[0] = 2;
+            locAround[1] = 5;
+            locAround[2] = 0;
+        }
+        return locAround;
+    }
 }
diff --git a/src/main/java/com/zy/asrs/controller/LocMastController.java b/src/main/java/com/zy/asrs/controller/LocMastController.java
index b72e411..a0cc17c 100644
--- a/src/main/java/com/zy/asrs/controller/LocMastController.java
+++ b/src/main/java/com/zy/asrs/controller/LocMastController.java
@@ -48,6 +48,10 @@
     private WrkDetlLogService wrkDetlLogService;
     @Autowired
     private BasAreasService basAreasService;
+    @Autowired
+    private LocAroundBindService locAroundBindService;
+    @Autowired
+    private BasDeviceService basDeviceService;
 
     @RequestMapping(value = "/locMast/init/pwd")
     public R locMastInitPwd(@RequestParam(required = false) String pwd) {
@@ -78,8 +82,7 @@
                   @RequestParam Map<String, Object> param) {
         excludeTrash(param);
         EntityWrapper<LocMast> wrapper = new EntityWrapper<>();
-        wrapper.eq("frozen", 0)
-                .eq("deleted", 0);
+        wrapper.eq("deleted", 0);
         convert(param, wrapper);
         if (!Cools.isEmpty(orderByField)) {
             wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));
@@ -350,4 +353,52 @@
             return R.error("鍒濆鍖栧け璐�===>" + e.getMessage());
         }
     }
+
+    @GetMapping(value = "/locMast/jt")
+    @ManagerAuth
+    public R jt() {
+        List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
+                .eq("whs_type", 2)
+                .eq("loc_sts", "O")
+                .orderBy("loc_no"));
+        //鏈哄彴鍙�
+        long i = 1;
+        //鏈哄彴鎺掑簭
+        int j = 0;
+        int[] arr =  {3,4,1,5,2,6};
+        for (LocMast locMast : locMasts) {
+            LocAroundBind locAroundBind = new LocAroundBind(
+                    i,
+                    i+"",
+                    locMast.getLocNo(),
+                    "O",
+                    arr[j++]
+            );
+            locAroundBindService.insert(locAroundBind);
+            if(j==6){
+                j = 0;
+                i++;
+            }
+        }
+        return R.ok();
+    }
+
+    @GetMapping(value = "/locMast/addjt")
+    @ManagerAuth
+    public R addjt() {
+        Date date = new Date();
+        for (int i =1 ;i<52;i++){
+            BasDevice basDevice =new BasDevice(
+                    i+"",
+                    i+"",
+                    date,
+                    "9995",
+                    date,
+                    "9995",
+                    1
+            );
+            basDeviceService.insert(basDevice);
+        }
+        return R.ok();
+    }
 }
diff --git a/src/main/java/com/zy/asrs/controller/OpenController.java b/src/main/java/com/zy/asrs/controller/OpenController.java
index 8b0604a..17b8a2b 100644
--- a/src/main/java/com/zy/asrs/controller/OpenController.java
+++ b/src/main/java/com/zy/asrs/controller/OpenController.java
@@ -1,11 +1,16 @@
 package com.zy.asrs.controller;
 
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.plugins.Page;
 import com.core.annotations.AppAuth;
 import com.core.common.*;
 import com.core.exception.CoolException;
+import com.zy.asrs.entity.*;
+import com.zy.asrs.entity.AxisBean;
 import com.zy.asrs.entity.param.*;
-import com.zy.asrs.service.OpenService;
+import com.zy.asrs.mapper.ReportQueryMapper;
+import com.zy.asrs.service.*;
 import com.zy.common.model.DetlDto;
 import com.zy.common.web.BaseController;
 import lombok.extern.slf4j.Slf4j;
@@ -13,9 +18,8 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.text.SimpleDateFormat;
+import java.util.*;
 
 /**
  * Created by vincent on 2022/4/8
@@ -32,6 +36,18 @@
 
     @Autowired
     private OpenService openService;
+    @Autowired
+    private MatService matService;
+    @Autowired
+    private LocMastService locMastService;
+    @Autowired
+    private LocDetlService locDetlService;
+    @Autowired
+    private ReportQueryMapper reportQueryMapper;
+    @Autowired
+    private WrkMastService wrkMastService;
+    @Autowired
+    private WrkDetlService wrkDetlService;
 
     @PostMapping("/order/matSync/default/v2")
 //    @AppAuth(memo = "鍟嗗搧淇℃伅鍚屾鎺ュ彛")
@@ -134,7 +150,7 @@
         if (Cools.isEmpty(param.getOrderType())) {
             return R.error("鍗曟嵁绫诲瀷[orderType]涓嶈兘涓虹┖");
         }
-        if (Cools.isEmpty(param.getOrderDetails())) {
+        if (Cools.isEmpty(param.getMatList())) {
             return R.error("鍗曟嵁鏄庣粏[orderDetails]涓嶈兘涓虹┖");
         }
         openService.pakoutOrderCreate(param);
@@ -216,4 +232,138 @@
         System.out.println(JSON.toJSONString(param1));
     }
 
+    /*************************************鐢佃鏈虹▼搴�***********************************************/
+
+    @GetMapping("/locDetl/statistics")
+    public R locDetlStatistics(){
+        HashMap<String, Object> param = new HashMap<>();
+        Page<LocDetl> stockStatis = locDetlService.getStockStatis(toPage(1, 100, param, LocDetl.class));
+        for (LocDetl locDetl : stockStatis.getRecords()) {
+            Mat mat = matService.selectByMatnr(locDetl.getMatnr());
+            if (mat != null) {
+                locDetl.sync(mat);
+            }
+        }
+        return R.ok(stockStatis);
+    }
+
+    @GetMapping("/line/charts")
+    public R locIoLineCharts(){
+        Map<String,Object> map=new HashMap<String, Object>();
+        List<AxisBean> list = new ArrayList<AxisBean>();
+
+        List<WorkChartAxis> listChart = reportQueryMapper.getChartAxis();
+
+        if(listChart!=null) {
+            ArrayList<Integer> data1 = new ArrayList<Integer>();
+            ArrayList<Integer> data2 = new ArrayList<Integer>();
+
+            SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
+            Calendar calendar = Calendar.getInstance();
+            calendar.add(Calendar.DATE, -12);
+            for(int i=0;i<12;i++) {
+                boolean flag = true;
+                calendar.add(Calendar.DATE, 1);
+                String str = sf.format(calendar.getTime());
+                for(WorkChartAxis workChart : listChart) {
+                    if(str.equals(workChart.getYmd())) {
+                        data1.add(workChart.getInqty());
+                        data2.add(workChart.getOutqty());
+                        flag = false;
+                        break;
+                    }
+                }
+                if(flag) {
+                    data1.add(0);
+                    data2.add(0);
+                }
+            }
+            AxisBean inqty = new AxisBean();
+            inqty.setName("鍏ュ簱鏁伴噺");
+            Integer[] array1 = new Integer[data1.size()];
+            inqty.setData(data1.toArray(array1));
+            list.add(inqty);
+            AxisBean outqty = new AxisBean();
+            outqty.setName("鍑哄簱鏁伴噺");
+            Integer[] array2 = new Integer[data2.size()];
+            outqty.setData(data2.toArray(array2));
+            list.add(outqty);
+        }
+        map.put("rows",list);
+        return R.ok(map);
+    }
+
+    /**
+     * 搴撳瓨淇℃伅鏌ヨ鎺ュ彛
+     */
+    @GetMapping("/queryLoc")
+    public synchronized R queryLoc() {
+        List<Map<String, Object>> pie = new ArrayList<>();
+        LocChartPie locUseRate = reportQueryMapper.getLocUseRate();
+
+        if (locUseRate != null) {
+            Map<String, Object> map = new HashMap<>();
+            map.put("name", "鍦ㄥ簱");
+            map.put("value", locUseRate.getFqty());
+            pie.add(map);
+
+            Map<String, Object> map1 = new HashMap<>();
+            map1.put("name", "绌�");
+            map1.put("value", locUseRate.getOqty());
+            pie.add(map1);
+
+            Map<String, Object> map2 = new HashMap<>();
+            map2.put("name", "浣跨敤");
+            map2.put("value", locUseRate.getUqty());
+            pie.add(map2);
+
+            Map<String, Object> map3 = new HashMap<>();
+            map3.put("name", "绂佺敤");
+            map3.put("value", locUseRate.getXqty());
+            pie.add(map3);
+        }
+
+        // 鎬诲簱浣嶆暟
+        Integer total = (int) Arith.add(0, locUseRate.getFqty(), locUseRate.getOqty(), locUseRate.getUqty(), locUseRate.getXqty());
+        // 浣跨敤涓�
+        Integer used = locUseRate.getFqty() + locUseRate.getUqty();
+        // 搴撲綅浣跨敤鐜�
+        double usedDivides = Arith.divides(3, used, total);
+        double usedPr = Arith.multiplys(1, usedDivides, 100);
+
+        return R.ok(
+                Cools.add("pie", pie)
+                        .add("stockCount", locUseRate.getFqty())
+                        .add("emptyCount", locUseRate.getOqty())
+                        .add("disableCount", locUseRate.getXqty())
+                        .add("total", total)
+                        .add("used", used)
+                        .add("usedPr", usedPr)
+        );
+    }
+
+    /**
+     * 浠诲姟鏌ヨ鎺ュ彛
+     */
+    @PostMapping("/queryTask")
+    public synchronized R queryTask(@RequestBody QueryTaskParam param) {
+        if (Cools.isEmpty(param)) {
+            return R.parse(BaseRes.PARAM);
+        }
+        if (Cools.isEmpty(param.getTaskNo())) {
+            return R.error("浠诲姟鍙穂taskNo]涓嶈兘涓虹┖");
+        }
+        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", param.getTaskNo()));
+        if (wrkMast == null) {
+            return R.error("浠诲姟涓嶅瓨鍦�");
+        }
+
+        List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(Integer.valueOf(param.getTaskNo()));
+
+        HashMap<String, Object> map = new HashMap<>();
+        map.put("taskNo", param.getTaskNo());
+        map.put("ioType", wrkMast.getIoType());
+        map.put("wrkDetls", wrkDetls);
+        return R.ok().add(map);
+    }
 }
diff --git a/src/main/java/com/zy/asrs/controller/OrderPakinController.java b/src/main/java/com/zy/asrs/controller/OrderPakinController.java
index fb81d0f..0fb32b4 100644
--- a/src/main/java/com/zy/asrs/controller/OrderPakinController.java
+++ b/src/main/java/com/zy/asrs/controller/OrderPakinController.java
@@ -11,6 +11,7 @@
 import com.zy.asrs.entity.param.OrderDomainParam;
 import com.zy.asrs.entity.result.WrkTraceVo;
 import com.zy.asrs.service.*;
+import com.zy.asrs.service.impl.MatServiceImpl;
 import com.zy.common.model.DetlDto;
 import com.zy.common.web.BaseController;
 import org.springframework.beans.BeanUtils;
@@ -42,6 +43,8 @@
     private WrkMastService wrkMastService;
     @Autowired
     private WrkMastLogService wrkMastLogService;
+    @Autowired
+    private MatServiceImpl matService;
 
     @RequestMapping(value = "/order/nav/list/auth")
     @ManagerAuth
@@ -166,6 +169,8 @@
                 }
             } else {
                 list.add(dto);
+                Mat mat = matService.selectByMatnr(orderDetl.getMatnr());
+                orderDetl.sync(mat);
                 orderDetl.setOrderId(order.getId());
                 orderDetl.setOrderNo(order.getOrderNo());
                 orderDetl.setCreateBy(getUserId());
diff --git a/src/main/java/com/zy/asrs/controller/OrderPakoutController.java b/src/main/java/com/zy/asrs/controller/OrderPakoutController.java
index 23fbfff..f35ed84 100644
--- a/src/main/java/com/zy/asrs/controller/OrderPakoutController.java
+++ b/src/main/java/com/zy/asrs/controller/OrderPakoutController.java
@@ -11,6 +11,8 @@
 import com.zy.asrs.entity.param.OrderDomainParam;
 import com.zy.asrs.entity.result.WrkTraceVo;
 import com.zy.asrs.service.*;
+import com.zy.asrs.service.impl.MatServiceImpl;
+import com.zy.asrs.service.impl.OrderPakoutServiceImpl;
 import com.zy.common.model.DetlDto;
 import com.zy.common.web.BaseController;
 import org.springframework.beans.BeanUtils;
@@ -42,6 +44,10 @@
     private WrkMastService wrkMastService;
     @Autowired
     private WrkMastLogService wrkMastLogService;
+    @Autowired
+    private MatServiceImpl matService;
+    @Autowired
+    private OrderPakoutServiceImpl orderPakoutService;
 
     @RequestMapping(value = "/order/nav/list/auth")
     @ManagerAuth
@@ -106,7 +112,7 @@
             }
             param.setOrderNo(prefix + snowflakeIdWorker.nextId());
         }
-        OrderPakout order = orderService.selectByNo(param.getOrderNo());
+        OrderPakout order = orderPakoutService.selectByNo(param.getOrderNo());
         if (order != null) {
             return R.error("鍗曟嵁缂栧彿宸插瓨鍦�");
         }
@@ -163,8 +169,11 @@
                     throw new CoolException("淇濆瓨璁㈠崟鏄庣粏妗eけ璐�");
                 }
             } else {
+                Mat mat = matService.selectByMatnr(orderDetl.getMatnr());
                 list.add(dto);
                 orderDetl.setOrderId(order.getId());
+                orderDetl.sync(mat);
+                orderDetl.setBatch(Cools.isEmpty(dto.getBatch())? "" :dto.getBatch());
                 orderDetl.setOrderNo(order.getOrderNo());
                 orderDetl.setCreateBy(getUserId());
                 orderDetl.setCreateTime(now);
@@ -229,6 +238,7 @@
                 orderDetl.setUpdateTime(now);
                 orderDetl.setStatus(1);
                 orderDetl.setQty(0.0D);
+                orderDetl.setBatch(Cools.isEmpty(dto.getBatch())? "" :dto.getBatch());
                 if (!orderDetlService.insert(orderDetl)) {
                     throw new CoolException("淇濆瓨璁㈠崟鏄庣粏妗eけ璐�");
                 }
diff --git a/src/main/java/com/zy/asrs/controller/OutController.java b/src/main/java/com/zy/asrs/controller/OutController.java
index c8cf713..c32005b 100644
--- a/src/main/java/com/zy/asrs/controller/OutController.java
+++ b/src/main/java/com/zy/asrs/controller/OutController.java
@@ -95,6 +95,10 @@
                         LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(),
                                 issued >= locDetl.getAnfme() ? locDetl.getAnfme() : issued);
                         LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetl.getLocNo()));
+                        LocAroundBind bLocNo = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>().eq("b_loc_no", locMast.getLocNo()));
+                        if (!Cools.isEmpty(bLocNo)) {
+                            continue;
+                        }
                         locDto.setFrozen(locDetl.getFrozen());
                         locDto.setFrozenLoc(locMast.getFrozen());
                         List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl.getLocNo(), 107);
diff --git a/src/main/java/com/zy/asrs/controller/WaitPakinController.java b/src/main/java/com/zy/asrs/controller/WaitPakinController.java
index 7f13959..be214b9 100644
--- a/src/main/java/com/zy/asrs/controller/WaitPakinController.java
+++ b/src/main/java/com/zy/asrs/controller/WaitPakinController.java
@@ -81,7 +81,7 @@
     }
 
 	@RequestMapping(value = "/waitPakin/update/auth")
-	@ManagerAuth
+    @ManagerAuth
     public R update(WaitPakin waitPakin){
         if (Cools.isEmpty(waitPakin)){
             return R.error();
@@ -90,6 +90,25 @@
         return R.ok();
     }
 
+    @RequestMapping(value = "/waitPakin/update/beBatch/auth")
+    @ManagerAuth
+    public R updateBeBatch(@RequestBody Map<String, Object> param) {
+        String zpallet = (String) param.get("zpallet");
+        Integer beBatch = Integer.parseInt(param.get("beBatch").toString());
+
+        if (Cools.isEmpty(zpallet)) {
+            return R.error("鎵樼洏鐮佷笉鑳戒负绌�");
+        }
+
+        boolean result = waitPakinService.updateBeBatchByZpallet(zpallet, beBatch);
+
+        if (result) {
+            return R.ok("淇敼鎴愬姛");
+        } else {
+            return R.error("淇敼澶辫触");
+        }
+    }
+
     @RequestMapping(value = "/waitPakin/delete/auth")
     @ManagerAuth
     @Transactional
diff --git a/src/main/java/com/zy/asrs/controller/WrkMastLogController.java b/src/main/java/com/zy/asrs/controller/WrkMastLogController.java
index c16a7c2..203edfa 100644
--- a/src/main/java/com/zy/asrs/controller/WrkMastLogController.java
+++ b/src/main/java/com/zy/asrs/controller/WrkMastLogController.java
@@ -82,15 +82,16 @@
     private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
         for (Map.Entry<String, Object> entry : map.entrySet()){
             String val = String.valueOf(entry.getValue());
+            String key = humpToLine(entry.getKey());
             if (val.contains(RANGE_TIME_LINK)){
                 String[] dates = val.split(RANGE_TIME_LINK);
-                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
-                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+                wrapper.ge(key, DateUtils.convert(dates[0]));
+                wrapper.le(key, DateUtils.convert(dates[1]));
             } else {
-                if (entry.getKey().equals("manu_type")) {
-                    wrapper.like(entry.getKey(), val);
+                if (key.equals("manu_type")) {
+                    wrapper.like(key, val);
                 } else {
-                    wrapper.eq(entry.getKey(), val);
+                    wrapper.eq(key, val);
                 }
             }
         }
diff --git a/src/main/java/com/zy/asrs/entity/BasCrnp.java b/src/main/java/com/zy/asrs/entity/BasCrnp.java
index 73d632e..cad625c 100644
--- a/src/main/java/com/zy/asrs/entity/BasCrnp.java
+++ b/src/main/java/com/zy/asrs/entity/BasCrnp.java
@@ -13,12 +13,14 @@
 import com.core.common.Cools;
 import com.core.common.SpringUtils;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.io.Serializable;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
 @TableName("asr_bas_crnp")
+@Data
 public class BasCrnp implements Serializable {
 
     private static final long serialVersionUID = 1L;
@@ -156,6 +158,10 @@
     @TableField("tank_qty1")
     private Integer tankQty1;
 
+    @ApiModelProperty(value= "閲嶉噺")
+    @TableField("weight")
+    private Float weight;
+
     public BasCrnp() {}
 
     public BasCrnp(String inEnable,String outEnable,Integer crnSts,Integer wrkNo,Long crnErr,String frmLocno,Integer frmSta,Integer toSta,String toLocno,Long appeUser,Date appeTime,Long modiUser,Date modiTime,String hpMk,String retrieveMk,String ctlHp,String ctlRest,String empIn,Integer tankQty,Integer tankQty1) {
diff --git a/src/main/java/com/zy/asrs/entity/LocAroundBind.java b/src/main/java/com/zy/asrs/entity/LocAroundBind.java
index f18f3ed..02f3873 100644
--- a/src/main/java/com/zy/asrs/entity/LocAroundBind.java
+++ b/src/main/java/com/zy/asrs/entity/LocAroundBind.java
@@ -61,6 +61,14 @@
     @TableField("dev_name")
     private String devName;
 
+    @ApiModelProperty("鏈哄彴椤哄簭")
+    @TableField("order_no")
+    private Integer orderNo;
+
+    @ApiModelProperty("鏄惁鍐荤粨")
+    @TableField("freeze")
+    private Integer freeze;
+
     public LocAroundBind() {}
 
     public LocAroundBind(Long devId,String devNo,Long bLocId,String blocNo) {
@@ -99,4 +107,11 @@
 //    );
 
 
+    public LocAroundBind(Long devId, String devNo, String blocNo, String locType, int orderNo) {
+        this.devId = devId;
+        this.devNo = devNo;
+        this.blocNo = blocNo;
+        this.locType = locType;
+        this.orderNo = orderNo;
+    }
 }
diff --git a/src/main/java/com/zy/asrs/entity/LocMast.java b/src/main/java/com/zy/asrs/entity/LocMast.java
index d516a6f..0165fee 100644
--- a/src/main/java/com/zy/asrs/entity/LocMast.java
+++ b/src/main/java/com/zy/asrs/entity/LocMast.java
@@ -100,11 +100,11 @@
     @TableField("loc_type1")
     private Short locType1;
 
-    @ApiModelProperty(value= "瀹界獎绫诲瀷{0:鏈煡,1:绐勫簱浣�,2:瀹藉簱浣峿")
+    @ApiModelProperty(value= "鏈哄彴鍙�")
     @TableField("loc_type2")
     private Short locType2;
 
-    @ApiModelProperty(value= "杞婚噸绫诲瀷{0:鏈煡,1:杞诲簱浣�,2:閲嶅簱浣峿")
+    @ApiModelProperty(value= "鏈哄彴鍙锋帓搴�")
     @TableField("loc_type3")
     private Short locType3;
 
diff --git a/src/main/java/com/zy/asrs/entity/Mat.java b/src/main/java/com/zy/asrs/entity/Mat.java
index b3abbfd..54ac096 100644
--- a/src/main/java/com/zy/asrs/entity/Mat.java
+++ b/src/main/java/com/zy/asrs/entity/Mat.java
@@ -81,6 +81,21 @@
     private String name;
 
     /**
+     * 褰掗浂闃堝��
+     */
+    @ApiModelProperty(value= "褰掗浂闃堝��")
+    @ExcelProperty(value = "褰掗浂闃堝��")
+    @TableField("safe_qty")
+    private Double safeQty;
+
+    /**
+     * 浣撶Н
+     */
+    @ApiModelProperty(value= "浣撶Н")
+    @ExcelProperty(value = "姣忓叕鏂ら暱搴�")
+    private Double volume;
+
+    /**
      * 瑙勬牸
      */
     @ApiModelProperty(value= "瑙勬牸")
@@ -173,13 +188,6 @@
     @TableField("item_num")
     private String itemNum;
 
-    /**
-     * 瀹夊叏搴撳瓨閲�
-     */
-    @ApiModelProperty(value= "瀹夊叏搴撳瓨閲�")
-    @ExcelProperty(value = "褰掗浂闃堝��")
-    @TableField("safe_qty")
-    private Double safeQty;
 
     /**
      * 閲嶉噺
@@ -199,13 +207,6 @@
     @ApiModelProperty(value= "闀垮害")
     @TableField("man_length")
     private Double manLength;
-
-    /**
-     * 浣撶Н
-     */
-    @ApiModelProperty(value= "浣撶Н")
-    @ExcelProperty(value = "姣忓叕鏂ら暱搴�")
-    private Double volume;
 
     /**
      * 涓夋柟缂栫爜
diff --git a/src/main/java/com/zy/asrs/entity/WaitPakin.java b/src/main/java/com/zy/asrs/entity/WaitPakin.java
index 51002e4..87bd80e 100644
--- a/src/main/java/com/zy/asrs/entity/WaitPakin.java
+++ b/src/main/java/com/zy/asrs/entity/WaitPakin.java
@@ -281,7 +281,7 @@
         return this.boxType1;
     }
 
-//    public void sync(Object source) {
-//        Synchro.Copy(source, this);
-//    }
+    public void sync(Object source) {
+        Synchro.Copy(source, this);
+    }
 }
diff --git a/src/main/java/com/zy/asrs/entity/WrkMast.java b/src/main/java/com/zy/asrs/entity/WrkMast.java
index fff8f61..a389c76 100644
--- a/src/main/java/com/zy/asrs/entity/WrkMast.java
+++ b/src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -116,6 +116,14 @@
     @TableField("source_loc_no")
     private String sourceLocNo;
 
+    /**
+     * N : 寰呯敓鎴愬叆搴撲换鍔�
+     * Y : 鎴愬姛鐢熸垚鍏ュ簱浠诲姟
+     */
+    @ApiModelProperty(value= "鐢熸垚璺ㄥ尯鍏ュ簱浠诲姟鏍囪")
+    @TableField("online_yn")
+    private String onlineYn;
+
     @ApiModelProperty(value= "")
     @TableField("loc_sts")
     private String locSts;
@@ -129,10 +137,6 @@
     @ApiModelProperty(value= "")
     @TableField("link_mis")
     private String linkMis;
-
-    @ApiModelProperty(value= "")
-    @TableField("online_yn")
-    private String onlineYn;
 
     @ApiModelProperty(value= "")
     @TableField("upd_mk")
diff --git a/src/main/java/com/zy/asrs/entity/WrkMastLog.java b/src/main/java/com/zy/asrs/entity/WrkMastLog.java
index 820f59d..8e91845 100644
--- a/src/main/java/com/zy/asrs/entity/WrkMastLog.java
+++ b/src/main/java/com/zy/asrs/entity/WrkMastLog.java
@@ -30,6 +30,7 @@
     private Long id;
 
     @ApiModelProperty("鏃ュ織ID")
+    @TableField("log_id")
     private Long logId;
 
     /**
diff --git a/src/main/java/com/zy/asrs/entity/param/OpenOrderPakoutParam.java b/src/main/java/com/zy/asrs/entity/param/OpenOrderPakoutParam.java
index b78ee02..5c12e75 100644
--- a/src/main/java/com/zy/asrs/entity/param/OpenOrderPakoutParam.java
+++ b/src/main/java/com/zy/asrs/entity/param/OpenOrderPakoutParam.java
@@ -17,24 +17,15 @@
 
     private String orderNo;
 
+    private String billType;
+
     private String orderType;
 
     private String orderTime;
 
-    private List<DetlDto> orderDetails;
+    private List<DetlDto> matList;
 
     private String lgort;
 
-//    public static void main(String[] args) {
-//        OpenOrderPakoutParam param = new OpenOrderPakoutParam();
-//        param.setOrderNo("LXT12321321");
-//        param.setOrderType("浜よ揣鍗�");
-//        param.setOrderTime(DateUtils.convert(new Date()));
-//        List<DetlDto> orderDetails = new ArrayList<>();
-//        param.setOrderDetails(orderDetails);
-//        DetlDto detlDto = new DetlDto("15099-10000", 3.0);
-//        orderDetails.add(detlDto);
-//        System.out.println(JSON.toJSONString(param));
-//    }
 
 }
diff --git a/src/main/java/com/zy/asrs/entity/param/QueryTaskParam.java b/src/main/java/com/zy/asrs/entity/param/QueryTaskParam.java
new file mode 100644
index 0000000..c37e5ae
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/param/QueryTaskParam.java
@@ -0,0 +1,10 @@
+package com.zy.asrs.entity.param;
+
+import lombok.Data;
+
+@Data
+public class QueryTaskParam {
+
+    private String taskNo;
+
+}
diff --git a/src/main/java/com/zy/asrs/service/WaitPakinService.java b/src/main/java/com/zy/asrs/service/WaitPakinService.java
index b09602a..bbfc8b3 100644
--- a/src/main/java/com/zy/asrs/service/WaitPakinService.java
+++ b/src/main/java/com/zy/asrs/service/WaitPakinService.java
@@ -5,4 +5,6 @@
 
 public interface WaitPakinService extends IService<WaitPakin> {
 
+    boolean updateBeBatchByZpallet(String zpallet, Integer beBatch);
+
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java
index babb339..a85f6dd 100644
--- a/src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java
@@ -45,26 +45,26 @@
     @Override
     public BasDevp checkSiteStatus(Integer devpNo, boolean pakin) {
         BasDevp station = selectById(devpNo);
-        if (station == null){
-            throw new CoolException(devpNo+"绔欑偣涓嶅瓨鍦�");
-        }
-        if (pakin) {
-            if(station.getAutoing()==null || !station.getAutoing().equals("Y")) {
-                throw new CoolException(devpNo+"绔欑偣涓嶆槸鑷姩鐘舵��");
-            }
-            if(station.getLoading()==null || !station.getLoading().equals("Y")) {
-                throw new CoolException(devpNo+"绔欑偣鏃犵墿");
-            }
-            if(station.getWrkNo()!=null && station.getWrkNo()>0 && station.getWrkNo() < 9990) {
-                throw new CoolException(devpNo+"绔欑偣宸叉湁宸ヤ綔鍙�");
-            }
-//            if(!station.getInEnable().equals("Y")) {
-//                throw new CoolException(devpNo+"绔欑偣涓嶆槸鍙叆鐘舵��");
+//        if (station == null){
+//            throw new CoolException(devpNo+"绔欑偣涓嶅瓨鍦�");
+//        }
+//        if (pakin) {
+//            if(station.getAutoing()==null || !station.getAutoing().equals("Y")) {
+//                throw new CoolException(devpNo+"绔欑偣涓嶆槸鑷姩鐘舵��");
 //            }
-            if(wrkMastService.getWorkingMast(devpNo)>0){
-                throw new CoolException(devpNo+"绔欑偣涓嶈兘鍚屾椂鐢熸垚涓ょ瑪鍏ュ簱宸ヤ綔妗�");
-            }
-        }
+//            if(station.getLoading()==null || !station.getLoading().equals("Y")) {
+//                throw new CoolException(devpNo+"绔欑偣鏃犵墿");
+//            }
+//            if(station.getWrkNo()!=null && station.getWrkNo()>0 && station.getWrkNo() < 9990) {
+//                throw new CoolException(devpNo+"绔欑偣宸叉湁宸ヤ綔鍙�");
+//            }
+////            if(!station.getInEnable().equals("Y")) {
+////                throw new CoolException(devpNo+"绔欑偣涓嶆槸鍙叆鐘舵��");
+////            }
+//            if(wrkMastService.getWorkingMast(devpNo)>0){
+//                throw new CoolException(devpNo+"绔欑偣涓嶈兘鍚屾椂鐢熸垚涓ょ瑪鍏ュ簱宸ヤ綔妗�");
+//            }
+//        }
         return station;
     }
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
index 5277f6f..273e06e 100644
--- a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -262,7 +262,7 @@
         }
         // 鍗曟嵁鏄庣粏妗�
         List<DetlDto> list = new ArrayList<>();
-        List<DetlDto> orderDetails = param.getOrderDetails();
+        List<DetlDto> orderDetails = param.getMatList();
         for (DetlDto detail : orderDetails) {
             DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(),detail.getBrand(),detail.getStandby1(),detail.getStandby2(),detail.getStandby3(),detail.getLineNumber(),
                     detail.getBoxType1(),detail.getBoxType2(),detail.getBoxType3(), detail.getAnfme());
diff --git a/src/main/java/com/zy/asrs/service/impl/OrderPakinServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OrderPakinServiceImpl.java
index 2437d39..9fcd63e 100644
--- a/src/main/java/com/zy/asrs/service/impl/OrderPakinServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OrderPakinServiceImpl.java
@@ -134,7 +134,7 @@
                 openParam.setOrderNo(orderNo);
                 openParam.setOrderTime(DateUtils.convert(wrkMast.getModiTime()));
                 openParam.setOrderType("鎵嬪姩鍑哄簱鍗�");
-                openParam.setOrderDetails(detlDtos);
+                openParam.setMatList(detlDtos);
                 openService.pakoutOrderCreate(openParam);
             }
 
diff --git a/src/main/java/com/zy/asrs/service/impl/OrderPakoutServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OrderPakoutServiceImpl.java
index 592f297..13a6d47 100644
--- a/src/main/java/com/zy/asrs/service/impl/OrderPakoutServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OrderPakoutServiceImpl.java
@@ -133,7 +133,7 @@
                 openParam.setOrderNo(orderNo);
                 openParam.setOrderTime(DateUtils.convert(wrkMast.getModiTime()));
                 openParam.setOrderType("鎵嬪姩鍑哄簱鍗�");
-                openParam.setOrderDetails(detlDtos);
+                openParam.setMatList(detlDtos);
                 openService.pakoutOrderCreate(openParam);
             }
 
diff --git a/src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java
index ba05f58..2293a73 100644
--- a/src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java
@@ -134,7 +134,7 @@
                 openParam.setOrderNo(orderNo);
                 openParam.setOrderTime(DateUtils.convert(wrkMast.getModiTime()));
                 openParam.setOrderType("鎵嬪姩鍑哄簱鍗�");
-                openParam.setOrderDetails(detlDtos);
+                openParam.setMatList(detlDtos);
                 openService.pakoutOrderCreate(openParam);
             }
 
diff --git a/src/main/java/com/zy/asrs/service/impl/WaitPakinServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WaitPakinServiceImpl.java
index fada025..19cb2d3 100644
--- a/src/main/java/com/zy/asrs/service/impl/WaitPakinServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WaitPakinServiceImpl.java
@@ -1,5 +1,6 @@
 package com.zy.asrs.service.impl;
 
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.zy.asrs.mapper.WaitPakinMapper;
 import com.zy.asrs.entity.WaitPakin;
 import com.zy.asrs.service.WaitPakinService;
@@ -9,4 +10,11 @@
 @Service("waitPakinService")
 public class WaitPakinServiceImpl extends ServiceImpl<WaitPakinMapper, WaitPakin> implements WaitPakinService {
 
+    @Override
+    public boolean updateBeBatchByZpallet(String zpallet, Integer beBatch) {
+        WaitPakin updateEntity = new WaitPakin();
+        updateEntity.setBeBatch(beBatch);
+        return this.update(updateEntity, new EntityWrapper<WaitPakin>().eq("zpallet", zpallet));
+    }
+
 }
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 1748b6e..6298d71 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -420,7 +420,7 @@
         int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
         String wrkCode = null;
         if (!Objects.isNull(deviceNo)) {
-            wrkCode = workNo + "-1";
+            wrkCode = workNo + "";
             ioType = 101;
             generateOutStock(taskDto, userId, workNo, wrkCode, now, ioType, locMast, staDesc, deviceNo);
         } else {
@@ -455,7 +455,7 @@
 
         LocAroundBind binds = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>()
                 .eq("loc_type", LocStsType.LOC_STS_TYPE_O.type)
-                .eq("dev_no", basDevice.getDevNo()).orderBy("is_default", false));
+                .eq("dev_no", basDevice.getType()).orderBy("order_no"));
 
         if (Objects.isNull(binds)) {
             throw new CoolException("鏈哄彴鏈缃粯璁ゅ伐浣滀綅锛侊紒");
@@ -500,6 +500,7 @@
             throw new CoolException("棰勭害搴撲綅鐘舵�佸け璐ワ紝搴撲綅鍙凤細" + locMasts.getLocNo());
         }
 
+
         List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locMasts.getLocNo(), 1);
         //TODO 1. 鑾峰彇鍏ュ簱绔欑偣锛� 鐩爣搴撲綅  3. 灏嗗嚭搴撴槑缁嗘坊鍔犺嚦鍏ュ簱鏄庣粏
         Integer staNo = staNos.stream().findFirst().get();
@@ -513,9 +514,11 @@
         wrkMast.setIoType(ioType); // 鍏ュ嚭搴撶姸鎬�
         wrkMast.setIoPri(13D); // 浼樺厛绾э細13
         wrkMast.setCrnNo(locMast.getCrnNo());
-        wrkMast.setSourceStaNo(staDesc.getCrnStn() + ""); // 婧愮珯
 //        wrkMast.setStaNo(staDesc.getStnNo() + ""); // 鐩爣绔�
-        wrkMast.setStaNo(staNo + ""); // 鐩爣绔�
+        if(!Objects.equals(locMasts.getCrnNo(), locMast.getCrnNo())){
+            wrkMast.setSourceStaNo(staDesc.getCrnStn() + ""); // 婧愮珯
+            wrkMast.setStaNo(staNo + ""); // 鐩爣绔�
+        }
         wrkMast.setLocNo(locMasts.getLocNo());
         wrkMast.setSourceLocNo(taskDto.getLocNo()); // 婧愬簱浣�
         wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
@@ -1240,6 +1243,16 @@
             // 鍑哄簱 ===>> F.鍦ㄥ簱
             if (wrkMast.getIoType() > 100 && wrkMast.getIoType() != 110) {
                 locSts = "F";
+                if (!Cools.isEmpty(wrkMast.getLocNo())) {
+                    LocAroundBind bLocId = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>().eq("b_loc_id", wrkMast.getLocNo()));
+                    if (!Objects.isNull(bLocId)) {
+                        bLocId.setLocType(LocStsType.LOC_STS_TYPE_O.type);
+                        if (!locAroundBindService.updateById(bLocId)) {
+
+                        }
+                    }
+                }
+
                 // 绌烘澘鍑哄簱 ===>> D.绌烘《/绌烘爤鏉�
             } else if (wrkMast.getIoType() == 110) {
                 locSts = "D";
@@ -1455,11 +1468,13 @@
             ioType = 1;
         }
         wokNo = commonService.getWorkNo(0);
+        LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", wrkMast.getLocNo()));
+
         // 鑾峰彇鐩爣绔�
         Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                 .eq("type_no", ioType)
-                .eq("stn_no", wrkMast.getStaNo()) // 浣滀笟绔欑偣 = 鎷f枡鍑哄簱鐨勭洰鏍囩珯
-                .eq("crn_no", wrkMast.getCrnNo()); // 鍫嗗灈鏈哄彿
+//                .eq("stn_no", wrkMast.getStaNo()) // 浣滀笟绔欑偣 = 鎷f枡鍑哄簱鐨勭洰鏍囩珯
+                .eq("crn_no", locMast1.getCrnNo()); // 鍫嗗灈鏈哄彿
         StaDesc staDesc = staDescService.selectOne(wrapper);
         if (Cools.isEmpty(staDesc)) {
             throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
@@ -1476,10 +1491,10 @@
         FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(locDetl);
 
         // 婧愮珯鐐圭姸鎬佹娴�
-        BasDevp sourceStaNo = basDevpService.checkSiteStatus(Integer.parseInt(wrkMast.getStaNo()), false);
+        BasDevp sourceStaNo = basDevpService.checkSiteStatus(staDesc.getCrnStn(), false);
         sourceStaNo.setLocType1((short) 1);
         LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
-        StartupDto locNo = commonService.getLocNo(1, Integer.parseInt(wrkMast.getStaNo()), findLocNoAttributeVo, locTypeDto);
+        StartupDto locNo = commonService.getLocNo1(locMast1.getCrnNo());
 
         Date now = new Date();
         // 鍫嗗灈鏈虹珯鐐�(鐩爣绔�)
@@ -1489,9 +1504,9 @@
         mast.setWrkNo(wokNo);
         // 鏇存柊宸ヤ綔妗f暟鎹姸鎬�
         mast.setIoType(ioType); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54,107->57
-        mast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋
-        mast.setSourceStaNo(wrkMast.getStaNo()); // 婧愮珯
-        mast.setStaNo(staNo + ""); // 鐩爣绔�
+        mast.setWrkSts(1L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋
+        mast.setSourceStaNo(""); // 婧愮珯
+        mast.setStaNo(""); // 鐩爣绔�
         mast.setSourceLocNo(wrkMast.getLocNo());
         mast.setLocNo(locNo.getLocNo()); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣�
         mast.setModiTime(now);
diff --git a/src/main/java/com/zy/asrs/service/impl/WrkMastLogServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WrkMastLogServiceImpl.java
index 9920416..91f9b29 100644
--- a/src/main/java/com/zy/asrs/service/impl/WrkMastLogServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WrkMastLogServiceImpl.java
@@ -36,8 +36,11 @@
         }
         WrkMastLog mastLog = new WrkMastLog();
         BeanUtils.copyProperties(mast, mastLog);
-//        mastLog.setLogId(mast.getId());
-//
+        if (mast.getWrkSts() != null) {
+            mastLog.setWrkSts(mast.getWrkSts().intValue());
+        }
+        mastLog.setLogId(Long.valueOf(mast.getWrkNo()));
+
         if (!wrkMastLogService.insert(mastLog)) {
             throw new CoolException("浠诲姟鏃ュ織淇濆瓨澶辫触锛侊紒");
         }
diff --git a/src/main/java/com/zy/asrs/task/OrderSyncScheduler.java b/src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
index 7ee12c0..ebf389c 100644
--- a/src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
+++ b/src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
@@ -1,13 +1,16 @@
 package com.zy.asrs.task;
 
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 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.core.common.R;
+import com.zy.asrs.entity.*;
+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;
 import com.zy.common.entity.Parameter;
+import com.zy.common.model.LocDto;
+import com.zy.common.model.TaskDto;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -15,7 +18,7 @@
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
-import java.util.List;
+import java.util.*;
 
 /**
  * updated by IX in 2024/12/17
@@ -33,6 +36,24 @@
 
     @Value("${erp.switch.ErpReportOld}")
     private boolean ErpReportOld;
+    @Autowired
+    private OrderPakoutService orderPakoutService;
+    @Autowired
+    private DocTypeService docTypeService;
+    @Autowired
+    private OrderDetlPakoutService orderDetlPakoutService;
+    @Autowired
+    private LocDetlService locDetlService;
+    @Autowired
+    private LocMastService locMastService;
+    @Autowired
+    private StaDescService staDescService;
+    @Autowired
+    private BasDevpService basDevpService;
+    @Autowired
+    private WorkService workService;
+    @Autowired
+    private LocAroundBindService locAroundBindService;
 
     @Scheduled(cron = "0 0 1 * * ? ")
     public void clearApiLog() {
@@ -43,73 +64,125 @@
         }
     }
 
-    @Scheduled(cron = "0 1 * * * ? ")
-    @Async("orderThreadPool")
-    public void completeAndReportOrderIssuedOnceMore() {
-        List<Order> orderList = orderService.selectComplete99();
-        for (Order order : orderList) {
-            try {
-                ReturnT<String> result = orderSyncHandler.startOrderIssuedOnceMore(order);
-                if (!result.isSuccess()) {
-                    log.error("鍗曟嵁[orderNo={}]鍐嶆杞墽琛岃〃澶辫触:{}", order.getOrderNo(),result.getMsg());
+
+    @Scheduled(cron = "0/30 * * * * ? ")
+    public void checkOrderPakoutSettled() {
+        List<OrderPakout> list = orderPakoutService.selectBySettle(1L);
+        if (Cools.isEmpty(list)) {
+            return;
+        }
+        for (OrderPakout order : list) {
+            if (order.getDocType() != null) {
+                DocType docType = docTypeService.selectById(order.getDocType());
+                if (docType != null && Integer.valueOf(1).equals(docType.getPakout())) {
+                    List<LocDto> locDtos = new ArrayList<>();
+                    Set<String> exist = new HashSet<>();
+                    Boolean flag = false;
+                    // 鑾峰彇璇ヨ鍗曚腑璁㈠崟鏄庣粏閲岀殑id
+                    List<OrderDetlPakout> detls = orderDetlPakoutService.selectByOrderId(order.getId());
+                    if (!Cools.isEmpty(detls)) {
+                        for (OrderDetlPakout detl : detls) {
+
+                            double issued = Optional.of(detl.getAnfme() - detl.getWorkQty()).orElse(0.0D);
+                            if (issued <= 0.0D) {
+                                continue;
+                            }
+                            List<LocDetl> locDetls = locDetlService.queryStockAll(null, exist, detl.getMatnr(), detl.getBatch(),
+                                    detl.getBrand(), detl.getStandby1(), detl.getStandby2(), detl.getStandby3(), detl.getBoxType1(), detl.getBoxType2(), detl.getBoxType3());
+                            for (LocDetl locDetl : locDetls) {
+                                LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetl.getLocNo()).eq("loc_sts","F"));
+                                if (locMast != null) {
+                                    LocAroundBind bLocNo = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>().eq("b_loc_no", locMast.getLocNo()));
+                                    if (!Cools.isEmpty(bLocNo)) {
+                                        continue;
+                                    }
+                                }
+                                if (issued > 0) {
+                                    LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), detl.getOrderNo(),
+                                            issued >= locDetl.getAnfme() ? locDetl.getAnfme() : issued);
+//                                    LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetl.getLocNo()));
+                                    locDto.setFrozen(locDetl.getFrozen());
+                                    locDto.setFrozenLoc(locMast.getFrozen());
+                                    List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl.getLocNo(), issued >= locDetl.getAnfme() ? 101 : 103);
+                                    locDto.setStaNos(staNos);
+                                    locDto.setBrand(detl.getBrand());
+                                    locDto.setStandby1(detl.getStandby1());
+                                    locDto.setStandby2(detl.getStandby2());
+                                    locDto.setStandby3(detl.getStandby3());
+                                    locDto.setBoxType1(detl.getBoxType1());
+                                    locDto.setBoxType2(detl.getBoxType2());
+                                    locDto.setBoxType3(detl.getBoxType3());
+                                    locDtos.add(locDto);
+                                    exist.add(locDetl.getLocNo());
+                                    // 鍓╀綑寰呭嚭鏁伴噺閫掑噺
+                                    issued = issued - locDetl.getAnfme();
+                                } else {
+
+                                    break;
+                                }
+                            }
+                            if (issued > 0) {
+                                flag = true;
+                                break;
+                            }
+                        }
+                        if (flag) {
+                            continue;
+                        }
+                        List<TaskDto> taskDtos = new ArrayList<>();
+                        // 鏍规嵁 锛堝簱浣� & 鍑哄簱绔欙級 鍒嗙粍锛� 鐞嗘兂鐘舵�侊細涓�缁勪负涓�娆″嚭搴撲换鍔�
+                        for (LocDto locDto : locDtos) {
+                            if (locDto.isLack()) { continue; }
+                            TaskDto taskDto = new TaskDto(locDto.getLocNo(), locDto.getStaNo(), locDto, locDto.getStandby1());
+                            if (TaskDto.has(taskDtos, taskDto)) {
+                                TaskDto dto = TaskDto.find(taskDtos, taskDto);
+                                assert dto != null;
+                                dto.getLocDtos().addAll(taskDto.getLocDtos());
+                            } else {
+                                taskDtos.add(taskDto);
+                            }
+                        }
+                        // -----------------------------------------------------------------------------------------------
+                        for (TaskDto taskDto : taskDtos) {
+                            BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo());
+                            if (!Objects.isNull(taskDto.getDeviceNo())) {
+                                //鐢熸垚鍑哄簱浠诲姟
+                                workService.stockOut(staNo, taskDto, taskDto.getDeviceNo(), 9995L);
+                            } else  {
+                                workService.stockOut(staNo, taskDto, null, 9995L);
+                            }
+                        }
+                    }
                 }
-            } catch (Exception e){
-                log.error(e.getMessage());
-                log.error("鍗曟嵁[orderNo={}]鍐嶆杞墽琛岃〃澶辫触", order.getOrderNo());
             }
         }
     }
 
-    /**
-     * 涓婃姤鍗曟嵁杞墽琛屽崟鎹�
-     * @author Ryan
-     * @date 2026/1/5 14:07
-     */
-    @Scheduled(cron = "0/5 * * * * ? ")
-    @Async("orderThreadPool")
-    public void completeAndReportOrderIssued() {
-//        String erpReport = Parameter.get().getErpReport();
-//        if (!Cools.isEmpty(erpReport) && erpReport.equals("true")) {
-            List<Order> orderList = orderService.selectComplete1();
-//            List<Order> orderList = orderService.selectList(new EntityWrapper<Order>().eq("settle", 1L).eq("status", 1).orderBy("create_time", true));
-            for (Order order : orderList) {
-                try {
-                    ReturnT<String> result = orderSyncHandler.startOrderIssued(order);
-                    if (!result.isSuccess()) {
-                        log.error("鍗曟嵁[orderNo={}]杞墽琛岃〃澶辫触", order.getOrderNo());
-                    }
-                } catch (Exception e){
-                    log.error(e.getMessage());
-                    log.error("鍗曟嵁[orderNo={}]杞墽琛岃〃澶辫触", order.getOrderNo());
-                }
-            }
-//        }
-    }
 
-//    @Scheduled(cron = "0/5 * * * * ? ")
+    //    @Scheduled(cron = "0/5 * * * * ? ")
     @Async("orderThreadPool")
     public void completeAndReportOrderInAndOutUtil() {
 //        String erpReport = Parameter.get().getErpReport();
 //        if (!Cools.isEmpty(erpReport) && erpReport.equals("true")) {
-            List<Order> orders = OrderInAndOutUtil.selectComplete(null);
-            for (Order order : orders) {
-                try {
-                    ReturnT<String> result = orderSyncHandler.startOrderInAndOutUtil(order);
-                    if (!result.isSuccess()) {
-                        log.error("鍗曟嵁[orderNo={}]杞笂鎶ヨ〃澶辫触", order.getOrderNo());
-                    }
-                } catch (Exception e){
-                    log.error(e.getMessage());
+        List<Order> orders = OrderInAndOutUtil.selectComplete(null);
+        for (Order order : orders) {
+            try {
+                ReturnT<String> result = orderSyncHandler.startOrderInAndOutUtil(order);
+                if (!result.isSuccess()) {
                     log.error("鍗曟嵁[orderNo={}]杞笂鎶ヨ〃澶辫触", order.getOrderNo());
                 }
+            } catch (Exception e) {
+                log.error(e.getMessage());
+                log.error("鍗曟嵁[orderNo={}]杞笂鎶ヨ〃澶辫触", order.getOrderNo());
             }
+        }
 //        }
     }
 
-//    @Scheduled(cron = "0/30 * * * * ? ")
+    //    @Scheduled(cron = "0/30 * * * * ? ")
     @Async("orderThreadPool")
     public void completeAndReportOrderReport() {
-        if (!ErpReportOld){
+        if (!ErpReportOld) {
             return;
         }
         String erpReport = Parameter.get().getErpReport();
diff --git a/src/main/java/com/zy/asrs/task/WorkMastScheduler.java b/src/main/java/com/zy/asrs/task/WorkMastScheduler.java
index 39b00a3..df0a5de 100644
--- a/src/main/java/com/zy/asrs/task/WorkMastScheduler.java
+++ b/src/main/java/com/zy/asrs/task/WorkMastScheduler.java
@@ -1,14 +1,25 @@
 package com.zy.asrs.task;
 
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
+import com.core.common.R;
+import com.core.exception.CoolException;
 import com.zy.api.controller.params.WorkTaskParams;
 import com.zy.api.service.WcsApiService;
+import com.zy.asrs.entity.LocAroundBind;
+import com.zy.asrs.entity.LocMast;
 import com.zy.asrs.entity.Task;
 import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.mapper.TaskMapper;
+import com.zy.asrs.service.LocAroundBindService;
 import com.zy.asrs.service.TaskService;
 import com.zy.asrs.service.WrkMastService;
+import com.zy.asrs.service.impl.LocMastServiceImpl;
 import com.zy.asrs.task.core.ReturnT;
 import com.zy.asrs.task.handler.WorkMastHandler;
+import com.zy.asrs.utils.Utils;
+import com.zy.common.model.enums.WorkNoType;
+import com.zy.common.service.CommonService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -36,6 +47,12 @@
     private TaskService taskService;
     @Autowired
     private WcsApiService wcsApiService;
+    @Autowired
+    private LocMastServiceImpl locMastService;
+    @Autowired
+    private CommonService commonService;
+    @Autowired
+    private LocAroundBindService locAroundBindService;
 
     @Scheduled(cron = "0/3 * * * * ? ")
     private void execute() {
@@ -63,29 +80,124 @@
      * @author Ryan
      * @date 2026/1/10 14:42
      */
-//    @Scheduled(cron = "0/15 * * * * ? ")
+    @Scheduled(cron = "0/3 * * * * ? ")
     private void autoPubTasks() {
         List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_sts", Arrays.asList(1L, 11L)));
         if (wrkMasts.isEmpty()) {
             return;
         }
         Collections.shuffle(wrkMasts);
-        wrkMasts.forEach(wrkMast -> {
-            WorkTaskParams params = new WorkTaskParams();
-            if (wrkMast.getIoType().equals(1)) {
-                params.setType("in");
-                params.setTaskNo(wrkMast.getWrkCode())
-                        .setLocNo(wrkMast.getLocNo())
-                        .setBarcode(wrkMast.getBarcode())
-                        .setTaskPri(Integer.parseInt(wrkMast.getIoPri() + ""));
-            } else {
-                params.setType("out")
-                        .setTaskNo(wrkMast.getWrkCode())
-                        .setLocNo(wrkMast.getLocNo())
-                        .setStaNo(wrkMast.getStaNo())
-                        .setTaskPri(Integer.parseInt(wrkMast.getIoPri() + ""));
+        for (WrkMast wrkMast : wrkMasts) {
+            //鏌ョ湅涓嬪彂浠诲姟鏄惁涓哄喕缁撳簱浣嶏紝鏄喕缁撳簱浣嶅垯璺宠繃涓嬪彂浠诲姟
+            LocAroundBind locAroundBind = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>()
+                    .eq("b_loc_no", wrkMast.getLocNo())
+                    .eq("freeze", 1));
+            if (Cools.isEmpty(locAroundBind)) {
+                locAroundBind = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>()
+                        .eq("b_loc_no", wrkMast.getSourceLocNo())
+                        .eq("freeze", 1));
+                if (!Cools.isEmpty(locAroundBind)) {
+                    continue;
+                }
+            }else {
+                continue;
             }
-            wcsApiService.pubWrkToWcs(params);
-        });
+            Integer crnNo = wrkMast.getCrnNo();
+            //璇ュ爢鍨涙満宸茬粡涓嬪彂浠诲姟缁檞cs鍚庝笉鍐嶄笅鍙戞柊鐨勬惉杩愪换鍔�
+            List<WrkMast> wrkMasts1 = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("crn_no", crnNo).in("wrk_sts", Arrays.asList(2L, 12L)));
+            if (!wrkMasts1.isEmpty()) {
+                continue;
+            }
+            //婧愬簱浣嶄负鍐荤粨搴撲綅鏃剁姝笅鍙戞惉杩愪换鍔$粰鍫嗗灈鏈�
+            if (!Cools.isEmpty(wrkMast.getSourceLocNo())){
+                LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
+                        .eq("loc_no", wrkMast.getSourceLocNo())
+                        .eq("frozen",0));
+                if (Cools.isEmpty(locMast)) {
+                    continue;
+                }
+            }
+
+            //鐩爣搴撲綅涓哄喕缁撳簱浣嶆椂绂佹涓嬪彂鎼繍浠诲姟缁欏爢鍨涙満
+            if (!Cools.isEmpty(wrkMast.getLocNo())){
+                LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
+                        .eq("loc_no", wrkMast.getLocNo())
+                        .eq("frozen",0));
+                if (Cools.isEmpty(locMast)) {
+                    continue;
+                }
+            }
+
+            String wcsSourceLocNo = Cools.isEmpty(wrkMast.getSourceLocNo()) ? "" : Utils.WMSLocToWCSLoc(wrkMast.getSourceLocNo());
+            String wcsLocNo = Cools.isEmpty(wrkMast.getLocNo()) ? "" : Utils.WMSLocToWCSLoc(wrkMast.getLocNo());
+            WorkTaskParams params = new WorkTaskParams();
+            //鍑哄簱鍜岀Щ搴�
+            if(wrkMast.getIoType()==101&&!Cools.isEmpty(wrkMast.getStaNo())&& !wrkMast.getStaNo().equals("0")) {
+                params.setType("out")
+                        .setTaskNo(wrkMast.getWrkNo()+"")
+                        .setSourceLocNo(wcsSourceLocNo)
+                        .setLocNo(wcsLocNo)
+                        .setStaNo(wrkMast.getStaNo())
+                        .setTaskPri(wrkMast.getIoPri().intValue())
+                        .setBarcode(wrkMast.getBarcode());
+            }else if(wrkMast.getIoType()==2&& !Cools.isEmpty(wrkMast.getSourceStaNo())){
+                params.setType("in")
+                        .setTaskNo(wrkMast.getWrkNo()+"")
+                        .setSourceStaNo(wrkMast.getSourceStaNo())
+                        .setLocNo(wcsLocNo)
+                        .setTaskPri(wrkMast.getIoPri().intValue())
+                        .setBarcode(wrkMast.getBarcode());
+            } else {
+                params.setType("move")
+                        .setTaskNo(wrkMast.getWrkNo()+"")
+                        .setSourceLocNo(wcsSourceLocNo)
+                        .setLocNo(wcsLocNo)
+                        .setBarcode(wrkMast.getBarcode());
+            }
+            R r = wcsApiService.pubWrkToWcs(params);
+            if (r.get("code").equals(200)){
+                break;
+            }
+        };
+    }
+
+    /**
+     * 鑷姩鐢熸垚璺ㄥ尯鍏ヤ换鍔�
+     *
+     * @author Ryan
+     * @date 2026/1/10 14:42
+     */
+    @Scheduled(cron = "0/3 * * * * ? ")
+    private void autoInStack() {
+        List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", 15).eq("online_yn","N"));
+        if (wrkMasts.isEmpty()) {
+            return;
+        }
+        for (WrkMast wrkMast : wrkMasts) {
+            LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", wrkMast.getLocNo()));
+            // 鏋勯�犺法鍖哄叆搴撲换鍔�
+            WrkMast inMast = new WrkMast();
+            // 鐢熸垚宸ヤ綔鍙�
+            int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(1));
+            inMast.setWrkNo(workNo);          // 鐢熸垚鏂颁换鍔″彿
+            inMast.setBarcode(wrkMast.getBarcode());                // 鎵樼洏鐮佷繚鎸佷竴鑷�
+            inMast.setIoType(2);                                 // 璺ㄥ尯鍏ュ簱绫诲瀷
+            inMast.setWrkSts(1L);                                // 寰呬笅鍙�
+            inMast.setLocNo(wrkMast.getLocNo());              // 鍘熺洰鏍囧簱浣�
+            inMast.setIoPri(13.0);
+            inMast.setSourceStaNo(wrkMast.getStaNo());
+            inMast.setWrkCode(wrkMast.getWrkNo()+"");                  // 鍏宠仈鍘熷嚭搴撲换鍔�
+            inMast.setAppeUser(wrkMast.getAppeUser());              // 鐢宠浜�
+            inMast.setAppeTime(new Date());
+            inMast.setIoTime(new Date());
+            inMast.setCrnNo(locMast.getCrnNo());
+            if(!wrkMastService.insert(inMast)){
+                throw new CoolException("璺ㄥ尯鍏ュ簱浠诲姟鐢熸垚澶辫触锛�");
+            }else {
+                wrkMast.setOnlineYn("Y");
+                wrkMastService.updateById(wrkMast);
+            }
+        }
+
     }
 }
diff --git a/src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java b/src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java
index e5dd2ac..78d9504 100644
--- a/src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java
@@ -94,9 +94,9 @@
 
             // 鍑哄簱 --------------------------------------------------------------------------------
             } else if (wrkMast.getWrkSts() == 15) {
-                if (!Objects.isNull(wrkMast.getWrkCode())) {
-                    return FAIL;
-                }
+//                if (!Objects.isNull(wrkMast.getWrkCode())) {
+//                    return FAIL;
+//                }
 //                if (!Cools.isEmpty(wrkDetls)) {
 //                    if (!orderService.saveHandlerOrder(Boolean.FALSE, wrkMast, wrkDetls)) {
 //                        exceptionHandle("鐢熸垚鎵嬪姩鍑哄簱鍗曟嵁[workNo={0}]澶辫触", wrkMast.getWrkNo());
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 003e018..c3c92c3 100644
--- a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -469,25 +469,28 @@
         }
 
         /***/
-        if (!Objects.isNull(wrkMast.getWrkCode())) {
-            LocMast lcmst = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", wrkMast.getSourceLocNo()));
-            lcmst.setLocSts(LocStsType.LOC_STS_TYPE_O.type);
-            if (!locMastService.updateById(lcmst)) {
-                throw new CoolException("搴撲綅鐘舵�佷慨鏀瑰け璐ワ紒锛�");
-            }
+        if (wrkMast.getIoType() !=2){
+            if (!Objects.isNull(wrkMast.getWrkCode())) {
+                LocMast lcmst = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", wrkMast.getSourceLocNo()));
+                lcmst.setLocSts(LocStsType.LOC_STS_TYPE_O.type);
+                if (!locMastService.updateById(lcmst)) {
+                    throw new CoolException("搴撲綅鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+                }
 
-            LocAroundBind bLocNo = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>().eq("b_loc_no", wrkMast.getSourceLocNo()));
-            if (Objects.isNull(bLocNo)) {
-                throw new CoolException("宸ヤ綅涓嶅瓨鍦� 锛侊紒");
-            }
-            bLocNo.setLocType(LocStsType.LOC_STS_TYPE_O.type);
-            if (!locAroundBindService.updateById(bLocNo)) {
-                throw new CoolException("宸ヤ綅鐘舵�佷慨鏀瑰け璐ワ紒锛�");
-            }
+                LocAroundBind bLocNo = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>().eq("b_loc_no", wrkMast.getSourceLocNo()));
+                if (Objects.isNull(bLocNo)) {
+                    throw new CoolException("宸ヤ綅涓嶅瓨鍦� 锛侊紒");
+                }
+                bLocNo.setLocType(LocStsType.LOC_STS_TYPE_O.type);
+                if (!locAroundBindService.updateById(bLocNo)) {
+                    throw new CoolException("宸ヤ綅鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+                }
 
-            locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getSourceLocNo()));
+                locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getSourceLocNo()));
+            }
         }
 
+
         return SUCCESS;
     }
 
diff --git a/src/main/java/com/zy/asrs/utils/OrderExcelListener.java b/src/main/java/com/zy/asrs/utils/OrderExcelListener.java
index 0efd602..d3cdad8 100644
--- a/src/main/java/com/zy/asrs/utils/OrderExcelListener.java
+++ b/src/main/java/com/zy/asrs/utils/OrderExcelListener.java
@@ -126,7 +126,7 @@
         detl.setModel(data.getModel());
         detl.setBrand(data.getBrand());
         detl.setSpecs(data.getSpecs());
-        detl.setBatch(Objects.isNull(data.getBatch()) ? "1" : data.getBatch());
+        detl.setBatch(Objects.isNull(data.getBatch()) ? "" : data.getBatch());
         detl.setVolume(mat.getVolume());
         detl.setSafeQty(mat.getSafeQty());
         detl.setAnfme(data.getAnfme());
diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java
index 1927845..0c4b4aa 100644
--- a/src/main/java/com/zy/asrs/utils/Utils.java
+++ b/src/main/java/com/zy/asrs/utils/Utils.java
@@ -203,6 +203,23 @@
     }
 
     /**
+     * 灏� 1-1-1 鏍煎紡鐨勫簱浣嶈浆鎹负 0100101 鏍煎紡 (鎺�-鍒�-灞�)
+     * 鍏煎 1-11-1 -> 0101101
+     * @param locStr 1-1-1
+     * @return 0100101
+     */
+    public static String convertLocFormat(String locStr) {
+        if (Cools.isEmpty(locStr)) {
+            return null;
+        }
+        String[] split = locStr.split("-");
+        if (split.length != 3) {
+            return locStr;
+        }
+        return zerofill(split[0].trim(), 2) + zerofill(split[1].trim(), 3) + zerofill(split[2].trim(), 2);
+    }
+
+    /**
      * 閫氳繃搴撲綅鍙疯幏鍙� 鍒�
      */
     public static int getBay(String locNo) {
@@ -665,4 +682,40 @@
         return sdf.format(date);
     }
 
+
+    //灏唚ms搴撲綅鍙疯浆鎹㈡垚wcs搴撲綅鍙�
+    public static String WMSLocToWCSLoc(String locNo) {
+        String row = locNo.substring(0, 2);
+        int i = 0;
+        for (char c : row.toCharArray()) {
+            if (c == '0') {
+                i++;
+            }else {
+                break;
+            }
+        }
+        row = row.substring(i);
+        int j = 0;
+        String boy = locNo.substring(2, 5);
+        for (char c : boy.toCharArray()) {
+            if (c == '0') {
+                j++;
+            }else {
+                break;
+            }
+        }
+        boy = boy.substring(j);
+        int k = 0;
+        String lev = locNo.substring(5);
+        for (char c : lev.toCharArray()) {
+            if (c == '0') {
+                k++;
+            }else {
+                break;
+            }
+        }
+        lev = lev.substring(k);
+        return row + "-" + boy + "-" + lev;
+    }
+
 }
diff --git a/src/main/java/com/zy/common/model/DetlDto.java b/src/main/java/com/zy/common/model/DetlDto.java
index f3e11a4..00fb8a9 100644
--- a/src/main/java/com/zy/common/model/DetlDto.java
+++ b/src/main/java/com/zy/common/model/DetlDto.java
@@ -35,6 +35,9 @@
 
     private Double anfme;
 
+    //鏈哄彴
+    private String devNo;
+
     public DetlDto() {
     }
 
diff --git a/src/main/java/com/zy/common/model/LocTypeDto.java b/src/main/java/com/zy/common/model/LocTypeDto.java
index c6630aa..0560f4a 100644
--- a/src/main/java/com/zy/common/model/LocTypeDto.java
+++ b/src/main/java/com/zy/common/model/LocTypeDto.java
@@ -26,10 +26,10 @@
     }
 
     public LocTypeDto(BasDevp basDevp) {
-        if (basDevp.getLocType1() == null || basDevp.getLocType1() == 0) {
+        if (basDevp.getLocType1() == null) {
             throw new CoolException("plc楂樹綆妫�娴嬪紓甯�");
         }
-        if (basDevp.getLocType1() == 1) {
+        if (basDevp.getLocType1() == 0) {
             this.locType1 = 1; // 浣庡簱浣�
         } else {
             this.locType1 = 2; // 楂樺簱浣�
diff --git a/src/main/java/com/zy/common/model/StartupDto.java b/src/main/java/com/zy/common/model/StartupDto.java
index b0ecc3e..b581ec6 100644
--- a/src/main/java/com/zy/common/model/StartupDto.java
+++ b/src/main/java/com/zy/common/model/StartupDto.java
@@ -18,4 +18,10 @@
 
     private Integer workNo;
 
+    private Integer taskNo;
+
+    private String barcode;
+
+    private Integer taskPri;
+
 }
diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index 8b161f9..b62242a 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -130,14 +130,13 @@
             RowLastno rowLastno = rowLastnoService.selectById(whsType);
             RowLastnoType rowLastnoType = rowLastnoTypeService.selectById(rowLastno.getTypeId());
             /**
-             * 搴撳瀷 1: 鏍囧噯鍫嗗灈鏈哄簱  2: 骞冲簱  3: 绌挎鏉�  4: 鍥涘悜杞�  5: AGV  0: 鏈煡
+             * 搴撳瀷 1: 鏍囧噯鍫嗗灈鏈哄簱  2: 鍚屽贩閬撴壘搴撲綅  3: 绌挎鏉�  4: 鍥涘悜杞�  5: AGV  0: 鏈煡
              */
             switch (rowLastnoType.getType()) {
                 case 1:
                     return getLocNoRun(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 0, locTypeDto, 0);
                 case 2:
-                    log.error("绔欑偣={} 鏈煡璇㈠埌瀵瑰簲鐨勮鍒�", sourceStaNo);
-                    break;
+                    return getLocNoRun(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 0, locTypeDto, 0);
                 case 3:
                     log.error("绔欑偣={} 鏈煡璇㈠埌瀵瑰簲鐨勮鍒�", sourceStaNo);
                     break;
@@ -154,6 +153,33 @@
             log.error("绔欑偣={} 鏈煡璇㈠埌瀵瑰簲鐨勮鍒�", sourceStaNo);
         }
         return null;
+    }
+
+    /**
+     * 妫�绱㈠簱浣嶅彿
+     */
+    @Transactional
+    public StartupDto getLocNo1(Integer crnNo) {
+        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
+                .eq("crn_no", crnNo)
+                .eq("loc_sts","O")
+                .eq("whs_type",1)
+                .orderBy("lev1,bay1"));
+        if (Cools.isEmpty(locMast)) {
+            return null;
+        }
+        StartupDto startupDto = new StartupDto();
+
+        String locNo = locMast.getLocNo();
+
+        // 鐢熸垚宸ヤ綔鍙�
+        int workNo = getWorkNo(0);
+        // 杩斿洖dto
+        startupDto.setWorkNo(workNo);
+        startupDto.setCrnNo(crnNo);
+//        startupDto.setSourceStaNo(sourceStaNo);
+        startupDto.setLocNo(locNo);
+        return startupDto;
     }
 
     /**
@@ -374,65 +400,15 @@
 
         // 1.鎸夎鍒欐煡鎵惧簱浣�
         if (Cools.isEmpty(locMast) && crnNo != 0) {
-            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
-                    .eq("row1", nearRow)
-                    .eq("frozen", 0).eq("deleted", 0)
-                    .eq("loc_sts", "O").eq("whs_type", rowLastnoType.getType().longValue())
-                    .orderBy("lev1", true).orderBy("bay1", true));
-            for (LocMast locMast1 : locMasts) {
-                if (!VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) {
-                    continue;
-                }
-                if (Utils.BooleanWhsTypeStaIoType(rowLastno)) {
-                    String shallowLoc = Utils.getDeepLoc(slaveProperties, locMast1.getLocNo());
-                    LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>()
-                            .eq("loc_no", shallowLoc).eq("loc_sts", "O").eq("whs_type", rowLastnoType.getType().longValue()));
-                    if (!Cools.isEmpty(locMast2)) {
-                        locMast = locMast2;
-                        break;
-                    }
-                } else {
-                    if (!Cools.isEmpty(locMast1)) {
+            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "O").eq("crn_no", crnNo).eq("whs_type", rowLastnoType.getType().longValue()).orderBy("lev1").orderBy("bay1"));
+            if (!locMasts.isEmpty()) {
+                for (LocMast locMast1 : locMasts) {
+                    if (basCrnpService.checkSiteError(crnNo, true)) {
                         locMast = locMast1;
                         break;
                     }
                 }
-            }
 
-            if (Cools.isEmpty(locMast) && Utils.BooleanWhsTypeStaIoType(rowLastno)) {
-                for (LocMast locMast1 : locMasts) {
-                    if (!VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) {
-                        continue;
-                    }
-                    if (Utils.BooleanWhsTypeStaIoType(rowLastno)) {
-                        String shallowLoc = Utils.getDeepLoc(slaveProperties, locMast1.getLocNo());
-                        LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>()
-                                .eq("loc_no", shallowLoc).eq("loc_sts", "O").eq("whs_type", rowLastnoType.getType().longValue()));
-                        if (!Cools.isEmpty(locMast2)) {
-                            locMast = locMast2;
-                            break;
-                        } else {
-                            locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>()
-                                    .eq("loc_no", shallowLoc).eq("loc_sts", "F").eq("whs_type", rowLastnoType.getType().longValue()));
-                            if (!Cools.isEmpty(locMast2)) {
-                                locMast = locMast1;
-                                break;
-                            } else {
-                                locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>()
-                                        .eq("loc_no", shallowLoc).eq("loc_sts", "D").eq("whs_type", rowLastnoType.getType().longValue()));
-                                if (!Cools.isEmpty(locMast2)) {
-                                    locMast = locMast1;
-                                    break;
-                                }
-                            }
-                        }
-                    } else {
-                        if (!Cools.isEmpty(locMast1)) {
-                            locMast = locMast1;
-                            break;
-                        }
-                    }
-                }
             }
         }
 
diff --git a/src/main/java/com/zy/common/web/WcsController.java b/src/main/java/com/zy/common/web/WcsController.java
index c0c677f..607bd5b 100644
--- a/src/main/java/com/zy/common/web/WcsController.java
+++ b/src/main/java/com/zy/common/web/WcsController.java
@@ -9,11 +9,15 @@
 import com.zy.asrs.entity.param.EmptyPlateOutParam;
 import com.zy.asrs.entity.result.FindLocNoAttributeVo;
 import com.zy.asrs.service.*;
+import com.zy.asrs.service.impl.MatServiceImpl;
+import com.zy.asrs.utils.Utils;
 import com.zy.common.CodeRes;
 import com.zy.common.model.LocTypeDto;
 import com.zy.common.model.StartupDto;
 import com.zy.common.service.CommonService;
 import com.zy.common.web.param.SearchLocParam;
+import com.zy.system.entity.Config;
+import com.zy.system.service.impl.ConfigServiceImpl;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
@@ -50,6 +54,10 @@
     private RowLastnoService rowLastnoService;
     @Autowired
     private WorkService workService;
+    @Autowired
+    private ConfigServiceImpl configService;
+    @Autowired
+    private MatServiceImpl matService;
 
     @PostMapping("/pakin/loc/v1")
     @ResponseBody
@@ -63,8 +71,55 @@
         }
         List<WaitPakin> waitPakins = null;
         if (param.getIoType() == 1) {
+            //澶勭悊鎵樼洏鐮�
+            //3S19000677895,M22003772,3  ,KP, 0A2030  ,0A2030202306050023
+            //3S绠辩爜鍙�      ,绔瓙鐗╂枡鍙� ,鏁伴噺,鍗曚綅,渚涘簲鍟嗙紪鍙�,渚涘簲鍟嗘壒娆″彿
+            //鏁伴噺鍜岄噸閲忚浆鎹㈠嚭鏉ョ殑鏄惁宸笉澶�
+            //weight 涓� 43.39  鍘荤毊2.35  = 41.05
+            //鎵樼洏鐮佷緥瀛�  845000820308,M11000787,1000,MT,0A1263,0A126320260120
+            //鎹㈢畻闇�瑕�41.05*24.36绾︾瓑浜�1000
             if (Cools.isEmpty(param.getBarcode())) {
                 return R.error("鏉$爜涓嶈兘涓虹┖");
+            }
+            String[] split = param.getBarcode().split(",");
+            String barcode = split[0];
+            String matnr = split[1];
+            Double weight = Double.valueOf(split[2]);
+            String unit = split[3];
+            String manu = split[4];
+            String batch = split[5];
+            String threeCode = param.getBarcode();
+            param.setBarcode(barcode);
+            //瀹為檯绉伴噸鏁伴噺
+            Double m = param.getWeight() -2.35;
+
+            Mat mat = matService.selectByMatnr(matnr);
+            if(mat==null){
+                log.info("娌℃湁鎵惧埌璇ョ墿鏂欐。妗�--"+matnr+"缁勬墭鏃惰嚜鍔ㄦ柊澧炵墿鏂欙紝榛樿24.36KG/M");
+                mat = new Mat();
+                mat.setTagId(1L);
+                mat.setLocType(1L);
+                mat.setMatnr(matnr);
+                mat.setUnit(unit);
+                mat.setManu(manu);
+                mat.setMaktx(matnr);
+                mat.setVolume(24.36);
+                matService.insert(mat);
+            }else {
+                //鏆傚畾
+
+            }
+            m=m*mat.getVolume();
+            //Double val = Math.round((m - matnr.getSafeQty()) * 10000) / 10000.0;
+            Config config = configService.selectConfigByCode("SimulationInbound");
+            if (config != null && config.getValue().equals("Y")) {
+                WaitPakin waitPakin1 = waitPakinService.selectOne(new EntityWrapper<WaitPakin>().eq("zpallet", param.getBarcode()));
+                if (Cools.isEmpty(waitPakin1)) {
+                    WaitPakin waitPakin = waitPakinService.selectOne(new EntityWrapper<WaitPakin>().eq("io_status", "N"));
+                    if (waitPakin != null) {
+                        waitPakinService.updateForSet("zpallet = '" + param.getBarcode() + "'", new EntityWrapper<WaitPakin>().eq("zpallet", waitPakin.getZpallet()));
+                    }
+                }
             }
             waitPakins = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", param.getBarcode()));
             if (Cools.isEmpty(waitPakins)) {
@@ -72,8 +127,31 @@
                 if (wrkMast != null && wrkMast.getIoType() == 103) {
                     return R.parse(CodeRes.PICK_600);
                 }
-                return R.parse(CodeRes.NO_COMB_700);
+                WaitPakin waitPakin = new WaitPakin();
+                waitPakin.sync(mat);
+                waitPakin.setZpallet(param.getBarcode());
+                waitPakin.setAnfme(m);
+                waitPakin.setThreeCode(threeCode);
+                waitPakinService.insert(waitPakin);
+            }else {
+                for(WaitPakin waitPakin : waitPakins){
+                    waitPakin.setAnfme(m);
+                    waitPakinService.update(waitPakin,new EntityWrapper<WaitPakin>().eq("zpallet", param.getBarcode()));
+                }
             }
+            //瀹為檯闀垮害
+            WaitPakin waitPakin = waitPakinService.selectOne(new EntityWrapper<WaitPakin>().eq("zpallet", param.getBarcode()));
+            if (Cools.isEmpty(waitPakin)) {
+                return R.error(CodeRes.NO_COMB_700);
+            }
+            boolean flag = false;
+            if(Cools.isEmpty(waitPakin.getBeBatch())||waitPakin.getBeBatch()!=1){
+                flag = true;
+            }
+            if (flag && (weight - m < -2.0 || weight - m > 2.0)) {
+                return R.error("浜岀淮鐮�="+threeCode+"鐨勭墿鏂欏疄闄呯О閲嶈浆鎹㈡垚鐨勭背鏁板拰鐗╂枡鏍囩鎻愪緵鐨勭背鏁扮浉宸緝澶ч渶瑕侀��鍥炴垨鑰呮爣璁板悗鎵嶈兘鍏ュ簱锛�");
+            }
+
             int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",param.getBarcode()));
             int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",param.getBarcode()));
             if (countLoc > 0 || countWrk > 0) {
@@ -102,6 +180,8 @@
                 break;
         }
         log.info("WCS鍏ュ簱鎺ュ彛杩斿弬:{},鎵樼洏鐮�:{}", dto, param.getBarcode());
+        String wcsLoc = Utils.WMSLocToWCSLoc(dto.getLocNo());
+        dto.setLocNo(wcsLoc);
         return R.ok().add(dto);
     }
 
@@ -168,6 +248,9 @@
 //        FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(matnrs.get(0), batchs.get(0));
         FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(waitPakins.get(0));
         StartupDto dto = commonService.getLocNo( 1, devpNo,findLocNoAttributeVo, locTypeDto);
+        if (Cools.isEmpty(dto)) {
+            throw new CoolException("娌℃湁鎵惧埌搴撲綅");
+        }
         int workNo = dto.getWorkNo();
         Date now = new Date();
         // 鐢熸垚宸ヤ綔妗�
@@ -234,6 +317,9 @@
         } else {
             throw new CoolException(dto.getLocNo()+"鐩爣搴撲綅宸茶鍗犵敤");
         }
+        dto.setBarcode(barcode);
+        dto.setTaskNo(workNo);
+        dto.setTaskPri(wrkMast.getIoPri().intValue());
         return dto;
     }
 
diff --git a/src/main/java/com/zy/common/web/param/SearchLocParam.java b/src/main/java/com/zy/common/web/param/SearchLocParam.java
index 1a170ce..7241c5b 100644
--- a/src/main/java/com/zy/common/web/param/SearchLocParam.java
+++ b/src/main/java/com/zy/common/web/param/SearchLocParam.java
@@ -17,4 +17,7 @@
     // 搴撲綅瑙勬牸锛� 0:鏈煡, 1:浣庡簱浣�, 2:楂樺簱浣嶏級
     private Short locType1;
 
+    //閲嶉噺
+    private Double weight;
+
 }
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index ed8e91e..18599c6 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -12,8 +12,8 @@
     driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
     username: sa
     password: sa@123
-    url: jdbc:sqlserver://192.168.4.15:1433;databasename=jxhcwms
-#    url: jdbc:sqlserver://127.0.0.1:1433;databasename=jxhcwms
+#    url: jdbc:sqlserver://192.168.4.15:1433;databasename=jxhcwms
+    url: jdbc:sqlserver://127.0.0.1:1433;databasename=jxhcwms
   mvc:
     static-path-pattern: /**
   redis:
@@ -41,7 +41,7 @@
     path: /stock/out/@pom.build.finalName@/logs
 
 super:
-  pwd: asrs2023
+  pwd: xltys1995
 
 swagger:
   enable: false
@@ -98,16 +98,12 @@
     #鐧诲綍鍦板潃
     loginaddress: K3CLOUD/Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc
     #鍗曟嵁锛屽晢鍝佹。妗堝湴鍧�
-    inaddress: K3CLOUD/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery.common.kdsvc
-    #缁撴灉涓婃姤锛堜繚瀛橈級鍗曞湴鍧�
-    outaddressSave: K3CLOUD/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save.common.kdsvc
-    #缁撴灉涓婃姤锛堟彁浜わ級鍗曞湴鍧�
-    outaddressSubmit: K3Cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Submit.common.kdsvc
-    #缁撴灉涓婃姤锛堝鏍革級鍗曞湴鍧�
-    outaddressAudit: K3CLOUD/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Audit.common.kdsvc
-  #  鐧诲綍璐﹀彿绠$悊
-  login :
-    acctID: "647e849ab6fa0f"
-    username: "llw"
-    password: "666666"
-    lcid: 2052
\ No newline at end of file
+
+#wcs瀵规帴
+wcs:
+  address:
+    URL: http://127.0.0.1:9090/hcwcs
+    deviceStatus: openapi/deviceStatus
+    createOutTask: openapi/createOutTask
+    createLocMoveTask: openapi/createLocMoveTask
+    createInTask: openapi/createInTask
diff --git a/src/main/resources/mapper/LocAroundBindMapper.xml b/src/main/resources/mapper/LocAroundBindMapper.xml
index 3feac03..b479cd4 100644
--- a/src/main/resources/mapper/LocAroundBindMapper.xml
+++ b/src/main/resources/mapper/LocAroundBindMapper.xml
@@ -8,7 +8,9 @@
         <result column="dev_id" property="devId" />
         <result column="dev_no" property="devNo" />
         <result column="b_loc_id" property="bLocId" />
-        <result column="b_loc_no" property="bLocNo" />
+        <result column="b_loc_no" property="blocNo" />
+        <result column="order_no" property="orderNo" />
+        <result column="freeze" property="freeze" />
 
     </resultMap>
 
diff --git a/src/main/resources/mapper/StaDescMapper.xml b/src/main/resources/mapper/StaDescMapper.xml
index 6bbea2d..2cf0eee 100644
--- a/src/main/resources/mapper/StaDescMapper.xml
+++ b/src/main/resources/mapper/StaDescMapper.xml
@@ -21,7 +21,7 @@
 
     <select id="queryOutStaNosByLocNo" resultType="java.lang.Integer">
         select
-        distinct asd.stn_no
+        distinct asd.crn_stn
         from asr_sta_desc asd
         left join asr_loc_mast alm on asd.crn_no = alm.crn_no
         where 1=1
diff --git a/src/main/resources/mapper/WrkMastLogMapper.xml b/src/main/resources/mapper/WrkMastLogMapper.xml
index 8086afb..5f5faa4 100644
--- a/src/main/resources/mapper/WrkMastLogMapper.xml
+++ b/src/main/resources/mapper/WrkMastLogMapper.xml
@@ -61,6 +61,7 @@
         <result column="full_plt" property="fullPlt" />
         <result column="pre_have" property="preHave" />
         <result column="take_none" property="takeNone" />
+        <result column="log_id" property="logId" />
     </resultMap>
     <sql id="queryWhere">
         <where>
diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml
index 83c4cce..02a13e6 100644
--- a/src/main/resources/mapper/WrkMastMapper.xml
+++ b/src/main/resources/mapper/WrkMastMapper.xml
@@ -70,8 +70,8 @@
         select * from asr_wrk_mast
         where wrk_sts=5
         or (wrk_sts=15 and ove_mk='Y' and wrk_no not in (select wrk_no from asr_bas_devp))
-        or (wrk_sts=15 and dateadd(mi,3,crn_end_time) &lt;= getdate() and wrk_no not in (select wrk_no from asr_bas_devp))
-        or (wrk_sts=15 and crn_end_time is null and wrk_no not in (select wrk_no from asr_bas_devp))
+        or (wrk_sts=15 and dateadd(mi,3,crn_end_time) &lt;= getdate() and wrk_no not in (select wrk_no from asr_bas_devp) and ove_mk='Y')
+        or (wrk_sts=15 and crn_end_time is null and wrk_no not in (select wrk_no from asr_bas_devp) and ove_mk='Y')
         order by io_time,wrk_no asc
     </select>
 
diff --git a/src/main/webapp/static/js/locMast/locMast.js b/src/main/webapp/static/js/locMast/locMast.js
index 7fc6049..076693b 100644
--- a/src/main/webapp/static/js/locMast/locMast.js
+++ b/src/main/webapp/static/js/locMast/locMast.js
@@ -62,7 +62,7 @@
             // ,{field: 'scWeight', align: 'center',title: ''}
             // ,{field: 'invWh', align: 'center',title: ''}
             // ,{field: 'mk', align: 'center',title: ''}
-            // ,{field: 'barcode', align: 'center',title: ''}
+            ,{field: 'barcode', align: 'center',title: '鎵樼洏鐮�'}
             // ,{field: 'PdcType', align: 'center',title: ''}
             // ,{field: 'ctnNo', align: 'center',title: ''}
             ,{field: 'locType1$', align: 'center',title: '楂樹綆绫诲瀷', hide:true}
diff --git a/src/main/webapp/static/js/orderPakout/order.js b/src/main/webapp/static/js/orderPakout/order.js
index 20e9498..d6294b6 100644
--- a/src/main/webapp/static/js/orderPakout/order.js
+++ b/src/main/webapp/static/js/orderPakout/order.js
@@ -191,6 +191,7 @@
                             layer.msg('鏁伴噺涓嶈兘灏忎簬宸蹭綔涓氭暟閲�', {icon: 2});
                             return false;
                         }
+                        console.log(nList[xi]);
                     }
                     layer.load(2);
                     $.ajax({
diff --git a/src/main/webapp/static/js/waitPakin/waitPakin.js b/src/main/webapp/static/js/waitPakin/waitPakin.js
index 93d9ac5..886ccf9 100644
--- a/src/main/webapp/static/js/waitPakin/waitPakin.js
+++ b/src/main/webapp/static/js/waitPakin/waitPakin.js
@@ -24,6 +24,16 @@
                 return html;
             }
         }
+        , {
+            field: 'beBatch', align: 'center', title: '鏄惁鍏佽', templet: function (row) {
+                var html = "<input value='beBatch' type='checkbox' lay-skin='switch' lay-text='鏄瘄鍚�' lay-filter='beBatchSwitch' table-index='" + row.LAY_TABLE_INDEX + "'";
+                if (row.beBatch === 1) {
+                    html += " checked ";
+                }
+                html += ">";
+                return html;
+            }
+        }
         , {field: 'modiUser$', align: 'center', title: '淇敼浜哄憳', hide: true}
         , {field: 'modiTime$', align: 'center', title: '淇敼鏃堕棿', hide: true})
     return cols;
@@ -84,6 +94,43 @@
         }
     });
 
+    // 鐩戝惉鏄惁鎵规寮�鍏�
+    form.on('switch(beBatchSwitch)', function (obj) {
+        var _index = $(obj.elem).attr('table-index');
+        var cacheData = table.cache['waitPakin'];
+        var row = cacheData[_index];
+
+        if (!row) {
+            layer.msg("鏃犳硶鑾峰彇琛屾暟鎹�", {icon: 2});
+            return;
+        }
+
+        var newState = obj.elem.checked ? 1 : 0;
+
+        $.ajax({
+            url: baseUrl + "/waitPakin/update/beBatch/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: JSON.stringify({zpallet: row.zpallet, beBatch: newState}),
+            contentType: 'application/json;charset=UTF-8',
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200) {
+                    layer.msg(res.msg, {icon: 1});
+                    row.beBatch = newState; // 鏇存柊缂撳瓨
+                } else {
+                    layer.msg(res.msg, {icon: 2});
+                    obj.elem.checked = !obj.elem.checked;
+                    form.render('checkbox');
+                }
+            },
+            error: function () {
+                layer.msg("璇锋眰澶辫触", {icon: 2});
+                obj.elem.checked = !obj.elem.checked;
+                form.render('checkbox');
+            }
+        });
+    });
+
     // 鐩戝惉鎺掑簭浜嬩欢
     table.on('sort(locMast)', function (obj) {
         var searchData = {};
diff --git a/src/main/webapp/views/locMast/locMast.html b/src/main/webapp/views/locMast/locMast.html
index a432ead..14c66ae 100644
--- a/src/main/webapp/views/locMast/locMast.html
+++ b/src/main/webapp/views/locMast/locMast.html
@@ -68,6 +68,11 @@
         </div>
         <div class="layui-inline">
             <div class="layui-input-inline">
+                <input class="layui-input" type="text" name="barcode" placeholder="鎵樼洏鐮�" autocomplete="off">
+            </div>
+        </div>
+        <div class="layui-inline">
+            <div class="layui-input-inline">
                 <input class="layui-input" type="text" name="crn_no" placeholder="鍫嗗灈鏈哄彿" autocomplete="off">
             </div>
         </div>
diff --git a/src/main/webapp/views/locMast/locMast_detail.html b/src/main/webapp/views/locMast/locMast_detail.html
index cd62adc..5f1c17c 100644
--- a/src/main/webapp/views/locMast/locMast_detail.html
+++ b/src/main/webapp/views/locMast/locMast_detail.html
@@ -95,6 +95,12 @@
             </div>
         </div>
         <div class="layui-inline"  style="width:80%;">
+            <label class="layui-form-label">鎵樼洏鐮侊細</label>
+            <div class="layui-input-inline">
+                <input id="barcode" class="layui-input" type="text" autocomplete="off" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:80%;">
             <label class="layui-form-label">鍫嗗灈鏈哄彿锛�</label>
             <div class="layui-input-inline">
                 <input id="crnNo" class="layui-input" type="text" autocomplete="off" disabled="disabled">
@@ -218,12 +224,6 @@
             <label class="layui-form-label">锛�</label>
             <div class="layui-input-inline">
                 <input id="mk" class="layui-input" type="text">
-            </div>
-        </div>
-        <div class="layui-inline"  style="width:31%;display: none">
-            <label class="layui-form-label">锛�</label>
-            <div class="layui-input-inline">
-                <input id="barcode" class="layui-input" type="text">
             </div>
         </div>
         <div class="layui-inline"  style="width:31%;display: none">

--
Gitblit v1.9.1