From 2cf6f25ee51dea59dbd1e2183a06796961bb8644 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期一, 23 十二月 2024 19:38:09 +0800
Subject: [PATCH] 添加出库流程

---
 zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/R.java                     |    6 
 zy-asrs-admin/src/components/order/order/index.vue                                      |   60 +++-
 zy-asrs-admin/src/components/order/order/order.vue                                      |    1 
 zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/BaseRes.java               |    2 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/MobileController.java         |   12 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/MobileService.java               |    4 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MobileServiceImpl.java      |   11 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/controller/InStockController.java    |   25 -
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/schedule/ScheduleJobs.java           |  170 ++++++++++---
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/enums/TaskStsType.java            |   22 +
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/Impl/WcsApiServiceImpl.java |  192 +++++++++------
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java        |    2 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskLogTimer.java                  |    2 
 zy-asrs-admin/src/views/out/order/index.vue                                             |   34 +-
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/entity/domain/Constant.java          |    2 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/controller/OutStockController.java   |  147 +++++------
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java                    |    7 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskTimer.java                     |    5 
 zy-asrs-wms/src/main/resources/mapper/asrs/ViewLocDetlMapper.xml                        |    4 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/OrderController.java          |    2 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/WcsApiService.java          |    8 
 21 files changed, 432 insertions(+), 286 deletions(-)

diff --git a/zy-asrs-admin/src/components/order/order/index.vue b/zy-asrs-admin/src/components/order/order/index.vue
index fc71163..1c2bb72 100644
--- a/zy-asrs-admin/src/components/order/order/index.vue
+++ b/zy-asrs-admin/src/components/order/order/index.vue
@@ -1,30 +1,44 @@
+<template>
+    <div v-if="props.ioModel === 'in'">
+        <OrderInView ioModel="in"/>
+    </div>
+    <div v-else-if="props.ioModel === 'out'">
+        <OrderOutView ioModel="out"/>
+    </div>
+    <div v-else>
+        <OrderView/>
+    </div>
+</template>
 <script setup>
-import { defineProps } from 'vue';
-import OrderView from './order.vue'
-import OrderInView from './orderIn.vue'
-import OrderOutView from './orderOut.vue'
-
-const props = defineProps({
-  ioModel: null
-})
+    const props = defineProps({
+        ioModel: null
+    })
 </script>
 
 <script>
-export default {
-  name: '璁㈠崟'
-}
+    import {defineProps} from 'vue';
+    import OrderView from './order.vue'
+    import OrderInView from './orderIn.vue'
+    import OrderOutView from './orderOut.vue'
+    export default {
+        name: '璁㈠崟',
+        // props: {
+        //     ioModel: null,
+        // },
+        data() {
+            return {}
+        },
+        created() {
+
+        },
+        components: {
+            OrderInView,
+            OrderOutView,
+            OrderView
+        }
+    }
 </script>
+<style>
 
-<template>
-  <div v-if="props.ioModel === 'in'">
-    <OrderInView ioModel="in" />
-  </div>
-  <div v-else-if="props.ioModel === 'out'">
-    <OrderOutView ioModel="out" />
-  </div>
-  <div v-else>
-    <OrderView />
-  </div>
-</template>
 
