From 3c52f39678034ce21c1158a01b4885e3afde4443 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期六, 04 一月 2025 17:08:00 +0800
Subject: [PATCH] #平库入库功能

---
 zy-asrs-wms/src/main/resources/application.yml                                                |    3 
 zy-asrs-admin/src/assets/main.css                                                             |    5 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/MobileController.java               |   44 ++++
 zy-asrs-admin/src/views/in/waitPakin/index.vue                                                |    2 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MobileServiceImpl.java            |   39 +++-
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/schedule/ScheduleJobs.java                 |   17 +
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/CacheSiteServiceImpl.java         |   14 +
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/Impl/WcsApiServiceImpl.java       |   80 ++++++++
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WaitPakinServiceImpl.java         |    2 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/entity/domain/WaveTaskDetl.java            |    5 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java                       |   20 +-
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/OrderTypeController.java            |   20 +
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/WcsApiService.java                |    1 
 zy-asrs-admin/src/components/loc/map/index.vue                                                |    2 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/PlatformServiceImpl.java          |    2 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/Impl/WaveManagentServiceImpl.java |    3 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/enums/TaskStsType.java                  |    2 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/enums/OrderType.java                    |   22 ++
 zy-asrs-admin/src/views/IndexView.vue                                                         |   43 ++++
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java              |   28 ++-
 zy-asrs-admin/src/components/orderOut/orderOutWavePreview/index.vue                           |    2 
 zy-asrs-admin/src/views/base/locArea/index.vue                                                |   79 ++++----
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/controller/OutStockController.java         |   19 +
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskTimer.java                           |   28 +++
 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/asrs/entity/param/PakinOnShelvesParams.java         |   21 ++
 26 files changed, 397 insertions(+), 108 deletions(-)

diff --git a/zy-asrs-admin/src/assets/main.css b/zy-asrs-admin/src/assets/main.css
index fa22eaa..963f4c2 100644
--- a/zy-asrs-admin/src/assets/main.css
+++ b/zy-asrs-admin/src/assets/main.css
@@ -109,8 +109,9 @@
 .tabs-fixed {
   width: 100%;
   position: relative;
-  top: -64px;
-  left: -24px;
+  /*top: -64px;*/
+  /*left: -24px;*/
+  padding: 10px;
   display: flex;
 }
 
diff --git a/zy-asrs-admin/src/components/loc/map/index.vue b/zy-asrs-admin/src/components/loc/map/index.vue
index 2f624c9..e7e6357 100644
--- a/zy-asrs-admin/src/components/loc/map/index.vue
+++ b/zy-asrs-admin/src/components/loc/map/index.vue
@@ -315,13 +315,11 @@
         <div ref="pixiView">
 
         </div>
-
         <!--杈撳嚭鎿嶄綔鍜孎PS-->
         <div style="position: absolute;top: 0px;right: 10px;user-select: none;">
             <div>FPS:{{ mapFps }}</div>
             <a-button @click="drawerOper = true">鎿嶄綔</a-button>
         </div>
-
         <!--杈撳嚭鎿嶄綔鍜孎PS-->
         <div style="position: absolute;bottom: 20px;left: 20px;user-select: none;">
             <a-button type="dashed" @click="containerAppViewCenter">
diff --git a/zy-asrs-admin/src/components/orderOut/orderOutWavePreview/index.vue b/zy-asrs-admin/src/components/orderOut/orderOutWavePreview/index.vue
index 909eae0..6cc1d8a 100644
--- a/zy-asrs-admin/src/components/orderOut/orderOutWavePreview/index.vue
+++ b/zy-asrs-admin/src/components/orderOut/orderOutWavePreview/index.vue
@@ -54,7 +54,7 @@
     {
         title: formatMessage('db.man_order_detl.batch', '鎵瑰彿'),
         dataIndex: 'batch',
-        width: 110,
+        width: 140,
         ellipsis: true,
         ...getColumnSearchProps('batch'),
         customCell: (_, index) => {
diff --git a/zy-asrs-admin/src/views/IndexView.vue b/zy-asrs-admin/src/views/IndexView.vue
index e9b44a0..10cdd64 100644
--- a/zy-asrs-admin/src/views/IndexView.vue
+++ b/zy-asrs-admin/src/views/IndexView.vue
@@ -1,10 +1,13 @@
 <script setup>
-import { nextTick, ref, inject, onMounted } from 'vue';
+import { nextTick, ref, inject, onMounted, h, reactive } from 'vue';
 import { useRouter } from "vue-router";
 import { get, post, postForm } from '@/utils/request.js'
 import { logout } from '@/config.js';
 import * as Icons from "@ant-design/icons-vue";
 import { message } from 'ant-design-vue';
+// import type { MenuMode, MenuTheme } from 'ant-design-vue';
+// import { ItemType } from 'ant-design-vue';
+
 import {
   MenuUnfoldOutlined,
   MenuFoldOutlined,
@@ -37,6 +40,8 @@
   ...Icons,
 };
 
+
+
 onMounted(() => {
   let name = router.currentRoute.value.name;
   let path = router.currentRoute.value.path;
@@ -59,10 +64,23 @@
   }
 })
 
+
+const state = reactive({
+    rootSubmenuKeys: [],
+    openKeys: ["/"],
+    selectedKeys: [],
+});
+
 getMenu()
 function getMenu() {
   get('/api/auth/menu', {}).then((result) => {
     menuCache.value = result.data.data;
+    let routes = menuCache.value.map(item =>{
+        return item.route
+    })
+      routes.unshift('/')
+      state.rootSubmenuKeys = routes
+      console.log(state.rootSubmenuKeys)
   })
 }
 
@@ -150,9 +168,9 @@
   selectedKeys.value = [item.key]
 
   // open menu
-  let arr = item.key.split("/");
-  let key = '/' + arr[1];
-  openKeys.value = [key]
+  // let arr = item.key.split("/");
+  // let key = '/' + arr[1];
+  // openKeys.value = [key]
 }
 
 const switchLocale = async (locale) => {
@@ -223,6 +241,19 @@
   }
 }
 
