From 0e8aae27274c1b1b7a283ba73963af78417202c3 Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期六, 06 七月 2024 13:32:52 +0800
Subject: [PATCH] 冠鸿接口对接

---
 src/main/java/com/zy/asrs/task/GhjtScheduler.java                    |   60 ++
 src/main/java/com/zy/asrs/task/handler/GhjtHandler.java              |  139 ++++++
 src/main/resources/mapper/LocMastMapper.xml                          |   12 
 src/main/java/com/zy/asrs/entity/param/ZwmsOutLocWorkDto.java        |   28 +
 src/main/java/com/zy/asrs/service/OpenService.java                   |   26 +
 src/main/java/com/zy/asrs/entity/param/CrnExecuteParam.java          |   14 
 src/main/java/com/zy/asrs/utils/Utils.java                           |   31 +
 src/main/webapp/static/js/order/out.js                               |    2 
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java          |   59 ++
 src/main/java/com/zy/asrs/mapper/LocMastMapper.java                  |    9 
 src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java        |   32 +
 src/main/java/com/zy/asrs/entity/param/GwmsGenerateInventoryDto.java |   32 +
 src/main/java/com/zy/asrs/controller/OutController.java              |  222 +++++----
 src/main/java/com/zy/common/service/CommonService.java               |  102 ++++
 src/main/java/com/zy/asrs/service/MobileService.java                 |    5 
 src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java       |   17 
 src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java          |   17 
 src/main/java/com/zy/asrs/controller/OpenController.java             |   61 ++
 src/main/java/com/zy/asrs/entity/WrkMast.java                        |   25 
 src/main/java/com/zy/asrs/task/WorkMastScheduler.java                |   10 
 src/main/java/com/zy/asrs/controller/MobileController.java           |   15 
 src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java           |   24 
 src/main/resources/mapper/OrderDetlMapper.xml                        |    2 
 src/main/java/com/zy/asrs/service/LocMastService.java                |   10 
 src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java          |  394 ++++++++++++++++
 src/main/java/com/zy/asrs/entity/param/GhjtApiParam.java             |   20 
 26 files changed, 1,188 insertions(+), 180 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/MobileController.java b/src/main/java/com/zy/asrs/controller/MobileController.java
index 9608121..0ce894b 100644
--- a/src/main/java/com/zy/asrs/controller/MobileController.java
+++ b/src/main/java/com/zy/asrs/controller/MobileController.java
@@ -2,8 +2,6 @@
 
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
-import com.baomidou.mybatisplus.mapper.Wrapper;
-import com.core.annotations.AppAuth;
 import com.core.annotations.ManagerAuth;
 import com.core.common.BaseRes;
 import com.core.common.Cools;
@@ -20,9 +18,7 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
-import javax.servlet.http.HttpServletRequest;
 import java.util.*;