-<style></style>
+</style>
diff --git a/zy-asrs-admin/src/components/order/order/order.vue b/zy-asrs-admin/src/components/order/order/order.vue
index d23db87..b5f3a32 100644
--- a/zy-asrs-admin/src/components/order/order/order.vue
+++ b/zy-asrs-admin/src/components/order/order/order.vue
@@ -161,6 +161,7 @@
   }).then((resp) => {
     let result = resp.data;
     if (result.code == 200) {
+        console.log('--------->')
       let data = result.data;
       tableData.value = data;
 
diff --git a/zy-asrs-admin/src/views/out/order/index.vue b/zy-asrs-admin/src/views/out/order/index.vue
index 05ec222..f8c1bc4 100644
--- a/zy-asrs-admin/src/views/out/order/index.vue
+++ b/zy-asrs-admin/src/views/out/order/index.vue
@@ -1,17 +1,27 @@
-<script setup>
-import OrderView from '@/components/order/order/index.vue';
-</script>
+<template>
+    <div>
+        <OrderView ioModel="out"/>
+    </div>
+</template>
 
 <script>
-export default {
-  name: '鍑哄簱璁㈠崟'
-}
-</script>
+    import OrderView from '@/components/order/order/index.vue';
+    export default {
+        name: 'OutOrder',
+        data() {
+            return {}
+        },
+        components: {
+            OrderView,
+        },
+        created() {
 
-<template>
-  <div>
-    <OrderView ioModel="out"  />
-  </div>
-</template>
+        },
+        mounted() {
+
+        },
+        methods: {}
+    }
+</script>
 
 <style></style>
diff --git a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/BaseRes.java b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/BaseRes.java
index 02bf681..4243541 100644
--- a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/BaseRes.java
+++ b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/BaseRes.java
@@ -3,7 +3,7 @@
 public interface BaseRes {
 
     String OK = "200-鎿嶄綔鎴愬姛";
-    String SUCESS = "0";
+    String SUCESS = "sucess";
     String EMPTY = "201-鏆傛棤鏁版嵁";
     String LIMIT = "202-鏃犳潈闄�";
     String PARAM = "401-鍙傛暟涓虹┖";
diff --git a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/R.java b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/R.java
index b8357b8..3efe873 100644
--- a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/R.java
+++ b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/R.java
@@ -22,12 +22,10 @@
         return parse(BaseRes.OK);
     }
 
-    public static R success(){return  parse(BaseRes.SUCESS);}
+    public static R success(){return  success(BaseRes.SUCESS);}
 
     public static R success(String msg){
-        R r = success();
-        r.put(MSG, msg);
-        return r;
+        return new R(0, msg);
     }
 
     public static R ok(String msg){
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/controller/WcsApiController.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/controller/InStockController.java
similarity index 76%
rename from zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/controller/WcsApiController.java
rename to zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/controller/InStockController.java
index 4dee651..dbf995b 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/controller/WcsApiController.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/controller/InStockController.java
@@ -2,7 +2,6 @@
 
 import com.zy.asrs.framework.common.R;
 import com.zy.asrs.wms.apis.wcs.entity.request.ContainerArrivedParam;
-import com.zy.asrs.wms.apis.wcs.entity.request.ConveyorStarParam;
 import com.zy.asrs.wms.apis.wcs.entity.request.TasksStatusCallbackParam;
 import com.zy.asrs.wms.apis.wcs.services.WcsApiService;
 import io.netty.util.internal.StringUtil;
@@ -12,9 +11,9 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-@RequestMapping("/openapi/")
+@RequestMapping("/in/stock/")
 @RestController
-public class WcsApiController {
+public class InStockController {
 
     @Autowired
     private WcsApiService wcsApiService;
@@ -35,7 +34,7 @@
             return R.error("杈撻�佺嚎鑺傜偣缂栫爜涓嶈兘涓虹┖锛侊紒");
         }
 
-        return wcsApiService.containerArrivedNotify(arrivedParam);
+        return wcsApiService.containerArrivedNotify(arrivedParam, "inStock");
 
     }
 
@@ -54,28 +53,12 @@
             if (StringUtil.isNullOrEmpty(callbackParam.getTaskCode())) {
                 return R.error("浠诲姟缂栫爜涓嶈兘涓虹┖锛侊紒");
             }
-            boolean result = wcsApiService.receiveTaskStatus(callbackParam);
+           wcsApiService.receiveTaskStatus(callbackParam, "inStock");
         } else {
             return R.error("涓婃姤浜嬩欢绫诲瀷涓嶈兘涓虹┖锛侊紒");
         }
 
         return R.success();
     }
-
-
-//    /**
-//     * 涓嬪彂鐐瑰鐐规惉杩愪换鍔�
-//     * @param
-//     * @return
-//     */
-//    @PostMapping("/carry")
-//    public R publishTaskOfCarry() {
-//        PublishTasksReponse reponse = wcsApiService.publishTaskOfCarry();
-//        if (reponse.getCode() == 0) {
-//            return R.ok(reponse.getData());
-//        } else {
-//            return R.error(reponse.getMsg());
-//        }
-//    }
 
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/controller/WcsApiController.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/controller/OutStockController.java
similarity index 75%
copy from zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/controller/WcsApiController.java
copy to zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/controller/OutStockController.java
index 4dee651..46cfc43 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/controller/WcsApiController.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/controller/OutStockController.java
@@ -1,81 +1,66 @@
-package com.zy.asrs.wms.apis.wcs.controller;
-
-import com.zy.asrs.framework.common.R;
-import com.zy.asrs.wms.apis.wcs.entity.request.ContainerArrivedParam;
-import com.zy.asrs.wms.apis.wcs.entity.request.ConveyorStarParam;
-import com.zy.asrs.wms.apis.wcs.entity.request.TasksStatusCallbackParam;
-import com.zy.asrs.wms.apis.wcs.services.WcsApiService;
-import io.netty.util.internal.StringUtil;
-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;
-
-@RequestMapping("/openapi/")
-@RestController
-public class WcsApiController {
-
-    @Autowired
-    private WcsApiService wcsApiService;
-
-
-    /***
-     * 瀹瑰櫒鍒拌揪鎺ユ敹
-     * @param arrivedParam
-     * @return
-     */
-    @PostMapping("/container/arrived")
-    public R containerArrivedNotify(@RequestBody ContainerArrivedParam arrivedParam) {
-
-        if (StringUtil.isNullOrEmpty(arrivedParam.getContainerCode())) {
-            return R.error("瀹瑰櫒缂栫爜涓嶈兘涓虹┖锛侊紒");
-        }
-        if (StringUtil.isNullOrEmpty(arrivedParam.getSlotCode())) {
-            return R.error("杈撻�佺嚎鑺傜偣缂栫爜涓嶈兘涓虹┖锛侊紒");
-        }
-
-        return wcsApiService.containerArrivedNotify(arrivedParam);
-
-    }
-
-
-    /**
-     * ESS涓婃姤浠诲姟鐘舵�佹帴鍙�
-     * @param callbackParam
-     * @return
-     */
-    @PostMapping("/receive/tasks/status")
-    public R receiveTaskStatus(@RequestBody TasksStatusCallbackParam callbackParam) {
-        if (!StringUtil.isNullOrEmpty(callbackParam.getEventType())) {
-            if (StringUtil.isNullOrEmpty(callbackParam.getContainerCode())) {
-                return R.error("瀹瑰櫒缂栫爜涓嶈兘涓虹┖锛侊紒");
-            }
-            if (StringUtil.isNullOrEmpty(callbackParam.getTaskCode())) {
-                return R.error("浠诲姟缂栫爜涓嶈兘涓虹┖锛侊紒");
-            }
-            boolean result = wcsApiService.receiveTaskStatus(callbackParam);
-        } else {
-            return R.error("涓婃姤浜嬩欢绫诲瀷涓嶈兘涓虹┖锛侊紒");
-        }
-
-        return R.success();
-    }
-
-
-//    /**
-//     * 涓嬪彂鐐瑰鐐规惉杩愪换鍔�
-//     * @param
-//     * @return
-//     */
-//    @PostMapping("/carry")
-//    public R publishTaskOfCarry() {
-//        PublishTasksReponse reponse = wcsApiService.publishTaskOfCarry();
-//        if (reponse.getCode() == 0) {
-//            return R.ok(reponse.getData());
-//        } else {
-//            return R.error(reponse.getMsg());
-//        }
-//    }
-
-}
+package com.zy.asrs.wms.apis.wcs.controller;
+
+
+import com.zy.asrs.framework.common.R;
+import com.zy.asrs.wms.apis.wcs.entity.request.ContainerArrivedParam;
+import com.zy.asrs.wms.apis.wcs.entity.request.TasksStatusCallbackParam;
+import com.zy.asrs.wms.apis.wcs.services.WcsApiService;
+import io.netty.util.internal.StringUtil;
+import lombok.extern.slf4j.Slf4j;
+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;
+
+@Slf4j
+@RestController
+@RequestMapping("/out/stock/")
+public class OutStockController {
+
+    @Autowired
+    private WcsApiService wcsApiService;
+
+    /**
+     * 鍑哄簱浠诲姟-鎺ユ敹鍥炶皟鐘舵�佹帴鍙�
+     * @param callbackParam
+     * @return
+     */
+    @PostMapping("/receive/tasks/status")
+    public R receiveTaskStatus(@RequestBody TasksStatusCallbackParam callbackParam) {
+        if (!StringUtil.isNullOrEmpty(callbackParam.getEventType())) {
+            if (StringUtil.isNullOrEmpty(callbackParam.getContainerCode())) {
+                return R.error("瀹瑰櫒缂栫爜涓嶈兘涓虹┖锛侊紒");
+            }
+            if (StringUtil.isNullOrEmpty(callbackParam.getTaskCode())) {
+                return R.error("浠诲姟缂栫爜涓嶈兘涓虹┖锛侊紒");
+            }
+            wcsApiService.receiveTaskStatus(callbackParam, "outStock");
+        } else {
+            return R.error("涓婃姤浜嬩欢绫诲瀷涓嶈兘涓虹┖锛侊紒");
+        }
+
+        return R.success();
+    }
+
+    /***
+     * 瀹瑰櫒鍒拌揪鎺ユ敹
+     * @param arrivedParam
+     * @return
+     */
+    @PostMapping("/container/arrived")
+    public R containerArrivedNotify(@RequestBody ContainerArrivedParam arrivedParam) {
+
+        if (StringUtil.isNullOrEmpty(arrivedParam.getContainerCode())) {
+            return R.error("瀹瑰櫒缂栫爜涓嶈兘涓虹┖锛侊紒");
+        }
+        if (StringUtil.isNullOrEmpty(arrivedParam.getSlotCode())) {
+            return R.error("杈撻�佺嚎鑺傜偣缂栫爜涓嶈兘涓虹┖锛侊紒");
+        }
+
+        return wcsApiService.containerArrivedNotify(arrivedParam, "outStock");
+
+    }
+
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/entity/domain/Constant.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/entity/domain/Constant.java
index bbbf15c..36295fd 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/entity/domain/Constant.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/entity/domain/Constant.java
@@ -5,7 +5,7 @@
 
     private static String HOST = "http://localhost:8080";
 
-    public static String ISSUE_TASK_OF_PUTAWAY = HOST +  "/task/create";
+    public static String ISSUE_TASK_OF_EVENT = HOST +  "/task/create";
 
     public static String CONVEYOR_START = HOST + "/conveyor/moveContainer";
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/schedule/ScheduleJobs.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/schedule/ScheduleJobs.java
index 35bf696..d7f4602 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/schedule/ScheduleJobs.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/schedule/ScheduleJobs.java
@@ -33,6 +33,7 @@
 
 import java.util.ArrayList;
 import java.util.Comparator;
+import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -42,21 +43,19 @@
 
     @Autowired
     private DataSourceTransactionManager transactionManager;
-
     @Autowired
     private TaskService taskService;
-
     @Autowired
     private RestTemplate restTemplate;
-
     @Autowired
     private WorkService workService;
 
 
     /***
-     * 閫氱煡ESS杈撻�佺嚎娴佸姩
+     * 鍏ュ簱浠诲姟---閫氱煡ESS杈撻�佺嚎娴佸姩
      */
     //    @Scheduled(cron = "0/3 * * * * ? ")
+    @Transactional(rollbackFor = Exception.class)
     public void conveyorStart() {
         List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>()
                 .eq(Task::getTaskSts, TaskStsType.WCS_CONTAINER_RECEIVE.id).eq(Task::getStatus, 0));
@@ -74,13 +73,16 @@
                 headers.add("Content-Type", "application/json");
                 HttpEntity httpEntity = new HttpEntity<>(params, headers);
                 // 璇锋眰
-                ResponseEntity<String> exchange = restTemplate.exchange(Constant.ISSUE_TASK_OF_PUTAWAY, HttpMethod.POST, httpEntity, String.class);
+                ResponseEntity<String> exchange = restTemplate.exchange(Constant.CONVEYOR_START, HttpMethod.POST, httpEntity, String.class);
                 log.info("涓嬪彂娴佸姩閫氱煡 杩斿洖缁撴灉锛歿}", exchange);
                 if (exchange.getBody() == null) {
                     throw new CoolException("涓嬪彂娴佸姩閫氱煡澶辫触锛侊紒");
                 } else {
                     CommonReponse commonReponse = JSON.toJavaObject(JSON.parseObject(exchange.getBody()), CommonReponse.class);
                     if (commonReponse.getCode() == 0) {
+                        taskService.update(new LambdaUpdateWrapper<Task>()
+                                .eq(Task::getId, task.getId())
+                                .set(Task::getTaskType, TaskStsType.WCS_CONVEYOR_START.id));
                         log.info(task.getTaskNo() + "涓嬪彂娴佸姩閫氱煡"  + commonReponse.getMsg());
                     } else {
                         throw new CoolException("涓嬪彂娴佸姩閫氱煡澶辫触锛侊紒");
@@ -98,40 +100,7 @@
 
 
     /***
-     * 姣忛殧3绉掞紝鑾峰彇搴撲腑鐘舵�佷负銆庝换鍔″畬鎴愩�忎笖鐘舵�併�巗ucess銆忕殑璁㈠崟
-     * 骞跺皢浠诲姟鍙樹负鍘嗗彶妗�
-     */
-    //    @Scheduled(cron = "0/3 * * * * ? ")
-    @Transactional
-    public void completeTaskSchedule() {
-        List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>()
-                        .eq(Task::getTaskType, 1)
-                        .eq(Task::getTaskSts, TaskStsType.WCS_PUTAWAY_SUCESS)
-                        .eq(Task::getExcudeStatus, "sucess"))
-                .stream().sorted(Comparator.comparing(Task::getTaskSts))
-                .collect(Collectors.toList());
-
-        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
-        // TODO 鍗曚釜鎵ц澶辫触鍚庯紝 鍔犲叆澶辫触鍒楄〃锛屾坊鍔犲け璐ュ鐞嗗瓧娈碉紝閬垮厤閲嶅鏌ヨ璋冪敤
-//        def.setName("SomeTxName");
-        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
-        TransactionStatus status = transactionManager.getTransaction(def);
-        try {
-            tasks.forEach(task -> {
-                workService.completeTask(task.getId());
-            });
-            // execute your business logic here
-            //db operation
-        } catch (Exception ex) {
-            transactionManager.rollback(status);
-            throw ex;
-        }
-
-    }
-
-
-    /***
-     * 姣忛殧10绉掞紝鍒锋柊褰撳墠閫氱煡妗e垪琛紝涓嬪彂寰呭叆搴撹鍗曡嚦ESS
+     * 鍏ュ簱浠诲姟---姣忛殧3绉掞紝鍒锋柊褰撳墠閫氱煡妗e垪琛紝涓嬪彂寰呭叆搴撹鍗曡嚦ESS
      * 鏌ヨ褰撳墠浠诲姟鍒楄〃锛�
      */
 //    @Scheduled(cron = "0/3 * * * * ? ")
@@ -165,18 +134,17 @@
         });
 
         tasksParam.setTaskType("putaway");
-
         // TODO 澶氫换鍔″璁㈠崟锛岀粺涓�璋冨害锛屾槸鍚︿細鍑虹幇閮ㄥ垎鎴愬姛锛岄儴鍒嗗け璐ョ殑鎯呭喌
         //璋冪敤涓夋柟鎺ュ彛锛屽皢浠诲姟鎺ㄩ�佽嚦ESS骞冲彴
         MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
         // 璁剧疆璇锋眰鍙傛暟
         params.add("params", JSONObject.toJSONString(tasksParam));
-        log.info("璇锋眰鍦板潃锛歿}锛岃姹傚弬鏁帮細{}", Constant.ISSUE_TASK_OF_PUTAWAY, JSONObject.toJSONString(tasksParam));
+        log.info("璇锋眰鍦板潃锛歿}锛岃姹傚弬鏁帮細{}", Constant.ISSUE_TASK_OF_EVENT, JSONObject.toJSONString(tasksParam));
         HttpHeaders headers = new HttpHeaders();
         headers.add("Content-Type", "application/json");
         HttpEntity httpEntity = new HttpEntity<>(params, headers);
         // 璇锋眰
-        ResponseEntity<String> exchange = restTemplate.exchange(Constant.ISSUE_TASK_OF_PUTAWAY, HttpMethod.POST, httpEntity, String.class);
+        ResponseEntity<String> exchange = restTemplate.exchange(Constant.ISSUE_TASK_OF_EVENT, HttpMethod.POST, httpEntity, String.class);
         log.info("涓嬪彂浠诲姟 杩斿洖缁撴灉锛歿}", exchange);
         if (exchange.getBody() == null) {
             throw new CoolException("涓嬪彂浠诲姟澶辫触锛侊紒");
@@ -196,10 +164,122 @@
         }
     }
 
-    /***
-     * 姣忛殧10绉掓墽琛岋紝鍒锋柊褰撳墠浠诲姟鍒楄〃锛屼笅鍙戜换鍔″埌ESS
+
+    /**
+     * 鍑哄簱浠诲姟--- 姣忛殧3绉掞紝鑾峰彇褰撳墠鍑哄簱浠诲姟鍒楄〃鐘舵�佷负WCS_EXECUTE_OUT_TASK_DONE鐨勪换鍔★紝骞堕�氱煡ESS娴佸姩杈撻�佺嚎
+     * */
+//    @Scheduled(cron = "0/3 * * * * ? ")
+    @Transactional(rollbackFor = Exception.class)
+    public void conveyorToNotify() {
+        List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>()
+                .eq(Task::getTaskSts, TaskStsType.WCS_EXECUTE_OUT_TASK_DONE.id).eq(Task::getStatus, 0));
+        tasks.forEach(task -> {
+            try {
+                ConveyorStarParam conveyorStarParam = new ConveyorStarParam();
+                conveyorStarParam.setSlotCode(task.getOriginLoc())
+                        .setContainerCode(task.getBarcode());
+                //璋冪敤涓夋柟鎺ュ彛锛屽皢浠诲姟鎺ㄩ�佽嚦ESS骞冲彴
+                MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
+                // 璁剧疆璇锋眰鍙傛暟
+                params.add("params", JSONObject.toJSONString(conveyorStarParam));
+                log.info("璇锋眰鍦板潃锛歿}锛岃姹傚弬鏁帮細{}", Constant.CONVEYOR_START, JSONObject.toJSONString(conveyorStarParam));
+                HttpHeaders headers = new HttpHeaders();
+                headers.add("Content-Type", "application/json");
+                HttpEntity httpEntity = new HttpEntity<>(params, headers);
+                // 璇锋眰
+                ResponseEntity<String> exchange = restTemplate.exchange(Constant.CONVEYOR_START, HttpMethod.POST, httpEntity, String.class);
+                log.info("涓嬪彂娴佸姩閫氱煡 杩斿洖缁撴灉锛歿}", exchange);
+                if (exchange.getBody() == null) {
+                    throw new CoolException("涓嬪彂娴佸姩閫氱煡澶辫触锛侊紒");
+                } else {
+                    CommonReponse commonReponse = JSON.toJavaObject(JSON.parseObject(exchange.getBody()), CommonReponse.class);
+                    if (commonReponse.getCode() == 0) {
+                        //娴佸姩閫氱煡涓嬪彂瀹屾垚鍚庯紝淇敼浠诲姟鐘舵�佷负杈撻�佺嚎娴佸姩涓�傘��
+                        taskService.update(new LambdaUpdateWrapper<Task>()
+                                .eq(Task::getId, task.getId())
+                                .set(Task::getTaskType, TaskStsType.WCS_EXECUTE_OUT_CONVEYOR.id));
+                        log.info(task.getTaskNo() + "涓嬪彂娴佸姩閫氱煡"  + commonReponse.getMsg());
+                    } else {
+                        throw new CoolException("涓嬪彂娴佸姩閫氱煡澶辫触锛侊紒");
+                    }
+                }
+            } catch (Exception ex) {
+                log.error(ex.getMessage());
+            } finally {
+                //濡傛灉寮傚父淇敼绂佺敤鐘舵��
+                taskService.update(new LambdaUpdateWrapper<Task>().set(Task::getStatus, 1)
+                        .set(Task::getUpdateTime, new Date())
+                        .eq(Task::getId, task.getId()));
+            }
+        });
+    }
+
+
+    /**
+     * 鍑哄簱浠诲姟--- 姣忛殧3绉掞紝鑾峰彇褰撳墠鍑哄簱浠诲姟鍒楄〃鐘舵�佷负GENERATE_OUT鐨勪换鍔★紝涓嬪彂浠诲姟鑷矱SS
+     * //TODO  鍑哄簱浠诲姟鍒嗕袱绉嶏細
+     * //TODO 1. 姝e父鍑哄簱鍚庯紝娓呴櫎浠诲姟锛�
+     * //TODO 2. 鍑哄簱鍚庤繕鏈夊簱瀛橈紝闇�瑕佹坊鍔犲鍣ㄥ洖搴撴搷浣�
      */