+const onOpenChange = (openKeys) => {
+    const latestOpenKey = openKeys.find(
+        (key) => state.openKeys.indexOf(key) === -1
+    );
+    if (state.rootSubmenuKeys.indexOf(latestOpenKey) === -1) {
+        state.openKeys = openKeys
+    } else {
+        state.openKeys = latestOpenKey ? [latestOpenKey] : [];
+    }
+    console.log(state.openKeys)
+}
+
+
 </script>
 
 <template>
@@ -230,8 +261,8 @@
       <div class="sider-style">
         <a-layout-sider class="main-sider" v-model:collapsed="collapsed" :trigger="null"  theme="dark">
         <div class="logo" />
-        <a-menu v-model:openKeys="openKeys" v-model:selectedKeys="selectedKeys" @select="menuSelect"  theme="dark"
-                mode="inline" >
+        <a-menu v-model:openKeys="state.openKeys" v-model:selectedKeys="state.selectedKeys"  @select="menuSelect"  theme="dark"
+                mode="inline" @openChange="onOpenChange">
           <div>
             <a-menu-item key="/" name="涓婚〉">
               <HomeOutlined /> {{ formatMessage('common.home', '涓婚〉') }}
diff --git a/zy-asrs-admin/src/views/base/locArea/index.vue b/zy-asrs-admin/src/views/base/locArea/index.vue
index 8a5a918..24d3ff1 100644
--- a/zy-asrs-admin/src/views/base/locArea/index.vue
+++ b/zy-asrs-admin/src/views/base/locArea/index.vue
@@ -251,44 +251,47 @@
 </script>
 
 <template>
-  <div style="display: flex;">
-    <a-card :title="formatMessage('db.man_loc_area_type.type_id', '搴撳尯绫诲瀷')" style="flex: 3;margin-right: 30px;">
-      <a-input v-model:value="searchLocAreaType" @change="handleLocAreaTypeDept" :placeholder="formatMessage('page.input', '璇疯緭鍏�')"
-        style="margin-bottom: 8px" />
-      <a-tree v-model:expandedKeys="locAreaTypeExpandedKeys" @select="handleLocAreaTypeSelected" :tree-data="locAreaTypeData" blockNode>
-        <template #title="{ name }">
-          <span>{{ name }}</span>
-        </template>
-      </a-tree>
-    </a-card>
-
-    <a-card style="flex: 10;">
-      <EditView ref="editChild" @tableReload="handleTableReload" />
-      <div class="table-header">
-        <a-input-search v-model:value="searchInput" :placeholder="formatMessage('page.input', '璇疯緭鍏�')"
-          style="width: 200px;" @search="onSearch" />
-        <div class="table-header-right">
-          <a-button @click="handleEdit(null)" type="primary">{{ formatMessage('page.add', '娣诲姞') }}</a-button>
-          <a-button @click="handleExport">{{ formatMessage('page.export', '瀵煎嚭') }}</a-button>
-        </div>
-      </div>
-      <a-table :row-selection="{ selectedRowKeys: state.selectedRowKeys, onChange: onSelectChange }"
-        :data-source="tableData.records" :defaultExpandAllRows="false" :key="TABLE_KEY" rowKey="id"
-        :pagination="{ total: tableData.total, onChange: onPageChange }"
-        :scroll="{ y: 768, scrollToFirstRowOnChange: true }" :columns="columns" :loading="state.loading">
-        <template #bodyCell="{ column, text, record }">
-          <template v-if="column.dataIndex === 'oper'">
-            <div style="display: flex;justify-content: space-evenly;">
-              <a-button type="link" primary @click="handleEdit(record)">{{ formatMessage('page.edit', '缂栬緫')
-                }}</a-button>
-              <a-button type="link" danger @click="handleDel([record])">{{ formatMessage('page.delete', '鍒犻櫎')
-                }}</a-button>
-            </div>
-          </template>
-        </template>
-      </a-table>
-    </a-card>
-  </div>
+    <a-row>
+        <a-col :span="5">
+            <a-card :title="formatMessage('db.man_loc_area_type.type_id', '搴撳尯绫诲瀷')" style="flex: 3;margin-right: 30px;">
+                <a-input v-model:value="searchLocAreaType" @change="handleLocAreaTypeDept" :placeholder="formatMessage('page.input', '璇疯緭鍏�')"
+                         style="margin-bottom: 8px" />
+                <a-tree v-model:expandedKeys="locAreaTypeExpandedKeys" @select="handleLocAreaTypeSelected" :tree-data="locAreaTypeData" blockNode>
+                    <template #title="{ name }">
+                        <span>{{ name }}</span>
+                    </template>
+                </a-tree>
+            </a-card>
+        </a-col>
+        <a-col :span="19">
+            <a-card style="flex: 10;">
+                <EditView ref="editChild" @tableReload="handleTableReload" />
+                <div class="table-header">
+                    <a-input-search v-model:value="searchInput" :placeholder="formatMessage('page.input', '璇疯緭鍏�')"
+                                    style="width: 200px;" @search="onSearch" />
+                    <div class="table-header-right">
+                        <a-button @click="handleEdit(null)" type="primary">{{ formatMessage('page.add', '娣诲姞') }}</a-button>
+                        <a-button @click="handleExport">{{ formatMessage('page.export', '瀵煎嚭') }}</a-button>
+                    </div>
+                </div>
+                <a-table :row-selection="{ selectedRowKeys: state.selectedRowKeys, onChange: onSelectChange }"
+                         :data-source="tableData.records" :defaultExpandAllRows="false" :key="TABLE_KEY" rowKey="id"
+                         :pagination="{ total: tableData.total, onChange: onPageChange }"
+                         :scroll="{ y: 768, scrollToFirstRowOnChange: true }" :columns="columns" :loading="state.loading">
+                    <template #bodyCell="{ column, text, record }">
+                        <template v-if="column.dataIndex === 'oper'">
+                            <div style="display: flex;justify-content: space-evenly;">
+                                <a-button type="link" primary @click="handleEdit(record)">{{ formatMessage('page.edit', '缂栬緫')
+                                    }}</a-button>
+                                <a-button type="link" danger @click="handleDel([record])">{{ formatMessage('page.delete', '鍒犻櫎')
+                                    }}</a-button>
+                            </div>
+                        </template>
+                    </template>
+                </a-table>
+            </a-card>
+        </a-col>
+    </a-row>
 </template>
 
 <style></style>