-import java.util.List;
 
 /**
  * 绉诲姩绔帴鍙f帶鍒跺櫒
@@ -547,4 +543,15 @@
         return R.ok("鍑哄簱鎴愬姛");
     }
 
+    @PostMapping("/ckfh/auth")
+    @ManagerAuth(memo = "鍑哄簱澶嶆牳纭")
+    public synchronized R pakoutFhqr(@RequestBody GhjtApiParam param) {
+        // 鏍规嵁宸ヤ綔鍙风‘璁ゅ鏍�
+        if(Cools.isEmpty(param) || Cools.isEmpty(param.getWorkNo()) || Cools.isEmpty(param.getCheck())){
+            return R.parse(BaseRes.PARAM);
+        }
+        mobileService.pakoutFhqr(param.getWorkNo(), param.getCheck());
+        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 6897f42..752d5a2 100644
--- a/src/main/java/com/zy/asrs/controller/OpenController.java
+++ b/src/main/java/com/zy/asrs/controller/OpenController.java
@@ -2,11 +2,11 @@
 
 import com.alibaba.fastjson.JSON;
 import com.core.annotations.AppAuth;
-import com.core.common.*;
+import com.core.common.Cools;
+import com.core.common.R;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.param.*;
 import com.zy.asrs.service.OpenService;
-import com.zy.common.model.DetlDto;
 import com.zy.common.web.BaseController;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -14,8 +14,6 @@
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
 
 /**
  * Created by vincent on 2022/4/8
@@ -149,6 +147,61 @@
         }
     }
 
+    @PostMapping("/scrk")
+    @AppAuth(memo = "GWMS璋冪敤鐢熸垚鍏ュ簱宸ヤ綔妗�")
+    public synchronized R gwmsGenerateInventory(@RequestHeader(required = false) String appkey,
+                                      @RequestBody GwmsGenerateInventoryDto param,
+                                      HttpServletRequest request) {
+        auth(appkey, param, request);
+        return R.ok(openService.gwmsGenerateInventory(param));
+    }
+
+    @PostMapping("/zxrk")
+    @AppAuth(memo = "GWCS鍒拌揪鍫嗗灈鏈哄叆搴撶珯鐐硅姹俍WCS鎵ц")
+    public synchronized R crnExecute(@RequestHeader(required = false) String appkey,
+                                                @RequestBody CrnExecuteParam param,
+                                                HttpServletRequest request) {
+        auth(appkey, param, request);
+        return R.ok(openService.crnExecute(param));
+    }
+
+    @PostMapping("/ckrw")
+    @AppAuth(memo = "ZWMS鎺ユ敹MES涓嬪彂鍑哄簱浠诲姟")
+    public synchronized R zwmsOutLocWork(@RequestHeader(required = false) String appkey,
+                                     @RequestBody ZwmsOutLocWorkDto param,
+                                     HttpServletRequest request) {
+        auth(appkey, param, request);
+        return R.ok(openService.zwmsOutLocWork(param));
+    }
+
+    @PostMapping("/ckjgsb")
+    @AppAuth(memo = "璐х墿鍒拌揪鍑哄簱鍙d互鍚庯紝涓婃姤鍑哄簱缁撴灉")
+    public synchronized R outLocResultReport(@RequestHeader(required = false) String appkey,
+                                         @RequestBody GhjtApiParam param,
+                                         HttpServletRequest request) {
+        auth(appkey, param, request);
+        return R.ok(openService.outLocResultReport(param));
+    }
+
+    @PostMapping("/cpjck")
+    @AppAuth(memo = "鎷嗙洏鏈哄嚭搴撴帴鍙�")
+    public synchronized R emptyOutLoc(@RequestHeader(required = false) String appkey,
+                                             @RequestBody GhjtApiParam param,
+                                             HttpServletRequest request) {
+        auth(appkey, param, request);
+        return R.ok(openService.emptyOutLoc(param));
+    }
+
+//    @PostMapping("/cpjck")
+//    @AppAuth(memo = "鐗╂枡淇℃伅鑾峰彇")
+//    public synchronized R emptyOutLoc(@RequestHeader(required = false) String appkey,
+//                                      @RequestBody GhjtApiParam param,
+//                                      HttpServletRequest request) {
+//        auth(appkey, param, request);
+//        return R.ok(openService.emptyOutLoc(param));
+//    }
+
+
     /*public static void main(String[] args) {
         // 1
         System.out.println("======================================");
diff --git a/src/main/java/com/zy/asrs/controller/OutController.java b/src/main/java/com/zy/asrs/controller/OutController.java
index 15419f1..eed2f39 100644
--- a/src/main/java/com/zy/asrs/controller/OutController.java
+++ b/src/main/java/com/zy/asrs/controller/OutController.java
@@ -1,14 +1,11 @@
 package com.zy.asrs.controller;
 
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.annotations.ManagerAuth;
 import com.core.common.*;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
-import com.zy.asrs.entity.param.StockOutParam;
 import com.zy.asrs.service.*;
-import com.zy.asrs.service.impl.WorkServiceImpl;
-import com.zy.asrs.utils.OutboundAllocationUtil;
-import com.zy.common.model.DetlDto;
 import com.zy.common.model.LocDto;
 import com.zy.common.model.TaskDto;
 import com.zy.common.web.BaseController;
@@ -65,46 +62,65 @@
         }
         List<OrderDetl> orderDetls = orderDetlService.selectBatchIds(ids);
         List<LocDto> locDtos = new ArrayList<>();
-        for (OrderDetl orderDetl : orderDetls) {
-            if (orderDetl.getAnfme()-orderDetl.getWorkQty()-orderDetl.getQty()==0.0){
-                continue;
-            }
-            LocDto locDto = new LocDto(orderDetl.getManu(), orderDetl.getMatnr(), orderDetl.getMaktx(),orderDetl.getModel(),orderDetl.getSpecs(),
-                    orderDetl.getBatch(),orderDetl.getBrand(),orderDetl.getBarcode(), orderDetl.getOrderNo(),orderDetl.getAnfme());
-            locDto.setOrderDetlId(orderDetl.getId());
-            locDto.setTkType(orderDetl.getTkType());
-            locDtos.add(locDto);
-        }
-
-
-
-
-//        Set<String> exist = new HashSet<>();
 
 //        for (OrderDetl orderDetl : orderDetls) {
-//            double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getWorkQty()).orElse(0.0D);
-//            if (issued <= 0.0D) { continue; }
+//            if (orderDetl.getAnfme()-orderDetl.getWorkQty()-orderDetl.getQty()==0.0){
+//                continue;
+//            }
+//            LocDto locDto = new LocDto(orderDetl.getManu(), orderDetl.getMatnr(), orderDetl.getMaktx(),orderDetl.getModel(),orderDetl.getSpecs(),
+//                    orderDetl.getBatch(),orderDetl.getBrand(),orderDetl.getBarcode(), orderDetl.getOrderNo(),orderDetl.getAnfme());
+//            locDto.setOrderDetlId(orderDetl.getId());
+//            locDto.setTkType(orderDetl.getTkType());
+//            locDtos.add(locDto);
+//        }
+
+
+
+
+        Set<String> exist = new HashSet<>();
+
+        for (OrderDetl orderDetl : orderDetls) {
+            double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getWorkQty()).orElse(0.0D);
+            if (issued <= 0.0D) { continue; }
 //            List<LocDetl> locDetls = locDetlService.queryStock(orderDetl.getMatnr(), orderDetl.getBatch(), null, exist);
-//            for (LocDetl locDetl : locDetls) {
-//                if (issued > 0) {
+            List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("batch",orderDetl.getBatch()).eq("model",orderDetl.getModel()));
+            for (LocDetl locDetl : locDetls) {
+                if (issued > 0) {
+                    LocDto locDto = new LocDto(orderDetl.getManu(), orderDetl.getMatnr(), orderDetl.getMaktx(),orderDetl.getModel(),orderDetl.getSpecs(),
+                    orderDetl.getBatch(),orderDetl.getBrand(),orderDetl.getBarcode(), orderDetl.getOrderNo(),orderDetl.getAnfme());
 //                    LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(),
 //                            issued >= locDetl.getAnfme() ? locDetl.getAnfme() : issued);
 //                    List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl.getLocNo(), issued >= locDetl.getAnfme() ? 101 : 103);
-//                    locDto.setStaNos(staNos);
-//                    locDtos.add(locDto);
-//                    exist.add(locDetl.getLocNo());
-//                    // 鍓╀綑寰呭嚭鏁伴噺閫掑噺
-//                    issued = issued - locDetl.getAnfme();
-//                } else {
-//                    break;
-//                }
-//            }
-//            if (issued > 0) {
-//                LocDto locDto = new LocDto(null, orderDetl.getMatnr(), orderDetl.getMaktx(), orderDetl.getBatch(), orderDetl.getOrderNo(), issued);
-//                locDto.setLack(Boolean.TRUE);
-//                locDtos.add(locDto);
-//            }
-//        }
+                    List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl.getLocNo(), issued >= locDetl.getAnfme() ? 101 : 103);
+
+                    locDto.setLocNo(locDetl.getLocNo());
+//                    wrkDetl.setMatnr(roll.getSpecs()); // 瑙勬牸
+//                    wrkDetl.setMaktx(roll.getSpecs()); //瑙勬牸
+                    locDto.setBatch(locDetl.getBatch()); // 绠卞彿
+                    locDto.setModel(locDetl.getModel()); // 鍗峰彿
+                    locDto.setBrand(""); // 鏈ㄧ绫诲瀷
+                    locDto.setOrigin(locDetl.getOrigin()); // 鏈ㄧ鍦ㄦ墭鐩樹綅缃�
+                    locDto.setWeight(locDetl.getWeight()); // 鍑�閲�
+                    locDto.setVolume(locDetl.getVolume()); // 姣涢噸
+                    locDto.setPrice(locDetl.getPrice());
+                    locDto.setSpecs(locDetl.getSpecs());
+                    locDto.setZpallet(locDetl.getZpallet());
+                    locDto.setStaNos(staNos);
+                    locDto.setOrderDetlId(orderDetl.getId());
+                    locDtos.add(locDto);
+                    exist.add(locDetl.getLocNo());
+                    // 鍓╀綑寰呭嚭鏁伴噺閫掑噺
+                    issued = issued - locDetl.getAnfme();
+                } else {
+                    break;
+                }
+            }
+            if (issued > 0) {
+                LocDto locDto = new LocDto(null, orderDetl.getMatnr(), orderDetl.getMaktx(), orderDetl.getBatch(), orderDetl.getOrderNo(), issued);
+                locDto.setLack(Boolean.TRUE);
+                locDtos.add(locDto);
+            }
+        }
         return R.ok().add(locDtos);
     }
 
@@ -134,75 +150,75 @@
     @PostMapping("/out/pakout/auth")
     @ManagerAuth(memo = "璁㈠崟鍑哄簱")
     public synchronized R pakout(@RequestBody List<LocDto> locDtos) throws InterruptedException {
-        StockOutParam param = new StockOutParam();
-        ArrayList<StockOutParam.LocDetl> locDetls = new ArrayList<>();
-        for (LocDto locDto:locDtos){
-            StockOutParam.LocDetl locDetl = new StockOutParam.LocDetl();
-            locDetl.setBrand(locDto.getBrand());
-            locDetl.setLocNo(locDto.getLocNo());
-            locDetl.setAnfme(locDto.getAnfme());
-            locDetl.setMatnr(locDto.getMatnr());
-            locDetl.setBatch(locDto.getBatch());
-            locDetl.setModel(locDto.getModel());
-            locDetl.setSpecs(locDto.getSpecs());
-            locDetl.setZpallet(locDto.getZpallet());
-
-            param.setOrderNo(locDto.getOrderNo());
-
-            locDetls.add(locDetl);
-        }
-        param.setLocDetls(locDetls);
-
-        List<StockOutParam> stockOutParams = OutboundAllocationUtil.OutboundClassification(param);
-        for (StockOutParam stockOutParam : stockOutParams){
-            workService.startupFullTakeStore(stockOutParam, getUserId());
-        }
-
-        for (LocDto locDto:locDtos){
-            OrderDetl orderDetl = orderDetlService.selectById(locDto.getOrderDetlId());
-            orderDetl.setWorkQty(locDto.getAnfme());
-            orderDetlService.updateById(orderDetl);
-        }
-
-        Order order = orderService.selectByNo(param.getOrderNo());
-        order.setSettle(2L);
-        orderService.updateById(order);
-
-
-//        if (Cools.isEmpty(locDtos)) {
-//            return R.parse(BaseRes.PARAM);
+//        StockOutParam param = new StockOutParam();
+//        ArrayList<StockOutParam.LocDetl> locDetls = new ArrayList<>();
+//        for (LocDto locDto:locDtos){
+//            StockOutParam.LocDetl locDetl = new StockOutParam.LocDetl();
+//            locDetl.setBrand(locDto.getBrand());
+//            locDetl.setLocNo(locDto.getLocNo());
+//            locDetl.setAnfme(locDto.getAnfme());
+//            locDetl.setMatnr(locDto.getMatnr());
+//            locDetl.setBatch(locDto.getBatch());
+//            locDetl.setModel(locDto.getModel());
+//            locDetl.setSpecs(locDto.getSpecs());
+//            locDetl.setZpallet(locDto.getZpallet());
+//
+//            param.setOrderNo(locDto.getOrderNo());
+//
+//            locDetls.add(locDetl);
 //        }
-//        boolean lack = true;
-//        for (LocDto locDto : locDtos) {
-//            if (!locDto.isLack()) {
-//                lack = false;
-//                break;
-//            }
-//        }
-//        if (lack) {
-//            return R.error("搴撳瓨涓嶈冻");
+//        param.setLocDetls(locDetls);
+//
+//        List<StockOutParam> stockOutParams = OutboundAllocationUtil.OutboundClassification(param);
+//        for (StockOutParam stockOutParam : stockOutParams){
+//            workService.startupFullTakeStore(stockOutParam, getUserId());
 //        }
 //
-//        Thread.sleep(1000L);
+//        for (LocDto locDto:locDtos){
+//            OrderDetl orderDetl = orderDetlService.selectById(locDto.getOrderDetlId());
+//            orderDetl.setWorkQty(locDto.getAnfme());
+//            orderDetlService.updateById(orderDetl);
+//        }
 //
-//        List<TaskDto> taskDtos = new ArrayList<>();
-//        // 鏍规嵁 锛堝簱浣� & 鍑哄簱绔欙級 鍒嗙粍锛� 鐞嗘兂鐘舵�侊細涓�缁勪负涓�娆″嚭搴撲换鍔�
-//        for (LocDto locDto : locDtos) {
-//            if (locDto.isLack()) { continue; }
-//            TaskDto taskDto = new TaskDto(locDto.getLocNo(), locDto.getStaNo(), locDto);
-//            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());
-//            workService.stockOut(staNo, taskDto, getUserId());
-//        }
+//        Order order = orderService.selectByNo(param.getOrderNo());
+//        order.setSettle(2L);
+//        orderService.updateById(order);
+
+
+        if (Cools.isEmpty(locDtos)) {
+            return R.parse(BaseRes.PARAM);
+        }
+        boolean lack = true;
+        for (LocDto locDto : locDtos) {
+            if (!locDto.isLack()) {
+                lack = false;
+                break;
+            }
+        }
+        if (lack) {
+            return R.error("搴撳瓨涓嶈冻");
+        }
+
+        Thread.sleep(1000L);
+
+        List<TaskDto> taskDtos = new ArrayList<>();
+        // 鏍规嵁 锛堝簱浣� & 鍑哄簱绔欙級 鍒嗙粍锛� 鐞嗘兂鐘舵�侊細涓�缁勪负涓�娆″嚭搴撲换鍔�
+        for (LocDto locDto : locDtos) {
+            if (locDto.isLack()) { continue; }
+            TaskDto taskDto = new TaskDto(locDto.getLocNo(), locDto.getStaNo(), locDto);
+            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());
+            workService.stockOut(staNo, taskDto, getUserId());
+        }
         return R.ok();
     }
 
diff --git a/src/main/java/com/zy/asrs/entity/WrkMast.java b/src/main/java/com/zy/asrs/entity/WrkMast.java
index e00a33a..b917411 100644
--- a/src/main/java/com/zy/asrs/entity/WrkMast.java
+++ b/src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -378,21 +378,22 @@
     }
 
     public String getStaNo$(){
-        BasDevpService service = SpringUtils.getBean(BasDevpService.class);
-        BasDevp basDevp = service.selectById(this.staNo);
-        if (!Cools.isEmpty(basDevp)){
-            return String.valueOf(basDevp.getDevNo());
-        }
-        return null;
+//        BasDevpService service = SpringUtils.getBean(BasDevpService.class);
+//        BasDevp basDevp = service.selectById(this.staNo);
+//        if (!Cools.isEmpty(basDevp)){
+//            return String.valueOf(basDevp.getDevNo());
+//        }
+        return String.valueOf(this.staNo);
     }
 
     public String getSourceStaNo$(){
-        BasDevpService service = SpringUtils.getBean(BasDevpService.class);
-        BasDevp basDevp = service.selectById(this.sourceStaNo);
-        if (!Cools.isEmpty(basDevp)){
-            return String.valueOf(basDevp.getDevNo());
-        }
-        return null;
+
+//        BasDevpService service = SpringUtils.getBean(BasDevpService.class);
+//        BasDevp basDevp = service.selectById(this.sourceStaNo);
+//        if (!Cools.isEmpty(basDevp)){
+//            return String.valueOf(basDevp.getDevNo());
+//        }
+        return String.valueOf(this.sourceStaNo);
     }
 
     public String getSourceLocNo$(){
diff --git a/src/main/java/com/zy/asrs/entity/param/CrnExecuteParam.java b/src/main/java/com/zy/asrs/entity/param/CrnExecuteParam.java
new file mode 100644
index 0000000..05e6a0d
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/param/CrnExecuteParam.java
@@ -0,0 +1,14 @@
+package com.zy.asrs.entity.param;
+
+import lombok.Data;
+
+/**
+ * @author pang.jiabao
+ * @description
+ * @createDate 2024/7/2 18:40
+ */
+@Data
+public class CrnExecuteParam {
+    private Integer workNo;
+    private Integer staNo;
+}
diff --git a/src/main/java/com/zy/asrs/entity/param/GhjtApiParam.java b/src/main/java/com/zy/asrs/entity/param/GhjtApiParam.java
new file mode 100644
index 0000000..af7d2d6
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/param/GhjtApiParam.java
@@ -0,0 +1,20 @@
+package com.zy.asrs.entity.param;
+
+import lombok.Data;
+
+/**
+ * @author pang.jiabao
+ * @description 鍐犻缚姹熼摐鎺ュ彛浜や簰缁熶竴鍏ュ弬dto
+ * @createDate 2024/7/3 9:45
+ */
+@Data
+public class GhjtApiParam {
+
+    private Integer workNo; // 宸ヤ綔鍙�
+
+    private Integer outLocResult; // 鍑哄簱缁撴灉涓婃姤 1.瀹屾垚锛屽叾浠栧紓甯�
+
+    private Integer staNo;
+
+    private Integer check; // 澶嶆牳纭鏍囪瘑锛�1.纭锛屽叾浠栧紓甯�
+}
diff --git a/src/main/java/com/zy/asrs/entity/param/GwmsGenerateInventoryDto.java b/src/main/java/com/zy/asrs/entity/param/GwmsGenerateInventoryDto.java
new file mode 100644
index 0000000..0f51b11
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/param/GwmsGenerateInventoryDto.java
@@ -0,0 +1,32 @@
+package com.zy.asrs.entity.param;
+
+import lombok.Data;
+
+import java.util.List;
+
+
+@Data
+public class GwmsGenerateInventoryDto {
+
+    private String barcode;//	鎵樼洏鐮�
+    private Integer palletizingNo;// 鐮佸灈浣嶇紪鍙�
+
+    private List<MatList> matList; // 鏈ㄧ闆嗗悎
+
+    @Data
+    public static class MatList{
+        private String boxPos; // 绠卞瓙浣嶇疆
+        private String packageGroupNo; // 鍖呰缁勫彿
+        private List<Rolls> rolls; // 鍗烽泦鍚�
+    }
+    @Data
+    public static class Rolls{
+        private String rollNo; // 鍗峰彿
+        private String boxNo; // 绠卞彿
+        private String specs; //瑙勬牸
+        private Double length; //闀垮害
+        private Integer splices; //鎺ュご 涓�
+        private Double netWeight; // 鍑�閲�
+        private Double grossWeight; // 姣涢噸
+    }
+}
diff --git a/src/main/java/com/zy/asrs/entity/param/ZwmsOutLocWorkDto.java b/src/main/java/com/zy/asrs/entity/param/ZwmsOutLocWorkDto.java
new file mode 100644
index 0000000..659eb1f
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/param/ZwmsOutLocWorkDto.java
@@ -0,0 +1,28 @@
+package com.zy.asrs.entity.param;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author pang.jiabao
+ * @description 鍑哄簱璁㈠崟
+ * @createDate 2024/7/2 19:17
+ */
+@Data
+public class ZwmsOutLocWorkDto {
+
+    private String orderNo; // 璁㈠崟鍙�
+
+    private String orderType; // 璁㈠崟绫诲瀷
+
+    private List<Rolls> matDetails;
+
+    @Data
+    public static class Rolls{
+        private String rollNo; // 鍗峰彿
+        private String boxNo; // 绠卞彿
+        private String specs; // 瑙勬牸
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/mapper/LocMastMapper.java b/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
index 208fff4..2912a76 100644
--- a/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
@@ -12,6 +12,15 @@
 @Mapper
 @Repository
 public interface LocMastMapper extends BaseMapper<LocMast> {
+    /**
+     * 鎼滅储鎸囧畾鍖哄煙鍙敤搴撲綅
+     */
+    List<LocMast> selectAreaEmpty(Short locType1);
+
+    /**
+     * 鏍规嵁搴撲綅鍙锋悳绱㈠簱浣�
+     */
+    LocMast selectByLoc(String locNo);
 
     LocMast queryFreeLocMast(@Param("row") Integer row, @Param("locType1") Short locType1);
 
diff --git a/src/main/java/com/zy/asrs/service/LocMastService.java b/src/main/java/com/zy/asrs/service/LocMastService.java
index 00b330b..6f5b7ca 100644
--- a/src/main/java/com/zy/asrs/service/LocMastService.java
+++ b/src/main/java/com/zy/asrs/service/LocMastService.java
@@ -7,6 +7,12 @@
 import java.util.List;
 
 public interface LocMastService extends IService<LocMast> {
+    LocMast selectByLoc(String locNo);
+
+    /**
+     * 鎼滅储鎸囧畾鍖哄煙鍙敤搴撲綅
+     */
+    List<LocMast> selectAreaEmpty(Short locType1);
 
     /**
      * 妫�绱㈠彲鐢ㄥ簱浣�
@@ -28,6 +34,10 @@
     Boolean checkEmptyCount(LocMast locMast);
 
     /**
+     * 鏌ヨ绌哄簱浣嶆暟閲�
+     */
+    Boolean checkEmptyCount(LocMast locMast, int quaOfBlank);
+    /**
      * 褰撳墠搴撳瓨鏄庣粏鏄惁涓烘暣鎵�
      */
     Boolean checkWhole(List<LocDetl> locDetls);
diff --git a/src/main/java/com/zy/asrs/service/MobileService.java b/src/main/java/com/zy/asrs/service/MobileService.java
index 7621855..6174796 100644
--- a/src/main/java/com/zy/asrs/service/MobileService.java
+++ b/src/main/java/com/zy/asrs/service/MobileService.java
@@ -43,4 +43,9 @@
 
     void stockOut(OrderDetl orderDetl, BasDevp staNo, LocDetl locDetl,
                   Double curOutQty, Integer ioType, Long userId, Date now);
+
+    /**
+     * 鍑哄簱澶嶆牳纭
+     */
+    void pakoutFhqr(Integer workNo, Integer check);
 }
diff --git a/src/main/java/com/zy/asrs/service/OpenService.java b/src/main/java/com/zy/asrs/service/OpenService.java
index c9e4899..937c482 100644
--- a/src/main/java/com/zy/asrs/service/OpenService.java
+++ b/src/main/java/com/zy/asrs/service/OpenService.java
@@ -1,5 +1,6 @@
 package com.zy.asrs.service;
 
+import com.core.common.R;
 import com.zy.asrs.entity.param.*;
 import com.zy.asrs.entity.result.OpenOrderCompeteResult;
 import com.zy.asrs.entity.result.StockVo;
@@ -59,4 +60,29 @@
 
     void cs2();
 
+    /**
+     * GWMS璇锋眰ZWMS鐢熸垚鍏ュ簱浠诲姟
+     * @return 鐩爣淇℃伅
+     */
+    R gwmsGenerateInventory(GwmsGenerateInventoryDto param);
+
+    /**
+     *GWMS鍒拌揪鐩爣绔欑偣璇锋眰ZWCS鎵ц鍏ュ簱
+     */
+    String crnExecute(CrnExecuteParam param);
+
+    /**
+     * ZWMS鎺ユ敹MES涓嬪彂鍑哄簱浠诲姟
+     */
+    String zwmsOutLocWork(ZwmsOutLocWorkDto param);
+
+    /**
+     * 璐х墿鍒拌揪鍑哄簱鍙d互鍚庯紝涓婃姤鍑哄簱缁撴灉
+     */
+    String outLocResultReport(GhjtApiParam param);
+
+    /**
+     * 鎷嗙洏鏈哄嚭搴撴帴鍙�(绌烘墭鐩樺嚭搴�)
+     */
+    String emptyOutLoc(GhjtApiParam param);
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
index e6ce450..4f003ee 100644
--- a/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
@@ -22,7 +22,14 @@
     public LocMast queryFreeLocMast(Integer row, Short locType1) {
         return this.baseMapper.queryFreeLocMast(row, locType1);
     }
-
+    @Override
+    public List<LocMast> selectAreaEmpty(Short locType1) {
+        return this.baseMapper.selectAreaEmpty(locType1);
+    }
+    @Override
+    public LocMast selectByLoc(String locNo) {
+        return this.baseMapper.selectByLoc(locNo);
+    }
     @Override
     public List<String> queryGroupEmptyStock(String sourceLocNo) {
         if (Cools.isEmpty(sourceLocNo)) {
@@ -44,6 +51,14 @@
     }
 
     @Override
+    public Boolean checkEmptyCount(LocMast locMast, int quaOfBlank) {
+        if (locMast == null) {
+            return false;
+        }
+        return this.baseMapper.selectEmptyLocCount(locMast.getLocType1(), locMast.getCrnNo()) > quaOfBlank;
+    }
+
+    @Override
     public Boolean checkWhole(List<LocDetl> locDetls) {
         return null;
     }
diff --git a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
index 22c5437..5880371 100644
--- a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -4,29 +4,26 @@
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.mapper.Wrapper;
-import com.baomidou.mybatisplus.plugins.Page;
-import com.core.common.*;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.common.SnowflakeIdWorker;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.entity.param.*;
 import com.zy.asrs.mapper.ManLocDetlMapper;
 import com.zy.asrs.service.*;
-import com.zy.asrs.task.core.ReturnT;
 import com.zy.asrs.utils.MatUtils;
-import com.zy.asrs.utils.PostMesDataUtils;
-import com.zy.common.CodeRes;
 import com.zy.common.constant.MesConstant;
 import com.zy.common.entity.Parameter;
 import com.zy.common.model.DetlDto;
 import com.zy.common.model.LocTypeDto;
 import com.zy.common.model.MesCombParam;
 import com.zy.common.model.StartupDto;
-import com.zy.common.model.enums.WorkNoType;
 import com.zy.common.service.CommonService;
 import com.zy.common.utils.HttpHandler;
 import lombok.extern.slf4j.Slf4j;
 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;
 
@@ -1167,6 +1164,27 @@
 
     @Override
     @Transactional
+    public void pakoutFhqr(Integer workNo, Integer check) {
+         // 鑾峰彇宸ヤ綔妗�
+        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", workNo));
+        if (wrkMast == null) {
+            throw new CoolException("宸ヤ綔妗d笉瀛樺湪锛�" + workNo);
+        }
+
+        if (wrkMast.getWrkSts() != 20) {
+            throw new CoolException("宸ヤ綔妗e綋鍓嶇姸鎬佸紓甯革細" + workNo + ",鐘舵�侊細" + wrkMast.getWrkSts());
+        }
+
+        if (check == 1) {
+            // 澶嶆牳纭锛屾洿鏂扮姸鎬佷负15鍑哄簱瀹屾垚鏇存柊
+            wrkMast.setWrkSts(14L);
+            wrkMastService.updateById(wrkMast);
+        }
+
+    }
+
+    @Override
+    @Transactional
     public List<Map<String, Object>> boxTypeComb() {
         EntityWrapper<BasBoxType> wrapper = new EntityWrapper<>();
         List<Map<String, Object>> result = new ArrayList<>();
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 181a918..f7a3c6b 100644
--- a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -1,7 +1,7 @@
 package com.zy.asrs.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
-import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.core.common.Cools;
 import com.core.common.DateUtils;
 import com.core.common.R;
@@ -13,25 +13,21 @@
 import com.zy.asrs.entity.result.StockVo;
 import com.zy.asrs.mapper.TagMapper;
 import com.zy.asrs.service.*;
-import com.zy.asrs.task.core.ReturnT;
 import com.zy.asrs.utils.MatUtils;
-import com.zy.asrs.utils.PostMesDataUtils;
+import com.zy.common.constant.MesConstant;
 import com.zy.common.model.DetlDto;
 import com.zy.common.model.LocTypeDto;
 import com.zy.common.model.StartupDto;
 import com.zy.common.model.enums.WorkNoType;
 import com.zy.common.service.CommonService;
+import com.zy.common.utils.HttpHandler;
 import com.zy.common.utils.NodeUtils;
-import com.zy.common.web.WcsController;
-import com.zy.common.web.param.SearchLocParam;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 /**
  * Created by vincent on 2022/4/9
@@ -981,6 +977,388 @@
 
     }
 
+    @Override
+    @Transactional
+    public R gwmsGenerateInventory(GwmsGenerateInventoryDto param) {
+
+        if (Cools.isEmpty(param)) {
+            throw new CoolException("璇锋眰鍙傛暟鏈夎锛�" + param);
+        }
+        int zpalletCount = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet", param.getBarcode()));
+        if (zpalletCount > 0) {
+            throw new CoolException("搴撳瓨鎵樼洏鐮佸凡瀛樺湪锛�" + param.getBarcode());
+        }
+
+        int barcodeCount = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("barcode", param.getBarcode()));
+        if (barcodeCount > 0) {
+            throw new CoolException("宸ヤ綔妗e凡瀛樺湪璇ユ墭鐩樼爜锛�" + param.getBarcode());
+        }
+
+        LocTypeDto locTypeDto = new LocTypeDto();
+        locTypeDto.setLocType1((short)1);
+
+        // 鏍规嵁婧愮珯鐐瑰鎵惧簱浣�
+//        StartupDto dto = commonService.getLocNo(1, 1, param.getPalletizingNo(), null,null,null, locTypeDto);
+        StartupDto dto = commonService.getLocNo(1, param.getPalletizingNo(), locTypeDto);
+
+        // 杩斿洖GWCS鐩爣淇℃伅
+        pushStaNoToGwcs(param.getPalletizingNo(),dto.getStaNo(),dto.getWorkNo());
+
+        int workNo = dto.getWorkNo();
+        Date now = new Date();
+        // 鐢熸垚宸ヤ綔妗�
+        WrkMast wrkMast = new WrkMast();
+        wrkMast.setWrkNo(workNo);
+        wrkMast.setIoTime(new Date());
+        wrkMast.setWrkSts(1L); // 宸ヤ綔鐘舵�侊細璁惧涓婅蛋
+        wrkMast.setIoType(1); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱
+        wrkMast.setIoPri(13D); // 浼樺厛绾�
+        wrkMast.setCrnNo(dto.getCrnNo());
+        wrkMast.setSourceStaNo(param.getPalletizingNo());
+        wrkMast.setStaNo(dto.getStaNo());
+        wrkMast.setLocNo(dto.getLocNo());
+        wrkMast.setBarcode(param.getBarcode()); // 鎵樼洏鐮�
+        wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
+        wrkMast.setPicking("N"); // 鎷f枡
+        wrkMast.setExitMk("N"); // 閫�鍑�
+        wrkMast.setEmptyMk("N"); // 绌烘澘
+        wrkMast.setLinkMis("Y");
+        wrkMast.setCtnType(1); // 瀹瑰櫒绫诲瀷
+        // 鎿嶄綔浜哄憳鏁版嵁
+        wrkMast.setAppeTime(now);
+        wrkMast.setModiTime(now);
+        boolean res = wrkMastService.insert(wrkMast);
+        if (!res) {
+            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+        }
+
+        List<GwmsGenerateInventoryDto.MatList> matList = param.getMatList();
+        for (GwmsGenerateInventoryDto.MatList obj :matList) {
+            WrkDetl wrkDetl = new WrkDetl();
+            wrkDetl.setWrkNo(wrkMast.getWrkNo());
+            obj.getRolls().forEach(roll -> {
+                Mat mat = matService.selectByMatnr(roll.getSpecs());
+                if (mat == null) {
+                    mat = new Mat();
+                    mat.setTagId(6L);
+                    mat.setMatnr(roll.getSpecs());
+                    mat.setMaktx(roll.getSpecs());
+                    mat.setSpecs(roll.getSpecs());
+                    mat.setStatus(1);
+                    mat.setCreateTime(now);
+                    mat.setUpdateTime(now);
+                    if (!matService.insert(mat)) {
+                        throw new CoolException("鐗╂枡瀵煎叆澶辫触锛�");
+                    }
+                }
+                wrkDetl.setWrkNo(wrkMast.getWrkNo());
+                wrkDetl.setMatnr(roll.getSpecs()); // 瑙勬牸
+                wrkDetl.setMaktx(roll.getSpecs()); //瑙勬牸
+                wrkDetl.setBatch(roll.getBoxNo()); // 绠卞彿
+                wrkDetl.setModel(roll.getRollNo()); // 鍗峰彿
+                wrkDetl.setBrand(""); // 鏈ㄧ绫诲瀷
+                wrkDetl.setZpallet(param.getBarcode()); // 鎵樼洏鍚�
+                wrkDetl.setOrigin(obj.getBoxPos()); // 鏈ㄧ鍦ㄦ墭鐩樹綅缃�
+                wrkDetl.setWeight(roll.getNetWeight()); // 鍑�閲�
+                wrkDetl.setVolume(roll.getGrossWeight()); // 姣涢噸
+                wrkDetl.setPrice(roll.getLength());
+                wrkDetl.setSpecs(String.valueOf(roll.getSplices()));
+                wrkDetl.setAnfme(1.0);
+                wrkDetl.setIoTime(now);
+                wrkDetl.setAppeTime(now);
+                wrkDetl.setModiTime(now);
+                if (!wrkDetlService.insert(wrkDetl)) {
+                    throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触");
+                }
+            });
+        }
+
+        // 鏇存柊鐩爣搴撲綅鐘舵��
+        LocMast locMast = locMastService.selectById(dto.getLocNo());
+        if (locMast.getLocSts().equals("O")){
+            locMast.setLocSts("S"); // S.鍏ュ簱棰勭害
+            locMast.setModiTime(now);
+            if (!locMastService.updateById(locMast)){
+                throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�");
+            }
+        } else {
+            throw new CoolException(dto.getLocNo()+"鐩爣搴撲綅宸茶鍗犵敤");
+        }
+        return null;
+    }
+
+    @Override
+    @Transactional
+    public String crnExecute(CrnExecuteParam param) {
+        if (Cools.isEmpty(param.getStaNo(),param.getWorkNo())){
+            throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛�" + param);
+        }
+
+        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", param.getWorkNo()));
+        if (wrkMast == null) {
+            throw new CoolException("涓嶅瓨鍦ㄨ宸ヤ綔鍙凤細" + param.getWorkNo());
+        }
+
+        wrkMast.setWrkSts(2L);
+        wrkMastService.updateById(wrkMast);
+
+        return "璇锋眰鎴愬姛";
+    }
+
+    @Override
+    @Transactional
+    public String zwmsOutLocWork(ZwmsOutLocWorkDto param) {
+
+        Order order = orderService.selectByNo(param.getOrderNo());
+        if (!Cools.isEmpty(order)) {
+            throw new CoolException(param.getOrderNo() + "鍗曟嵁宸插瓨鍦紝璇峰嬁閲嶅鎻愪氦");
+        }
+
+        DocType docType = docTypeService.selectOrAdd(param.getOrderType(), Boolean.FALSE);
+        Date now = new Date();
+        // 鍗曟嵁涓绘。
+        order = new Order(
+                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,    // 鐘舵��
+                9527L,    // 娣诲姞浜哄憳
+                now,    // 娣诲姞鏃堕棿
+                9527L,    // 淇敼浜哄憳
+                now,    // 淇敼鏃堕棿
+                null    // 澶囨敞
+        );
+        if (!orderService.insert(order)) {
+            throw new CoolException("鐢熸垚鍗曟嵁涓绘。澶辫触锛岃鑱旂郴绠$悊鍛�");
+        }
+        // 鍗曟嵁鏄庣粏妗�
+        List<DetlDto> list = new ArrayList<>();
+        List<ZwmsOutLocWorkDto.Rolls> orderDetails = param.getMatDetails();
+        for (ZwmsOutLocWorkDto.Rolls detail : orderDetails) {
+            DetlDto dto = new DetlDto(detail.getRollNo(), detail.getBoxNo(), 1.0);
+            dto.setOrderNo(detail.getSpecs());
+            if (DetlDto.has(list, dto)) {
+                DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch());
+                assert detlDto != null;
+                detlDto.setAnfme(detlDto.getAnfme() + 1);
+            } else {
+                list.add(dto);
+            }
+        }
+        for (DetlDto detlDto : list) {
+//            Mat mat = matService.selectByMatnr(detlDto.getMatnr());
+            OrderDetl orderDetl = new OrderDetl();
+//            if (Cools.isEmpty(mat)) {
+//                throw new CoolException(detlDto.getMatnr() + "缂栧彿鍟嗗搧妫�绱㈠け璐ワ紝璇峰厛娣诲姞鍟嗗搧");
+//            } else {
+//                orderDetl.sync(mat);
+//            }
+
+            orderDetl.setBatch(detlDto.getBatch() == null ? "" : detlDto.getBatch());
+            orderDetl.setModel(detlDto.getMatnr());
+            orderDetl.setMatnr(detlDto.getOrderNo());
+            orderDetl.setMaktx(detlDto.getOrderNo());
+            orderDetl.setAnfme(detlDto.getAnfme());
+            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);
+            if (!orderDetlService.insert(orderDetl)) {
+                throw new CoolException("鐢熸垚鍗曟嵁鏄庣粏澶辫触锛岃鑱旂郴绠$悊鍛�");
+            }
+        }
+
+        return null;
+    }
+
+    @Override
+    @Transactional
+    public String outLocResultReport(GhjtApiParam param) {
+
+        if (Cools.isEmpty(param.getOutLocResult(),param.getWorkNo())) {
+            throw new CoolException("鍏ュ弬涓嶈兘涓虹┖锛�" + param);
+        }
+
+        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", param.getWorkNo()));
+        if (wrkMast == null) {
+            throw new CoolException("璇ュ伐浣滄。涓嶅瓨鍦紝浠诲姟鍙凤細" + param.getWorkNo());
+        } else if(wrkMast.getWrkSts() != 2) {
+            throw new CoolException("宸ヤ綔妗e綋鍓嶇姸鎬佷笉绗﹀悎锛屼换鍔″彿锛�" + param.getWorkNo() + "锛屽伐浣滄。鐘舵�侊細" + wrkMast.getWrkSts());
+        }
+
+        // 鍒拌揪鍑哄簱鍙g‘璁や负1锛屾洿鏂板伐浣滄。鐘舵�佷负57.鍑哄簱瀹屾垚
+        if (param.getOutLocResult() == 1) {
+            wrkMast.setWrkSts(20L);
+            // 绌烘墭鐩樺埌浣嶇洿鎺ユ洿鏂板伐浣滄。鐘舵�佷负14.宸插嚭搴撴湭纭锛岀┖鎵樻棤闇�澶嶆牳纭
+            if (wrkMast.getIoType() == 110) {
+                wrkMast.setWrkSts(14L);
+            }
+            wrkMastService.updateById(wrkMast);
+        }
+
+        return "鍑哄簱缁撴灉涓婃姤鎴愬姛";
+    }
+
+    @Override
+    @Transactional
+    public String emptyOutLoc(GhjtApiParam param) {
+//        3102/3009/3008/3006/3003/3002鈫�3047/3112
+        // 瀵绘壘绌烘墭鐩樺簱浣嶏紝鍏堟壘娴呭簱浣�
+        List<LocMast> locMasts;
+            locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts","D")
+                    .orderAsc(Arrays.asList("row1","lev1","bay1")).in("row1",3,4,6,7,10,11,14,15,18,19,22,23));
+            if (locMasts.isEmpty()) {
+                locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts","D")
+                        .orderAsc(Arrays.asList("row1","lev1","bay1")).in("row1",1,4,5,8,9,12,13,16,17,20,21,24));
+            }
+
+        if (locMasts.isEmpty()) {
+            throw new CoolException("娌℃湁鎵惧埌绌烘墭鐩橈紝绔欑偣锛�" + param.getStaNo());
+        }
+
+        // 鍙栫涓�涓┖搴撲綅
+        LocMast locMast = locMasts.get(0);
+
+        // 鑾峰彇宸ヤ綔璺緞
+        StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>().eq("type_no", 110).eq("stn_no",
+                param.getStaNo()).eq("crn_no", locMast.getCrnNo()));
+
+        if (staDesc == null) {
+            throw new CoolException("璺緞涓嶅瓨鍦�");
+        }
+
+        //2.鐢熸垚绌烘墭鐩樺嚭搴撳伐浣滄。
+        Date now = new Date();
+        WrkMast wrkMast = new WrkMast();
+        wrkMast.setWrkNo(commonService.getWorkNo(WorkNoType.PAKOUT.type));
+        wrkMast.setIoTime(now);
+        wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
+        wrkMast.setIoType(110); // 鍏ュ嚭搴撶姸鎬侊細 110.绌烘澘鍑哄簱
+        wrkMast.setIoPri(10D);
+        wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 婧愮珯
+        wrkMast.setStaNo(staDesc.getStnNo()); // 鐩爣绔�
+        wrkMast.setCrnNo(locMast.getCrnNo());
+        wrkMast.setSourceLocNo(locMast.getLocNo()); // 婧愬簱浣�
+        wrkMast.setFullPlt("N"); // 婊℃澘锛歒
+        wrkMast.setPicking("N"); // 鎷f枡
+        wrkMast.setExitMk("N"); // 閫�鍑�
+        wrkMast.setEmptyMk("Y"); // 绌烘澘
+        wrkMast.setLinkMis("N");
+        wrkMast.setAppeUser(9999L);
+        wrkMast.setAppeTime(now);
+        wrkMast.setModiUser(9999L);
+        wrkMast.setModiTime(now);
+        if (!wrkMastService.insert(wrkMast)) {
+            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+        }
+
+        // 3.鏇存柊搴撲綅鐘舵�� D.绌烘澘 -> R.鍑哄簱棰勭害
+        if (locMast.getLocSts().equals("D")) {
+            locMast.setLocSts("R");
+            locMast.setModiUser(9999L);
+            locMast.setModiTime(now);
+            if (!locMastService.updateById(locMast)) {
+                throw new CoolException("鏇存柊搴撲綅鐘舵�佸け璐�");
+            }
+        }
+
+        return "鍑哄簱鎴愬姛";
+    }
+
+    @Autowired
+    private ApiLogService apiLogService;
+
+    private void pushStaNoToGwcs(Integer palletizingNo, Integer staNo, Integer workNo) {
+        boolean success = false;
+        // 鑾峰彇璇锋眰澶�
+        Map<String, Object> headers = getHeaders();
+
+        // 鏋勯�犺姹備綋
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("workNo", workNo);
+        jsonObject.put("staNo", staNo);
+        jsonObject.put("sourceStaNo", palletizingNo);
+        String body = jsonObject.toJSONString();
+        String response = "";
+        try {
+            response = new HttpHandler.Builder()
+                    .setUri(MesConstant.URL)
+                    .setPath(MesConstant.PAKIN_URL)
+                    .setHeaders(headers)
+                    .setJson(body)
+                    .build()
+                    .doPost();
+            if (!Cools.isEmpty(response)) {
+                success = true;
+//                // 淇敼璁㈠崟鐘舵�� 4.瀹屾垚 ===>> 6.宸蹭笂鎶�
+//                if (!orderService.updateSettle(order.getId(), 6L, null)) {
+//                    throw new CoolException("鏈嶅姟鍣ㄥ唴閮ㄩ敊璇紝璇疯仈绯荤鐞嗗憳");
+//                }
+            } else {
+                log.error("zmws鎺ㄩ�佸叆搴撶爜澶寸珯鐐规帴鍙eけ璐ワ紒锛侊紒url锛歿}锛況equest锛歿}锛況esponse锛歿}", MesConstant.URL + MesConstant.PAKIN_URL, body, response);
+                throw new CoolException("涓婃姤mes绯荤粺澶辫触");
+            }
+        } catch (Exception e) {
+            log.error("鍏ュ簱璇锋眰鎺ュ彛澶辫触锛歿}", e.getMessage());
+//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+//            return FAIL.setMsg(e.getMessage());
+        } finally {
+            try {
+                // 淇濆瓨鎺ュ彛鏃ュ織
+                apiLogService.save(
+                        "鍏ュ簱",
+                        MesConstant.URL + MesConstant.PAKIN_URL,
+                        null,
+                        "127.0.0.1",
+                        jsonObject.toJSONString(),
+                        response,
+                        success
+                );
+            } catch (Exception e) {
+                log.error("", e);
+            }
+        }
+    }
+
+    Map<String, Object> getHeaders(){
+        Map<String,Object> headers = new HashMap<>();
+        headers.put("digi-type","sync ");
+        headers.put("digi-protocol","raw");
+        headers.put("digi-datakey"," XCommon.ImportData");
+
+        return headers;
+    }
+
+
     private void descSta(Integer staNo,Integer crnNo){
 //        int[] typeNos =new int[]{1,10,53,101,103,110};
         int[] typeNos =new int[]{10,110};
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 fe9aaf9..abea98b 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -13,7 +13,6 @@
 import com.zy.asrs.entity.param.LocDetlAdjustParam;
 import com.zy.asrs.entity.param.StockOutParam;
 import com.zy.asrs.service.*;
-import com.zy.asrs.utils.OutboundAllocationUtil;
 import com.zy.asrs.utils.Utils;
 import com.zy.common.model.*;
 import com.zy.common.model.enums.IoWorkType;
@@ -28,7 +27,6 @@
 
 import java.util.*;
 import java.util.concurrent.TimeUnit;
-import java.util.stream.Collectors;
 
 /**
  * Created by vincent on 2020/6/11
@@ -403,7 +401,48 @@
         LocMast locMast = locMastService.selectById(taskDto.getLocNo());
         // 鑾峰彇璺緞
         int ioType = taskDto.isAll() ? 101 : 103;
-        StaDesc staDesc = staDescService.queryCrnStnAuto(ioType, locMast.getCrnNo(), staNo.getDevNo());
+//        StaDesc staDesc = staDescService.queryCrnStnAuto(ioType, locMast.getCrnNo(), staNo.getDevNo());
+        // 鏍规嵁搴撲綅鎺掑彿+鍑哄簱绔欑偣锛岃幏鍙栧嚭搴撴簮绔欑偣
+        int row = Integer.parseInt(locMast.getLocNo().substring(0, 2));
+        int souresStaNo = 0;
+        if (taskDto.getStaNo() < 3000) { // 浜屾ゼ
+            switch (row) {
+                case 1: case 2: case 3:
+                case 4: souresStaNo = 2062; break;
+                case 5: case 6: case 7:
+                case 8: souresStaNo = 2065; break;
+                case 9: case 10: case 11:
+                case 12: souresStaNo = 2068; break;
+                case 13: case 14: case 15:
+                case 16: souresStaNo = 2070; break;
+                case 17: case 18: case 19:
+                case 20: souresStaNo = 2073; break;
+                case 21: case 22: case 23:
+                case 24: souresStaNo = 2076; break;
+                default:
+            }
+        } else { // 涓�妤�
+            switch (row) {
+                case 1: case 2: case 3:
+                case 4: souresStaNo = 3002; break;
+                case 5: case 6: case 7:
+                case 8: souresStaNo = 3003; break;
+                case 9: case 10: case 11:
+                case 12: souresStaNo = 3006; break;
+                case 13: case 14: case 15:
+                case 16: souresStaNo = 3008; break;
+                case 17: case 18: case 19:
+                case 20: souresStaNo = 3009; break;
+                case 21: case 22: case 23:
+                case 24: souresStaNo = 3012; break;
+                default:
+            }
+        }
+
+        if (souresStaNo == 0) {
+            throw new CoolException("婧愮珯鐐硅浆鎹㈠紓甯革細" + row);
+        }
+
         // 鐢熸垚宸ヤ綔鍙�
         int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
         // 鐢熸垚宸ヤ綔妗�
@@ -414,8 +453,8 @@
         wrkMast.setIoType(ioType); // 鍏ュ嚭搴撶姸鎬�
         wrkMast.setIoPri(13D); // 浼樺厛绾э細13
         wrkMast.setCrnNo(locMast.getCrnNo());
-        wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 婧愮珯
-        wrkMast.setStaNo(staDesc.getStnNo()); // 鐩爣绔�
+        wrkMast.setSourceStaNo(souresStaNo); // 婧愮珯
+        wrkMast.setStaNo(taskDto.getStaNo()); // 鐩爣绔�
         wrkMast.setSourceLocNo(taskDto.getLocNo()); // 婧愬簱浣�
         wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
         wrkMast.setPicking("N"); // 鎷f枡
@@ -438,9 +477,17 @@
                 orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), null);
             }
             WrkDetl wrkDetl = new WrkDetl();
-            wrkDetl.sync(orderDetl);
+//            wrkDetl.sync(orderDetl);
             wrkDetl.setZpallet(wrkMast.getBarcode());
             wrkDetl.setIoTime(now);
+            wrkDetl.setMatnr(locDto.getMatnr());
+            wrkDetl.setMaktx(locDto.getMaktx());
+            wrkDetl.setWeight(locDto.getWeight()); // 鍑�閲�
+            wrkDetl.setVolume(locDto.getVolume()); // 姣涢噸
+            wrkDetl.setOrigin(locDto.getOrigin()); // 鏈ㄧ鍦ㄦ墭鐩樹綅缃�
+            wrkDetl.setPrice(locDto.getPrice());
+            wrkDetl.setSpecs(locDto.getSpecs());
+            wrkDetl.setModel(locDto.getModel());
             wrkDetl.setWrkNo(workNo);
             wrkDetl.setBatch(locDto.getBatch());
             wrkDetl.setOrderNo(locDto.getOrderNo());
diff --git a/src/main/java/com/zy/asrs/task/GhjtScheduler.java b/src/main/java/com/zy/asrs/task/GhjtScheduler.java
new file mode 100644
index 0000000..117f4f2
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/GhjtScheduler.java
@@ -0,0 +1,60 @@
+package com.zy.asrs.task;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.zy.asrs.entity.Order;
+import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.mapper.OrderMapper;
+import com.zy.asrs.mapper.WrkMastMapper;
+import com.zy.asrs.task.handler.GhjtHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @author pang.jiabao
+ * @description 鍐犻缚姹熼摐鐩稿叧瀹氭椂浠诲姟
+ * @createDate 2024/7/3 9:07
+ */
+@Slf4j
+@Component
+public class GhjtScheduler {
+
+    @Resource
+    private GhjtHandler ghjtHandler;
+
+    @Resource
+    private WrkMastMapper wrkMastMapper;
+
+    @Resource
+    private OrderMapper orderMapper;
+
+    // 涓嬪彂鍑哄簱浠诲姟缁橤WCS(浠庡嚭搴撶爜澶村埌鍑哄簱鍙�)
+//    @Scheduled(cron = "0/2 * * * * ? ")
+    public void ckrwPushGwcs() {
+        // 鏌ヨ鐘舵�佷负13鐨勫伐浣滄。
+        List<WrkMast> wrkMasts = wrkMastMapper.selectList(new EntityWrapper<WrkMast>().eq("io_type", 101).eq("wrk_sts", 13));
+        for (WrkMast wrkMast : wrkMasts) {
+            try {
+                ghjtHandler.startCkrwPushGwcs(wrkMast);
+            } catch (Exception e) {
+                log.error("涓嬪彂鍑哄簱浠诲姟缁橤WCS(浠庡嚭搴撶爜澶村埌鍑哄簱鍙�)澶辫触锛屽紓甯镐俊鎭細" + e);
+            }
+        }
+    }
+
+    // 鍑哄簱璁㈠崟瀹屾垚鍒欎笂鎶ES
+//    @Scheduled(cron = "0/4 * * * * ? ")
+    public void OutBoundCompleteReport() {
+        // 鏌ヨ璁㈠崟鐘舵�佷负4.宸插畬鎴�
+        List<Order> orders = orderMapper.selectComplete();
+        for (Order order : orders) {
+            try {
+                ghjtHandler.OutBoundCompleteReport(order);
+            } catch (Exception e) {
+                log.error("鍑哄簱璁㈠崟瀹屾垚鍒欎笂鎶ES澶辫触锛屽紓甯镐俊鎭細" + e);
+            }
+        }
+    }
+}
diff --git a/src/main/java/com/zy/asrs/task/WorkMastScheduler.java b/src/main/java/com/zy/asrs/task/WorkMastScheduler.java
index f61788a..1fafebb 100644
--- a/src/main/java/com/zy/asrs/task/WorkMastScheduler.java
+++ b/src/main/java/com/zy/asrs/task/WorkMastScheduler.java
@@ -40,11 +40,11 @@
         }
         for (WrkMast wrkMast : wrkMasts) {
             try{
-                if (wrkMast.getIoType().equals(101)){
-                    if (Cools.isEmpty(wrkMast.getSheetNo()) || !wrkMast.getSheetNo().equals("3")){
-                        continue;
-                    }
-                }
+//                if (wrkMast.getIoType().equals(101)){
+//                    if (Cools.isEmpty(wrkMast.getSheetNo()) || !wrkMast.getSheetNo().equals("3")){
+//                        continue;
+//                    }
+//                }
                 ReturnT<String> returnT = workMastHandler.start(wrkMast);
                 if (!returnT.isSuccess()) {
                     wrkMast.setUpdMk("X");
diff --git a/src/main/java/com/zy/asrs/task/handler/GhjtHandler.java b/src/main/java/com/zy/asrs/task/handler/GhjtHandler.java
new file mode 100644
index 0000000..4fff96c
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/handler/GhjtHandler.java
@@ -0,0 +1,139 @@
+package com.zy.asrs.task.handler;
+
+import com.alibaba.fastjson.JSONObject;
+import com.core.common.Cools;
+import com.core.exception.CoolException;
+import com.zy.asrs.entity.Order;
+import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.mapper.WrkMastMapper;
+import com.zy.asrs.service.ApiLogService;
+import com.zy.common.constant.MesConstant;
+import com.zy.common.utils.HttpHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author pang.jiabao
+ * @description 鍐犻缚姹熼摐瀹氭椂浠诲姟瀹炵幇
+ * @createDate 2024/7/3 9:09
+ */
+@Slf4j
+@Service
+public class GhjtHandler {
+
+    @Autowired
+    private ApiLogService apiLogService;
+
+    @Resource
+    private WrkMastMapper wrkMastMapper;
+
+    @Transactional
+    public void startCkrwPushGwcs(WrkMast wrkMast) {
+
+        // 鑾峰彇璇锋眰澶�
+        Map<String, Object> headers = new HashMap<>();
+        headers.put("digi-type", "sync ");
+        headers.put("digi-protocol", "raw");
+        headers.put("digi-datakey", " XCommon.ImportData");
+
+        // 鏋勯�犺姹備綋
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("workNo", wrkMast.getWrkNo());
+        jsonObject.put("staNo", wrkMast.getStaNo());
+        jsonObject.put("sourceStaNo", wrkMast.getSourceStaNo());
+        String body = jsonObject.toJSONString();
+
+        boolean success = false;
+        String response = "";
+        try {
+            response = new HttpHandler.Builder()
+                    .setUri(MesConstant.URL)
+                    .setPath(MesConstant.PAKIN_URL)
+                    .setHeaders(headers)
+                    .setJson(body)
+                    .build()
+                    .doPost();
+            if (!Cools.isEmpty(response)) {
+                wrkMast.setWrkSts(2L); // 鏇存柊涓鸿澶囦笂璧�
+                wrkMastMapper.updateById(wrkMast);
+                success = true;
+            } else {
+                log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", MesConstant.URL + MesConstant.PAKIN_URL, body, response);
+                throw new CoolException("涓嬪彂鍑哄簱浠诲姟缁橤WCS(浠庡嚭搴撶爜澶村埌鍑哄簱鍙�)澶辫触");
+            }
+        } catch (Exception e) {
+            log.error("涓嬪彂鍑哄簱浠诲姟缁橤WCS(浠庡嚭搴撶爜澶村埌鍑哄簱鍙�)寮傚父锛屽伐浣滃彿锛歿}锛寋}", wrkMast.getWrkNo(), e.getMessage());
+        } finally {
+            try {
+                // 淇濆瓨鎺ュ彛鏃ュ織
+                apiLogService.save(
+                        "浠庡嚭搴撶爜澶村埌鍑哄簱鍙�",
+                        MesConstant.URL + MesConstant.PAKIN_URL,
+                        null,
+                        "127.0.0.1",
+                        jsonObject.toJSONString(),
+                        response,
+                        success
+                );
+            } catch (Exception e) {
+                log.error("鎺ュ彛鏃ュ織淇濆瓨寮傚父", e);
+            }
+        }
+    }
+
+    @Transactional
+    public void OutBoundCompleteReport(Order order) {
+
+        // 鑾峰彇璇锋眰澶�
+        Map<String, Object> headers = new HashMap<>();
+        headers.put("digi-type", "sync ");
+        headers.put("digi-protocol", "raw");
+
+        // 鏋勯�犺姹備綋
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("orderNo", order.getOrderNo());
+        jsonObject.put("complete", 1); // 璁㈠崟瀹屾垚涓�1锛屽叾浠�...
+        String body = jsonObject.toJSONString();
+
+        boolean success = false;
+        String response = "";
+        try {
+            response = new HttpHandler.Builder()
+                    .setUri(MesConstant.URL)
+                    .setPath(MesConstant.PAKIN_URL)
+                    .setHeaders(headers)
+                    .setJson(body)
+                    .build()
+                    .doPost();
+            if (!Cools.isEmpty(response)) {
+                success = true;
+            } else {
+                log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", MesConstant.URL + MesConstant.PAKIN_URL, body, response);
+                throw new CoolException("涓嬪彂鍑哄簱浠诲姟缁橤WCS(浠庡嚭搴撶爜澶村埌鍑哄簱鍙�)澶辫触");
+            }
+        } catch (Exception e) {
+            log.error("鍑哄簱璁㈠崟瀹屾垚涓婃姤MES寮傚父锛屽伐浣滃彿锛歿}锛寋}", order.getOrderNo(), e.getMessage());
+        } finally {
+            try {
+                // 淇濆瓨鎺ュ彛鏃ュ織
+                apiLogService.save(
+                        "鍑哄簱璁㈠崟瀹屾垚涓婃姤MES",
+                        MesConstant.URL + MesConstant.PAKIN_URL,
+                        null,
+                        "127.0.0.1",
+                        jsonObject.toJSONString(),
+                        response,
+                        success
+                );
+            } catch (Exception e) {
+                log.error("鎺ュ彛鏃ュ織淇濆瓨寮傚父", e);
+            }
+        }
+    }
+}
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 3eabe70..4fa2fce 100644
--- a/src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java
@@ -62,18 +62,18 @@
                 // 鍏ㄦ澘鍏ュ簱
                 if (wrkMast.getIoType() == 1) {
                     // 鍏ュ簱閫氱煡鍗�
-                    if (!Cools.isEmpty(wrkMast.getBarcode())) {
-                        // 淇濆瓨鍏ュ簱閫氱煡妗e巻鍙叉。
-                        if (!waitPakinLogService.save(wrkMast.getBarcode())) {
-//                            exceptionHandle("淇濆瓨鍏ュ簱閫氱煡妗e巻鍙叉。[workNo={0}]澶辫触", wrkMast.getWrkNo());
-                            log.error("淇濆瓨鍏ュ簱閫氱煡妗e巻鍙叉。[workNo={"+wrkMast.getWrkNo()+"}]澶辫触");
-                        }
-                        // 鍒犻櫎鍏ュ簱閫氱煡妗�
-                        if (!waitPakinService.delete(new EntityWrapper<WaitPakin>().eq("zpallet", wrkMast.getBarcode()))) {
-//                            exceptionHandle("鍒犻櫎鍏ュ簱閫氱煡妗workNo={0}]澶辫触", wrkMast.getWrkNo());
-                            log.error("鍒犻櫎鍏ュ簱閫氱煡妗workNo={"+wrkMast.getWrkNo()+"}]澶辫触");
-                        }
-                    }
+//                    if (!Cools.isEmpty(wrkMast.getBarcode())) {
+//                        // 淇濆瓨鍏ュ簱閫氱煡妗e巻鍙叉。
+//                        if (!waitPakinLogService.save(wrkMast.getBarcode())) {
+////                            exceptionHandle("淇濆瓨鍏ュ簱閫氱煡妗e巻鍙叉。[workNo={0}]澶辫触", wrkMast.getWrkNo());
+//                            log.error("淇濆瓨鍏ュ簱閫氱煡妗e巻鍙叉。[workNo={"+wrkMast.getWrkNo()+"}]澶辫触");
+//                        }
+//                        // 鍒犻櫎鍏ュ簱閫氱煡妗�
+//                        if (!waitPakinService.delete(new EntityWrapper<WaitPakin>().eq("zpallet", wrkMast.getBarcode()))) {
+////                            exceptionHandle("鍒犻櫎鍏ュ簱閫氱煡妗workNo={0}]澶辫触", wrkMast.getWrkNo());
+//                            log.error("鍒犻櫎鍏ュ簱閫氱煡妗workNo={"+wrkMast.getWrkNo()+"}]澶辫触");
+//                        }
+//                    }
 //                    // 鎵嬪姩鍏ュ簱鐢熸垚鍗曟嵁 銆� 涓婃姤涓夋柟骞冲彴 銆�
 //                    if (!Cools.isEmpty(wrkDetls)) {
 //                        if (!orderService.saveHandlerOrder(Boolean.TRUE, wrkMast, wrkDetls)) {
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 386cd70..4ca6f44 100644
--- a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -355,13 +355,20 @@
                     }
                     for (WrkDetl wrkDetl : wrkDetls101) {
                         // 鏇存柊璁㈠崟瀹屾垚鏁伴噺
-                        OrderDetl orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch());
-                        if (orderDetl==null){
-                            orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), null);
-                        }
+//                        OrderDetl orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch());
+//                        if (orderDetl==null){
+//                            orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), null);
+//                        }
+                        // 绠卞彿+鍗峰彿
+                        OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("batch",wrkDetl.getBatch())
+                                .eq("model",wrkDetl.getModel()));
+
                         try {
                             if(!Cools.isEmpty(orderDetl)){
-                                if(!orderDetlService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
+                                // 鏇存柊璁㈠崟瀹屾垚鏁伴噺
+//                                orderDetlService.update(null,new EntityWrapper<OrderDetl>().eq("order_no",orderDetl.getOrderNo())
+//                                        .eq("batch",orderDetl.getBatch()).eq("model", orderDetl.getModel()));
+                                if(!orderDetlService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), orderDetl.getModel(),
                                         orderDetl.getBatch(),wrkDetl.getAnfme())){
 //                                    exceptionHandle("鍏ㄦ澘鍑哄簱 ===>> 鏇存柊璁㈠崟瀹屾垚鏁伴噺澶辫触锛沎workNo={0}],[locNo={1}]",
 //                                            wrkMast.getWrkNo(), wrkMast.getLocNo());
diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java
index 1f40a61..2243f79 100644
--- a/src/main/java/com/zy/asrs/utils/Utils.java
+++ b/src/main/java/com/zy/asrs/utils/Utils.java
@@ -4,11 +4,12 @@
 import com.core.common.Cools;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.LocMast;
-import com.zy.common.model.LocDetlDto;
 import com.zy.common.properties.SlaveProperties;
 
 import java.text.DecimalFormat;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -38,6 +39,34 @@
             return msgBuilder.toString();
         }
     }
+    public static final List<Integer> FIRST_GROUP_ROW_LIST = new ArrayList<Integer>() {{
+        add(1);add(2);
+    }};
+    public static final List<Integer> SECOND_GROUP_ROW_LIST = new ArrayList<Integer>() {{
+        add(3);add(4);
+    }};
+    public static List<String> getGroupLocNo(String locNo, Boolean pakIn) {
+        int row = getRow(locNo);
+        List<String> result = new ArrayList<>();
+        if (FIRST_GROUP_ROW_LIST.contains(row)) {
+            for (Integer groupRow : FIRST_GROUP_ROW_LIST) {
+                result.add(zerofill(String.valueOf(groupRow), 2) + locNo.substring(2));
+            }
+        } else if (SECOND_GROUP_ROW_LIST.contains(row)) {
+            List<Integer> clone = Arrays.asList(new Integer[SECOND_GROUP_ROW_LIST.size()]);
+            Collections.copy(clone, SECOND_GROUP_ROW_LIST);
+            Collections.reverse(clone);
+            for (Integer integer : clone) {
+                result.add(zerofill(String.valueOf(integer), 2) + locNo.substring(2));
+            }
+        }
+
+        if (!pakIn) {
+            //鍑哄簱锛屽弽杞暟鎹�
+            Collections.reverse(result);
+        }
+        return result;
+    }
 
     /**
      * 鍒ゆ柇鏄惁涓烘繁搴撲綅
diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index db8c334..67550c8 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -3,16 +3,13 @@
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.mapper.Wrapper;
-import com.core.common.Arith;
 import com.core.common.Cools;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
-import com.zy.asrs.entity.result.KeyValueVo;
 import com.zy.asrs.service.*;
 import com.zy.asrs.utils.Utils;
 import com.zy.asrs.utils.VersionUtils;
 import com.zy.common.model.LocTypeDto;
-import com.zy.common.model.Shelves;
 import com.zy.common.model.StartupDto;
 import com.zy.common.properties.SlaveProperties;
 import lombok.extern.slf4j.Slf4j;
@@ -20,10 +17,6 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.time.LocalDate;
-import java.time.format.DateTimeFormatter;
-import java.time.temporal.ChronoUnit;
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -123,10 +116,103 @@
     }
 
     /**
+     * 鍙屾繁鎵惧簱浣�
+     */
+    @Transactional
+    public StartupDto getLocNo(Integer staDescId, Integer sourceStaNo,LocTypeDto locTypeDto) {
+
+        // 鐩爣搴撲綅
+        LocMast locMast;
+
+//        // 鎼滅储绌烘墭
+//        locMast = getLocNoStep4(staDescId, sourceStaNo);
+//        if (locMast != null) {
+//            //鎵惧埌搴撲綅锛岃繑鍥瀌to
+//            return getLocNoStep6(staDescId, sourceStaNo, locMast);//杩斿洖dto
+//        }
+
+        //鎼滅储鏁翠釜绌哄簱浣嶇粍
+        locMast = getLocNoStepSingle(locTypeDto);
+        if (locMast != null) {
+            //鎵惧埌搴撲綅锛岃繑鍥瀌to
+            return getLocNoStep6(staDescId, sourceStaNo, locMast);//杩斿洖dto
+        }
+
+       //鎵句笉鍒板簱浣嶏紝鎶涘嚭寮傚父
+        throw new CoolException("娌℃湁绌哄簱浣�");
+    }
+    // 鎼滅储鍗曞搧(鏁翠釜搴撲綅缁�)
+    private LocMast getLocNoStepSingle(LocTypeDto locTypeDto) {
+        LocMast locMast = null;
+        //鍗曞搧
+        List<LocMast> locMasts = locMastService.selectAreaEmpty(locTypeDto.getLocType1());//鎼滅储璐х墿
+
+        for (LocMast mast : locMasts) {
+            List<String> groupLoc = Utils.getGroupLocNo(mast.getLocNo(), true);
+//            if (!locMastService.checkAllLocEmpty(groupLoc)) {
+//                continue;
+//            }
+
+            LocMast tmp = null;
+            for (String loc : groupLoc) {
+                LocMast locMast1 = locMastService.selectByLoc(loc);
+                if (locMast1 == null) {
+                    continue;
+                }
+
+                if (!locMast1.getLocSts().equals("O")) {
+                    continue;
+                }
+
+                tmp = locMast1;
+                break;
+            }
+
+            //棰勭暀绌哄簱浣�
+            if (tmp != null && locMastService.checkEmptyCount(mast, 10)) {
+                locMast = tmp;
+                break;
+            }
+        }
+
+        return locMast;
+    }
+
+    //杩斿洖dto
+    private StartupDto getLocNoStep6(Integer staDescId, Integer sourceStaNo, LocMast locMast) {
+        StartupDto startupDto = new StartupDto();
+        // 鑾峰彇鐩爣绔�
+        Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
+                .eq("type_no", staDescId)
+                .eq("stn_no", sourceStaNo)
+                .eq("crn_no",locMast.getCrnNo());
+        StaDesc staDesc = staDescService.selectOne(wrapper);
+        if (Cools.isEmpty(staDesc)) {
+            log.error("鍏ュ簱璺緞涓嶅瓨鍦�, staDescId={}, sourceStaNo={}", staDescId, sourceStaNo);
+            throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
+        }
+
+        // 妫�娴嬬洰鏍囩珯
+        BasDevp staNo = basDevpService.selectById(staDesc.getCrnStn());
+        if (!staNo.getAutoing().equals("Y")) {
+            throw new CoolException("鐩爣绔�" + staDesc.getCrnStn() + "涓嶅彲鐢�");
+        }
+
+        // 鐢熸垚宸ヤ綔鍙�
+        int workNo = getWorkNo(0);
+        // 杩斿洖dto
+        startupDto.setWorkNo(workNo);
+        startupDto.setSourceStaNo(sourceStaNo);
+        startupDto.setStaNo(staNo.getDevNo());
+        startupDto.setLocNo(locMast.getLocNo());
+        startupDto.setCrnNo(locMast.getCrnNo());
+        return startupDto;
+    }
+    /**
      * 妫�绱㈠簱浣嶅彿
      *
      * @param whsType     绫诲瀷 1:鍙屾繁寮忚揣鏋�
-     * @param staDescId   璺緞ID
+     * @param staDescId   鍏ュ簱绫诲瀷
      * @param sourceStaNo 婧愮珯
      * @param matnr       鐗╂枡鍙烽泦鍚�
      * @return locNo 妫�绱㈠埌鐨勫簱浣嶅彿
diff --git a/src/main/resources/mapper/LocMastMapper.xml b/src/main/resources/mapper/LocMastMapper.xml
index 2244412..2b6b9f0 100644
--- a/src/main/resources/mapper/LocMastMapper.xml
+++ b/src/main/resources/mapper/LocMastMapper.xml
@@ -36,7 +36,12 @@
         <result column="ctn_no" property="ctnNo" />
 
     </resultMap>
-
+    <select id="selectAreaEmpty" resultMap="BaseResultMap">
+        select * from asr_loc_mast
+        where loc_sts in ('O')
+          and loc_type1 = #{locType1}
+        ORDER BY lev1,bay1,row1
+    </select>
     <select id="queryFreeLocMast" resultMap="BaseResultMap">
         select top 1 *
         from asr_loc_mast
@@ -47,7 +52,10 @@
         </if>
         order by loc_sts desc ,lev1 asc,bay1 asc
     </select>
-
+    <select id="selectByLoc" resultMap="BaseResultMap">
+        select * from asr_loc_mast
+        where loc_no = #{locNo}
+    </select>
     <select id="queryShallowLocFMast" resultMap="BaseResultMap">
         select * from asr_loc_mast
         where 1=1
diff --git a/src/main/resources/mapper/OrderDetlMapper.xml b/src/main/resources/mapper/OrderDetlMapper.xml
index 3b102b7..a37ed6f 100644
--- a/src/main/resources/mapper/OrderDetlMapper.xml
+++ b/src/main/resources/mapper/OrderDetlMapper.xml
@@ -175,7 +175,7 @@
         set qty = qty + #{qty}
         where 1=1
         and order_no = #{orderNo}
-        and matnr = #{matnr}
+        and model = #{matnr}
         <choose>
             <when test="batch != null and batch != ''">
                 and batch = #{batch}
diff --git a/src/main/webapp/static/js/order/out.js b/src/main/webapp/static/js/order/out.js
index 1ec550c..0efe870 100644
--- a/src/main/webapp/static/js/order/out.js
+++ b/src/main/webapp/static/js/order/out.js
@@ -168,7 +168,7 @@
                                     {field: 'anfme', title: '鏁伴噺', align: 'center', width: 90, style: 'font-weight: bold'},
                                     {field: 'count', title: '鏁伴噺', align: 'center', width: 90, style: 'font-weight: bold'},
                                     {field: 'locNo', title: '璐т綅', align: 'center', width: 100, templet: '#locNoTpl'},
-                                    // {field: 'staNos', align: 'center', title: '鍑哄簱绔�', merge: ['locNo'], templet: '#tbBasicTbStaNos'},
+                                    {field: 'staNos', align: 'center', title: '鍑哄簱绔�', merge: ['locNo'], templet: '#tbBasicTbStaNos'},
                                     // {type: 'checkbox', merge: ['locNo']},
                                 ]],
                                 done: function (res) {

--
Gitblit v1.9.1