-    public void flowNotify() {
+    //    @Scheduled(cron = "0/3 * * * * ? ")
+    @Transactional(rollbackFor = Exception.class)
+    public void waveToTask() {
+        //鑾峰彇褰撳墠浠诲姟妗d腑锛屾墍鏈変负寰呭嚭搴撶姸鎬佺殑浠诲姟妗o紝鎸夋椂闂村崌搴忔帓鍒�
+        List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>()
+                        .eq(Task::getTaskType, 101) //TODO 濡備綍纭鏄�101锛岃繕鏄�103
+                        .eq(Task::getTaskSts, TaskStsType.GENERATE_OUT))
+                .stream().sorted(Comparator.comparing(Task::getTaskSts))
+                .collect(Collectors.toList());
+
+        // 鏁版嵁缁勮
+        PublishTasksParam tasksParam = new PublishTasksParam();
+        //TODO 纭鏄惁闇�瑕佸崟浠诲姟澶氬鍣ㄧ爜鐨勯渶姹傦紝鐩墠绯荤粺閮芥槸鍗曞鍣ㄧ爜鐢熸垚鍗曚换鍔★紝澶氫换鍔℃槑缁嗭紙鐗╂枡娣疯锛�
+        tasks.forEach(task -> {
+            List<TaskParam> params = new ArrayList<>();
+            TaskParam param = new TaskParam();
+            //璁剧疆瀹瑰櫒缂栫爜
+            param.setTaskCode(task.getTaskNo());
+            List<TaskDescribe> taskDescribes = new ArrayList<>();
+            TaskDescribe describe = new TaskDescribe();
+            //璁剧疆鐩爣搴撲綅锛岀珯鐐�
+            describe.setContainerCode(task.getBarcode())
+                    .setToLocationCode(task.getTargetLoc())
+                    .setToStationCode(task.getTargetSite());
+            taskDescribes.add(describe);
+            param.setTaskDescribe(taskDescribes);
+            params.add(param);
+            tasksParam.setTasks(params);
+        });
+
+        tasksParam.setTaskType("carry");
+        // TODO 澶氫换鍔″璁㈠崟锛岀粺涓�璋冨害锛屾槸鍚︿細鍑虹幇閮ㄥ垎鎴愬姛锛岄儴鍒嗗け璐ョ殑鎯呭喌
+        //璋冪敤涓夋柟鎺ュ彛锛屽皢浠诲姟鎺ㄩ�佽嚦ESS骞冲彴
+        MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
+        // 璁剧疆璇锋眰鍙傛暟
+        params.add("params", JSONObject.toJSONString(tasksParam));
+        log.info("璇锋眰鍦板潃锛歿}锛岃姹傚弬鏁帮細{}", Constant.ISSUE_TASK_OF_EVENT, JSONObject.toJSONString(tasksParam));
+        HttpHeaders headers = new HttpHeaders();
+        headers.add("Content-Type", "application/json");
+        HttpEntity httpEntity = new HttpEntity<>(params, headers);
+        // 璇锋眰
+        ResponseEntity<String> exchange = restTemplate.exchange(Constant.ISSUE_TASK_OF_EVENT, HttpMethod.POST, httpEntity, String.class);
+        log.info("涓嬪彂浠诲姟 杩斿洖缁撴灉锛歿}", exchange);
+        if (exchange.getBody() == null) {
+            throw new CoolException("涓嬪彂浠诲姟澶辫触锛侊紒");
+        } else {
+            CommonReponse reponse = (CommonReponse) JSON.parse(exchange.getBody());
+            if (reponse.getCode() == 0) {
+                //璇锋眰鎴愬姛鍚庯紝缁熶竴淇敼鎵�鏈変换鍔℃。鐘舵�佷负鍏ュ簱鎵ц涓��
+                tasks.forEach(task -> {
+                    taskService.update(new LambdaUpdateWrapper<Task>()
+                            .set(Task::getTaskSts, TaskStsType.WCS_EXECUTE_OUT.id)
+                            .eq(Task::getBarcode, task.getBarcode()));
+                });
+            } else {
+                // TODO 璇锋眰澶辫触闇�纭鏄惁瀛樺湪閮ㄥ垎鎴愬姛鐨勬儏鍐碉紝閮ㄥ垎鎴愬姛闇�瑕佸崟鐙埛鏂版垚鍔熺殑浠诲姟妗g姸鎬�
+                throw new CoolException(reponse.getMsg());
+            }
+        }
 
     }
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/Impl/WcsApiServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/Impl/WcsApiServiceImpl.java
index 5d9e718..1113821 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/Impl/WcsApiServiceImpl.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/Impl/WcsApiServiceImpl.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.zy.asrs.framework.common.R;
+import com.zy.asrs.framework.exception.CoolException;
 import com.zy.asrs.wms.apis.wcs.entity.domain.EssTaskStatus;
 import com.zy.asrs.wms.apis.wcs.entity.request.*;
 import com.zy.asrs.wms.apis.wcs.entity.response.CommonReponse;