diff --git a/zy-asrs-admin/src/views/in/waitPakin/index.vue b/zy-asrs-admin/src/views/in/waitPakin/index.vue
index 0670ce9..6ef6c9a 100644
--- a/zy-asrs-admin/src/views/in/waitPakin/index.vue
+++ b/zy-asrs-admin/src/views/in/waitPakin/index.vue
@@ -70,7 +70,7 @@
   {
     title: formatMessage('db.man_wait_pakin.matnr', '鍟嗗搧缂栧彿'),
     dataIndex: 'matnr',
-    width: 140,
+    width: 180,
     ellipsis: true,
     ...getColumnSearchProps('matnr'),
   },
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/controller/OutStockController.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/controller/OutStockController.java
index d0e8a8a..a97164a 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/controller/OutStockController.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/controller/OutStockController.java
@@ -9,10 +9,7 @@
 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;
+import org.springframework.web.bind.annotation.*;
 
 @Slf4j
 @RestController
@@ -63,5 +60,19 @@
 
     }
 
+    /**
+     * 瀹瑰櫒娴佸姩閫氱煡
+     * @param code 瀹瑰櫒缂栫爜
+     * @return
+     */
+    @GetMapping("/container/converyor/{code}")
+    public R containerConveyor(@PathVariable String code) {
+        if (StringUtil.isNullOrEmpty(code)) {
+            return R.error("瀹瑰櫒缂栫爜涓嶈兘涓虹┖锛侊紒锛�");
+        }
+
+        return wcsApiService.containerConveryor(code);
+    }
+
 
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/entity/domain/WaveTaskDetl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/entity/domain/WaveTaskDetl.java
index 7154197..f63a859 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/entity/domain/WaveTaskDetl.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/entity/domain/WaveTaskDetl.java
@@ -42,4 +42,9 @@
      */
     private String batch;
 
+    /**
+     * 搴撳瓨
+     */
+    private Integer stock;
+
 }
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 6b34d4e..3e21860 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
@@ -14,6 +14,8 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.client.RestTemplate;
 
+import java.util.Collection;
+import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -151,7 +153,7 @@
      * 鍑哄簱浠诲姟---閫氱煡瀹瑰櫒娴佸姩
      * 姣忛殧3绉掞紝鑾峰彇褰撳墠鍑哄簱浠诲姟鍒楄〃鐘舵�佷负COMPLETE_OUT鐨勪换鍔★紝骞堕�氱煡ESS娴佸姩杈撻�佺嚎
      */
-    @Scheduled(cron = "0/5 * * * * ? ")
+//    @Scheduled(cron = "0/5 * * * * ? ")
     @Transactional(rollbackFor = Exception.class)
     public void conveyorToNotify() {
         List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>()
@@ -185,9 +187,9 @@
 //                    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::getTaskSts, TaskStsType.COMPLETE_OUT.id));
+//                        taskService.update(new LambdaUpdateWrapper<Task>()
+//                                .eq(Task::getId, task.getId())
+//                                .set(Task::getTaskSts, TaskStsType.COMPLETE_OUT.id));
 
 //                        log.info(task.getTaskNo() + "涓嬪彂娴佸姩閫氱煡" + commonReponse.getMsg());
 //                    } else {
@@ -218,8 +220,11 @@
         //鑾峰彇褰撳墠浠诲姟妗d腑锛屾墍鏈変负寰呭嚭搴撶姸鎬佺殑浠诲姟妗o紝鎸夋椂闂村崌搴忔帓鍒�
         List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>()
                         .ge(Task::getTaskType, 101) //TODO 濡備綍纭鏄�101锛岃繕鏄�103
-                        .eq(Task::getTaskSts, TaskStsType.GENERATE_OUT.id))
-                .stream().sorted(Comparator.comparing(Task::getTaskSts))
+                        .eq(Task::getTaskSts, TaskStsType.GENERATE_OUT.id));
+        if (tasks.isEmpty()) {
+            return;
+        }
+        tasks.stream().sorted(Comparator.comparing(Task::getTaskSts))
                 .collect(Collectors.toList());
 
         // 鏁版嵁缁勮
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/Impl/WaveManagentServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/Impl/WaveManagentServiceImpl.java
index 52aec17..5e520c8 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/Impl/WaveManagentServiceImpl.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/Impl/WaveManagentServiceImpl.java
@@ -7,6 +7,7 @@
 import com.zy.asrs.wms.apis.wcs.entity.response.SowSeeds;
 import com.zy.asrs.wms.apis.wcs.services.WaveManagentService;
 import com.zy.asrs.wms.asrs.entity.Task;
+import com.zy.asrs.wms.asrs.entity.enums.TaskStsType;
 import com.zy.asrs.wms.asrs.entity.param.WaveSeedReviewParam;
 import com.zy.asrs.wms.asrs.service.TaskService;
 import com.zy.asrs.wms.asrs.service.WaveSeedService;
@@ -47,7 +48,7 @@
 
     @Override
     public R getTask() {
-        List<Task> list = taskService.list(new LambdaQueryWrapper<Task>().ge(Task::getTaskType, 101));
+        List<Task> list = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskSts, TaskStsType.WAVE_SEED.id));
         return R.ok(list);
     }
 
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 a115e3b..7c4be6f 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
@@ -18,6 +18,7 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.Date;
 import java.util.List;
 
 @Slf4j