@@ -14,6 +15,7 @@
 import com.zy.asrs.wms.asrs.service.WaitPakinService;
 import com.zy.asrs.wms.asrs.service.WorkService;
 import io.jsonwebtoken.lang.Collections;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -23,6 +25,7 @@
 import java.util.Map;
 import java.util.stream.Collectors;
 
+@Slf4j
 @Service
 public class WcsApiServiceImpl implements WcsApiService {
 
@@ -33,104 +36,141 @@
     @Autowired
     private TaskService taskService;
 
-    @Override
-    public CommonReponse publishTaskOfCarry() {
-        //鑾峰彇缁勬嫋閫氱煡妗d腑锛岀姸鎬佷负姝e父锛岀粍鎵樼姸鎬佷负寰呭叆搴撲笖鏈垹闄ょ殑WaitPakins
-        List<WaitPakin> list = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>()
-                .eq(WaitPakin::getStatus, 1)
-                .eq(WaitPakin::getIoStatus, 0)
-                .eq(WaitPakin::getDeleted, 0));
-        if (!list.isEmpty()) {
-            return publishTaskOfCarry(list);
-        }
-        return new CommonReponse();
-    }
-
-    /**
-     * 涓嬪彂鏂欑锛堝鍣級婊氬姩鑷虫壂鐮佸尯
-     * //TODO 宸茶垂寮�
-     *
-     * @param pakins
-     * @return
-     */
-    @Override
-    public CommonReponse publishTaskOfCarry(List<WaitPakin> pakins) {
-        PublishTasksParam tasksParam = new PublishTasksParam();
-        tasksParam.setTaskType("carry");
-        List<TaskParam> tasks = new ArrayList<>();
-        Map<String, List<WaitPakin>> barcodes = pakins.stream().collect(Collectors.groupingBy(WaitPakin::getBarcode));
-        /**
-         * 褰撳墠闂锛�
-         * //TODO 1. 鐩墠浠诲姟涓嬪彂鎺ュ彛娌熼�氫笅鏉ワ紝鏄渶瑕佺洰鏍囦綅缃殑锛岃繖閲屾垜浠彧鏄垰缁勬嫋瀹屾垚锛屽苟涓嶆槸閫氱煡娴佸姩锛屾病鏈夌洰鏍囦綅缃�
-         * //TODO 2. 鏂囨。涓婄殑鎼繍浠诲姟涓嬪彂鎸囩殑閮芥槸澶氫换鍔★紝澶氬鍣ㄦ惉杩愶紝鑰屼笉鏄垜浠渶瑕佺墿鏂欎俊鎭悓姝ュ姛鑳�
-         * //TODO 3. 娴佺▼璧颁笉閫氭殏鏃跺厛璺宠繃锛岀‘璁ゆ槸鍚﹂渶瑕乄MS瑙﹀彂鏂欑婊氬姩鑷虫壂鐮佸尯
-         * */
-        barcodes.keySet().forEach(actionKey -> {
-            List<TaskDescribe> taskDescribes = new ArrayList<>();
-            barcodes.get(actionKey).forEach(action -> {
-                TaskDescribe taskDescribe = new TaskDescribe();
-                taskDescribe.setContainerCode(action.getBarcode());
-                taskDescribes.add(taskDescribe);
-            });
-        });
-
-        if (!pakins.isEmpty()) {
-            pakins.forEach(waitPakin -> {
-
-            });
-        }
-        tasksParam.setTasks(tasks);
-
-        return null;
-    }
 
 
     /**
      * 瀹瑰櫒鍒拌揪鎺ユ敹
      * 鏍规嵁ESS杩斿洖鐨勫鍣ㄧ紪鐮佷慨鏀逛换鍔℃。涓殑杈撻�佺嚎璧峰浣嶇疆鑺傜偣锛屽強浠诲姟妗f墽琛岀姸鎬�
+     *              * 褰撳墠闂锛�
+     *              * //TODO 1. 鐩墠浠诲姟涓嬪彂鎺ュ彛娌熼�氫笅鏉ワ紝鏄渶瑕佺洰鏍囦綅缃殑锛岃繖閲屾垜浠彧鏄垰缁勬嫋瀹屾垚锛屽苟涓嶆槸閫氱煡娴佸姩锛屾病鏈夌洰鏍囦綅缃�
+     *              * //TODO 2. 鏂囨。涓婄殑鎼繍浠诲姟涓嬪彂鎸囩殑閮芥槸澶氫换鍔★紝澶氬鍣ㄦ惉杩愶紝鑰屼笉鏄垜浠渶瑕佺墿鏂欎俊鎭悓姝ュ姛鑳�
+     *              * //TODO 3. 娴佺▼璧颁笉閫氭殏鏃跺厛璺宠繃锛岀‘璁ゆ槸鍚﹂渶瑕乄MS瑙﹀彂鏂欑婊氬姩鑷虫壂鐮佸尯
      * @param arrivedParam
      * @return
      */
     @Override
-    @Transactional
-    public R containerArrivedNotify(ContainerArrivedParam arrivedParam) {
+    @Transactional(rollbackFor = Exception.class)
+    public R containerArrivedNotify(ContainerArrivedParam arrivedParam, String taskType) {
         List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, arrivedParam.getContainerCode()));
         if (Collections.isEmpty(tasks)) {
             return R.error("浠诲姟涓嶅瓨鍦紒锛�");
-//            throw new CoolException("浠诲姟涓嶅瓨鍦紒锛�");
         }
 
-        //DONE 鏍规嵁ESS杩斿洖鐨勫鍣ㄧ紪鐮佷慨鏀逛换鍔℃。涓殑杈撻�佺嚎璧峰浣嶇疆鑺傜偣锛屽強浠诲姟妗e鍣ㄥ埌杈剧姸鎬�
-        taskService.update(new LambdaUpdateWrapper<Task>()
-                .set(Task::getTaskSts, TaskStsType.WCS_CONTAINER_RECEIVE.id)
-                .set(Task::getOriginLoc, arrivedParam.getSlotCode())
-                .eq(Task::getBarcode, arrivedParam.getContainerCode()));
+        if (taskType.equals("inStock")) {
+            //DONE 鏍规嵁ESS杩斿洖鐨勫鍣ㄧ紪鐮佷慨鏀逛换鍔℃。涓殑杈撻�佺嚎璧峰浣嶇疆鑺傜偣锛屽強浠诲姟妗e鍣ㄥ埌杈剧姸鎬�
+            taskService.update(new LambdaUpdateWrapper<Task>()
+                    .set(Task::getTaskSts, TaskStsType.WCS_CONTAINER_RECEIVE.id)
+                    .set(Task::getOriginLoc, arrivedParam.getSlotCode())
+                    .eq(Task::getBarcode, arrivedParam.getContainerCode()));
+        } else {
+            taskService.update(new LambdaUpdateWrapper<Task>()
+                    .set(Task::getTaskSts, TaskStsType.WCS_EXECUTE_OUT_ARRIVED.id)
+                    .set(Task::getOriginLoc, arrivedParam.getSlotCode())
+                    .eq(Task::getBarcode, arrivedParam.getContainerCode()));
+        }
 
         return R.success("success");
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public boolean receiveTaskStatus(TasksStatusCallbackParam callbackParam) {
-        TaskStsType taskStsType = TaskStsType.WCS_CONTAINER_RECEIVE;
-
-       if (callbackParam.getEventType().equals(EssTaskStatus.TASK_EVENT_TOTE_LOAD.event)) { //涓婃姤鍙栫鐘舵��
-           taskStsType = TaskStsType.WCS_TOTE_LOAD;
-        } else if (callbackParam.getEventType().equals(EssTaskStatus.TASK_EVENT_TOTE_UNLOAD.event)) { //涓婃姤鏀剧鐘舵��
-           taskStsType = TaskStsType.WCS_TOTE_UNLOAD;
-        } else if (callbackParam.getEventType().equals(EssTaskStatus.TASK_EVENT_STATUS.event)) { //TODO 闇�纭涓婃姤浠诲姟涓紝浠诲姟瀹屾垚鏄摢涓簨浠讹紝鐩墠鏆傚畾task浜嬩欢
-           taskStsType = TaskStsType.WCS_PUTAWAY_SUCESS;
-       }
-
-        return taskService.update(new LambdaUpdateWrapper<Task>()
-                .set(Task::getRobotCode, callbackParam.getRobotCode())
-                .set(Task::getSysTaskCode, callbackParam.getSysTaskCode())
-                .set(Task::getTaskSts, taskStsType.id)
-                .set(Task::getExcudeStatus, callbackParam.getStatus())
-                .set(Task::getTaskDesc, callbackParam.getMessage())
+    public void receiveTaskStatus(TasksStatusCallbackParam callbackParam, String stockType) {
+        Long type = 1L;
+        if (stockType.equals("outStock")) { //鍑哄簱浠诲姟
+            type = 101L;
+        }
+        List<Task> list = taskService.list(new LambdaQueryWrapper<Task>()
                 .eq(Task::getBarcode, callbackParam.getContainerCode())
+                .eq(Task::getTaskType, type)
                 .eq(Task::getTaskNo, callbackParam.getTaskCode()));
-    }
+        if (!Collections.isEmpty(list)) {
+            Long finalType = type;
+            list.forEach(task -> {
+                    TaskStsType taskStsType = null;
+                    if (stockType.equals("inStock")) { //鍏ュ簱浠诲姟
+                        if (callbackParam.getEventType().equals(EssTaskStatus.TASK_EVENT_TOTE_LOAD.event)) { //涓婃姤鍙栫鐘舵��
+                            if (task.getTaskType() == TaskStsType.WCS_CONTAINER_RECEIVE.id) {
+                                taskStsType = TaskStsType.WCS_TOTE_LOAD;
+                            } else {
+                                String errMsg = "浠诲姟缂栧彿锛�" + task.getTaskNo() +  "鐘舵�佷负涓嶅尮閰嶏紝"  + "涓嶈兘鎵ц锛�" + TaskStsType.WCS_TOTE_LOAD.desc + "浠诲姟";
+                                log.error(errMsg);
+                                throw new CoolException(errMsg);
+                            }
+                        } else if (callbackParam.getEventType().equals(EssTaskStatus.TASK_EVENT_TOTE_UNLOAD.event)) { //涓婃姤鏀剧鐘舵��
+                            if (task.getTaskType() == TaskStsType.WCS_TOTE_LOAD.id) {
+                                taskStsType = TaskStsType.WCS_TOTE_UNLOAD;
+                            } else {
+                                String errMsg = "浠诲姟缂栧彿锛�" + task.getTaskNo() +  "鐘舵�佷负涓嶅尮閰嶏紝"  + "涓嶈兘鎵ц锛�" + TaskStsType.WCS_TOTE_UNLOAD.desc + "浠诲姟";
+                                log.error(errMsg);
+                                throw new CoolException(errMsg);
+                            }
+                        } else if (callbackParam.getEventType().equals(EssTaskStatus.TASK_EVENT_STATUS.event)) { //TODO 闇�纭涓婃姤浠诲姟涓紝浠诲姟瀹屾垚鏄摢涓簨浠讹紝鐩墠鏆傚畾task浜嬩欢
+                            if (task.getTaskType() == TaskStsType.WCS_TOTE_UNLOAD.id) {
+                                taskStsType = TaskStsType.WCS_PUTAWAY_SUCESS;
+                            } else {
+                                String errMsg = "浠诲姟缂栧彿锛�" + task.getTaskNo() +  "鐘舵�佷负涓嶅尮閰嶏紝"  + "涓嶈兘鎵ц锛�" + TaskStsType.WCS_PUTAWAY_SUCESS.desc + "浠诲姟";
+                                log.error(errMsg);
+                                throw new CoolException(errMsg);
+                            }
+                        }
+                        boolean result = taskService.update(new LambdaUpdateWrapper<Task>()
+                                .set(Task::getRobotCode, callbackParam.getRobotCode())
+                                .set(Task::getSysTaskCode, callbackParam.getSysTaskCode())
+                                .set(Task::getTaskSts, taskStsType.id)
+                                .set(Task::getExcudeStatus, callbackParam.getStatus())
+                                .set(Task::getTaskDesc, callbackParam.getMessage())
+                                .eq(Task::getBarcode, callbackParam.getContainerCode())
+                                .eq(Task::getTaskType, finalType)
+                                .eq(Task::getTaskNo, callbackParam.getTaskCode()));
 
+                        if (callbackParam.getEventType().equals(EssTaskStatus.TASK_EVENT_STATUS.event) && result) {
+                            workService.completeTask(task.getId());
+                        }
+                    } else { //鍑哄簱浠诲姟
+                        if (callbackParam.getEventType().equals(EssTaskStatus.TASK_EVENT_TOTE_LOAD.event)) { //涓婃姤鍙栫鐘舵��
+                            if (task.getTaskType() == TaskStsType.WCS_EXECUTE_OUT.id) {
+                                taskStsType = TaskStsType.WCS_EXECUTE_OUT_TOTE_LOAD;
+                            } else {
+                                String errMsg = "浠诲姟缂栧彿锛�" + task.getTaskNo() +  "鐘舵�佷负涓嶅尮閰嶏紝"  + "涓嶈兘鎵ц锛�" + TaskStsType.WCS_EXECUTE_OUT_TOTE_LOAD.desc + "浠诲姟";
+                                log.error(errMsg);
+                                throw new CoolException(errMsg);
+                            }
+                        } else if (callbackParam.getEventType().equals(EssTaskStatus.TASK_EVENT_TOTE_UNLOAD.event)) { //涓婃姤鏀剧鐘舵��
+                            if (task.getTaskType() == TaskStsType.WCS_EXECUTE_OUT_TOTE_LOAD.id) {
+                                taskStsType = TaskStsType.WCS_EXECUTE_OUT_TOTE_UNLOAD;
+                            } else {
+                                String errMsg = "浠诲姟缂栧彿锛�" + task.getTaskNo() +  "鐘舵�佷负涓嶅尮閰嶏紝"  + "涓嶈兘鎵ц锛�" + TaskStsType.WCS_EXECUTE_OUT_TOTE_UNLOAD.desc + "浠诲姟";
+                                log.error(errMsg);
+                                throw new CoolException(errMsg);
+                            }
+                        } else if (callbackParam.getEventType().equals(EssTaskStatus.TASK_EVENT_STATUS.event)) { //涓婃姤瀹屾垚鐘舵��
+                            if (task.getTaskType() == TaskStsType.WCS_EXECUTE_OUT_TOTE_UNLOAD.id) {
+                                taskStsType = TaskStsType.WCS_EXECUTE_OUT_TASK_DONE;
+                            } else {
+                                String errMsg = "浠诲姟缂栧彿锛�" + task.getTaskNo() +  "鐘舵�佷负涓嶅尮閰嶏紝"  + "涓嶈兘鎵ц锛�" + TaskStsType.WCS_EXECUTE_OUT_TASK_DONE.desc + "浠诲姟";
+                                log.error(errMsg);
+                                throw new CoolException(errMsg);
+                            }
+                        }
+
+                        //鏇存柊鍑哄簱鐘舵�佸強鐩稿叧瀛楁
+                         taskService.update(new LambdaUpdateWrapper<Task>()
+                                .set(Task::getRobotCode, callbackParam.getRobotCode())
+                                .set(Task::getSysTaskCode, callbackParam.getSysTaskCode())
+                                .set(Task::getTaskSts, taskStsType.id)
+                                .set(Task::getExcudeStatus, callbackParam.getStatus())
+                                .set(Task::getTaskDesc, callbackParam.getMessage())
+                                .eq(Task::getTaskType, finalType)
+                                .eq(Task::getBarcode, callbackParam.getContainerCode())
+                                .eq(Task::getTaskNo, callbackParam.getTaskCode()));
+
+//                        if (callbackParam.getEventType().equals(EssTaskStatus.TASK_EVENT_STATUS.event) && result) {
+////                            workService.completeTask(task.getId());
+//                        }
+                    }
+
+                });
+        }
+    }
 
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/WcsApiService.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/WcsApiService.java
index 1bf7421..cafed21 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/WcsApiService.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/WcsApiService.java
@@ -11,12 +11,8 @@
 
 public interface WcsApiService {
 
-    CommonReponse publishTaskOfCarry();
+    R containerArrivedNotify(ContainerArrivedParam arrivedParam, String taskType);
 
-    CommonReponse publishTaskOfCarry(List<WaitPakin> pakins);
-
-    R containerArrivedNotify(ContainerArrivedParam arrivedParam);
-
-    boolean receiveTaskStatus(TasksStatusCallbackParam callbackParam);
+    void receiveTaskStatus(TasksStatusCallbackParam callbackParam, String stockType);
 
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/MobileController.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/MobileController.java
index cb1c1dc..aafec91 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/MobileController.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/MobileController.java
@@ -12,8 +12,10 @@
 import com.zy.asrs.wms.asrs.service.MobileService;
 import com.zy.asrs.wms.asrs.service.OrderService;
 import com.zy.asrs.wms.system.controller.BaseController;
+import com.zy.asrs.wms.system.entity.Host;
 import com.zy.asrs.wms.system.entity.User;
 import com.zy.asrs.wms.system.entity.UserLogin;
+import com.zy.asrs.wms.system.service.HostService;
 import com.zy.asrs.wms.system.service.UserLoginService;
 import com.zy.asrs.wms.system.service.UserService;
 import io.jsonwebtoken.lang.Collections;
@@ -30,7 +32,6 @@
 
     @Value("${super.pwd}")
     private String superPwd;
-
     @Autowired
     private UserService userService;
     @Autowired
@@ -40,6 +41,15 @@
     @Autowired
     private MobileService mobileService;
 
+    /**
+     * 鑾峰彇鐢ㄦ埛鏈烘瀯
+     * @return
+     */
+    @GetMapping("/current/host")
+    public R getUserHost() {
+        List<Host> hosts = mobileService.getHosts();
+        return R.ok(hosts);
+    }
 
     /**
      * 鍏ュ簱鍗曟嵁--鎵爜鑾峰彇璁㈠崟鏄庣粏鍒楄〃
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/OrderController.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/OrderController.java
index 4612928..40a8429 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/OrderController.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/OrderController.java
@@ -94,7 +94,7 @@
 
     @PreAuthorize("hasAuthority('asrs:order:list')")
     @PostMapping("/order/out/page")
-    @CacheData(tableName = {"man_order", "man_order_type"})
+//    @CacheData(tableName = {"man_order", "man_order_type"})
     public R pageOut(@RequestBody Map<String, Object> map) {
         String condition = map.getOrDefault("condition", "").toString();
         BaseParam baseParam = buildParam(map, BaseParam.class);
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/enums/TaskStsType.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/enums/TaskStsType.java
index 07b4d92..e3c42c1 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/enums/TaskStsType.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/enums/TaskStsType.java
@@ -3,14 +3,14 @@
 public enum TaskStsType {
 
     GENERATE_IN(1L, "鐢熸垚鍏ュ簱浠诲姟"),
-    WCS_EXECUTE_IN(2L, "WCS鎵ц涓�"),
-    WCS_CONTAINER_RECEIVE(3L, "WCS瀹瑰櫒鍒拌揪鎵弿鍖�"),
+    WCS_EXECUTE_IN(2L, "鍏ュ簱鎵ц涓�"),
+    WCS_CONTAINER_RECEIVE(3L, "瀹瑰櫒鍒拌揪鎵弿鍖�"),
 
     WCS_CONVEYOR_START(14L, "閫氱煡瀹瑰櫒娴佸姩"),
 
-    WCS_TOTE_LOAD(4L, "WCS鏈哄櫒浜哄彇绠�"),
+    WCS_TOTE_LOAD(4L, "鏈哄櫒浜哄彇绠�"),
 
-    WCS_TOTE_UNLOAD(5L, "WCS鏈哄櫒浜烘斁绠�"),
+    WCS_TOTE_UNLOAD(5L, "鏈哄櫒浜烘斁绠�"),
 
     WCS_PUTAWAY_SUCESS(10L, "浠诲姟鎴愬姛"),
 
@@ -24,7 +24,19 @@
     UPDATED_IN(100L, "搴撳瓨鏇存柊瀹屾垚"),
 
     GENERATE_OUT(101L, "鐢熸垚鍑哄簱浠诲姟"),
-    WCS_EXECUTE_OUT(102L, "WCS鎵ц涓�"),
+
+    WCS_EXECUTE_OUT(102L, "鍑哄簱鎵ц涓�"),
+
+    WCS_EXECUTE_OUT_TOTE_LOAD(113L, "鏈哄櫒浜哄彇绠�"),
+
+    WCS_EXECUTE_OUT_TOTE_UNLOAD(114L, "鏈哄櫒浜烘斁绠�"),
+
+    WCS_EXECUTE_OUT_TASK_DONE(115L, "浠诲姟鐘舵�佸洖璋冨畬鎴�"),
+
+    WCS_EXECUTE_OUT_ARRIVED(116L, "瀹瑰櫒鍒拌揪鎵爜鍖�"),
+
+    WCS_EXECUTE_OUT_CONVEYOR(117L, "閫氱煡瀹瑰櫒娴佸姩"),
+
     WAVE_SEED(198L, "鎾涓�"),
     COMPLETE_OUT(199L, "鍑哄簱瀹屾垚"),
     UPDATED_OUT(200L, "搴撳瓨鏇存柊瀹屾垚"),
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java
index e71501d..eb495cf 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java
@@ -778,7 +778,7 @@
 
     }
 
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public void orderOutMergeWave(OrderOutMergeParamDto dto) {
         if(dto == null){
             throw new CoolException("鍙傛暟涓嶈兘涓虹┖");
@@ -929,8 +929,10 @@
                     }
                 }
 
+                //TODO 纭鍚庯紝闇�灏嗘敞閲婃墦寮�
                 String matUniqueKey = Utils.getMatUniqueKey(taskDetl.getMatnr(), taskDetl.getBatch(), taskDetl.getUniqueField());
-                WaveDetl waveDetl = waveDetlService.getOne(new LambdaQueryWrapper<WaveDetl>().eq(WaveDetl::getStockIndex, matUniqueKey).eq(WaveDetl::getWaveId, waveId));
+//                WaveDetl waveDetl = waveDetlService.getOne(new LambdaQueryWrapper<WaveDetl>().eq(WaveDetl::getStockIndex, matUniqueKey).eq(WaveDetl::getWaveId, waveId));
+                WaveDetl waveDetl = waveDetlService.getOne(new LambdaQueryWrapper<WaveDetl>().eq(WaveDetl::getWaveId, waveId));
                 if (waveDetl == null) {
                     throw new CoolException("娉㈡鏁版嵁涓嶅瓨鍦�");
                 }
@@ -939,7 +941,6 @@
                 if (!waveDetlService.updateById(waveDetl)) {
                     throw new CoolException("娉㈡鏁版嵁鏇存柊澶辫触");
                 }
-
             }
 
             //搴撲綅F => R
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/MobileService.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/MobileService.java
index 6208965..197fb2f 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/MobileService.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/MobileService.java
@@ -1,10 +1,14 @@
 package com.zy.asrs.wms.asrs.service;
 
 import com.zy.asrs.wms.asrs.entity.param.BatchMergeOrdersParam;
+import com.zy.asrs.wms.system.entity.Host;
 
+import java.util.List;
 
 
 public interface MobileService {
 
     boolean batchMergeOrders(BatchMergeOrdersParam ordersParam);
+
+    List<Host> getHosts();
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MobileServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MobileServiceImpl.java
index 1cfb59d..2b4fb39 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MobileServiceImpl.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MobileServiceImpl.java
@@ -8,20 +8,24 @@
 import com.zy.asrs.wms.asrs.service.MobileService;
 import com.zy.asrs.wms.asrs.service.WaitPakinService;
 import com.zy.asrs.wms.asrs.service.WorkService;
+import com.zy.asrs.wms.system.entity.Host;
+import com.zy.asrs.wms.system.service.HostService;
 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.List;
 
 @Service
 public class MobileServiceImpl implements MobileService {
 
     @Autowired
     private WaitPakinService waitPakinService;
-
     @Autowired
     private WorkService workService;
+    @Autowired
+    private HostService hostService;
 
     @Override
     @Transactional
@@ -51,4 +55,9 @@
         }
         return false;
     }
+
+    @Override
+    public List<Host> getHosts() {
+        return hostService.list();
+    }
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java
index 984ff14..9ca41cb 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java
@@ -430,7 +430,7 @@
             task.setTaskSts(TaskStsType.COMPLETE_IN.id);//99.鍏ュ簱瀹屾垚
         }else {
             //鍑哄簱
-            TaskDetl taskDetl = taskDetls.get(0);
+            TaskDetl taskDetl = taskDetls.get(0); //TODO  鍑哄簱娴佺▼寰呯‘璁わ紝ESS鍙栬揣鍚庯紝杈撻�佺嚎娴佽浆鍒版壂鐮佸鐘舵��
             if (taskDetl.getWaveId() == null) {
                 task.setTaskSts(TaskStsType.COMPLETE_OUT.id);//199.鍑哄簱瀹屾垚
             }else {
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskLogTimer.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskLogTimer.java
index 8c62e0c..f76ea3a 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskLogTimer.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskLogTimer.java
@@ -44,7 +44,7 @@
     @Autowired
     private WaveService waveService;
 
-//    @Scheduled(cron = "0/3 * * * * ? ")
+    @Scheduled(cron = "0/30 * * * * ? ")
     @Transactional
     public void inExecute() {
         InterceptorIgnoreHelper.handle(IgnoreStrategy.builder().tenantLine(true).build());
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskTimer.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskTimer.java
index fb9cc2e..ca3385f 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskTimer.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskTimer.java
@@ -8,6 +8,7 @@
 import com.zy.asrs.wms.asrs.entity.enums.LocStsType;
 import com.zy.asrs.wms.asrs.entity.enums.TaskStsType;
 import com.zy.asrs.wms.asrs.service.*;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
@@ -17,6 +18,7 @@
 import java.util.Date;
 import java.util.List;
 
+@Slf4j
 @Component
 public class TaskTimer {
 
@@ -57,7 +59,7 @@
     private OrderDetlService orderDetlService;
 
 
-//    @Scheduled(cron = "0/3 * * * * ? ")
+    @Scheduled(cron = "0/30 * * * * ? ")
     @Transactional
     public void inExecute() {
         InterceptorIgnoreHelper.handle(IgnoreStrategy.builder().tenantLine(true).build());
@@ -141,6 +143,7 @@
 
         Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getLocNo, task.getTargetLoc()).eq(Loc::getHostId, hostId));
         if (loc == null) {
+            log.info("搴撲綅涓嶅瓨鍦�" + "=======>" + task.getTargetLoc());
             throw new CoolException("搴撲綅涓嶅瓨鍦�");
         }
 
diff --git a/zy-asrs-wms/src/main/resources/mapper/asrs/ViewLocDetlMapper.xml b/zy-asrs-wms/src/main/resources/mapper/asrs/ViewLocDetlMapper.xml
index 05e8e9e..08238a8 100644
--- a/zy-asrs-wms/src/main/resources/mapper/asrs/ViewLocDetlMapper.xml
+++ b/zy-asrs-wms/src/main/resources/mapper/asrs/ViewLocDetlMapper.xml
@@ -6,12 +6,12 @@
         select * from view_man_loc_detl ld
         where matnr = #{matnr}
         and freeze = 0
-        <if test="batch!=null">
+        <if test="batch != null and batch != ''">
             and batch = #{batch}
         </if>
         <if test="param!=null and param.size()>0">
             <foreach item="item" collection="param" index="index">
-                <if test="item.value!=null">
+                <if test="item.value!=null and item.value != ''">
                     and ${item.name} = #{item.value}
                 </if>
             </foreach>

--
Gitblit v1.9.1