@@ -60,8 +61,15 @@
                     .set(Task::getOriginLoc, arrivedParam.getSlotCode())
                     .eq(Task::getBarcode, arrivedParam.getContainerCode()));
         } else {
+            //瀹瑰櫒鍒拌揪鏃舵洿鏂颁换鍔$姸鎬佷负锛氬叆搴撳畬鎴愶紝瀹氭椂浠诲姟鏍规嵁鐘舵�佺爜鏇存柊搴撳瓨
+            //褰撶姸鎬佷负鍏ュ簱瀹屾垚鏃讹紝鏇存柊搴撳瓨淇℃伅
+//            boolean update = taskService.update(new LambdaUpdateWrapper<Task>()
+//                    .set(Task::getTaskSts, TaskStsType.COMPLETE_OUT.id)
+//                    .set(Task::getOriginLoc, arrivedParam.getSlotCode())
+//                    .eq(Task::getBarcode, arrivedParam.getContainerCode()));
+            //fixme 瀹瑰櫒鍒拌揪鐘舵�佹洿鏀逛负鎾涓�...
             boolean update = taskService.update(new LambdaUpdateWrapper<Task>()
-                    .set(Task::getTaskSts, TaskStsType.WCS_EXECUTE_OUT_ARRIVED.id)
+                    .set(Task::getTaskSts, TaskStsType.WAVE_SEED.id)
                     .set(Task::getOriginLoc, arrivedParam.getSlotCode())
                     .eq(Task::getBarcode, arrivedParam.getContainerCode()));
 
@@ -137,8 +145,8 @@
                             }
                         } else if (callbackParam.getEventType().equals(EssTaskStatus.TASK_EVENT_STATUS.event)) { //涓婃姤瀹屾垚鐘舵��
                             if (task.getTaskSts() == TaskStsType.WCS_EXECUTE_OUT_TOTE_UNLOAD.id || task.getTaskSts() == TaskStsType.WCS_EXECUTE_OUT_TASK_DONE.id) {
-                                //鍑哄簱浠诲姟瀹屾垚锛屼慨鏀圭姸鎬佷负鎾涓紝瀹氭椂浠诲姟鐢熸垚鎾娉㈡
-                                taskStsType = TaskStsType.WAVE_SEED;
+                                //鍑哄簱浠诲姟瀹屾垚锛屼慨鏀圭姸鎬佷负瀹瑰櫒鍒拌揪锛屽畾鏃朵换鍔$敓鎴愭挱绉嶆尝娆�
+                                taskStsType = TaskStsType.WCS_EXECUTE_OUT_TASK_DONE;
                             } else {
                                 String errMsg = "浠诲姟缂栧彿锛�" + task.getTaskNo() +  "鐘舵�佷负涓嶅尮閰嶏紝"  + "涓嶈兘鎵ц锛�" + TaskStsType.WCS_EXECUTE_OUT_TASK_DONE.desc + "浠诲姟";
                                 log.error(errMsg);
@@ -164,4 +172,70 @@
         }
     }
 
+    /**
+     * 瀹瑰櫒娴佸姩閫氱煡
+     * @param code
+     * @return
+     */
+    @Override
+    public R containerConveryor(String code) {
+        List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, code));
+        if (tasks.isEmpty()) {
+            return R.error("瀹瑰櫒鐮佷换鍔′笉瀛樺湪锛侊紒");
+        } else if (tasks.size() > 1){
+            return R.error("瀹瑰櫒鐮佷换鍔¢敊璇紒锛�");
+        }
+        tasks.forEach(task -> {
+            //            try {
+//                ConveyorStarParam conveyorStarParam = new ConveyorStarParam();
+//                conveyorStarParam.setSlotCode(task.getOriginLoc())
+//                        .setContainerCode(task.getBarcode());
+//                if (task.getTaskType() == 101) { //浠诲姟绫诲瀷涓�101鍏ㄧ洏鍑哄簱锛岀洿鎺ュ彇涓嬪鍣紝浼�200
+//                    conveyorStarParam.setDirection("200");
+//                } else if (task.getTaskType() == 103) { //濡傛灉涓轰换鍔$被鍨嬩负103锛岄渶璧板洖搴撴搷浣滐紝浼�100
+//                    conveyorStarParam.setDirection("100");
+//                }
+//                //璋冪敤涓夋柟鎺ュ彛锛屽皢浠诲姟鎺ㄩ�佽嚦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) {
+            //娴佸姩閫氱煡涓嬪彂瀹屾垚鍚庯紝淇敼浠诲姟鐘舵�佷负杈撻�佺嚎娴佸姩涓�傘��
+            //TODO 鍒ゆ柇浠诲姟鏄惁涓�103鎷f枡鍑哄簱锛�103鎷f枡娴佸姩鍚庝慨鏀逛负4锛圧CS瀹瑰櫒娴佸姩浠诲姟宸蹭笅鍙戯級
+            if (task.getTaskType() == 103) {
+                workService.pickTask(task.getId());
+//                taskService.update(new LambdaUpdateWrapper<Task>().eq(Task::getId, task.getId()).set(Task::getTaskSts, TaskStsType.WCS_CONVEYOR_START))
+            } else {
+                taskService.update(new LambdaUpdateWrapper<Task>()
+                        .eq(Task::getId, task.getId())
+                        .set(Task::getTaskSts, TaskStsType.COMPLETE_OUT.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, 0)
+//                        .set(Task::getUpdateTime, new Date())
+//                        .eq(Task::getId, task.getId()));
+//            }
+        });
+        return R.ok();
+    }
+
 }
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 9d03266..6c3b42c 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
@@ -10,4 +10,5 @@
 
     void receiveTaskStatus(TasksStatusCallbackParam callbackParam, String stockType, Long hostId);
 
+    R containerConveryor(String code);
 }
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 afc4f30..30125de 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
@@ -7,10 +7,13 @@
 import com.zy.asrs.framework.common.Cools;
 import com.zy.asrs.framework.common.R;
 import com.zy.asrs.wms.asrs.entity.Order;
+import com.zy.asrs.wms.asrs.entity.WaitPakin;
 import com.zy.asrs.wms.asrs.entity.dto.OrderInfoDto;
 import com.zy.asrs.wms.asrs.entity.param.BatchMergeOrdersParam;
+import com.zy.asrs.wms.asrs.entity.param.PakinOnShelvesParams;
 import com.zy.asrs.wms.asrs.service.MobileService;
 import com.zy.asrs.wms.asrs.service.OrderService;
+import com.zy.asrs.wms.asrs.service.WaitPakinService;
 import com.zy.asrs.wms.system.controller.BaseController;
 import com.zy.asrs.wms.system.entity.Host;
 import com.zy.asrs.wms.system.entity.User;
@@ -23,6 +26,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.*;
+import sun.nio.ch.IOStatus;
 
 import java.util.*;
 
@@ -40,6 +44,8 @@
     private OrderService orderService;
     @Autowired
     private MobileService mobileService;
+    @Autowired
+    private WaitPakinService waitPakinService;
 
     /**
      * 鑾峰彇鐢ㄦ埛鏈烘瀯
@@ -63,16 +69,42 @@
         }
         Order order =  orderService.selectByBarcode(barcode.get("barcode"));
 
-        if (!(order.getOrderType() == 1)) {
-            return R.error("闈炲叆搴撹鍗曪紝 涓嶅彲鎿嶄綔锛侊紒");
-        }
-//        if (order.getOrderSettle() > 2) {
-//            return R.error("鍗曟嵁褰撳墠鐘舵�佷笉鍙仛鍏ュ簱鎿嶄綔锛侊紒");
-//        }
         List<OrderInfoDto> orders = orderService.getDetlForOrderId(order.getId());
 
         return R.ok(orders);
+    }
 
+    /**
+     * PDA鎵爜鍏ュ簱
+     * 1. 缁戝畾搴撲綅鍙蜂笌鎷栫洏鐮�
+     * 2. 搴撲綅缃负鍦ㄥ簱鐘舵��
+     * @return
+     */
+    @PostMapping("matnr/in/barcode")
+    public R pakinToStock(@RequestBody PakinOnShelvesParams shelvesParams) {
+        if (StringUtil.isNullOrEmpty(shelvesParams.getBarcode())) {
+            return R.error("鎷栫洏鐮佷笉鑳戒负绌猴紒锛�");
+        }
+        if (StringUtil.isNullOrEmpty(shelvesParams.getLoc())) {
+            return R.error("搴撲綅涓嶈兘涓虹┖锛侊紒");
+        }
+        //TODO 缁戝畾搴撲綅锛屾坊鍔犲簱浣嶆槑缁�
+
+        return R.ok();
+    }
+
+    /**
+     * 鑾峰彇鎷栫爜鐩樼粦瀹氬晢鍝�
+     * @return
+     */
+    @GetMapping("barcode/matnr/{code}")
+    public R getAllGoods(@PathVariable String code) {
+        if (!StringUtil.isNullOrEmpty(code)) {
+            return R.error("鎵樼洏鐮佷笉鑳戒负绌猴紒锛�");
+        }
+        List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, code).eq(WaitPakin::getIoStatus, 0));
+
+        return R.ok(waitPakins);
     }
 
 
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 804b1f0..cf8751e 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
@@ -64,7 +64,7 @@
         QueryWrapper<Order> wrapper = new QueryWrapper<>();
 
         ArrayList<Long> types = new ArrayList<>();
-        for (OrderType orderType : orderTypeService.list(new LambdaQueryWrapper<OrderType>().eq(OrderType::getType, 1))) {
+        for (OrderType orderType : orderTypeService.list(new LambdaQueryWrapper<OrderType>().in(OrderType::getType, 1))) {
             types.add(orderType.getId());
         }
 
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/OrderTypeController.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/OrderTypeController.java
index 05b7068..20052da 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/OrderTypeController.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/OrderTypeController.java
@@ -18,10 +18,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @RestController
 @RequestMapping("/api")
@@ -100,6 +97,21 @@
         return R.ok().add(vos);
     }
 
+
+//    @PreAuthorize("hasAuthority('asrs:orderType:list')")
+//    @PostMapping("/orderType/all/list")
+//    public R query(@RequestBody HashMap<String, Object> params) {
+//        List<KeyValVo> vos = new ArrayList<>();
+//        List<Integer> types = (List<Integer>) params.get("type");
+//        String condition = (String) params.get("condition");
+//        List<OrderType> orderTypes = orderTypeService.list(new LambdaQueryWrapper<OrderType>().like(!Cools.isEmpty(condition), OrderType::getName, condition).in(!types.isEmpty(), OrderType::getType, types));
+//        orderTypes.forEach(item -> {
+//            vos.add(new KeyValVo(item.getId(), item.getName()));
+//        });
+//
+//        return R.ok().add(vos);
+//    }
+
     @PreAuthorize("hasAuthority('asrs:orderType:list')")
     @PostMapping("/orderType/export")
     public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/enums/OrderType.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/enums/OrderType.java
new file mode 100644
index 0000000..1daba43
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/enums/OrderType.java
@@ -0,0 +1,22 @@
+package com.zy.asrs.wms.asrs.entity.enums;
+
+/**
+ * 璁㈠崟鍏ュ簱绫诲瀷
+ */
+public enum OrderType {
+    //UTC 鍏ュ簱鍗�
+    UTC_IN_ORDER(1L, "鎵嬪姩鍏ュ簱鍗�"),
+    //UTC 鍑哄簱鍗�
+    UTC_OUT_ORDER(2L, "鎵嬪姩鍑哄簱鍗�"),
+    //骞冲簱鍏ュ簱鍗�
+    PK_IN_ORDER(3L, "骞冲簱鍏ュ簱鍗�")
+
+    ;
+    public Long id;
+    public String desc;
+
+    OrderType(Long id, String desc) {
+        this.id = id;
+        this.desc = desc;
+    }
+}
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 70d4136..b0cf25a 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
@@ -38,7 +38,9 @@
 
     WCS_EXECUTE_OUT_CONVEYOR(107L, "RCS瀹瑰櫒娴佸姩浠诲姟宸蹭笅鍙�"),
 
+    GENERATE_WAVE_SEED(197L, "绛夊緟瀹瑰櫒鍒拌揪"),
     WAVE_SEED(198L, "鎾涓�"),
+
     COMPLETE_OUT(199L, "鍑哄簱瀹屾垚"),
     UPDATED_OUT(200L, "搴撳瓨鏇存柊瀹屾垚"),
     ;
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/PakinOnShelvesParams.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/PakinOnShelvesParams.java
new file mode 100644
index 0000000..53af0a6
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/PakinOnShelvesParams.java
@@ -0,0 +1,21 @@
+package com.zy.asrs.wms.asrs.entity.param;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+
+/**
+ * 缁勬嫋涓婃灦璇锋眰鍙傛暟
+ */
+@Data
+@Accessors(chain = true)
+public class PakinOnShelvesParams {
+    /**
+     * 鎷栫洏鐮�
+     */
+    private String barcode;
+    /**
+     * 搴撲綅
+     */
+    private String loc;
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/CacheSiteServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/CacheSiteServiceImpl.java
index d1b99b5..07014d1 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/CacheSiteServiceImpl.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/CacheSiteServiceImpl.java
@@ -13,6 +13,7 @@
 import org.springframework.stereotype.Service;
 
 import java.util.*;
+import java.util.stream.Collectors;
 
 @Service("cacheSiteService")
 public class CacheSiteServiceImpl extends ServiceImpl<CacheSiteMapper, CacheSite> implements CacheSiteService {
@@ -68,6 +69,17 @@
 
         HashMap<Long, Double> stockMap = new HashMap<>();
         List<WaveSeed> waveSeeds = waveSeedService.list(new LambdaQueryWrapper<WaveSeed>().eq(WaveSeed::getOrderId, orderId));
+       //fixme 鏍¢獙褰撳墠璁㈠崟鏄惁瀹屾垚鎾锛岄渶瑕佽幏鍙栧綋鍓嶆尝娆℃墍鏈変换鍔′腑A鐗╂枡鐨勬墽琛屾暟閲忔槸鍚︾瓑浜庤鍗曠殑鎬婚噺-宸插畬鎴愭暟閲�(anfme - qty) 鎴栬�� 浠诲姟涓凡鎵ц鏁伴噺鏄惁绛夎鍗曚腑鐨勬墽琛屾暟閲�  workQty = workQty
+        List<OrderDetl> orderDetls = orderDetlService.getOrderDetlByOrderId(orderId);
+        //鑾峰彇璁㈠崟A鎵�鏈夋槑缁嗙墿鏂�
+//        if (orderDetls.isEmpty()) {
+//            throw new CoolException("璁㈠崟鏄庣粏涓嶅瓨鍦紒锛�");
+//        }
+//        List<Long> matnrs = orderDetls.stream().map(OrderDetl::getMatId).collect(Collectors.toList());
+//        orderDetls.forEach(orderDetl -> {
+//
+//        });
+//        List<WaveSeed> waveSeeds = waveSeedService.list(new LambdaQueryWrapper<WaveSeed>().eq(WaveSeed::getWaveId, order.getWaveId()));
         for (WaveSeed waveSeed : waveSeeds) {
             Double anfme = stockMap.get(waveSeed.getOrderDetlId());
             if (anfme == null) {
@@ -77,7 +89,7 @@
             stockMap.put(waveSeed.getOrderDetlId(), anfme);
         }
 
-        List<OrderDetl> orderDetls = orderDetlService.getOrderDetlByOrderId(orderId);
+//        List<OrderDetl> orderDetls = orderDetlService.getOrderDetlByOrderId(orderId);
         boolean check = true;
         for (OrderDetl orderDetl : orderDetls) {
             Double anfme = Optional.of(orderDetl.getAnfme() - orderDetl.getQty()).orElse(0.0D);
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 8b8387f..d01778e 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
@@ -1,11 +1,16 @@
 package com.zy.asrs.wms.asrs.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zy.asrs.framework.exception.CoolException;
+import com.zy.asrs.wms.asrs.entity.Order;
 import com.zy.asrs.wms.asrs.entity.WaitPakin;
 import com.zy.asrs.wms.asrs.entity.enums.LocTypeHeightType;
+import com.zy.asrs.wms.asrs.entity.enums.OrderType;
 import com.zy.asrs.wms.asrs.entity.enums.TaskStsType;
 import com.zy.asrs.wms.asrs.entity.param.BatchMergeOrdersParam;
 import com.zy.asrs.wms.asrs.entity.param.GeneratePakInParam;
 import com.zy.asrs.wms.asrs.service.MobileService;
+import com.zy.asrs.wms.asrs.service.OrderService;
 import com.zy.asrs.wms.asrs.service.WaitPakinService;
 import com.zy.asrs.wms.asrs.service.WorkService;
 import com.zy.asrs.wms.system.entity.Host;
@@ -16,6 +21,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 @Service
 public class MobileServiceImpl implements MobileService {
@@ -27,9 +33,17 @@
     @Autowired
     private HostService hostService;
 
+    @Autowired
+    private OrderService orderService;
+
+
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public boolean batchMergeOrders(BatchMergeOrdersParam ordersParam) {
+        Order order = orderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderNo, ordersParam.getOrderNo()));
+        if (Objects.isNull(order)) {
+            throw new CoolException("璁㈠崟涓嶅瓨鍦紒锛�");
+        }
 
         ArrayList<WaitPakin> waitPakins = new ArrayList<>();
         ordersParam.getOrderDetls().forEach(orderdetl -> {
@@ -44,20 +58,25 @@
             waitPakins.add(waitPakin);
         });
 
-        /*** 椤圭洰涓嬪彂娴佺▼ * 1. PDA缁勬嫋閫氱煡妗�* 2. 鐢熸垚浠诲姟妗�* 3. 閫氳繃瀹氭椂浠诲姟涓嬪彂鑷矱SS** */
         //缁勬嫋閫氱煡妗�
         waitPakins.forEach(pakin -> {
             waitPakinService.comb(pakin);
         });
 
-        //鐢熸垚浠诲姟妗�
-        GeneratePakInParam generatePakInParam = new GeneratePakInParam();
-        //褰撳墠娌℃湁璧峰绔欑偣锛岄粯璁�101锛� 楂樹綆浣嶉粯璁や紶浣庡簱浣�
-        generatePakInParam.setBarcode(ordersParam.getMergeNo())
-                .setOriginSite("101")
-                .setTaskType(TaskStsType.GENERATE_IN.id).setLocTypeHeight(LocTypeHeightType.LOW.id);
-        if (workService.generatePakIn(generatePakInParam)) {
-            return true;
+        // UTC鍏ュ簱鍗曟嵁(闈炲钩搴撳叆搴撳崟鎹�)
+        if (order.getOrderType() != OrderType.PK_IN_ORDER.id) {
+            /*** 椤圭洰涓嬪彂娴佺▼ * 1. PDA缁勬嫋閫氱煡妗�* 2. 鐢熸垚浠诲姟妗�* 3. 閫氳繃瀹氭椂浠诲姟涓嬪彂鑷矱SS** */
+            //鐢熸垚浠诲姟妗�
+            GeneratePakInParam generatePakInParam = new GeneratePakInParam();
+            //褰撳墠娌℃湁璧峰绔欑偣锛岄粯璁�101锛� 楂樹綆浣嶉粯璁や紶浣庡簱浣�
+            generatePakInParam.setBarcode(ordersParam.getMergeNo())
+                    .setOriginSite("101")
+                    .setTaskType(TaskStsType.GENERATE_IN.id).setLocTypeHeight(LocTypeHeightType.LOW.id);
+            if (workService.generatePakIn(generatePakInParam)) {
+                return true;
+            }
+        } else {
+            //fixme 骞冲簱鏄惁闇�瑕侀绾﹀叆搴�
         }
         return false;
     }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/PlatformServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/PlatformServiceImpl.java
index 179db4a..577f45d 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/PlatformServiceImpl.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/PlatformServiceImpl.java
@@ -11,6 +11,7 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 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;
@@ -41,6 +42,7 @@
     private WaveDetlLogService waveDetlLogService;
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void shipped(PlatformShippedParam param) {
         if (param == null) {
             throw new CoolException("鍙傛暟涓嶈兘涓虹┖");
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WaitPakinServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WaitPakinServiceImpl.java
index 175251f..add151e 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WaitPakinServiceImpl.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WaitPakinServiceImpl.java
@@ -34,7 +34,7 @@
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public boolean comb(WaitPakin waitPakin) {
         //缁勬墭瑙勫垯鏍¢獙
         waitPakinRuleService.rule(waitPakin);
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 18ba37f..0091d2c 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
@@ -255,7 +255,7 @@
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public boolean generatePakIn(GeneratePakInParam param) {
         List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, param.getBarcode()));
         if (param.getTaskType() != 10 && waitPakins.isEmpty()) {
@@ -279,15 +279,20 @@
         }
 
         Task task = new Task();
-        task.setTaskNo(this.generateTaskNo(taskType.getId()));//浠诲姟鍙�
-        task.setTaskSts(TaskStsType.GENERATE_IN.id);//1.鐢熸垚鍏ュ簱浠诲姟
-        task.setTaskType(taskType.getId());//浠诲姟绫诲瀷
-        task.setIoPri(this.generateIoPri(taskType.getId()));//浼樺厛绾�
+        //浠诲姟鍙�
+        task.setTaskNo(this.generateTaskNo(taskType.getId()));
+        //1.鐢熸垚鍏ュ簱浠诲姟
+        task.setTaskSts(TaskStsType.GENERATE_IN.id);
+        //浠诲姟绫诲瀷
+        task.setTaskType(taskType.getId());
+        //浼樺厛绾�
+        task.setIoPri(this.generateIoPri(taskType.getId()));
         task.setOriginLoc(null);
         task.setTargetLoc(loc.getLocNo());
         task.setOriginSite(param.getOriginSite());
         task.setTargetSite(null);
-        task.setBarcode(param.getBarcode());//鎵樼洏鐮�
+        //鎵樼洏鐮�
+        task.setBarcode(param.getBarcode());
         boolean taskSave = taskService.save(task);
         if (!taskSave) {
             throw new CoolException("浠诲姟鐢熸垚澶辫触");
@@ -298,9 +303,12 @@
             TaskDetl taskDetl = new TaskDetl();
             taskDetl.setTaskId(task.getId());
             taskDetl.setTaskNo(task.getTaskNo());
-            taskDetl.setAnfme(waitPakin.getAnfme());//鏁伴噺
-            taskDetl.setStock(0D);//搴撳瓨
-            taskDetl.setBatch(waitPakin.getDetl$().getBatch());//鎵瑰彿
+            //鏁伴噺
+            taskDetl.setAnfme(waitPakin.getAnfme());
+            //搴撳瓨
+            taskDetl.setStock(0D);
+            //鎵瑰彿
+            taskDetl.setBatch(waitPakin.getDetl$().getBatch());
             taskDetl.setBarcode(waitPakin.getBarcode());
             taskDetl.setOrderId(waitPakin.getOrderId());
             taskDetl.setOrderNo(waitPakin.getOrderNo());
@@ -633,7 +641,7 @@
             throw new CoolException("浠诲姟绫诲瀷涓嶅彲鎷f枡");
         }
 
-        if (task.getTaskSts() != 200) {
+        if (task.getTaskSts() != 198) {
             throw new CoolException("褰撳墠鐘舵�佷笉鍙嫞鏂�");
         }
 
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 9f57b6e..0d6e371 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
@@ -108,6 +108,28 @@
         }
     }
 
+
+    /**
+     * 1. 瀹氭椂鎷夊彇闇�瑕佹墽琛屽洖搴撲换鍔″垪琛ㄦ暟鎹紝
+     * 2. 鍒犻櫎鍘熷搴撲綅鏄庣粏锛屽師濮嬪簱浣嶇姸鎬佺疆鎴怬.绌哄簱
+     * 3.
+     */
+    @Scheduled(cron = "0/3 * * * * ? ")
+    @Transactional(rollbackFor = Exception.class)
+    public void rollbackStock() {
+        //鑾峰彇闇�瑕佹墽琛屽洖搴撶殑浠诲姟锛屾洿鏂板簱瀛樹俊鎭�
+        List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskType, 53).eq(Task::getTaskSts, TaskStsType.WCS_CONVEYOR_START.id));
+        if (tasks.isEmpty()) {
+            return;
+        }
+        tasks.forEach(task -> {
+            //鍒犻櫎鍘熷搴撲綅鏄庣粏锛岀姸鎬佺疆涓篛.绌哄簱
+            executeTask103(task);
+        });
+        //todo 闇�娣诲姞涓�涓换鍔$姸鎬佹垨涓存椂鐘舵�侊紝鍚﹀垯浼氫竴鐩磋疆寰紝绋嬪簭鎶ラ敊锛堝簱浣嶇姸鎬佷笉澶勪簬R.鍑哄簱棰勭害锛�
+    }
+
+
     @Scheduled(cron = "0/10 * * * * ? ")
     @Transactional(rollbackFor = Exception.class)
     public void outExecute() {
@@ -312,10 +334,14 @@
 
     }
 
+    /**
+     * 鎷f枡鍐嶅叆搴擄紝鏍规嵁浠诲姟鐩爣搴撲綅锛岀敓鎴愭柊搴撳瓨淇℃伅
+     * @param task
+     */
     //鎷f枡鍐嶅叆搴�
     private void executeTask53(Task task) {
         Long hostId = task.getHostId();
-        //fixme
+        //fixme 灏嗕换鍔″綋鍓�
 //        Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getLocNo, task.getTargetLoc()).eq(Loc::getHostId, hostId));
         Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getLocNo, task.getTargetLoc()));
         if (loc == null) {
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java
index 8d16ce2..ae9d121 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java
@@ -20,10 +20,7 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Optional;
+import java.util.*;
 
 @Component
 public class TaskWaveTimer {
@@ -65,7 +62,8 @@
             }
             //鏌ヨ鐘舵�佷负瀹瑰櫒鍒拌揪鐘舵�佹墍鏈変换鍔″崟鎹�
 //            List<Task> taskList = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskSts, TaskStsType.WAVE_SEED.id));
-            List<Task> taskList = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskSts, TaskStsType.WCS_EXECUTE_OUT_ARRIVED.id));
+            List<Task> taskList = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskSts, TaskStsType.WCS_EXECUTE_OUT_TASK_DONE.id));
+            HashSet<String> sycMatnrs = new HashSet<>();
             if (taskList.isEmpty()) {
 //                throw new CoolException("娌℃湁鍙挱绉嶄换鍔★紒锛�");
             } else {
@@ -80,6 +78,12 @@
                     for (TaskDetl taskDetl : taskDetls) {
                         //鍒嗛厤璁㈠崟
                         Long waveId = taskDetl.getWaveId();
+                        //鍚屼竴涓墿鏂欏彧娣诲姞涓�娆℃挱绉嶄换鍔�
+                        if(sycMatnrs.contains(taskDetl.getMatnr())) {
+                            continue;
+                        }
+                        sycMatnrs.add(taskDetl.getMatnr());
+
                         List<Order> list = orderService.list(new LambdaQueryWrapper<Order>().eq(Order::getWaveId, waveId));
                         if (list.isEmpty()) {
                             continue;
@@ -127,7 +131,7 @@
                             waveSeed.setOrderDetlId(orderDetl.getId());
                             waveSeed.setWaveId(taskDetl.getWaveId()).setWaveNo(taskDetl.getWaveNo());
                             waveSeed.setTaskDetlId(taskDetl.getId());
-                            //fixme 纭鏄惁浣跨敤璁㈠崟鏄庣粏鏁伴噺
+                            //涓烘弧瓒冲綋鍓嶉渶姹傦紝缁忕‘璁わ紝鏀规垚璁㈠崟鏁伴噺
                             waveSeed.setAnfme(orderDetl.getAnfme());
                             waveSeed.setWorkQty(0D);
                             waveSeed.setMatnr(taskDetl.getMatnr());
@@ -137,7 +141,6 @@
                             if (!waveSeedService.save(waveSeed)) {
                                 throw new CoolException("娉㈡鎾鍒涘缓澶辫触");
                             }
-
                             cacheSite.setOrderId(orderDetl.getOrderId());
                             cacheSite.setOrderNo(orderDetl.getOrderNo());
                             cacheSite.setSiteStatus(CacheSiteStatusType.R.id);
@@ -147,10 +150,9 @@
                             }
 
                         }
-
                     }
 
-                    task.setTaskSts(TaskStsType.WAVE_SEED.id);
+                    task.setTaskSts(TaskStsType.GENERATE_WAVE_SEED.id);
                     task.setUpdateTime(new Date());
                     if (!taskService.updateById(task)) {
                         throw new CoolException("浠诲姟鏇存柊澶辫触");
diff --git a/zy-asrs-wms/src/main/resources/application.yml b/zy-asrs-wms/src/main/resources/application.yml
index 08a4c6d..d58957b 100644
--- a/zy-asrs-wms/src/main/resources/application.yml
+++ b/zy-asrs-wms/src/main/resources/application.yml
@@ -13,7 +13,8 @@
       validation-timeout: 3000
       connection-test-query: select 1
     driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://127.0.0.1:3306/wms_dev?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
+#    url: jdbc:mysql://127.0.0.1:3306/wms_dev_test?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
+    url: jdbc:mysql://127.0.0.1:3306/wms_dev_test?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
     username: root
     password: 34821015
 #    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver

--
Gitblit v1.9.1