From b003a49794f49a329e2702918ecfc8d14b371d0d Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期三, 04 三月 2026 14:51:25 +0800
Subject: [PATCH] 云仓WMS接口流程

---
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/FlexibleDateDeserializer.java      |   60 +
 rsf-admin/src/page/orders/stock/OrderList.jsx                                                       |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakinLog.java                    |   14 
 rsf-admin/src/page/orders/delivery/DeliveryList.jsx                                                 |    6 
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/ExMsgCallbackParams.java           |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/BasContainer.java                    |    6 
 rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx                                    |    6 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java                        |    2 
 rsf-admin/src/page/histories/asnOrderLog/AsnOrderLogShow.jsx                                        |  276 ++--
 rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/ReportDataParam.java      |    2 
 rsf-admin/src/page/orders/purchase/PurchaseItemList.jsx                                             |    8 
 rsf-admin/src/page/orders/delivery/DeliveryItemEdit.jsx                                             |    2 
 rsf-admin/src/page/statistics/stockManage/WarehouseHistories.jsx                                    |    6 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/AsnOrderTemplate.java          |    6 
 rsf-admin/src/page/orders/delivery/DeliveryItemList.jsx                                             |   10 
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java         |  341 ++++++
 rsf-admin/src/page/orders/outStock/OutOrderList.jsx                                                 |   20 
 rsf-admin/src/page/orders/qlyInspect/QlyIsptItemResult.jsx                                          |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/SyncOrdersItem.java       |   12 
 rsf-admin/src/i18n/en.js                                                                            |    7 
 rsf-admin/src/page/histories/waitPakinLog/WaitPakinItemLogList.jsx                                  |   93 -
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinController.java         |   68 +
 rsf-admin/src/page/locPreview/LocPreviewItems.jsx                                                   |    6 
 rsf-admin/src/page/orders/stock/OrderItemList.jsx                                                   |    8 
 rsf-admin/src/page/deliveryItem/DeliveryItemList.jsx                                                |    6 
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsErpServiceImpl.java              |   14 
 rsf-admin/src/page/waitPakin/WaitPakinItemList.jsx                                                  |   22 
 rsf-admin/src/page/orders/check/CheckOrderPub.jsx                                                   |    6 
 rsf-admin/src/page/orders/wave/WaveItemList.jsx                                                     |    4 
 version/db/man_asn_order_add_8_3_fields.sql                                                         |   15 
 rsf-admin/src/page/histories/waitPakinLog/WaitPakinLogList.jsx                                      |   12 
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java        |    8 
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/FlexibleTimestampDeserializer.java |   64 +
 rsf-admin/src/page/orders/transfer/TransferItemList.jsx                                             |   10 
 rsf-admin/src/page/orders/check/CheckPreviewTable.jsx                                               |    2 
 rsf-admin/src/page/orders/delivery/DeliveryItemCreate.jsx                                           |    2 
 rsf-admin/src/page/statistics/inStockNum/InStockNumList.jsx                                         |    2 
 rsf-admin/src/page/orders/transfer/TransferOrders.jsx                                               |    6 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OrderWorkTypeServiceImpl.java  |   81 +
 rsf-admin/src/page/orders/check/CheckOrderModal.jsx                                                 |    4 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OrderTypeDictService.java           |   38 
 version/db/sys_order_work_type_dict.sql                                                             |   22 
 rsf-admin/src/page/orders/check/checkDiffItem/CheckDiffItemList.jsx                                 |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/common/utils/QuantityUtils.java                     |   20 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java                 |  291 ++--
 rsf-admin/src/page/orders/check/checkDiff/CheckDiffList.jsx                                         |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java             |  132 +-
 rsf-admin/src/page/orders/check/CheckOrderList.jsx                                                  |    6 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderLog.java                     |    6 
 rsf-admin/src/page/deliveryItem/DeliveryItemPanel.jsx                                               |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/OutStockTemplate.java          |    2 
 rsf-admin/src/page/orders/wave/WavePanel.jsx                                                        |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/PurchaseTemplate.java          |    4 
 rsf-admin/src/page/orders/asnOrder/AsnOrderPanel.jsx                                                |    5 
 rsf-admin/src/page/histories/asnOrderLog/AsnOrderItemLogList.jsx                                    |   46 
 rsf-server/src/main/java/com/vincent/rsf/server/system/constant/DictTypeCode.java                   |    3 
 rsf-admin/src/page/orders/asnOrder/AsnOrderItemCreate.jsx                                           |    2 
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/ErpOpParams.java                   |   30 
 version/db/sys_order_type_dict.sql                                                                  |   20 
 rsf-admin/src/page/orders/asnOrder/AsnOrderItemEdit.jsx                                             |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OrderWorkTypeService.java           |   31 
 rsf-admin/src/page/orders/purchase/PurchaseItemEdit.jsx                                             |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java                |   30 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java       |    2 
 rsf-admin/src/page/statistics/outStockItem/OutStockItemList.jsx                                     |    2 
 rsf-admin/src/page/histories/asnOrderLog/index.jsx                                                  |    4 
 rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaOutStockController.java       |    4 
 rsf-admin/src/page/orders/asnOrder/AsnCreateByPoModal.jsx                                           |    4 
 rsf-admin/src/page/orders/check/CheckOrderItemList.jsx                                              |    6 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OrderTypeDictServiceImpl.java  |   98 +
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/dto/OrderDto.java                         |    4 
 rsf-admin/src/page/statistics/deadTime/LocItemDeadList.jsx                                          |    2 
 rsf-admin/src/page/orders/purchase/PurchaseList.jsx                                                 |    4 
 rsf-admin/src/page/orders/wave/WaveList.jsx                                                         |    4 
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/ReportDataParam.java               |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinLogController.java      |   51 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/ReviseLog.java                       |    6 
 rsf-admin/src/page/warehouseAreasItem/WarehouseIsptResult.jsx                                       |    2 
 rsf-admin/src/page/orders/outStock/OutOrderModal.jsx                                                |    4 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java       |    8 
 rsf-admin/src/page/orders/asnOrder/POItemModal.jsx                                                  |   17 
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java      |   16 
 version/db/wave_menu.sql                                                                            |   37 
 rsf-admin/src/page/stockItem/StockItemList.jsx                                                      |    8 
 rsf-admin/src/page/locItem/LocItemPanel.jsx                                                         |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WkOrderItem.java                     |   17 
 rsf-admin/src/page/histories/waitPakinLog/WaitPakinLogShow.jsx                                      |   39 
 rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/SyncOrderParams.java      |    9 
 rsf-admin/src/page/statistics/outStockNum/OutStockNumList.jsx                                       |    2 
 rsf-admin/src/page/histories/taskLog/TaskItemLogList.jsx                                            |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/InspectDetlDto.java                  |    2 
 rsf-admin/src/page/waitPakin/WaitPakinList.jsx                                                      |    8 
 rsf-admin/src/page/orders/purchase/PurchaseItemCreate.jsx                                           |    2 
 rsf-admin/src/utils/common.js                                                                       |   13 
 rsf-admin/src/page/orders/asnOrder/AsnOrderModal.jsx                                                |   17 
 rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaCheckOrderController.java     |    2 
 rsf-admin/src/page/histories/waitPakinLog/index.jsx                                                 |   13 
 rsf-admin/src/page/statistics/stockManage/WarehouseStockList.jsx                                    |    4 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java                |   13 
 rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/DictDataServiceImpl.java        |   49 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakin.java                       |   14 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java      |  186 +-
 rsf-admin/src/page/histories/waitPakinLog/WaitPakinLogEdit.jsx                                      |   76 -
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/TransferTemplate.java          |    6 
 version/db/out_stock_order_log_menu.sql                                                             |    4 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java           |   32 
 rsf-admin/src/page/locItem/LocItemList.jsx                                                          |    2 
 rsf-admin/src/page/deliveryItem/DeliveryItemCreate.jsx                                              |    2 
 rsf-admin/src/page/histories/asnOrderLog/AsnOrderLogListBase.jsx                                    |    6 
 rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/ExMsgParams.java                  |    2 
 rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx                                             |   16 
 rsf-admin/src/page/locItem/LocItemEdit.jsx                                                          |    2 
 rsf-admin/src/page/statistics/stockStatisticNum/stockStatisticList.jsx                              |    2 
 rsf-admin/src/page/deliveryItem/DeliveryItemEdit.jsx                                                |    2 
 rsf-admin/src/i18n/zh.js                                                                            |   27 
 rsf-admin/src/page/orders/purchase/PurchasePanel.jsx                                                |   11 
 rsf-admin/src/page/orders/outStock/OutOrderItemList.jsx                                             |    8 
 rsf-admin/src/page/statistics/inStockItem/InStockItemList.jsx                                       |    2 
 rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx                                                 |   12 
 rsf-admin/src/page/orders/outStock/OutStockPublic.jsx                                               |    8 
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/AgvServiceImpl.java                |    4 
 rsf-admin/src/page/stockManage/locRevise/ReviseLogItemList.jsx                                      |    4 
 rsf-admin/src/page/waitPakin/WaitPakinEdit.jsx                                                      |    6 
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/config/GlobalExceptionHandler.java               |    3 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/listener/OrderWorkTypeRefreshListener.java  |   36 
 rsf-admin/src/page/task/TaskPanel.jsx                                                               |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/common/event/DictDataChangedEvent.java              |   20 
 rsf-admin/src/page/task/TaskItemList.jsx                                                            |    4 
 rsf-admin/src/page/locItem/LocItemCreate.jsx                                                        |    2 
 rsf-admin/src/page/orders/wave/ItemToTaskModal.jsx                                                  |    6 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/AsnExceStatus.java                    |    5 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WkOrder.java                         |    9 
 rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/TaskInParam.java          |    4 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderLogServiceImpl.java    |    2 
 rsf-admin/src/page/orders/asnOrder/OrderPrintPreview.jsx                                            |   16 
 135 files changed, 2,005 insertions(+), 940 deletions(-)

diff --git a/rsf-admin/src/i18n/en.js b/rsf-admin/src/i18n/en.js
index d04c278..754556a 100644
--- a/rsf-admin/src/i18n/en.js
+++ b/rsf-admin/src/i18n/en.js
@@ -599,7 +599,7 @@
             },
             asnOrder: {
                 code: "Code",
-                poCode: "poCode",
+                poCode: "Internal Code",
                 poId: "poId",
                 type: "Type",
                 wkType: "wkType",
@@ -786,7 +786,7 @@
             },
             asnOrderLog: {
                 code: "code",
-                poCode: "poCode",
+                poCode: "Internal Code",
                 poId: "poId",
                 type: "type",
                 wkType: "wkType",
@@ -802,7 +802,7 @@
                 asnCode: "asnCode",
                 platItemId: "platItemId",
                 poDetlId: "poDetlId",
-                poCode: "poCode",
+                poCode: "Internal Code",
                 fieldsIndex: "fieldsIndex",
                 matnrId: "matnrId",
                 matnrCode: "matnrCode",
@@ -928,6 +928,7 @@
             },
             waitPakin: {
                 code: "code",
+                asnCodes: "Inbound Order No.",
                 ansId: "ansId",
                 asnCode: "asnCode",
                 barcode: "barcode",
diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js
index f11001f..afae1b9 100644
--- a/rsf-admin/src/i18n/zh.js
+++ b/rsf-admin/src/i18n/zh.js
@@ -472,7 +472,7 @@
                 name: "鍚嶇О",
                 flagLogic: "铏氭嫙搴撲綅",
                 fucAtrrs: "鍔熻兘灞炴��",
-                barcode: "瀹瑰櫒鐮�",
+                barcode: "鏂欑鐮�",
                 startChannel: "璧峰宸烽亾",
                 unit: "鍗曚綅",
                 size: "闀�/瀹�/楂�",
@@ -652,7 +652,7 @@
             },
             asnOrder: {
                 code: "WMS鍗曞彿",
-                poCode: "PO缂栫爜",
+                poCode: "鍗曟嵁鍐呯爜",
                 poId: "PO鏍囪瘑",
                 type: "鍗曟嵁绫诲瀷",
                 wkType: "涓氬姟绫诲瀷",
@@ -666,7 +666,7 @@
             },
             outStock: {
                 code: "鍑哄簱鍗曞彿",
-                poCode: "DO鍗曞彿",
+                poCode: "鍗曟嵁鍐呯爜",
                 poId: "DO鏍囪瘑",
                 type: "绫诲瀷",
                 wkType: "涓氬姟绫诲瀷",
@@ -681,7 +681,7 @@
             },
             checkOrder: {
                 code: "鐩樼偣鍗曞彿",
-                poCode: "DO鍗曞彿",
+                poCode: "鍗曟嵁鍐呯爜",
                 poId: "DO鏍囪瘑",
                 type: "鍗曟嵁绫诲瀷",
                 checkType: '鐩樼偣绫诲瀷',
@@ -765,7 +765,7 @@
 
             transferOrder: {
                 code: '鍗曞彿',
-                poCode: '璋冩嫈鍗�',
+                poCode: '鍗曟嵁鍐呯爜',
                 type: '鍗曟嵁绫诲瀷',
                 wkType: '璋冩嫈绫诲瀷',
                 anfme: '璋冩嫈鏁伴噺',
@@ -824,7 +824,7 @@
             outStockItem: {
                 orderId: "涓诲崟鏍囪瘑",
                 orderCode: "鍗曞彿",
-                poCode: 'DO鍗曞彿',
+                poCode: '鍗曟嵁鍐呯爜',
                 poDetlId: "骞冲彴鏄庣粏ID",
                 poDetlCode: "DO鍗�",
                 matnrId: "鐗╂枡鏍囪瘑",
@@ -849,7 +849,7 @@
             },
             asnOrderLog: {
                 code: "缂栫爜",
-                poCode: "PO缂栫爜",
+                poCode: "鍗曟嵁鍐呯爜",
                 poId: "PO鏍囪瘑",
                 type: "鍗曟嵁绫诲瀷",
                 wkType: "涓氬姟绫诲瀷",
@@ -863,6 +863,7 @@
             asnOrderItemLog: {
                 orderId: "涓诲崟鏍囪瘑",
                 orderCode: "涓诲崟缂栫爜",
+                poCode: "鍗曟嵁鍐呯爜",
                 platItemId: "erp鏍囪瘑",
                 poDetlId: "PO鍗曟爣璇�",
                 poDetlCode: "PO鍗曠紪鐮�",
@@ -972,9 +973,10 @@
             },
             waitPakin: {
                 code: "缂栫爜",
+                asnCodes: "鍏ュ簱閫氱煡鍗曞彿",
                 ansId: "鏀惰揣閫氱煡鍗曞彿",
                 asnCode: "鏀惰揣閫氱煡鍗曠紪鐮�",
-                barcode: "瀹瑰櫒鐮�",
+                barcode: "鏂欑鐮�",
                 flagDefect: "涓嶈壇鍝�",
                 anfme: "鏁伴噺",
                 ioStatus: "鐘舵��",
@@ -999,7 +1001,7 @@
                 matnrId: "鐗╂枡id",
                 matnrCode: "鐗╂枡缂栫爜",
                 asnId: "鏀惰揣閫氱煡鍗曞彿",
-                asnCode: "鏀惰揣閫氱煡鍗曠紪鐮�",
+                asnCode: "鍏ュ簱閫氱煡鍗曞彿",
                 asnItemId: "鏀惰揣閫氱煡鍗曟槑缁唅d",
                 trackCode: "鏉″舰鐮�",
                 isptResult: '璐ㄦ鐘舵��',
@@ -1013,7 +1015,7 @@
             waitPakinLog: {
                 pakinId: "缁勬墭Id",
                 code: "缂栫爜",
-                barcode: "瀹瑰櫒鐮�",
+                barcode: "鏂欑鐮�",
                 anfme: "鏁伴噺",
                 ioStatus: "鐘舵��",
             },
@@ -1397,9 +1399,13 @@
             true: '姝e父',
             false: '绂佺敤',
         },
+        notification: {
+            deleted: '鍒犻櫎鎴愬姛 |||| %{smart_count} 椤� 鍒犻櫎鎴愬姛',
+        },
         message: {
             delete_title: '鍒犻櫎 %{name} #%{id}',
             delete_content: '鎮ㄧ‘瀹氳鍒犻櫎姝ら」鍚楋紵',
+            loading: '璇风◢鍊�',
         },
         action: {
             search: '鎼滅储',
@@ -1432,6 +1438,7 @@
         },
         page: {
             empty_with_filters: '浣跨敤褰撳墠杩囨护鏉′欢鏈壘鍒扮粨鏋溿��',
+            loading: '鍔犺浇涓�',
         },
         navigation: {
             no_results: '娌℃湁鎵惧埌鏁版嵁',
diff --git a/rsf-admin/src/page/deliveryItem/DeliveryItemCreate.jsx b/rsf-admin/src/page/deliveryItem/DeliveryItemCreate.jsx
index 59c04d7..2028f00 100644
--- a/rsf-admin/src/page/deliveryItem/DeliveryItemCreate.jsx
+++ b/rsf-admin/src/page/deliveryItem/DeliveryItemCreate.jsx
@@ -91,6 +91,7 @@
                                         autoFocus
                                     />
                                 </Grid>
+                                {/* 鐜板搧绁ㄥ彿宸叉敞閲�
                                 <Grid item xs={6} display="flex" gap={1}>
                                     <TextInput
                                         label="table.field.deliveryItem.platItemId"
@@ -98,6 +99,7 @@
                                         parse={v => v}
                                     />
                                 </Grid>
+                                */}
                                 <Grid item xs={6} display="flex" gap={1}>
                                     <TextInput
                                         label="table.field.deliveryItem.matnrCode"
diff --git a/rsf-admin/src/page/deliveryItem/DeliveryItemEdit.jsx b/rsf-admin/src/page/deliveryItem/DeliveryItemEdit.jsx
index f903642..fa75cc5 100644
--- a/rsf-admin/src/page/deliveryItem/DeliveryItemEdit.jsx
+++ b/rsf-admin/src/page/deliveryItem/DeliveryItemEdit.jsx
@@ -70,6 +70,7 @@
                                 autoFocus
                             />
                         </Stack>
+                        {/* 鐜板搧绁ㄥ彿宸叉敞閲�
                         <Stack direction='row' gap={2}>
                             <TextInput
                                 label="table.field.deliveryItem.platItemId"
@@ -77,6 +78,7 @@
                                 parse={v => v}
                             />
                         </Stack>
+                        */}
                         <Stack direction='row' gap={2}>
                             <TextInput
                                 label="table.field.deliveryItem.matnrCode"
diff --git a/rsf-admin/src/page/deliveryItem/DeliveryItemList.jsx b/rsf-admin/src/page/deliveryItem/DeliveryItemList.jsx
index 25a58a1..adc9556 100644
--- a/rsf-admin/src/page/deliveryItem/DeliveryItemList.jsx
+++ b/rsf-admin/src/page/deliveryItem/DeliveryItemList.jsx
@@ -64,7 +64,7 @@
     <DateInput label='common.time.before' source="timeEnd" alwaysOn />,
 
     <NumberInput source="deliveryId" label="table.field.deliveryItem.deliveryId" />,
-    <TextInput source="platItemId" label="table.field.deliveryItem.platItemId" />,
+    // 鐜板搧绁ㄥ彿宸叉敞閲� <TextInput source="platItemId" label="table.field.deliveryItem.platItemId" />,
     <TextInput source="matnrCode" label="table.field.deliveryItem.matnrCode" />,
     <TextInput source="matnrName" label="table.field.deliveryItem.matnrName" />,
     <TextInput source="fieldsIndex" label="table.field.deliveryItem.fieldsIndex" />,
@@ -130,12 +130,12 @@
                 >
                     <NumberField source="id" />
                     <NumberField source="deliveryId" label="table.field.deliveryItem.deliveryId" />
-                    <TextField source="platItemId" label="table.field.deliveryItem.platItemId" />
+                    {/* 鐜板搧绁ㄥ彿宸叉敞閲� <TextField source="platItemId" label="table.field.deliveryItem.platItemId" /> */}
                     <TextField source="matnrCode" label="table.field.deliveryItem.matnrCode" />
                     <TextField source="matnrName" label="table.field.deliveryItem.matnrName" />
                     <TextField source="fieldsIndex" label="table.field.deliveryItem.fieldsIndex" />
                     <TextField source="unit" label="table.field.deliveryItem.unit" />
-                    <NumberField source="anfme" label="table.field.deliveryItem.anfme" />
+                    <NumberField source="anfme" label="table.field.deliveryItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                     <NumberField source="qty" label="table.field.deliveryItem.qty" />
                     <NumberField source="nromQty" label="table.field.deliveryItem.nromQty" />
                     <NumberField source="printQty" label="table.field.deliveryItem.printQty" />
diff --git a/rsf-admin/src/page/deliveryItem/DeliveryItemPanel.jsx b/rsf-admin/src/page/deliveryItem/DeliveryItemPanel.jsx
index d22337f..692a75b 100644
--- a/rsf-admin/src/page/deliveryItem/DeliveryItemPanel.jsx
+++ b/rsf-admin/src/page/deliveryItem/DeliveryItemPanel.jsx
@@ -46,12 +46,14 @@
                                 property={record.deliveryId}
                             />
                         </Grid>
+                        {/* 鐜板搧绁ㄥ彿宸叉敞閲�
                         <Grid item xs={6}>
                             <PanelTypography
                                 title="table.field.deliveryItem.platItemId" 
                                 property={record.platItemId}
                             />
                         </Grid>
+                        */}
                         <Grid item xs={6}>
                             <PanelTypography
                                 title="table.field.deliveryItem.matnrCode" 
diff --git a/rsf-admin/src/page/histories/asnOrderLog/AsnOrderItemLogList.jsx b/rsf-admin/src/page/histories/asnOrderLog/AsnOrderItemLogList.jsx
index b03b432..56936e3 100644
--- a/rsf-admin/src/page/histories/asnOrderLog/AsnOrderItemLogList.jsx
+++ b/rsf-admin/src/page/histories/asnOrderLog/AsnOrderItemLogList.jsx
@@ -43,6 +43,9 @@
 import * as Common from '@/utils/common';
 
 const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
+    width: '100%',
+    '& .RaDatagrid-tableWrapper': { width: '100%' },
+    '& .MuiTable-root': { width: '100%' },
     '& .css-1vooibu-MuiSvgIcon-root': {
         height: '.9em'
     },
@@ -67,7 +70,7 @@
 
     <NumberInput source="orderId" label="table.field.asnOrderItemLog.orderId" />,
     <TextInput source="orderCode" label="table.field.asnOrderItemLog.orderCode" />,
-    <TextInput source="platItemId" label="table.field.asnOrderItemLog.platItemId" />,
+    // 鐜板搧绁ㄥ彿宸叉敞閲� <TextInput source="platItemId" label="table.field.asnOrderItemLog.platItemId" />,
     <NumberInput source="poDetlId" label="table.field.asnOrderItemLog.poDetlId" />,
     <TextInput source="poCode" label="table.field.asnOrderItemLog.poCode" />,
     <TextInput source="fieldsIndex" label="table.field.asnOrderItemLog.fieldsIndex" />,
@@ -122,13 +125,15 @@
                 resource="asnOrderItemLog"
                 sx={{
                     flexGrow: 1,
+                    width: '100%',
+                    minWidth: 0,
                     transition: (theme) =>
                         theme.transitions.create(['all'], {
                             duration: theme.transitions.duration.enteringScreen,
                         }),
                     marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
                 }}
-                title={"menu.asnOrderItemLog"}
+                title={"menu.asnOrderItem"}
                 empty={false}
                 filters={filters}
                 filter={{ logId }}
@@ -146,30 +151,25 @@
                     preferenceKey='asnOrderItemLog'
                     bulkActionButtons={false}
                     rowClick={(id, resource, record) => false}
-                    omit={['id', 'orderId', 'poDetlId', 'poCode', 'qrcode', 'packName', 'createTime', 'memo', 'fieldsIndex', 'matnrId', 'splrCode', 'status', 'createBy$']}
+                    omit={['id', 'asnId', 'orderId', 'poDetlId', 'poCode', 'qrcode', 'packName', 'createTime', 'memo', 'fieldsIndex', 'matnrId', 'splrCode', 'status', 'createBy$', 'platItemId', 'trackCode']}
                 >
                     <NumberField source="id" />
-                    <NumberField source="asnId" label="table.field.asnOrderItemLog.orderId" />
-                    <TextField source="asnCode" label="table.field.asnOrderItemLog.orderCode" />
-                    <TextField source="platItemId" label="table.field.asnOrderItemLog.platItemId" />
-                    <NumberField source="poDetlId" label="table.field.asnOrderItemLog.poDetlId" />
-                    <TextField source="poCode" label="table.field.asnOrderItemLog.poCode" />
-                    <TextField source="fieldsIndex" label="table.field.asnOrderItemLog.fieldsIndex" />
-                    <TextField source="matnrId" label="table.field.asnOrderItemLog.matnrId" />
-                    <TextField source="matnrCode" label="table.field.asnOrderItemLog.matnrCode" />
-                    <TextField source="maktx" label="table.field.asnOrderItemLog.maktx" />
-                    <NumberField source="anfme" label="table.field.asnOrderItemLog.anfme" />
-                    <NumberField source="purQty" label="table.field.asnOrderItemLog.purQty" />
-                    <TextField source="purUnit" label="table.field.asnOrderItemLog.purUnit" />
-                    <NumberField source="qty" label="table.field.asnOrderItemLog.qty" />
-                    <TextField source="splrCode" label="table.field.asnOrderItemLog.splrCode" />
-                    <TextField source="splrBatch" label="table.field.asnOrderItemLog.splrBatch" />
-                    <TextField source="splrName" label="table.field.asnOrderItemLog.splrName" />
-                    <TextField source="qrcode" label="table.field.asnOrderItemLog.qrcode" />
-                    <TextField source="trackCode" label="table.field.asnOrderItemLog.trackCode" />
-                    <TextField source="packName" label="table.field.asnOrderItemLog.packName" />
-                    {/*<TextField source="ntyStatus$" label="table.field.asnOrderItemLog.ntyStatus" sortable={false} />*/}
+                    <NumberField source="asnId" label="table.field.asnOrderItem.orderId" />
+                    <TextField source="asnCode" label="table.field.asnOrderItem.orderCode" />
+                    <NumberField source="poDetlId" label="table.field.asnOrderItem.poDetlId" />
+                    <TextField source="poCode" label="table.field.asnOrderItem.poCode" />
+                    <TextField source="matnrCode" label="table.field.asnOrderItem.matnrCode" />
+                    <TextField source="maktx" label="table.field.asnOrderItem.maktx" />
+                    <TextField source="splrBatch" label="table.field.asnOrderItem.splrBatch" />
+                    <NumberField source="anfme" label="table.field.asnOrderItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+                    <NumberField source="qty" label="table.field.asnOrderItem.qty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+                    <TextField source="stockUnit" label="table.field.asnOrderItem.stockUnit" />
+                    <NumberField source="purQty" label="table.field.asnOrderItem.purQty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+                    <TextField source="purUnit" label="table.field.asnOrderItem.purUnit" />
+                    <TextField source="splrCode" label="table.field.asnOrderItem.splrCode" />
+                    <TextField source="splrName" label="table.field.asnOrderItem.splrName" />
                     <TextField source="updateBy$" label="common.field.updateBy" />
+                    <DateField source="updateTime" label="common.field.updateTime" showTime />
                     <TextField source="createBy$" label="common.field.createBy" />
                     <DateField source="createTime" label="common.field.createTime" showTime />
                     <TextField source="memo" label="common.field.memo" sortable={false} />
diff --git a/rsf-admin/src/page/histories/asnOrderLog/AsnOrderLogListBase.jsx b/rsf-admin/src/page/histories/asnOrderLog/AsnOrderLogListBase.jsx
index b12b131..ebbe8fa 100644
--- a/rsf-admin/src/page/histories/asnOrderLog/AsnOrderLogListBase.jsx
+++ b/rsf-admin/src/page/histories/asnOrderLog/AsnOrderLogListBase.jsx
@@ -33,10 +33,8 @@
 }));
 
 /**
- * 鍏ュ簱/鍑哄簱鍘嗗彶鍗曞垪琛ㄥ叡鐢ㄩ鏋讹紝浠� type 涓庢爣棰樼敱澶栭儴浼犲叆銆�
  * 鍏ュ簱鍘嗗彶鍗曪細typeFilter="in", listTitle="menu.asnOrderLog"
  * 鍑哄簱鍘嗗彶鍗曪細typeFilter="out", listTitle="menu.outStockOrderLog"
- * 鍚庣鎺ュ彛鍧囦负 asnOrderLog锛堝嚭搴撶敱 dataProvider 鏄犲皠锛夛紝鍙傛暟 filter.type 涓嶅悓銆�
  */
 export default function AsnOrderLogListBase({ typeFilter, listTitle }) {
     const [createDialog, setCreateDialog] = useState(false);
@@ -100,8 +98,8 @@
                     <NumberField source="poId" label="table.field.asnOrderLog.poId" />
                     <TextField source="type$" label="table.field.asnOrderLog.type" />
                     <TextField source="wkType$" label="table.field.asnOrderLog.wkType" />
-                    <NumberField source="anfme" label="table.field.asnOrderLog.anfme" />
-                    <NumberField source="qty" label="table.field.asnOrderLog.qty" />
+                    <NumberField source="anfme" label="table.field.asnOrderLog.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+                    <NumberField source="qty" label="table.field.asnOrderLog.qty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                     <TextField source="logisNo" label="table.field.asnOrderLog.logisNo" />
                     <DateField source="arrTime" label="table.field.asnOrderLog.arrTime" showTime />
                     <TextField source="rleStatus$" label="table.field.asnOrderLog.rleStatus" sortable={false} />
diff --git a/rsf-admin/src/page/histories/asnOrderLog/AsnOrderLogShow.jsx b/rsf-admin/src/page/histories/asnOrderLog/AsnOrderLogShow.jsx
index 2acd903..9651db8 100644
--- a/rsf-admin/src/page/histories/asnOrderLog/AsnOrderLogShow.jsx
+++ b/rsf-admin/src/page/histories/asnOrderLog/AsnOrderLogShow.jsx
@@ -1,158 +1,150 @@
-import { BooleanField, DateField, NumberField, ReferenceField, Show, SimpleShowLayout, TextField ,DateInput,
-    SelectInput,required,useTranslate,
-    useRecordContext,} from 'react-admin';
-import { Stack, Grid, Box, Typography, Card } from '@mui/material';
-import { EDIT_MODE, REFERENCE_INPUT_PAGESIZE } from '@/config/setting';
-import EditBaseAside from "../../components/EditBaseAside";
+import React from "react";
+import { Show, useTranslate, useRecordContext, DateField } from 'react-admin';
+import { Stack, Grid, Box, Typography, TextField as MuiTextField, Card, CardContent } from '@mui/material';
+import AccessTimeIcon from '@mui/icons-material/AccessTime';
 import CustomerTopToolBar from "../../components/EditTopToolBar";
 import AsnOrderItemLogList from "./AsnOrderItemLogList";
 
-const AsnOrderLogDetailWithItems = () => {
-    const record = useRecordContext();
+/** 鍙杈撳叆妗嗘牱寮忥紝涓� Edit 椤� Filled 鐧藉簳涓�鑷达紝鐢ㄤ簬 Show 澶撮儴 */
+const readOnlyInputSx = {
+    "& .MuiFormLabel-root.MuiInputLabel-root.Mui-disabled": {
+        bgcolor: 'white',
+        WebkitTextFillColor: "rgba(0, 0, 0)"
+    },
+    "& .MuiInputBase-input.MuiFilledInput-input.Mui-disabled": {
+        bgcolor: 'white',
+        WebkitTextFillColor: "rgba(0, 0, 0)"
+    },
+    "& .MuiFilledInput-root.MuiInputBase-sizeSmall": {
+        bgcolor: 'white',
+    }
+};
+
+const ShowField = ({ source, labelKey, value }) => {
     const translate = useTranslate();
-    if (!record?.id) return null;
     return (
-        <>
-            <Grid item xs={24} md={16} sx={{ marginTop: '1em', width: '100%' }}>
-                <Typography variant="h6" gutterBottom>
-                    {translate('common.edit.title.common')}
-                </Typography>
-            </Grid>
-            <AsnOrderItemLogList logId={record.id} />
-        </>
+        <MuiTextField
+            size="small"
+            variant="filled"
+            label={translate(labelKey)}
+            value={value ?? ''}
+            disabled
+            sx={{ width: 130, minWidth: 110, flexShrink: 0, ...readOnlyInputSx }}
+            InputProps={{ readOnly: true }}
+        />
     );
 };
 
-const Aa = () =>{
+/**
+ * 鍏ュ簱/鍑哄簱鍘嗗彶鍗曟煡鐪嬭鎯咃細鍗曞垪骞抽摵锛堜富瑕� 鈫� 鏇村 鈫� 鐗╂枡璇︽儏锛夛紝鏃犲彸渚� aside锛屽崰婊℃暣椤靛搴︺��
+ * Show 椤垫棤 Form 涓婁笅鏂囷紝鐢� MUI TextField 鍙鏍峰紡澶嶅埢 Edit 澶撮儴瑙嗚鏁堟灉銆�
+ */
+const AsnOrderLogShow = () => {
     const translate = useTranslate();
-
-    return(
-        <>
+    return (
         <Show
-            redirect="list"
-            mutationMode={EDIT_MODE}
             actions={<CustomerTopToolBar />}
-            aside={<EditBaseAside />}
-            >
-            <SimpleShowLayout
-            shouldUnregister
-            warnWhenUnsavedChanges
-            mode="onTouched"
-            defaultValues={{}}
-            >
-    
-                <Grid sx={{
-                    "& .MuiInputBase-input": {
-                        bgcolor: "white" 
-                    }
-                }} container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}>
-                    
-                    <Grid item xs={24} md={12}>
-                    <Typography variant="h6" gutterBottom>
-                        {translate('common.edit.title.main')}
-                    </Typography>                        
-                        <Stack display="flax" justifyContent="space-between" flexWrap="wrap" direction='row' gap={2} >
-                            <Grid item  display="flex" gap={1} minWidth={150}>                            
-                                <Box flexGrow={1}>
-                                    <Typography variant="body2" >
-                                        {translate('table.field.asnOrderLog.code')}
-                                    </Typography>
-                                    <TextField source="code" label="id"/>
-                                </Box>
-                            </Grid>
-                            <Grid item  display="flex" gap={1} minWidth={150}>                            
-                                <Box flexGrow={1}>
-                                    <Typography variant="body2" sx={{fontSize: 20}}>
-                                        {translate('table.field.asnOrderLog.poCode')}
-                                    </Typography>
-                                    <TextField source="poCode" label="poCode"/>
-                                </Box>
-                            </Grid>
-                            <Grid item  display="flex" gap={1} minWidth={150}>                            
-                                <Box flexGrow={1}>
-                                    <Typography variant="body2" sx={{fontSize: 20}}>
-                                        {translate('table.field.asnOrderLog.poId')}
-                                    </Typography>
-                                    <NumberField source="poId" label="poId"/>
-                                </Box>
-                            </Grid>
-                            <Grid item  display="flex" gap={1} minWidth={150}>                            
-                                <Box flexGrow={1}>
-                                    <Typography variant="body2" sx={{fontSize: 20}}>
-                                        {translate('table.field.asnOrderLog.type')}
-                                    </Typography>
-                                    <TextField source="type$" label="type"/>
-                                </Box>
-                            </Grid>
-                            <Grid item  display="flex" gap={1} minWidth={150}>                            
-                                <Box flexGrow={1}>
-                                    <Typography variant="body2" sx={{fontSize: 20}}>
-                                        {translate('table.field.asnOrderLog.wkType')}
-                                    </Typography>
-                                    <TextField source="wkType$" label="type"/>
-                                </Box>
-                            </Grid>                            
-                        
-                        </Stack>
-                        <Stack display="flax" justifyContent="space-between"  flexWrap="wrap" direction='row' gap={2} sx={{mt:5 }}>
-                        <Grid item  display="flex" gap={1} minWidth={150}>                            
-                                <Box flexGrow={1}>
-                                    <Typography variant="body2" sx={{fontSize: 20}}>
-                                        {translate('table.field.asnOrderLog.anfme')}
-                                    </Typography>
-                                    <TextField source="anfme" label="id"/>
-                                </Box>
-                            </Grid>
-                            <Grid item  display="flex" gap={1} minWidth={150}>                            
-                                <Box flexGrow={1}>
-                                    <Typography variant="body2" sx={{fontSize: 20}}>
-                                        {translate('table.field.asnOrderLog.qty')}
-                                    </Typography>
-                                    <TextField source="qty" label="poCode"/>
-                                </Box>
-                            </Grid>
-                            <Grid item  display="flex" gap={1} minWidth={150}>                            
-                                <Box flexGrow={1}>
-                                    <Typography variant="body2" sx={{fontSize: 20}}>
-                                        {translate('table.field.asnOrderLog.logisNo')}
-                                    </Typography>
-                                    <NumberField source="logisNo" label="poId"/>
-                                </Box>
-                            </Grid>
-                            <Grid item  display="flex" gap={1} minWidth={150}>                            
-                                <Box flexGrow={1}>
-                                    <Typography variant="body2" sx={{fontSize: 20}}>
-                                        {translate('table.field.asnOrderLog.arrTime')}
-                                    </Typography>
-                                    <DateField source="arrTime" label="type" showTime/>
-                                </Box>
-                            </Grid>
-                            {/* 璐ㄦ涓婃姤鐘舵��
-                            <Grid item  display="flex" gap={1} minWidth={150}>
-                                <Box flexGrow={1}>
-                                    <Typography variant="body2" sx={{fontSize: 20}}>
-                                        {translate('table.field.asnOrderLog.ntyStatus')}
-                                    </Typography>
-                                    <TextField source="ntyStatus$" label="type"/>
-                                </Box>
-                            </Grid>
-                            */} 
-                        </Stack>
+            title="鍏ュ簱鍘嗗彶鍗曡鎯�"
+            sx={{
+                width: '100% !important',
+                maxWidth: 'none !important',
+                '& > div': { maxWidth: 'none !important', width: '100% !important' },
+                '& .RaShow-main': { maxWidth: 'none !important', width: '100% !important', minWidth: 0 },
+                '& .RaShow-card': { maxWidth: 'none !important', width: '100% !important' },
+                '& .MuiPaper-root': { maxWidth: 'none !important', width: '100% !important' },
+                '& [class*="RaShow"]': { maxWidth: 'none !important', width: '100% !important' },
+            }}
+        >
+            <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2, pt: 1, width: '100%', minWidth: 0 }}>
+                <Grid container spacing={2}>
+                    <Grid item xs={12} md>
+                        <Card variant="outlined" sx={{ height: '100%' }}>
+                            <CardContent sx={{ py: 1, '&:last-child': { pb: 1.5 } }}>
+                                <MainSection />
+                            </CardContent>
+                        </Card>
+                    </Grid>
+                    <Grid item xs={12} md="auto">
+                        <Card variant="outlined" sx={{ height: '100%' }}>
+                            <CardContent>
+                                <MoreSection />
+                            </CardContent>
+                        </Card>
                     </Grid>
                 </Grid>
-                <AsnOrderLogDetailWithItems />
-            </SimpleShowLayout>
+                <Card variant="outlined" sx={{ flex: '1 1 auto', minHeight: 0, display: 'flex', flexDirection: 'column' }}>
+                    <CardContent sx={{ flex: 1, display: 'flex', flexDirection: 'column', minHeight: 0, '&:last-child': { pb: 2 } }}>
+                        <Box sx={{ width: '100%', minWidth: 0, overflowX: 'auto', flex: 1 }}>
+                            <AsnOrderItemLogList />
+                        </Box>
+                    </CardContent>
+                </Card>
+            </Box>
         </Show>
-        </>
-       ); 
-}
+    );
+};
 
-const AsnorderlogShow = () => (
-   
-    <Aa />
-        
-    
-   
-);
+/** 鏇村锛氬垱寤烘椂闂淬�佷慨鏀规椂闂达紝涓� EditBaseAside 鍐呭涓�鑷达紝鏀惧湪涓诲唴瀹瑰尯鍗曞垪灞曠ず */
+const MoreSection = () => {
+    const translate = useTranslate();
+    const record = useRecordContext();
+    if (!record) return null;
+    return (
+        <Box>
+            <Typography variant="h6" gutterBottom>
+                {translate('common.edit.side.title')}
+            </Typography>
+            <Grid container rowSpacing={2} columnSpacing={1}>
+                <Grid item xs={12} display="flex" gap={1}>
+                    <AccessTimeIcon fontSize="small" color="disabled" />
+                    <Box flexGrow={1}>
+                        <Typography variant="body2">{translate('common.field.createTime')}</Typography>
+                        <DateField record={record} source="createTime" showTime />
+                    </Box>
+                </Grid>
+                <Grid item xs={12} display="flex" gap={1}>
+                    <AccessTimeIcon fontSize="small" color="disabled" />
+                    <Box flexGrow={1}>
+                        <Typography variant="body2">{translate('common.field.updateTime')}</Typography>
+                        <DateField record={record} source="updateTime" showTime />
+                    </Box>
+                </Grid>
+            </Grid>
+        </Box>
+    );
+};
 
-export default AsnorderlogShow
\ No newline at end of file
+const MainSection = () => {
+    const translate = useTranslate();
+    const record = useRecordContext();
+    if (!record) return null;
+    const rleStatusText = record.rleStatus === 1 ? '宸查噴鏀�' : (record.rleStatus === 0 ? '姝e父' : (record.rleStatus$ ?? ''));
+    const arrTime = record.arrTime ? (typeof record.arrTime === 'string' ? record.arrTime : new Date(record.arrTime).toLocaleString('zh-CN')) : '';
+    const numOpt = { minimumFractionDigits: 2, maximumFractionDigits: 2 };
+    return (
+        <Box sx={{ pt: 0.3, width: '100%' }}>
+            <Grid container sx={{ width: '100%', maxWidth: '100%' }} rowSpacing={1} columnSpacing={1}>
+                <Grid item xs={12}>
+                    <Typography variant="h6" gutterBottom sx={{ mb: 1 }}>
+                        {translate('common.edit.title.main')}
+                    </Typography>
+                    <Stack direction="row" gap={1} flexWrap="wrap" useFlexGap>
+                        <ShowField source="code" labelKey="table.field.asnOrder.code" value={record.code} />
+                        <ShowField source="poCode" labelKey="table.field.asnOrder.poCode" value={record.poCode} />
+                        <ShowField source="type" labelKey="table.field.asnOrder.type" value={record.type$ ?? record.type} />
+                        <ShowField source="wkType" labelKey="table.field.asnOrder.wkType" value={record.wkType$ ?? record.wkType} />
+                    {/*</Stack>*/}
+                    {/*<Stack direction="row" gap={1} flexWrap="wrap" useFlexGap sx={{ mt: 1 }}>*/}
+                        <ShowField source="logisNo" labelKey="table.field.asnOrder.logisNo" value={record.logisNo} />
+                        <ShowField source="anfme" labelKey="table.field.asnOrder.anfme" value={record.anfme != null ? Number(record.anfme).toLocaleString('zh-CN', numOpt) : ''} />
+                        <ShowField source="qty" labelKey="table.field.asnOrder.qty" value={record.qty != null ? Number(record.qty).toLocaleString('zh-CN', numOpt) : ''} />
+                        <ShowField source="arrTime" labelKey="table.field.asnOrder.arrTime" value={arrTime} />
+                        <ShowField source="rleStatus" labelKey="table.field.asnOrder.rleStatus" value={rleStatusText} />
+                    </Stack>
+                </Grid>
+            </Grid>
+        </Box>
+    );
+};
+
+export default AsnOrderLogShow;
diff --git a/rsf-admin/src/page/histories/asnOrderLog/index.jsx b/rsf-admin/src/page/histories/asnOrderLog/index.jsx
index 96b046c..2e9859d 100644
--- a/rsf-admin/src/page/histories/asnOrderLog/index.jsx
+++ b/rsf-admin/src/page/histories/asnOrderLog/index.jsx
@@ -7,12 +7,12 @@
 
 import AsnOrderLogList from "./AsnOrderLogList";
 import AsnOrderLogEdit from "./AsnOrderLogEdit";
-import  AsnorderlogShow  from "./AsnOrderLogShow";
+import AsnOrderLogShow from "./AsnOrderLogShow";
 
 export default {
     list: AsnOrderLogList,
     edit: AsnOrderLogEdit,
-    show: AsnorderlogShow,
+    show: AsnOrderLogShow,
     recordRepresentation: (record) => {
         return `${record.id}`
     }
diff --git a/rsf-admin/src/page/histories/taskLog/TaskItemLogList.jsx b/rsf-admin/src/page/histories/taskLog/TaskItemLogList.jsx
index 5908286..0c71332 100644
--- a/rsf-admin/src/page/histories/taskLog/TaskItemLogList.jsx
+++ b/rsf-admin/src/page/histories/taskLog/TaskItemLogList.jsx
@@ -156,7 +156,7 @@
                 <TextField source="maktx" label="table.field.taskItemLog.maktx" />,
                 <TextField source="matnrCode" label="table.field.taskItemLog.matnrCode" />,
                 <TextField source="unit" label="table.field.taskItemLog.unit" />,
-                <NumberField source="anfme" label="table.field.taskItemLog.anfme" />,
+                <NumberField source="anfme" label="table.field.taskItemLog.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
                 <TextField source="batch" label="table.field.taskItemLog.batch" />,
                 <TextField source="spec" label="table.field.taskItemLog.spec" />,
                 <TextField source="model" label="table.field.taskItemLog.model" />,
diff --git a/rsf-admin/src/page/histories/waitPakinLog/WaitPakinItemLogList.jsx b/rsf-admin/src/page/histories/waitPakinLog/WaitPakinItemLogList.jsx
index 68179fb..2bcdd6d 100644
--- a/rsf-admin/src/page/histories/waitPakinLog/WaitPakinItemLogList.jsx
+++ b/rsf-admin/src/page/histories/waitPakinLog/WaitPakinItemLogList.jsx
@@ -1,46 +1,24 @@
-import React, { useState, useRef, useEffect, useMemo, useCallback } from "react";
-import { useNavigate } from 'react-router-dom';
+import React, { useState } from "react";
 import {
     List,
     DatagridConfigurable,
     SearchInput,
     TopToolbar,
     SelectColumnsButton,
-    EditButton,
     FilterButton,
-    CreateButton,
-    ExportButton,
-    BulkDeleteButton,
-    WrapperField,
-    useRecordContext,
     useTranslate,
-    useNotify,
-    useListContext,
-    FunctionField,
     TextField,
     NumberField,
     DateField,
-    BooleanField,
-    ReferenceField,
     TextInput,
-    DateTimeInput,
-    DateInput,
     SelectInput,
     NumberInput,
-    ReferenceInput,
-    ReferenceArrayInput,
-    AutocompleteInput,
-    DeleteButton,
     useGetRecordId,
 } from 'react-admin';
-import { Box, Typography, Card, Stack } from '@mui/material';
-import { styled } from '@mui/material/styles'; import EmptyData from "../../components/EmptyData";
-import MyCreateButton from "../../components/MyCreateButton";
-import MyExportButton from '../../components/MyExportButton';
+import { Box } from '@mui/material';
+import { styled } from '@mui/material/styles';
 import PageDrawer from "../../components/PageDrawer";
-import MyField from "../../components/MyField";
-import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
-import * as Common from '@/utils/common';
+import { PAGE_DRAWER_WIDTH, DEFAULT_ITEM_PAGE_SIZE } from '@/config/setting';
 
 const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
     '& .css-1vooibu-MuiSvgIcon-root': {
@@ -49,8 +27,6 @@
     '& .RaDatagrid-row': {
         cursor: 'auto'
     },
-    '& .column-name': {
-    },
     '& .opt': {
         width: 200
     },
@@ -58,23 +34,14 @@
 
 const filters = [
     <SearchInput source="condition" alwaysOn />,
-    <ReferenceInput source="pakinId" label="table.field.waitPakinItemLog.pakinId" reference="waitPakin">
-        <AutocompleteInput label="table.field.waitPakinItemLog.pakinId" optionText="id" filterToQuery={(val) => ({ id: val })} />
-    </ReferenceInput>,
-    <NumberInput source="pakinItemId" label="table.field.waitPakinItemLog.pakinItemId" />,
-    <NumberInput source="asnId" label="table.field.waitPakinItemLog.asnId" />,
-    <TextInput source="asnCode" label="table.field.waitPakinItemLog.asnCode" />,
-    <NumberInput source="asnItemId" label="table.field.waitPakinItemLog.asnItemId" />,
-    <TextInput source="trackCode" label="table.field.waitPakinItemLog.trackCode" />,
+    <NumberInput source="pakinId" label="table.field.waitPakinItemLog.pakinId" />,
     <TextInput source="maktx" label="table.field.waitPakinItemLog.maktx" />,
-    <ReferenceInput source="matnrId" label="table.field.waitPakinItemLog.matnrId" reference="matnr">
-        <AutocompleteInput label="table.field.waitPakinItemLog.matnrId" optionText="unit" filterToQuery={(val) => ({ unit: val })} />
-    </ReferenceInput>,
+    <NumberInput source="matnrId" label="table.field.waitPakinItemLog.matnrId" />,
     <TextInput source="matnrCode" label="table.field.waitPakinItemLog.matnrCode" />,
+    <TextInput source="asnCode" label="table.field.waitPakinItem.asnCode" />,
     <NumberInput source="anfme" label="table.field.waitPakinItemLog.anfme" />,
     <NumberInput source="workQty" label="table.field.waitPakinItemLog.workQty" />,
     <TextInput source="unit" label="table.field.waitPakinItemLog.unit" />,
-    <TextInput source="fieldsIndex" label="table.field.waitPakinItemLog.fieldsIndex" />,
     <NumberInput source="qty" label="table.field.waitPakinItemLog.qty" />,
     <TextInput source="batch" label="table.field.waitPakinItemLog.batch" />,
     <TextInput label="common.field.memo" source="memo" />,
@@ -87,11 +54,9 @@
         ]}
         resettable
     />,
-]
+];
 
 const WaitPakinItemLogList = () => {
-    const translate = useTranslate();
-    const [createDialog, setCreateDialog] = useState(false);
     const [drawerVal, setDrawerVal] = useState(false);
     const recordId = useGetRecordId();
 
@@ -107,7 +72,7 @@
                         }),
                     marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
                 }}
-                title={"menu.waitPakinItemLog"}
+                title={"menu.waitPakinItem"}
                 empty={false}
                 filters={filters}
                 filter={{ logId: recordId }}
@@ -116,42 +81,32 @@
                     <TopToolbar>
                         <FilterButton />
                         <SelectColumnsButton preferenceKey='waitPakinItemLog' />
-                        <MyExportButton />
+                        {/* <MyExportButton /> 涓庣粍鎵橀�氱煡妗d繚鎸佷竴鑷达紝涓嶅睍绀哄鍑� */}
                     </TopToolbar>
                 )}
-                perPage={DEFAULT_PAGE_SIZE}
+                perPage={DEFAULT_ITEM_PAGE_SIZE}
             >
                 <StyledDatagrid
                     preferenceKey='waitPakinItemLog'
                     bulkActionButtons={false}
-                    rowClick={ false}
-                    omit={['id', 'createTime', 'createBy', 'memo', 'pakinId', 'pakinItemId', 'asnId' ,'asnItemId', 'createBy$', 'fieldsIndex']}
+                    rowClick={false}
+                    omit={['id', 'logId', 'pakinId', 'pakinItemId', 'asnId', 'asnItemId', 'createTime', 'matnrId', 'createBy', 'memo', 'fieldsIndex']}
                 >
                     <NumberField source="id" />
-                    <ReferenceField source="pakinId" label="table.field.waitPakinItemLog.pakinId" reference="waitPakin" link={false} sortable={false}>
-                        <TextField source="id" />
-                    </ReferenceField>
-                    <NumberField source="pakinItemId" label="table.field.waitPakinItemLog.pakinItemId" />
-                    <NumberField source="asnId" label="table.field.waitPakinItemLog.asnId" />
-                    <TextField source="asnCode" label="table.field.waitPakinItemLog.asnCode" />
-                    <NumberField source="asnItemId" label="table.field.waitPakinItemLog.asnItemId" />
-                    <TextField source="trackCode" label="table.field.waitPakinItemLog.trackCode" />
-                    <TextField source="maktx" label="table.field.waitPakinItemLog.maktx" />
-                    <ReferenceField source="matnrId" label="table.field.waitPakinItemLog.matnrId" reference="matnr" link={false} sortable={false}>
-                        <TextField source="unit" />
-                    </ReferenceField>
-                    <TextField source="matnrCode" label="table.field.waitPakinItemLog.matnrCode" />
-                    <NumberField source="anfme" label="table.field.waitPakinItemLog.anfme" />
-                    <NumberField source="workQty" label="table.field.waitPakinItemLog.workQty" />
-                    <TextField source="unit" label="table.field.waitPakinItemLog.unit" />
-                    <TextField source="fieldsIndex" label="table.field.waitPakinItemLog.fieldsIndex" />
-                    <NumberField source="qty" label="table.field.waitPakinItemLog.qty" />
-                    <TextField source="batch" label="table.field.waitPakinItemLog.batch" />
+                    <TextField source="matnrCode" label="table.field.waitPakinItem.matnrCode" />
+                    <TextField source="maktx" label="table.field.waitPakinItem.maktx" />
+                    <TextField source="batch" label="table.field.waitPakinItem.batch" />
+                    <NumberField source="matnrId" label="table.field.waitPakinItem.matnrId" />
+                    <NumberField source="anfme" label="table.field.waitPakinItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+                    <TextField source="unit" label="table.field.waitPakinItem.unit" />
+                    <TextField source="asnCode" label="table.field.waitPakinItem.asnCode" />
+                    <NumberField source="workQty" label="table.field.waitPakinItem.workQty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+                    <NumberField source="qty" label="table.field.waitPakinItem.qty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+                    <TextField source="fieldsIndex" label="table.field.waitPakinItem.fieldsIndex" />
                     <TextField source="updateBy$" label="common.field.updateBy" />
                     <DateField source="updateTime" label="common.field.updateTime" showTime />
-                    <TextField source="createBy$" label="common.field.createBy"  />
+                    <TextField source="createBy$" label="common.field.createBy" />
                     <DateField source="createTime" label="common.field.createTime" showTime />
-                    <BooleanField source="statusBool" label="common.field.status" sortable={false} />
                     <TextField source="memo" label="common.field.memo" sortable={false} />
                 </StyledDatagrid>
             </List>
diff --git a/rsf-admin/src/page/histories/waitPakinLog/WaitPakinLogEdit.jsx b/rsf-admin/src/page/histories/waitPakinLog/WaitPakinLogEdit.jsx
index 33c6fcd..6967f53 100644
--- a/rsf-admin/src/page/histories/waitPakinLog/WaitPakinLogEdit.jsx
+++ b/rsf-admin/src/page/histories/waitPakinLog/WaitPakinLogEdit.jsx
@@ -2,45 +2,17 @@
 import {
     Edit,
     SimpleForm,
-    FormDataConsumer,
     useTranslate,
     TextInput,
     NumberInput,
-    BooleanInput,
-    DateInput,
     SelectInput,
-    ReferenceInput,
-    ReferenceArrayInput,
-    AutocompleteInput,
-    SaveButton,
-    Toolbar,
-    Labeled,
-    NumberField,
-    required,
-    useRecordContext,
-    DeleteButton,
 } from 'react-admin';
-import { useWatch, useFormContext } from "react-hook-form";
+import { useFormContext } from "react-hook-form";
 import { Stack, Grid, Box, Typography } from '@mui/material';
-import * as Common from '@/utils/common';
-import { EDIT_MODE, REFERENCE_INPUT_PAGESIZE } from '@/config/setting';
+import { EDIT_MODE } from '@/config/setting';
 import EditBaseAside from "../../components/EditBaseAside";
 import CustomerTopToolBar from "../../components/EditTopToolBar";
-import MemoInput from "../../components/MemoInput";
-import StatusSelectInput from "../../components/StatusSelectInput";
 import WaitPakinItemLogList from "./WaitPakinItemLogList";
-
-const FormToolbar = () => {
-    const { getValues } = useFormContext();
-
-    return (
-        <Toolbar sx={{ justifyContent: 'end' }}>
-            <></>
-            {/* <SaveButton />
-            <DeleteButton mutationMode="optimistic" /> */}
-        </Toolbar>
-    )
-}
 
 const WaitPakinLogEdit = () => {
     const translate = useTranslate();
@@ -54,44 +26,45 @@
                 aside={<EditBaseAside />}
             >
                 <SimpleForm
+                    sx={{
+                        '& .MuiInputBase-input.MuiFilledInput-input.Mui-disabled': {
+                            bgcolor: "white",
+                            color: "black",
+                            '-webkit-text-fill-color': "rgba(0, 0, 0)"
+                        },
+                        '& .MuiFormLabel-root.MuiInputLabel-root.Mui-disabled': {
+                            color: 'rgba(0, 0, 0, 0.77)'
+                        }
+                    }}
                     shouldUnregister
                     warnWhenUnsavedChanges
-                    toolbar={<FormToolbar />}
+                    toolbar={<></>}
                     mode="onTouched"
                     defaultValues={{}}
                 >
-                    <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}>
-                        <Grid item xs={24} md={12} sx={{
-                            "& .MuiFormLabel-root.MuiInputLabel-root.Mui-disabled": {
-                                bgcolor: 'white',
-                                WebkitTextFillColor: "rgba(0, 0, 0)"
-                            },
-
-                            "& .MuiInputBase-input.MuiFilledInput-input.Mui-disabled": {
-                                bgcolor: 'white',
-                                WebkitTextFillColor: "rgba(0, 0, 0)"
-                            }
-                        }}>
+                    <Grid container width={{ xs: '100%', xl: '100%' }}>
+                        <Grid item xs={24} md={12}>
                             <Typography variant="h6" gutterBottom>
                                 {translate('common.edit.title.main')}
                             </Typography>
                             <Stack direction='row' gap={2}>
-                                <NumberInput
-                                    label="table.field.waitPakinLog.pakinId"
-                                    source="pakinId"
-                                    readOnly
-                                    autoFocus
-                                />
                                 <TextInput
                                     label="table.field.waitPakinLog.code"
                                     source="code"
                                     readOnly
                                     parse={v => v}
+                                    autoFocus
+                                />
+                                <TextInput
+                                    label="table.field.waitPakin.asnCodes"
+                                    source="asnCodes"
+                                    readOnly
+                                    parse={v => v}
                                 />
                                 <TextInput
                                     label="table.field.waitPakinLog.barcode"
-                                    source="barcode"
                                     readOnly
+                                    source="barcode"
                                     parse={v => v}
                                 />
                                 <NumberInput
@@ -101,13 +74,12 @@
                                 />
                                 <SelectInput
                                     label="table.field.waitPakinLog.ioStatus"
-                                    source="ioStatus"
                                     readOnly
+                                    source="ioStatus"
                                     choices={[
                                         { id: 0, name: '寰呭叆搴�' },
                                         { id: 1, name: ' 鍏ュ簱涓�' },
                                     ]}
-                                    validate={required()}
                                 />
                             </Stack>
                         </Grid>
diff --git a/rsf-admin/src/page/histories/waitPakinLog/WaitPakinLogList.jsx b/rsf-admin/src/page/histories/waitPakinLog/WaitPakinLogList.jsx
index e2e6e12..f1b6c5a 100644
--- a/rsf-admin/src/page/histories/waitPakinLog/WaitPakinLogList.jsx
+++ b/rsf-admin/src/page/histories/waitPakinLog/WaitPakinLogList.jsx
@@ -7,6 +7,7 @@
     TopToolbar,
     SelectColumnsButton,
     EditButton,
+    ShowButton,
     FilterButton,
     CreateButton,
     ExportButton,
@@ -53,6 +54,10 @@
         width: 200
     },
 }));
+
+const ViewDetailButton = () => (
+    <ShowButton label="鏌ョ湅璇︽儏" />
+);
 
 const filters = [
     <SearchInput source="condition" alwaysOn />,
@@ -112,7 +117,7 @@
                 <StyledDatagrid
                     preferenceKey='waitPakinLog'
                     bulkActionButtons={false}
-                    rowClick={'edit'}
+                    rowClick={false}
                     expand={false}
                     expandSingle={true}
                     omit={['id', 'createTime', 'createBy', 'memo','statusBool']}
@@ -121,7 +126,7 @@
                     <NumberField source="pakinId" label="table.field.waitPakinLog.pakinId" />
                     <TextField source="code" label="table.field.waitPakinLog.code" />
                     <TextField source="barcode" label="table.field.waitPakinLog.barcode" />
-                    <NumberField source="anfme" label="table.field.waitPakinLog.anfme" />
+                    <NumberField source="anfme" label="table.field.waitPakinLog.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                     <TextField source="ioStatus$" label="table.field.waitPakinLog.ioStatus" sortable={false} />
                     <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}>
                         <TextField source="nickname" />
@@ -133,6 +138,9 @@
                     <DateField source="createTime" label="common.field.createTime" showTime />
                     <BooleanField source="statusBool" label="common.field.status" sortable={false} />
                     <TextField source="memo" label="common.field.memo" sortable={false} />
+                    <WrapperField cellClassName="opt" label="common.field.opt">
+                        <ViewDetailButton />
+                    </WrapperField>
                 </StyledDatagrid>
             </List>
             <PageDrawer
diff --git a/rsf-admin/src/page/histories/waitPakinLog/WaitPakinLogShow.jsx b/rsf-admin/src/page/histories/waitPakinLog/WaitPakinLogShow.jsx
new file mode 100644
index 0000000..b16e98c
--- /dev/null
+++ b/rsf-admin/src/page/histories/waitPakinLog/WaitPakinLogShow.jsx
@@ -0,0 +1,39 @@
+import React from "react";
+import {
+    Show,
+    TextField,
+    NumberField,
+} from 'react-admin';
+import { Box, Typography, Stack, Grid } from '@mui/material';
+import { useTranslate } from 'react-admin';
+import WaitPakinItemLogList from "./WaitPakinItemLogList";
+
+/**
+ * 缁勬墭鍘嗗彶妗f煡鐪嬭鎯咃細涓庣粍鎵橀�氱煡妗f煡鐪嬭鎯呬繚鎸佷竴鑷达紙涓讳俊鎭竷灞� + 鏄庣粏鍒�/omit 涓�鑷达級锛屼粎灞曠ず鏃犵紪杈戙��
+ */
+const WaitPakinLogShow = () => {
+    const translate = useTranslate();
+    return (
+        <Show actions={false} title="缁勬墭鍘嗗彶妗h鎯�">
+            <Box sx={{ pt: 1 }}>
+                <Grid container width={{ xs: '100%', xl: '100%' }}>
+                    <Grid item xs={24} md={12}>
+                        <Typography variant="h6" gutterBottom>
+                            {translate('common.edit.title.main')}
+                        </Typography>
+                        <Stack direction="row" gap={2} flexWrap="wrap" useFlexGap>
+                            <TextField source="code" label="table.field.waitPakinLog.code" />
+                            <TextField source="asnCodes" label="table.field.waitPakin.asnCodes" />
+                            <TextField source="barcode" label="table.field.waitPakinLog.barcode" />
+                            <NumberField source="anfme" label="table.field.waitPakinLog.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+                            <TextField source="ioStatus$" label="table.field.waitPakinLog.ioStatus" />
+                        </Stack>
+                    </Grid>
+                </Grid>
+            </Box>
+            <WaitPakinItemLogList />
+        </Show>
+    );
+};
+
+export default WaitPakinLogShow;
diff --git a/rsf-admin/src/page/histories/waitPakinLog/index.jsx b/rsf-admin/src/page/histories/waitPakinLog/index.jsx
index 6e89a94..117abde 100644
--- a/rsf-admin/src/page/histories/waitPakinLog/index.jsx
+++ b/rsf-admin/src/page/histories/waitPakinLog/index.jsx
@@ -1,18 +1,13 @@
-import React, { useState, useRef, useEffect, useMemo } from "react";
-import {
-    ListGuesser,
-    EditGuesser,
-    ShowGuesser,
-} from "react-admin";
-
+import React from "react";
 import WaitPakinLogList from "./WaitPakinLogList";
 import WaitPakinLogEdit from "./WaitPakinLogEdit";
+import WaitPakinLogShow from "./WaitPakinLogShow";
 
 export default {
     list: WaitPakinLogList,
     edit: WaitPakinLogEdit,
-    show: ShowGuesser,
+    show: WaitPakinLogShow,
     recordRepresentation: (record) => {
-        return `${record.id}`
+        return record?.code != null ? record.code : `${record?.id ?? ''}`;
     }
 };
diff --git a/rsf-admin/src/page/locItem/LocItemCreate.jsx b/rsf-admin/src/page/locItem/LocItemCreate.jsx
index 8a78582..e8307d5 100644
--- a/rsf-admin/src/page/locItem/LocItemCreate.jsx
+++ b/rsf-admin/src/page/locItem/LocItemCreate.jsx
@@ -137,6 +137,7 @@
                                         parse={v => v}
                                     />
                                 </Grid>
+                                {/* 鐜板搧绁ㄥ彿宸叉敞閲�
                                 <Grid item xs={6} display="flex" gap={1}>
                                     <TextInput
                                         label="table.field.locItem.platItemId"
@@ -144,6 +145,7 @@
                                         parse={v => v}
                                     />
                                 </Grid>
+                                */}
                                 <Grid item xs={6} display="flex" gap={1}>
                                     <TextInput
                                         label="table.field.locItem.platOrderCode"
diff --git a/rsf-admin/src/page/locItem/LocItemEdit.jsx b/rsf-admin/src/page/locItem/LocItemEdit.jsx
index 5c85ef7..4a2fb96 100644
--- a/rsf-admin/src/page/locItem/LocItemEdit.jsx
+++ b/rsf-admin/src/page/locItem/LocItemEdit.jsx
@@ -116,6 +116,7 @@
                                 parse={v => v}
                             />
                         </Stack>
+                        {/* 鐜板搧绁ㄥ彿宸叉敞閲�
                         <Stack direction='row' gap={2}>
                             <TextInput
                                 label="table.field.locItem.platItemId"
@@ -123,6 +124,7 @@
                                 parse={v => v}
                             />
                         </Stack>
+                        */}
                         <Stack direction='row' gap={2}>
                             <TextInput
                                 label="table.field.locItem.platOrderCode"
diff --git a/rsf-admin/src/page/locItem/LocItemList.jsx b/rsf-admin/src/page/locItem/LocItemList.jsx
index f293130..7420af0 100644
--- a/rsf-admin/src/page/locItem/LocItemList.jsx
+++ b/rsf-admin/src/page/locItem/LocItemList.jsx
@@ -163,7 +163,7 @@
                 <TextField source="maktx" label="table.field.locItem.maktx" />,
                 <TextField source="matnrCode" label="table.field.locItem.matnrCode" />,
                 <TextField source="unit" label="table.field.locItem.unit" />,
-                <NumberField source="anfme" label="table.field.locItem.anfme" options={{ maximumFractionDigits: 6 }} />,
+                <NumberField source="anfme" label="table.field.locItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
                 <TextField source="batch" label="table.field.locItem.batch" />,
                 <NumberField source="splrId" label="table.field.locItem.splrId" />,
                 <TextField source="spec" label="table.field.locItem.spec" />,
diff --git a/rsf-admin/src/page/locItem/LocItemPanel.jsx b/rsf-admin/src/page/locItem/LocItemPanel.jsx
index db99b1f..c0693b8 100644
--- a/rsf-admin/src/page/locItem/LocItemPanel.jsx
+++ b/rsf-admin/src/page/locItem/LocItemPanel.jsx
@@ -88,12 +88,14 @@
                                 property={record.maktx}
                             />
                         </Grid>
+                        {/* 鐜板搧绁ㄥ彿宸叉敞閲�
                         <Grid item xs={6}>
                             <PanelTypography
                                 title="table.field.locItem.platItemId" 
                                 property={record.platItemId}
                             />
                         </Grid>
+                        */}
                         <Grid item xs={6}>
                             <PanelTypography
                                 title="table.field.locItem.platOrderCode" 
diff --git a/rsf-admin/src/page/locPreview/LocPreviewItems.jsx b/rsf-admin/src/page/locPreview/LocPreviewItems.jsx
index 0776a7b..d9be199 100644
--- a/rsf-admin/src/page/locPreview/LocPreviewItems.jsx
+++ b/rsf-admin/src/page/locPreview/LocPreviewItems.jsx
@@ -172,9 +172,9 @@
                 <TextField source="batch" label="table.field.locItem.batch" />,
                 <TextField source="trackCode" label="table.field.locItem.trackCode" />,
                 <TextField source="unit" label="table.field.locItem.unit" />,
-                <NumberField source="anfme" label="table.field.locItem.anfme" />,
-                <NumberField source="workQty" label="table.field.locItem.workQty" />,
-                <NumberField source="qty" label="table.field.locItem.qty" />,
+                <NumberField source="anfme" label="table.field.locItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
+                <NumberField source="workQty" label="table.field.locItem.workQty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
+                <NumberField source="qty" label="table.field.locItem.qty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
                 <TextField source="splrBatch" label="table.field.locItem.splrBatch" />,
                 <TextField source="fieldsIndex" label="table.field.locItem.fieldsIndex" />,
             ]
diff --git a/rsf-admin/src/page/orders/asnOrder/AsnCreateByPoModal.jsx b/rsf-admin/src/page/orders/asnOrder/AsnCreateByPoModal.jsx
index cc1c6f1..c054987 100644
--- a/rsf-admin/src/page/orders/asnOrder/AsnCreateByPoModal.jsx
+++ b/rsf-admin/src/page/orders/asnOrder/AsnCreateByPoModal.jsx
@@ -175,8 +175,8 @@
                                     <TextField source="type$" label="table.field.purchase.type" />
                                     <TextField source="wkType$" label="table.field.purchase.wkType" />
                                     <TextField source="source" label="table.field.purchase.source" />
-                                    <NumberField source="anfme" label="table.field.purchase.anfme" options={{ maximumFractionDigits: 6 }} />
-                                    <NumberField source="qty" label="table.field.purchase.qty" options={{ maximumFractionDigits: 6 }} />
+                                    <NumberField source="anfme" label="table.field.purchase.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+                                    <NumberField source="qty" label="table.field.purchase.qty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                                     <TextField source="channel" label="table.field.purchase.channel" />
                                     <TextField source="platCode" label="table.field.purchase.platCode" />
                                     <DateField source="preArr" label="table.field.purchase.preArr" showTime />
diff --git a/rsf-admin/src/page/orders/asnOrder/AsnOrderItemCreate.jsx b/rsf-admin/src/page/orders/asnOrder/AsnOrderItemCreate.jsx
index 6d97834..cb7539c 100644
--- a/rsf-admin/src/page/orders/asnOrder/AsnOrderItemCreate.jsx
+++ b/rsf-admin/src/page/orders/asnOrder/AsnOrderItemCreate.jsx
@@ -172,11 +172,13 @@
                                         source="barcode"
                                         parse={v => v}
                                     />
+                                    {/* 鍖呰宸叉敞閲�
                                     <TextInput
                                         label="table.field.asnOrderItem.packName"
                                         source="packName"
                                         parse={v => v}
                                     />
+                                    */}
                                 </Grid>
 
                                 <Grid item xs={6} display="flex" gap={1}>
diff --git a/rsf-admin/src/page/orders/asnOrder/AsnOrderItemEdit.jsx b/rsf-admin/src/page/orders/asnOrder/AsnOrderItemEdit.jsx
index 029c433..10122d9 100644
--- a/rsf-admin/src/page/orders/asnOrder/AsnOrderItemEdit.jsx
+++ b/rsf-admin/src/page/orders/asnOrder/AsnOrderItemEdit.jsx
@@ -177,11 +177,13 @@
                                         parse={v => v}
                                         readOnly
                                     />
+                                    {/* 鍖呰宸叉敞閲�
                                     <TextInput
                                         label="table.field.asnOrderItem.packName"
                                         source="packName"
                                         parse={v => v}
                                     />
+                                    */}
                                 </Stack>
                             </Grid>
                         </Grid>
diff --git a/rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx b/rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx
index 73cc1ac..9f0031e 100644
--- a/rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx
+++ b/rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx
@@ -83,7 +83,7 @@
   <TextInput source="splrName" label="table.field.asnOrderItem.splrName" />,
   <TextInput source="qrcode" label="table.field.asnOrderItem.qrcode" />,
   <TextInput source="trackCode" label="table.field.asnOrderItem.barcode" />,
-  <TextInput source="packName" label="table.field.asnOrderItem.packName" />,
+  // <TextInput source="packName" label="table.field.asnOrderItem.packName" />, // 鍖呰宸叉敞閲�
   <TextInput label="common.field.memo" source="memo" />,
   <SelectInput
     label="common.field.status"
@@ -180,7 +180,7 @@
         <TextField source="orderCode" label="table.field.asnOrderItem.orderCode" />,
         <TextField source="poDetlId" label="table.field.asnOrderItem.poDetlId" />,
         <TextField source="poDetlCode" label="table.field.asnOrderItem.poDetlCode" />,
-        <TextField source="platItemId" label="table.field.asnOrderItem.platItemId" />,
+        // <TextField source="platItemId" label="table.field.asnOrderItem.platItemId" />, // 鐜板搧绁ㄥ彿宸叉敞閲�
         <TextField source="matnrId" label="table.field.asnOrderItem.matnrId" />,
         <TextField source="matnrCode" label="table.field.asnOrderItem.matnrCode" />,
         <TextField source="maktx" label="table.field.asnOrderItem.maktx" />,
@@ -190,17 +190,17 @@
         <TextField source="projectCode" label="table.field.asnOrderItem.projectCode" />,
         <TextField source="spec" label="table.field.asnOrderItem.spec" />,
         <TextField source="model" label="table.field.asnOrderItem.model" />,
-        <NumberField source="anfme" label="table.field.asnOrderItem.anfme" options={{ maximumFractionDigits: 6 }} />,
-        <NumberField source="qty" label="table.field.asnOrderItem.qty" options={{ maximumFractionDigits: 6 }} />,
+        <NumberField source="anfme" label="table.field.asnOrderItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
+        <NumberField source="qty" label="table.field.asnOrderItem.qty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
         <TextField source="stockUnit" label="table.field.asnOrderItem.stockUnit" />,
-        <NumberField source="purQty" label="table.field.asnOrderItem.purQty" options={{ maximumFractionDigits: 6 }} />,
+        <NumberField source="purQty" label="table.field.asnOrderItem.purQty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
         <TextField source="purUnit" label="table.field.asnOrderItem.purUnit" />,
         <TextField source="splrCode" label="table.field.asnOrderItem.splrCode" />,
         <TextField source="splrName" label="table.field.asnOrderItem.splrName" />,
-        <TextField source="isptResult$" label="table.field.asnOrderItem.isptResult" />,
+        // <TextField source="isptResult$" label="table.field.asnOrderItem.isptResult" />, // 璐ㄦ宸叉敞閲�
         <TextField source="qrcode" label="table.field.asnOrderItem.qrcode" />,
         <TextField source="trackCode" label="table.field.asnOrderItem.barcode" />,
-        <TextField source="packName" label="table.field.asnOrderItem.packName" />,
+        // <TextField source="packName" label="table.field.asnOrderItem.packName" />, // 鍖呰宸叉敞閲�
       ]
       const fields = data.map(el => <TextField key={el.fields} source={`extendFields.[${el.fields}]`} label={el.fieldsAlise} />)
       const lastArr = [
@@ -238,7 +238,7 @@
           preferenceKey='asnOrderItem'
           bulkActionButtons={false}
           rowClick={(id, resource, record) => false}
-          omit={['id', 'orderId', 'orderCode', 'poDetlId', 'poDetlCode', 'matnrId', 'spec', 'model', 'purQty', 'purUnit', 'qrcode', 'trackCode', 'splrCode', 'platWorkCode', 'projectCode']}
+          omit={['id', 'orderId', 'orderCode', 'poDetlId', 'poDetlCode', 'matnrId', 'spec', 'model', 'purQty', 'purUnit', 'qrcode', 'trackCode', 'splrCode', 'platWorkCode', 'projectCode', 'platItemId', 'isptResult$', 'packName']}
         >
           {columns.map((column) => column)}
         </StyledDatagrid>}
diff --git a/rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx b/rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx
index bbd50f4..428440d 100644
--- a/rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx
+++ b/rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx
@@ -138,8 +138,8 @@
         actions={(
           <TopToolbar>
             <FilterButton />
-            <MyCreateButton onClick={() => { setCreateDialog(true); setmodalType(0) }} />
-            <CreateByPoButton setPoCreate={setPoCreate} />
+            {/* <MyCreateButton onClick={() => { setCreateDialog(true); setmodalType(0) }} /> 娣诲姞鎸夐挳鏆備笉浣跨敤 */}
+            {/* <CreateByPoButton setPoCreate={setPoCreate} /> 閫氳繃PO鍗曞垱寤烘殏涓嶄娇鐢� */}
             <SelectColumnsButton preferenceKey='asnOrder' />
             <ImportButton value={'asnOrderItem'} />
             <MyExportButton />
@@ -152,7 +152,7 @@
           preferenceKey='asnOrder'
           bulkActionButtons={
             <>
-              <InspectionsButton />
+              {/* <InspectionsButton /> 鎶ユ鎸夐挳鏆備笉浣跨敤 */}
               <MyExportButton />
               {/* <BtnBulkExport></BtnBulkExport> */}
             </>}
@@ -166,8 +166,8 @@
           <NumberField source="poId" label="table.field.asnOrder.poId" />
           <TextField source="type$" label="table.field.asnOrder.type" />
           <TextField cellClassName="wkType" source="wkType$" label="table.field.asnOrder.wkType" />
-          <NumberField source="anfme" label="table.field.asnOrder.anfme" options={{ maximumFractionDigits: 6 }} />
-          <NumberField source="qty" label="table.field.asnOrder.qty" options={{ maximumFractionDigits: 6 }} />
+          <NumberField source="anfme" label="table.field.asnOrder.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+          <NumberField source="qty" label="table.field.asnOrder.qty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
           <DateField source="arrTime" label="table.field.asnOrder.arrTime" showTime />
           <TextField source="rleStatus$" label="table.field.asnOrder.rleStatus" sortable={false} />
           <TextField source="logisNo" label="table.field.asnOrder.logisNo" />
@@ -180,7 +180,7 @@
           <WrapperField cellClassName="opt" label="common.field.opt" >
             <EditButton label="toolbar.detail"></EditButton>
             <MyButton setCreateDialog={setCreateDialog} setmodalType={setmodalType} />
-            <InspectionButton />
+            {/* <InspectionButton /> 鎶ユ鎸夐挳鏆備笉浣跨敤 */}
             <CompleteButton />
             <ODeleteButton />
             <PrintButton setPrintOrder={setPrintOrder} setSelect={setSelect} />
diff --git a/rsf-admin/src/page/orders/asnOrder/AsnOrderModal.jsx b/rsf-admin/src/page/orders/asnOrder/AsnOrderModal.jsx
index c665217..5e3f53f 100644
--- a/rsf-admin/src/page/orders/asnOrder/AsnOrderModal.jsx
+++ b/rsf-admin/src/page/orders/asnOrder/AsnOrderModal.jsx
@@ -544,14 +544,15 @@
             ),
             headerClassName: "custom",
         },
-        {
-            field: 'platItemId',
-            headerName: translate('table.field.asnOrderItem.platItemId') + "*",
-            minWidth: 100,
-            flex: 1,
-            editable: true,
-            headerClassName: "custom",
-        },
+        // 鐜板搧绁ㄥ彿宸叉敞閲�
+        // {
+        //     field: 'platItemId',
+        //     headerName: translate('table.field.asnOrderItem.platItemId') + "*",
+        //     minWidth: 100,
+        //     flex: 1,
+        //     editable: true,
+        //     headerClassName: "custom",
+        // },
         {
             field: 'splrBatch',
             headerName: translate('table.field.asnOrderItem.splrBatch'),
diff --git a/rsf-admin/src/page/orders/asnOrder/AsnOrderPanel.jsx b/rsf-admin/src/page/orders/asnOrder/AsnOrderPanel.jsx
index bd8a4c0..d5ba0aa 100644
--- a/rsf-admin/src/page/orders/asnOrder/AsnOrderPanel.jsx
+++ b/rsf-admin/src/page/orders/asnOrder/AsnOrderPanel.jsx
@@ -116,10 +116,7 @@
             field: 'prodTime',
             headerName: translate('table.field.asnOrderItem.prodTime')
         },
-        {
-            field: 'packName',
-            headerName: translate('table.field.asnOrderItem.packName')
-        },
+        // { field: 'packName', headerName: translate('table.field.asnOrderItem.packName') }, // 鍖呰宸叉敞閲�
         {
             field: 'action',
             headerName: '鎿嶄綔',
diff --git a/rsf-admin/src/page/orders/asnOrder/OrderPrintPreview.jsx b/rsf-admin/src/page/orders/asnOrder/OrderPrintPreview.jsx
index e09c0f4..bf8217d 100644
--- a/rsf-admin/src/page/orders/asnOrder/OrderPrintPreview.jsx
+++ b/rsf-admin/src/page/orders/asnOrder/OrderPrintPreview.jsx
@@ -143,11 +143,11 @@
             <Grid container spacing={2} sx={{ justifyContent: 'space-between', }}>
                 <Grid item md={2}>
                     <Box sx={{ display: 'flex', justifyContent: 'start' }}>
-                        <Typography>ASN鍗曪細</Typography>
+                        <Typography>鍗曞彿锛�</Typography>
                         <Typography>{record?.code}</Typography>
                     </Box>
                     <Box sx={{ display: 'flex', justifyContent: 'start' }}>
-                        <Typography>PO鍗曪細</Typography>
+                        <Typography>鍗曟嵁鍐呯爜锛�</Typography>
                         <Typography>{record?.poCode}</Typography>
                     </Box>
                     <Box sx={{ display: 'flex', justifyContent: 'start' }}>
@@ -203,18 +203,18 @@
                 <TextField source="orderCode" label="table.field.asnOrderItem.orderCode" />,
                 <TextField source="poDetlId" label="table.field.asnOrderItem.poDetlId" />,
                 <TextField source="poDetlCode" label="table.field.asnOrderItem.poDetlCode" />,
-                <TextField source="platItemId" label="table.field.asnOrderItem.platItemId" />,
+                // <TextField source="platItemId" label="table.field.asnOrderItem.platItemId" />, // 鐜板搧绁ㄥ彿宸叉敞閲�
                 <TextField source="matnrId" label="table.field.asnOrderItem.matnrId" />,
                 <TextField source="matnrCode" label="table.field.asnOrderItem.matnrCode" />,
                 <TextField source="maktx" label="table.field.asnOrderItem.maktx" />,
                 <TextField source="splrBatch" label="table.field.asnOrderItem.splrBatch" />,
-                <NumberField source="anfme" label="table.field.asnOrderItem.anfme" options={{ maximumFractionDigits: 6 }} />,
-                <NumberField source="qty" label="table.field.asnOrderItem.qty" options={{ maximumFractionDigits: 6 }} />,
-                <NumberField source="purQty" label="table.field.asnOrderItem.purQty" options={{ maximumFractionDigits: 6 }} />,
+                <NumberField source="anfme" label="table.field.asnOrderItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
+                <NumberField source="qty" label="table.field.asnOrderItem.qty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
+                <NumberField source="purQty" label="table.field.asnOrderItem.purQty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
                 // <TextField source="splrName" label="table.field.asnOrderItem.splrName" />,
-                <TextField source="isptResult$" label="table.field.asnOrderItem.isptResult" />,
+                // <TextField source="isptResult$" label="table.field.asnOrderItem.isptResult" />, // 璐ㄦ宸叉敞閲�
                 // <TextField source="trackCode" label="table.field.asnOrderItem.barcode" />,
-                <TextField source="packName" label="table.field.asnOrderItem.packName" />,
+                // <TextField source="packName" label="table.field.asnOrderItem.packName" />, // 鍖呰宸叉敞閲�
             ]
             const fields = data.map(el => <TextField key={el.fields} source={`extendFields.[${el.fields}]`} label={el.fieldsAlise} />)
             const lastArr = [
diff --git a/rsf-admin/src/page/orders/asnOrder/POItemModal.jsx b/rsf-admin/src/page/orders/asnOrder/POItemModal.jsx
index a97eab4..c2d4594 100644
--- a/rsf-admin/src/page/orders/asnOrder/POItemModal.jsx
+++ b/rsf-admin/src/page/orders/asnOrder/POItemModal.jsx
@@ -263,14 +263,15 @@
             ),
             headerClassName: "custom",
         },
-        {
-            field: 'platItemId',
-            headerName: translate('table.field.asnOrderItem.platItemId') + "*",
-            minWidth: 100,
-            flex: 1,
-            editable: true,
-            headerClassName: "custom",
-        },
+        // 鐜板搧绁ㄥ彿宸叉敞閲�
+        // {
+        //     field: 'platItemId',
+        //     headerName: translate('table.field.asnOrderItem.platItemId') + "*",
+        //     minWidth: 100,
+        //     flex: 1,
+        //     editable: true,
+        //     headerClassName: "custom",
+        // },
         {
             field: 'anfme',
             headerName: translate('table.field.asnOrderItem.anfme') + "*",
diff --git a/rsf-admin/src/page/orders/check/CheckOrderItemList.jsx b/rsf-admin/src/page/orders/check/CheckOrderItemList.jsx
index e79fac0..e990fb4 100644
--- a/rsf-admin/src/page/orders/check/CheckOrderItemList.jsx
+++ b/rsf-admin/src/page/orders/check/CheckOrderItemList.jsx
@@ -135,9 +135,9 @@
             <TextField source="matnrCode" label="table.field.checkOrderItem.matnrCode" />
             <TextField source="maktx" label="table.field.checkOrderItem.maktx" />
             <TextField source="platOrderCode" label="table.field.checkOrderItem.platOrderCode" />
-            <NumberField source="anfme" label="table.field.checkOrderItem.anfme" />
-            <NumberField source="workQty" label="table.field.checkOrderItem.workQty" />
-            <NumberField source="qty" label="table.field.checkOrderItem.qty" />
+            <NumberField source="anfme" label="table.field.checkOrderItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+            <NumberField source="workQty" label="table.field.checkOrderItem.workQty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+            <NumberField source="qty" label="table.field.checkOrderItem.qty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
             <TextField source="stockUnit" label="table.field.checkOrderItem.stockUnit" />
             <TextField source="splrBatch" label="table.field.checkOrderItem.splrBatch" />
             <TextField source="splrCode" label="table.field.checkOrderItem.splrCode" />
diff --git a/rsf-admin/src/page/orders/check/CheckOrderList.jsx b/rsf-admin/src/page/orders/check/CheckOrderList.jsx
index 766d057..8ab378e 100644
--- a/rsf-admin/src/page/orders/check/CheckOrderList.jsx
+++ b/rsf-admin/src/page/orders/check/CheckOrderList.jsx
@@ -151,9 +151,9 @@
           {/* <TextField source="type$" label="table.field.checkOrder.type" /> */}
           <TextField cellClassName="wkType" source="wkType$" label="table.field.checkOrder.type" />
           <TextField  source="checkType$" label="table.field.checkOrder.checkType" />
-          <NumberField source="anfme" label="table.field.checkOrder.anfme" />
-          <NumberField source="workQty" label="table.field.checkOrder.workQty" />
-          <NumberField source="qty" label="table.field.checkOrder.qty" />
+          <NumberField source="anfme" label="table.field.checkOrder.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+          <NumberField source="workQty" label="table.field.checkOrder.workQty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+          <NumberField source="qty" label="table.field.checkOrder.qty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
           <DateField source="arrTime" label="table.field.checkOrder.arrTime" />
           <TextField source="updateBy$" label="common.field.updateBy" />
           <DateField source="updateTime" label="common.field.updateTime" showTime />
diff --git a/rsf-admin/src/page/orders/check/CheckOrderModal.jsx b/rsf-admin/src/page/orders/check/CheckOrderModal.jsx
index 98089a6..6938fb5 100644
--- a/rsf-admin/src/page/orders/check/CheckOrderModal.jsx
+++ b/rsf-admin/src/page/orders/check/CheckOrderModal.jsx
@@ -234,8 +234,8 @@
                                     <TextField source="matnrCode" label="table.field.deliveryItem.matnrCode" />
                                     <TextField source="maktx" label="table.field.deliveryItem.matnrName" />
                                     <TextField source="unit" label="table.field.deliveryItem.unit" />
-                                    <NumberField source="anfme" label="table.field.deliveryItem.anfme" />
-                                    <NumberField source="workQty" label="table.field.outStockItem.workQty" />
+                                    <NumberField source="anfme" label="table.field.deliveryItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+                                    <NumberField source="workQty" label="table.field.outStockItem.workQty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                                     <TextField source="splrName" label="table.field.deliveryItem.splrName" />
                                     <TextField source="splrBatch" label="table.field.deliveryItem.splrBatch" />
                                     <TextField source="updateBy$" label="common.field.updateBy" />
diff --git a/rsf-admin/src/page/orders/check/CheckOrderPub.jsx b/rsf-admin/src/page/orders/check/CheckOrderPub.jsx
index ffd2705..6c59f62 100644
--- a/rsf-admin/src/page/orders/check/CheckOrderPub.jsx
+++ b/rsf-admin/src/page/orders/check/CheckOrderPub.jsx
@@ -201,9 +201,9 @@
                                     <TextField source="orderCode" label="table.field.checkOrderItem.orderCode" />
                                     <TextField source="matnrCode" label="table.field.checkOrderItem.matnrCode" />
                                     <TextField source="maktx" label="table.field.checkOrderItem.maktx" />
-                                    <NumberField source="anfme" label="table.field.checkOrderItem.anfme" />
-                                    <NumberField source="workQty" label="table.field.checkOrderItem.workQty" />
-                                    <NumberField source="qty" label="table.field.checkOrderItem.qty" />
+                                    <NumberField source="anfme" label="table.field.checkOrderItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+                                    <NumberField source="workQty" label="table.field.checkOrderItem.workQty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+                                    <NumberField source="qty" label="table.field.checkOrderItem.qty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                                     <TextField source="stockUnit" label="table.field.checkOrderItem.stockUnit" />
                                     <TextField source="splrName" label="table.field.checkOrderItem.splrName" />
                                 </StyledDatagrid>
diff --git a/rsf-admin/src/page/orders/check/CheckPreviewTable.jsx b/rsf-admin/src/page/orders/check/CheckPreviewTable.jsx
index e8ea846..5ebaefc 100644
--- a/rsf-admin/src/page/orders/check/CheckPreviewTable.jsx
+++ b/rsf-admin/src/page/orders/check/CheckPreviewTable.jsx
@@ -36,7 +36,7 @@
 
     const baseColumns = [
         { field: 'locCode', headerName: '搴撲綅', width: 110 },
-        { field: 'barcode', headerName: '瀹瑰櫒', width: 120 },
+        { field: 'barcode', headerName: '鏂欑鐮�', width: 120 },
         { field: 'matnrCode', headerName: '鐗╂枡缂栫爜', width: 120 },
         { field: 'batch', headerName: '鎵规', width: 90 },
         { field: 'unit', headerName: '鍗曚綅', width: 60 },
diff --git a/rsf-admin/src/page/orders/check/checkDiff/CheckDiffList.jsx b/rsf-admin/src/page/orders/check/checkDiff/CheckDiffList.jsx
index 64f2008..82c96ae 100644
--- a/rsf-admin/src/page/orders/check/checkDiff/CheckDiffList.jsx
+++ b/rsf-admin/src/page/orders/check/checkDiff/CheckDiffList.jsx
@@ -133,7 +133,7 @@
                     <TextField source="checkType$" label="table.field.checkDiff.checkType" sortable={false} />
                     <NumberField source="areaId" label="table.field.checkDiff.areaId" />
                     <TextField source="areaName" label="table.field.checkDiff.areaName" />
-                    <NumberField source="anfme" label="table.field.checkDiff.anfme" />
+                    <NumberField source="anfme" label="table.field.checkDiff.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                     <NumberField source="checkQty" label="table.field.checkDiff.checkQty" />
                     {/* <NumberField source="exceStatus" label="table.field.checkDiff.exceStatus" /> */}
                     <NumberField source="updateBy$" label="common.field.updateBy" />
diff --git a/rsf-admin/src/page/orders/check/checkDiffItem/CheckDiffItemList.jsx b/rsf-admin/src/page/orders/check/checkDiffItem/CheckDiffItemList.jsx
index 2ebe8e5..a1415c1 100644
--- a/rsf-admin/src/page/orders/check/checkDiffItem/CheckDiffItemList.jsx
+++ b/rsf-admin/src/page/orders/check/checkDiffItem/CheckDiffItemList.jsx
@@ -144,7 +144,7 @@
                     <TextField source="model" label="table.field.checkDiffItem.model" />
                     <TextField source="barcode" label="table.field.checkDiffItem.barcode" />
                     <TextField source="batch" label="table.field.checkDiffItem.batch" />
-                    <NumberField source="anfme" label="table.field.checkDiffItem.anfme" />
+                    <NumberField source="anfme" label="table.field.checkDiffItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                     <NumberField source="checkQty" label="table.field.checkDiffItem.checkQty" />
                     <CheckDiffField source="diffQty" label="table.field.checkDiffItem.diffQty" />
                     <TextField source="reason" label="table.field.checkDiffItem.reason" />
diff --git a/rsf-admin/src/page/orders/delivery/DeliveryItemCreate.jsx b/rsf-admin/src/page/orders/delivery/DeliveryItemCreate.jsx
index 7d1c567..2dc6d88 100644
--- a/rsf-admin/src/page/orders/delivery/DeliveryItemCreate.jsx
+++ b/rsf-admin/src/page/orders/delivery/DeliveryItemCreate.jsx
@@ -96,11 +96,13 @@
                                     />
                                 </Grid>
                                 <Grid item xs={12} display="flex" gap={1}>
+                                    {/* 鐜板搧绁ㄥ彿宸叉敞閲�
                                     <TextInput
                                         label="table.field.deliveryItem.platItemId"
                                         source="platItemId"
                                         parse={v => v}
                                     />
+                                    */}
                                     <TextInput
                                         label="table.field.deliveryItem.matnrCode"
                                         source="matnrCode"
diff --git a/rsf-admin/src/page/orders/delivery/DeliveryItemEdit.jsx b/rsf-admin/src/page/orders/delivery/DeliveryItemEdit.jsx
index 4bd7cb7..f9f92d5 100644
--- a/rsf-admin/src/page/orders/delivery/DeliveryItemEdit.jsx
+++ b/rsf-admin/src/page/orders/delivery/DeliveryItemEdit.jsx
@@ -106,11 +106,13 @@
                                             source="deliveryId"
                                             readOnly
                                         />
+                                        {/* 鐜板搧绁ㄥ彿宸叉敞閲�
                                         <TextInput
                                             label="table.field.deliveryItem.platItemId"
                                             source="platItemId"
                                             parse={v => v}
                                         />
+                                        */}
                                     </Stack>
                                     <Stack direction='row' gap={2}>
                                         <TextInput
diff --git a/rsf-admin/src/page/orders/delivery/DeliveryItemList.jsx b/rsf-admin/src/page/orders/delivery/DeliveryItemList.jsx
index f654583..2d9aaef 100644
--- a/rsf-admin/src/page/orders/delivery/DeliveryItemList.jsx
+++ b/rsf-admin/src/page/orders/delivery/DeliveryItemList.jsx
@@ -65,7 +65,7 @@
     <SearchInput source="condition" alwaysOn />,
     <DateInput label='common.time.after' source="timeStart" />,
     <DateInput label='common.time.before' source="timeEnd" />,
-    <TextInput source="platItemId" label="table.field.deliveryItem.platItemId" />,
+    // 鐜板搧绁ㄥ彿宸叉敞閲� <TextInput source="platItemId" label="table.field.deliveryItem.platItemId" />,
     <TextInput source="matnrCode" label="table.field.deliveryItem.matnrCode" />,
     <TextInput source="matnrName" label="table.field.deliveryItem.matnrName" />,
     <TextInput source="splrName" label="table.field.deliveryItem.splrName" />,
@@ -131,13 +131,13 @@
                 >
                     <NumberField source="id" />
                     <NumberField source="deliveryId" label="table.field.deliveryItem.deliveryId" />
-                    <TextField source="platItemId" label="table.field.deliveryItem.platItemId" />
+                    {/* 鐜板搧绁ㄥ彿宸叉敞閲� <TextField source="platItemId" label="table.field.deliveryItem.platItemId" /> */}
                     <TextField source="matnrCode" label="table.field.deliveryItem.matnrCode" />
                     <TextField source="maktx" label="table.field.deliveryItem.matnrName" />
                     <TextField source="fieldsIndex" label="table.field.deliveryItem.fieldsIndex" />
-                    <NumberField source="anfme" label="table.field.deliveryItem.anfme" />
-                    <NumberField source="workQty" label="table.field.deliveryItem.workQty" />
-                    <NumberField source="qty" label="table.field.deliveryItem.qty" />
+                    <NumberField source="anfme" label="table.field.deliveryItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+                    <NumberField source="workQty" label="table.field.deliveryItem.workQty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+                    <NumberField source="qty" label="table.field.deliveryItem.qty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                     <NumberField source="nromQty" label="table.field.deliveryItem.nromQty" />
                     <TextField source="unit" label="table.field.deliveryItem.unit" />
                     <TextField source="splrName" label="table.field.deliveryItem.splrName" />
diff --git a/rsf-admin/src/page/orders/delivery/DeliveryList.jsx b/rsf-admin/src/page/orders/delivery/DeliveryList.jsx
index 68ab69c..cf1d6c6 100644
--- a/rsf-admin/src/page/orders/delivery/DeliveryList.jsx
+++ b/rsf-admin/src/page/orders/delivery/DeliveryList.jsx
@@ -136,9 +136,9 @@
                     <TextField source="type$" label="table.field.delivery.type" />
                     <TextField source="wkType$" label="table.field.delivery.wkType" />
                     <TextField source="source" label="table.field.delivery.source" />
-                    <NumberField source="anfme" label="table.field.delivery.anfme" />
-                    <NumberField source="workQty" label="table.field.delivery.workQty" />
-                    <NumberField source="qty" label="table.field.delivery.qty" />
+                    <NumberField source="anfme" label="table.field.delivery.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+                    <NumberField source="workQty" label="table.field.delivery.workQty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+                    <NumberField source="qty" label="table.field.delivery.qty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                     <TextField source="platCode" label="table.field.delivery.platCode" />
                     <DateField source="startTime" label="table.field.delivery.startTime" showTime />
                     <DateField source="endTime" label="table.field.delivery.endTime" showTime />
diff --git a/rsf-admin/src/page/orders/outStock/OutOrderItemList.jsx b/rsf-admin/src/page/orders/outStock/OutOrderItemList.jsx
index 5fd6707..39d2af0 100644
--- a/rsf-admin/src/page/orders/outStock/OutOrderItemList.jsx
+++ b/rsf-admin/src/page/orders/outStock/OutOrderItemList.jsx
@@ -181,10 +181,10 @@
         <TextField source="matnrCode" label="table.field.outStockItem.matnrCode" />,
         <TextField source="maktx" label="table.field.outStockItem.maktx" />,
         <TextField source="platOrderCode" label="table.field.outStockItem.platOrderCode" />,
-        <NumberField source="anfme" label="table.field.outStockItem.anfme" options={{ maximumFractionDigits: 6 }} />,
-        <NumberField source="purQty" label="table.field.outStockItem.purQty" options={{ maximumFractionDigits: 6 }} />,
-        <NumberField source="workQty" label="table.field.outStockItem.workQty" options={{ maximumFractionDigits: 6 }} />,
-        <NumberField source="qty" label="table.field.outStockItem.qty" options={{ maximumFractionDigits: 6 }} />,
+        <NumberField source="anfme" label="table.field.outStockItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
+        <NumberField source="purQty" label="table.field.outStockItem.purQty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
+        <NumberField source="workQty" label="table.field.outStockItem.workQty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
+        <NumberField source="qty" label="table.field.outStockItem.qty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
         <TextField source="stockUnit" label="table.field.outStockItem.stockUnit" />,
         <TextField source="splrBatch" label="table.field.outStockItem.splrBatch" />,
         <TextField source="purUnit" label="table.field.outStockItem.purUnit" />,
diff --git a/rsf-admin/src/page/orders/outStock/OutOrderList.jsx b/rsf-admin/src/page/orders/outStock/OutOrderList.jsx
index 873320e..6d23aa5 100644
--- a/rsf-admin/src/page/orders/outStock/OutOrderList.jsx
+++ b/rsf-admin/src/page/orders/outStock/OutOrderList.jsx
@@ -195,8 +195,8 @@
         actions={(
           <TopToolbar>
             <FilterButton />
-            <CreateByOrderButton setCreateDialog={setCreateDialog} />
-            <MyCreateButton onClick={() => { setManualDialog(true); setmodalType(0) }} />
+            {/* <CreateByOrderButton setCreateDialog={setCreateDialog} /> 閫氳繃鍗曟嵁鍒涘缓鏆備笉浣跨敤 */}
+            {/* <MyCreateButton onClick={() => { setManualDialog(true); setmodalType(0) }} /> 娣诲姞鎸夐挳鏆備笉浣跨敤 */}
             <SelectColumnsButton preferenceKey='outStock' />
             <ImportButton value={'outStockItem'} />
           </TopToolbar>
@@ -216,9 +216,9 @@
           <TextField source="poCode" label="table.field.outStock.poCode" />
           <TextField source="type$" label="table.field.outStock.type" />
           <TextField cellClassName="wkType" source="wkType$" label="table.field.outStock.wkType" />
-          <NumberField source="anfme" label="table.field.outStock.anfme" options={{ maximumFractionDigits: 6 }} />
-          <NumberField source="workQty" label="table.field.outStock.workQty" options={{ maximumFractionDigits: 6 }} />
-          <NumberField source="qty" label="table.field.outStock.qty" options={{ maximumFractionDigits: 6 }} />
+          <NumberField source="anfme" label="table.field.outStock.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+          <NumberField source="workQty" label="table.field.outStock.workQty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+          <NumberField source="qty" label="table.field.outStock.qty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
           <TextField source="logisNo" label="table.field.outStock.logisNo" />
           <TextField source="rleStatus$" label="table.field.outStock.rleStatus" sortable={false} />
           <TextField source="updateBy$" label="common.field.updateBy" />
@@ -317,7 +317,7 @@
   )
 }
 
-/** 鍑哄簱鍗曟墽琛岀姸鎬侊細10=鍒濆鍖栵紙浠呮鐘舵�佹樉绀虹紪杈�/璇︽儏锛� */
+/** 鍑哄簱鍗曟墽琛岀姸鎬侊細10=鍒濆鍖栵紙浠呮鐘舵�佹樉绀虹紪杈戯級锛涜鎯呬换鎰忕姸鎬佸彲鏌ョ湅 */
 const OUT_STOCK_EXCE_STATUS_INIT = 10;
 
 const OutOrderRowActions = ({ setCreateDialog, setmodalType, setDrawerVal, drawerVal, setSelect }) => {
@@ -325,12 +325,8 @@
   const isInit = record?.exceStatus === OUT_STOCK_EXCE_STATUS_INIT || record?.exceStatus === '10';
   return (
     <>
-      {isInit && (
-        <>
-          <MyButton setCreateDialog={setCreateDialog} setmodalType={setmodalType} />
-          <EditButton label="toolbar.detail" icon={(<DetailsIcon />)} />
-        </>
-      )}
+      {isInit && <MyButton setCreateDialog={setCreateDialog} setmodalType={setmodalType} />}
+      <EditButton label="toolbar.detail" icon={(<DetailsIcon />)} />
       <PublicButton setDrawerVal={setDrawerVal} drawerVal={drawerVal} setSelect={setSelect} />
     </>
   );
diff --git a/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx b/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx
index f7e5c60..b492921 100644
--- a/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx
+++ b/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx
@@ -270,8 +270,8 @@
                                     <TextField source="matnrCode" label="table.field.deliveryItem.matnrCode" />
                                     <TextField source="maktx" label="table.field.deliveryItem.matnrName" />
                                     <TextField source="unit" label="table.field.deliveryItem.unit" />
-                                    <NumberField source="anfme" label="table.field.deliveryItem.anfme" options={{ maximumFractionDigits: 6 }} />
-                                    <NumberField source="workQty" label="table.field.outStockItem.workQty" options={{ maximumFractionDigits: 6 }} />
+                                    <NumberField source="anfme" label="table.field.deliveryItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+                                    <NumberField source="workQty" label="table.field.outStockItem.workQty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                                     <TextField source="splrName" label="table.field.deliveryItem.splrName" />
                                     <TextField source="splrBatch" label="table.field.deliveryItem.splrBatch" />
                                     <TextField source="updateBy$" label="common.field.updateBy" />
diff --git a/rsf-admin/src/page/orders/outStock/OutStockPublic.jsx b/rsf-admin/src/page/orders/outStock/OutStockPublic.jsx
index 9831e8c..1b4061d 100644
--- a/rsf-admin/src/page/orders/outStock/OutStockPublic.jsx
+++ b/rsf-admin/src/page/orders/outStock/OutStockPublic.jsx
@@ -338,9 +338,9 @@
                                     <TextField source="poCode" label="table.field.outStockItem.poCode" />
                                     <TextField source="matnrCode" label="table.field.outStockItem.matnrCode" />
                                     <TextField source="maktx" label="table.field.outStockItem.maktx" />
-                                    <NumberField source="anfme" label="table.field.outStockItem.anfme" options={{ maximumFractionDigits: 6 }} />
-                                    <NumberField source="workQty" label="table.field.outStockItem.workQty" options={{ maximumFractionDigits: 6 }} />
-                                    <NumberField source="qty" label="table.field.outStockItem.qty" options={{ maximumFractionDigits: 6 }} />
+                                    <NumberField source="anfme" label="table.field.outStockItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+                                    <NumberField source="workQty" label="table.field.outStockItem.workQty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+                                    <NumberField source="qty" label="table.field.outStockItem.qty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                                     <TextField source="stockUnit" label="table.field.outStockItem.stockUnit" />
                                     <TextField source="splrName" label="table.field.outStockItem.splrName" />
                                 </StyledDatagrid>
@@ -393,7 +393,7 @@
     const baseColumns = [
         // { field: 'id', headerName: 'ID', width: 40 },
         { field: 'locCode', headerName: '搴撲綅', width: 110 },
-        { field: 'barcode', headerName: '瀹瑰櫒', width: 120 },
+        { field: 'barcode', headerName: '鏂欑鐮�', width: 120 },
         { field: 'matnrCode', headerName: '鐗╂枡缂栫爜', width: 120 },
         { field: 'batch', headerName: '鎵规', width: 90 },
         { field: 'unit', headerName: '鍗曚綅', width: 60 },
diff --git a/rsf-admin/src/page/orders/purchase/PurchaseItemCreate.jsx b/rsf-admin/src/page/orders/purchase/PurchaseItemCreate.jsx
index ad653ed..e302fc0 100644
--- a/rsf-admin/src/page/orders/purchase/PurchaseItemCreate.jsx
+++ b/rsf-admin/src/page/orders/purchase/PurchaseItemCreate.jsx
@@ -92,6 +92,7 @@
                                         defaultValue={row.poId}
                                     />
                                 </Grid>
+                                {/* 鐜板搧绁ㄥ彿宸叉敞閲�
                                 <Grid item xs={6} display="flex" gap={1}>
                                     <TextInput
                                         label="table.field.purchaseItem.platItemId"
@@ -99,6 +100,7 @@
                                         parse={v => v}
                                     />
                                 </Grid>
+                                */}
                                 <Grid item xs={6} display="flex" gap={1}>
                                     <TextInput
                                         label="table.field.purchaseItem.matnrCode"
diff --git a/rsf-admin/src/page/orders/purchase/PurchaseItemEdit.jsx b/rsf-admin/src/page/orders/purchase/PurchaseItemEdit.jsx
index 2e51cff..b056f92 100644
--- a/rsf-admin/src/page/orders/purchase/PurchaseItemEdit.jsx
+++ b/rsf-admin/src/page/orders/purchase/PurchaseItemEdit.jsx
@@ -101,11 +101,13 @@
                                             source="purchaseId"
                                             defaultValue={record?.id}
                                         />
+                                        {/* 鐜板搧绁ㄥ彿宸叉敞閲�
                                         <TextInput
                                             label="table.field.purchaseItem.platItemId"
                                             source="platItemId"
                                             parse={v => v}
                                         />
+                                        */}
                                         <TextInput
                                             label="table.field.purchaseItem.matnrCode"
                                             source="matnrCode"
diff --git a/rsf-admin/src/page/orders/purchase/PurchaseItemList.jsx b/rsf-admin/src/page/orders/purchase/PurchaseItemList.jsx
index e6ff1af..780e157 100644
--- a/rsf-admin/src/page/orders/purchase/PurchaseItemList.jsx
+++ b/rsf-admin/src/page/orders/purchase/PurchaseItemList.jsx
@@ -54,7 +54,7 @@
 const filters = [
   <SearchInput source="condition" alwaysOn />,
   <NumberInput source="purchaseId" label="table.field.purchaseItem.purchaseId" />,
-  <TextInput source="platItemId" label="table.field.purchaseItem.platItemId" />,
+  // 鐜板搧绁ㄥ彿宸叉敞閲� <TextInput source="platItemId" label="table.field.purchaseItem.platItemId" />,
   <TextInput source="matnrCode" label="table.field.purchaseItem.matnrCode" />,
   <TextInput source="matnrName" label="table.field.purchaseItem.matnrName" />,
   <TextInput source="unit" label="table.field.purchaseItem.unit" />,
@@ -129,12 +129,12 @@
           >
             <NumberField source="id" />
             <NumberField source="purchaseId" label="table.field.purchaseItem.purchaseId" />
-            <TextField source="platItemId" label="table.field.purchaseItem.platItemId" />
+            {/* 鐜板搧绁ㄥ彿宸叉敞閲� <TextField source="platItemId" label="table.field.purchaseItem.platItemId" /> */}
             <TextField source="matnrCode" label="table.field.purchaseItem.matnrCode" />
             <TextField source="matnrName" label="table.field.purchaseItem.matnrName" />
             <TextField source="unit" label="table.field.purchaseItem.unit" />
-            <NumberField source="anfme" label="table.field.purchaseItem.anfme" />
-            <NumberField source="qty" label="table.field.purchaseItem.qty" />
+            <NumberField source="anfme" label="table.field.purchaseItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+            <NumberField source="qty" label="table.field.purchaseItem.qty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
             <NumberField source="nromQty" label="table.field.purchaseItem.nromQty" />
             <NumberField source="asnQty" label="table.field.purchaseItem.asnQty" />
             <NumberField source="printQty" label="table.field.purchaseItem.printQty" />
diff --git a/rsf-admin/src/page/orders/purchase/PurchaseList.jsx b/rsf-admin/src/page/orders/purchase/PurchaseList.jsx
index f1d37e6..2e21bd6 100644
--- a/rsf-admin/src/page/orders/purchase/PurchaseList.jsx
+++ b/rsf-admin/src/page/orders/purchase/PurchaseList.jsx
@@ -139,8 +139,8 @@
           <TextField source="type$" label="table.field.purchase.type" />
           <TextField source="wkType$" label="table.field.purchase.wkType" />
           <TextField source="source" label="table.field.purchase.source" />
-          <NumberField source="anfme" label="table.field.purchase.anfme" />
-          <NumberField source="qty" label="table.field.purchase.qty" />
+          <NumberField source="anfme" label="table.field.purchase.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+          <NumberField source="qty" label="table.field.purchase.qty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
           {/* <NumberField source="workQty" label="table.field.purchase.workQty" /> */}
           <TextField source="channel" label="table.field.purchase.channel" />
           <TextField source="platCode" label="table.field.purchase.platCode" />
diff --git a/rsf-admin/src/page/orders/purchase/PurchasePanel.jsx b/rsf-admin/src/page/orders/purchase/PurchasePanel.jsx
index 0793a58..f84f033 100644
--- a/rsf-admin/src/page/orders/purchase/PurchasePanel.jsx
+++ b/rsf-admin/src/page/orders/purchase/PurchasePanel.jsx
@@ -58,11 +58,12 @@
             label: 'table.field.purchaseItem.purchaseId',
             minWidth: 100
         },
-        {
-            id: 'platItemId',
-            label: 'table.field.purchaseItem.platItemId',
-            minWidth: 100
-        },
+        // 鐜板搧绁ㄥ彿宸叉敞閲�
+        // {
+        //     id: 'platItemId',
+        //     label: 'table.field.purchaseItem.platItemId',
+        //     minWidth: 100
+        // },
         {
             id: 'matnrCode',
             label: 'table.field.purchaseItem.matnrCode',
diff --git a/rsf-admin/src/page/orders/qlyInspect/QlyIsptItemResult.jsx b/rsf-admin/src/page/orders/qlyInspect/QlyIsptItemResult.jsx
index 2192223..57b7c5d 100644
--- a/rsf-admin/src/page/orders/qlyInspect/QlyIsptItemResult.jsx
+++ b/rsf-admin/src/page/orders/qlyInspect/QlyIsptItemResult.jsx
@@ -117,7 +117,7 @@
                         <TextField source="label" label="table.field.qlyIsptItem.label" />
                         <TextField source="splrBatch" label="table.field.qlyIsptItem.splrBatch" />
                         <NumberField source="dlyQty" label="table.field.qlyIsptItem.dlyQty" />
-                        <NumberField source="anfme" label="table.field.qlyIsptItem.anfme" />
+                        <NumberField source="anfme" label="table.field.qlyIsptItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                         <TextField source="splrName" label="table.field.qlyIsptItem.splrName" />
                         <NumberField source="isptResult$" label="table.field.qlyIsptItem.isptResult" />
                     </StyledDatagrid>
diff --git a/rsf-admin/src/page/orders/stock/OrderItemList.jsx b/rsf-admin/src/page/orders/stock/OrderItemList.jsx
index 0affd7e..c15a279 100644
--- a/rsf-admin/src/page/orders/stock/OrderItemList.jsx
+++ b/rsf-admin/src/page/orders/stock/OrderItemList.jsx
@@ -165,14 +165,14 @@
                 <TextField source="matnrId" label="table.field.stockItem.matnrId" />,
                 <TextField source="matnrCode" label="table.field.stockItem.matnrCode" />,
                 <TextField source="maktx" label="table.field.stockItem.maktx" />,
-                <NumberField source="anfme" label="table.field.stockItem.anfme" />,
+                <NumberField source="anfme" label="table.field.stockItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
                 <TextField source="stockUnit" label="table.field.stockItem.stockUnit" />,
-                <NumberField source="workQty" label="table.field.stockItem.workQty" />,
+                <NumberField source="workQty" label="table.field.stockItem.workQty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
                 <TextField source="locCode" label="table.field.loc.code" />,
                 <TextField source="barcode" label="table.field.task.barcode" />,
-                <NumberField source="purQty" label="table.field.stockItem.purQty" />,
+                <NumberField source="purQty" label="table.field.stockItem.purQty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
                 <TextField source="purUnit" label="table.field.stockItem.purUnit" />,
-                <NumberField source="qty" label="table.field.stockItem.qty" />,
+                <NumberField source="qty" label="table.field.stockItem.qty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
                 <TextField source="splrCode" label="table.field.stockItem.splrCode" />,
                 <TextField source="batch" label="table.field.stockItem.batch" />,
                 <TextField source="splrBatch" label="table.field.stockItem.splrBatch" />,
diff --git a/rsf-admin/src/page/orders/stock/OrderList.jsx b/rsf-admin/src/page/orders/stock/OrderList.jsx
index 516fea9..5250591 100644
--- a/rsf-admin/src/page/orders/stock/OrderList.jsx
+++ b/rsf-admin/src/page/orders/stock/OrderList.jsx
@@ -126,7 +126,7 @@
                     <TextField source="barcode" label="table.field.task.barcode" />,
                     <TextField source="type$" label="table.field.stock.type" />
                     <TextField source="wkType$" label="table.field.stock.wkType" />
-                    <NumberField source="anfme" label="table.field.stock.anfme" />
+                    <NumberField source="anfme" label="table.field.stock.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                     <TextField source="updateBy$" label="common.field.updateBy" />
                     <DateField source="updateTime" label="common.field.updateTime" showTime />
                     <TextField source="createBy$" label="common.field.createBy" />
diff --git a/rsf-admin/src/page/orders/transfer/TransferItemList.jsx b/rsf-admin/src/page/orders/transfer/TransferItemList.jsx
index b03628b..629c675 100644
--- a/rsf-admin/src/page/orders/transfer/TransferItemList.jsx
+++ b/rsf-admin/src/page/orders/transfer/TransferItemList.jsx
@@ -74,7 +74,7 @@
     <TextInput source="spec" label="table.field.transferItem.spec" />,
     <TextInput source="model" label="table.field.transferItem.model" />,
     <TextInput source="fieldsIndex" label="table.field.transferItem.fieldsIndex" />,
-    <TextInput source="platItemId" label="table.field.transferItem.platItemId" />,
+    // 鐜板搧绁ㄥ彿宸叉敞閲� <TextInput source="platItemId" label="table.field.transferItem.platItemId" />,
     <TextInput source="platOrderCode" label="table.field.transferItem.platOrderCode" />,
     <TextInput source="platWorkCode" label="table.field.transferItem.platWorkCode" />,
     <TextInput source="projectCode" label="table.field.transferItem.projectCode" />,
@@ -138,12 +138,12 @@
                     <TextField source="model" label="table.field.transferItem.model" />
                     <TextField source="batch" label="table.field.transferItem.batch" />
                     <TextField source="unit" label="table.field.transferItem.unit" />
-                    <NumberField source="anfme" label="table.field.transferItem.anfme" />
-                    <NumberField source="workQty" label="table.field.transferItem.workQty" />
-                    <NumberField source="qty" label="table.field.transferItem.qty" />
+                    <NumberField source="anfme" label="table.field.transferItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+                    <NumberField source="workQty" label="table.field.transferItem.workQty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+                    <NumberField source="qty" label="table.field.transferItem.qty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                     <NumberField source="splrId" label="table.field.transferItem.splrId" />
                     <TextField source="fieldsIndex" label="table.field.transferItem.fieldsIndex" />
-                    <TextField source="platItemId" label="table.field.transferItem.platItemId" />
+                    {/* 鐜板搧绁ㄥ彿宸叉敞閲� <TextField source="platItemId" label="table.field.transferItem.platItemId" /> */}
                     <TextField source="platOrderCode" label="table.field.transferItem.platOrderCode" />
                     <TextField source="platWorkCode" label="table.field.transferItem.platWorkCode" />
                     <TextField source="projectCode" label="table.field.transferItem.projectCode" />
diff --git a/rsf-admin/src/page/orders/transfer/TransferOrders.jsx b/rsf-admin/src/page/orders/transfer/TransferOrders.jsx
index be8eac0..d805b5a 100644
--- a/rsf-admin/src/page/orders/transfer/TransferOrders.jsx
+++ b/rsf-admin/src/page/orders/transfer/TransferOrders.jsx
@@ -85,9 +85,9 @@
                         <TextField source="poCode" label="table.field.transferOrder.poCode" />
                         <TextField source="type$" label="table.field.transferOrder.type" />
                         <TextField cellClassName="wkType" source="wkType$" label="table.field.transferOrder.wkType" />
-                        <NumberField source="anfme" label="table.field.transferOrder.anfme" />
-                        <NumberField source="workQty" label="table.field.transferOrder.workQty" />
-                        <NumberField source="qty" label="table.field.transferOrder.qty" />
+                        <NumberField source="anfme" label="table.field.transferOrder.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+                        <NumberField source="workQty" label="table.field.transferOrder.workQty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+                        <NumberField source="qty" label="table.field.transferOrder.qty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                         <TextField source="createBy$" label="common.field.createBy" />
                         <TextField source="updateBy$" label="common.field.updateBy" />
                         <DateField source="createTime" label="common.field.createTime" showTime />
diff --git a/rsf-admin/src/page/orders/wave/ItemToTaskModal.jsx b/rsf-admin/src/page/orders/wave/ItemToTaskModal.jsx
index 281f83e..b1c5042 100644
--- a/rsf-admin/src/page/orders/wave/ItemToTaskModal.jsx
+++ b/rsf-admin/src/page/orders/wave/ItemToTaskModal.jsx
@@ -138,9 +138,9 @@
                             <TextField source="unit" label="table.field.waveItem.unit" />
                             <TextField source="trackCode" label="table.field.waveItem.trackCode" />
                             <TextField source="fieldsIndex" label="table.field.waveItem.fieldsIndex" />
-                            <NumberField source="anfme" label="table.field.waveItem.anfme" />
-                            <NumberField source="workQty" label="table.field.waveItem.workQty" />
-                            <NumberField source="qty" label="table.field.waveItem.qty" />
+                            <NumberField source="anfme" label="table.field.waveItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+                            <NumberField source="workQty" label="table.field.waveItem.workQty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+                            <NumberField source="qty" label="table.field.waveItem.qty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                             <NumberField source="stockQty" label="table.field.waveItem.stockQty" />
                             <WrapperField cellClassName="opt" label="table.field.waveItem.stockLocs">
                                 <TagsField />
diff --git a/rsf-admin/src/page/orders/wave/WaveItemList.jsx b/rsf-admin/src/page/orders/wave/WaveItemList.jsx
index c7a9dcf..1f32455 100644
--- a/rsf-admin/src/page/orders/wave/WaveItemList.jsx
+++ b/rsf-admin/src/page/orders/wave/WaveItemList.jsx
@@ -124,9 +124,9 @@
                     <TextField source="maktx" label="table.field.waveItem.matnrName" />
                     <TextField source="batch" label="table.field.waveItem.batch" />
                     <TextField source="splrBatch" label="table.field.waveItem.splrBatch" />
-                    <NumberField source="anfme" label="table.field.waveItem.anfme" />
+                    <NumberField source="anfme" label="table.field.waveItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                     <TextField source="fieldsIndex" label="table.field.waveItem.fieldsIndex" />
-                    <NumberField source="workQty" label="table.field.waveItem.workQty" />
+                    <NumberField source="workQty" label="table.field.waveItem.workQty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                     <TextField source="unit" label="table.field.waveItem.unit" />
                     <TextField source="updateBy$" label="common.field.updateBy" />
                     <DateField source="updateTime" label="common.field.updateTime" showTime />
diff --git a/rsf-admin/src/page/orders/wave/WaveList.jsx b/rsf-admin/src/page/orders/wave/WaveList.jsx
index 081348c..009a3ba 100644
--- a/rsf-admin/src/page/orders/wave/WaveList.jsx
+++ b/rsf-admin/src/page/orders/wave/WaveList.jsx
@@ -157,9 +157,9 @@
                     <NumberField source="id" />
                     <TextField source="code" label="table.field.wave.code" />
                     <TextField source="type$" label="table.field.wave.type" sortable={false} />
-                    <NumberField source="anfme" label="table.field.wave.anfme" />
+                    <NumberField source="anfme" label="table.field.wave.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                     <NumberField source="groupQty" label="table.field.wave.groupQty" />
-                    <NumberField source="workQty" label="table.field.wave.qty" />
+                    <NumberField source="workQty" label="table.field.wave.qty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                     <NumberField source="orderNum" label="table.field.wave.orderNum" />
                     <DateField source="createTime" label="common.field.createTime" showTime />
                     <TextField source="updateBy$" label="common.field.updateBy" />
diff --git a/rsf-admin/src/page/orders/wave/WavePanel.jsx b/rsf-admin/src/page/orders/wave/WavePanel.jsx
index dbe6128..f1f561d 100644
--- a/rsf-admin/src/page/orders/wave/WavePanel.jsx
+++ b/rsf-admin/src/page/orders/wave/WavePanel.jsx
@@ -78,7 +78,7 @@
                         <TextField source="platOrderCode" label="table.field.asnOrderItem.platOrderCode" />
                         <TextField source="spec" label="table.field.asnOrderItem.spec" />
                         <TextField source="model" label="table.field.asnOrderItem.model" />
-                        <NumberField source="anfme" label="table.field.asnOrderItem.anfme" />
+                        <NumberField source="anfme" label="table.field.asnOrderItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                         <TextField source="stockUnit" label="table.field.asnOrderItem.stockUnit" />
                         <TextField source="splrName" label="table.field.asnOrderItem.splrName" />
                     </StyledDatagrid>
diff --git a/rsf-admin/src/page/statistics/deadTime/LocItemDeadList.jsx b/rsf-admin/src/page/statistics/deadTime/LocItemDeadList.jsx
index 82bbf32..d32ac4a 100644
--- a/rsf-admin/src/page/statistics/deadTime/LocItemDeadList.jsx
+++ b/rsf-admin/src/page/statistics/deadTime/LocItemDeadList.jsx
@@ -139,7 +139,7 @@
                     <NumberField source="matnrId" label="table.field.locItem.matnrId" />
                     <TextField source="matnrCode" label="table.field.locItem.matnrCode" />
                     <TextField source="maktx" label="table.field.locItem.maktx" />
-                    <NumberField source="anfme" label="table.field.locItem.anfme" />
+                    <NumberField source="anfme" label="table.field.locItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                     <TextField source="batch" label="table.field.locItem.batch" />
                     <TextField source="trackCode" label="table.field.locItem.trackCode" />
                     <TextField source="unit" label="table.field.locItem.unit" />
diff --git a/rsf-admin/src/page/statistics/inStockItem/InStockItemList.jsx b/rsf-admin/src/page/statistics/inStockItem/InStockItemList.jsx
index a278687..803bc35 100644
--- a/rsf-admin/src/page/statistics/inStockItem/InStockItemList.jsx
+++ b/rsf-admin/src/page/statistics/inStockItem/InStockItemList.jsx
@@ -128,7 +128,7 @@
                     <TextField source="locCode" label="table.field.stockStatistic.locCode" />
                     <TextField source="matnrCode" label="table.field.locItem.matnrCode" />
                     <TextField source="maktx" label="table.field.locItem.maktx" />
-                    <NumberField source="anfme" label="table.field.locItem.anfme" />
+                    <NumberField source="anfme" label="table.field.locItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                     <TextField source="batch" label="table.field.locItem.batch" />
                     <TextField source="unit" label="table.field.locItem.unit" />
                     <TextField source="barcode" label="table.field.stockStatistic.barcode" />
diff --git a/rsf-admin/src/page/statistics/inStockNum/InStockNumList.jsx b/rsf-admin/src/page/statistics/inStockNum/InStockNumList.jsx
index b5c4a57..461539f 100644
--- a/rsf-admin/src/page/statistics/inStockNum/InStockNumList.jsx
+++ b/rsf-admin/src/page/statistics/inStockNum/InStockNumList.jsx
@@ -128,7 +128,7 @@
                     <TextField source="dayTime" label="table.field.stockStatistic.dayTime" />
                     <TextField source="matnrCode" label="table.field.locItem.matnrCode" />
                     <TextField source="maktx" label="table.field.locItem.maktx" />
-                    <NumberField source="anfme" label="table.field.locItem.anfme" />
+                    <NumberField source="anfme" label="table.field.locItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                     <TextField source="batch" label="table.field.locItem.batch" />
                     <TextField source="unit" label="table.field.locItem.unit" />
                 </StyledDatagrid>
diff --git a/rsf-admin/src/page/statistics/outStockItem/OutStockItemList.jsx b/rsf-admin/src/page/statistics/outStockItem/OutStockItemList.jsx
index e3508ca..71d8b3c 100644
--- a/rsf-admin/src/page/statistics/outStockItem/OutStockItemList.jsx
+++ b/rsf-admin/src/page/statistics/outStockItem/OutStockItemList.jsx
@@ -128,7 +128,7 @@
                     <TextField source="locCode" label="table.field.stockStatistic.locCode" />
                     <TextField source="matnrCode" label="table.field.locItem.matnrCode" />
                     <TextField source="maktx" label="table.field.locItem.maktx" />
-                    <NumberField source="anfme" label="table.field.locItem.anfme" />
+                    <NumberField source="anfme" label="table.field.locItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                     <TextField source="batch" label="table.field.locItem.batch" />
                     <TextField source="unit" label="table.field.locItem.unit" />
                     <TextField source="barcode" label="table.field.stockStatistic.barcode" />
diff --git a/rsf-admin/src/page/statistics/outStockNum/OutStockNumList.jsx b/rsf-admin/src/page/statistics/outStockNum/OutStockNumList.jsx
index 0f68b3e..1d4fb01 100644
--- a/rsf-admin/src/page/statistics/outStockNum/OutStockNumList.jsx
+++ b/rsf-admin/src/page/statistics/outStockNum/OutStockNumList.jsx
@@ -118,7 +118,7 @@
                     <TextField source="dayTime" label="table.field.stockStatistic.dayTime" />
                     <TextField source="matnrCode" label="table.field.locItem.matnrCode" />
                     <TextField source="maktx" label="table.field.locItem.maktx" />
-                    <NumberField source="anfme" label="table.field.locItem.anfme" />
+                    <NumberField source="anfme" label="table.field.locItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                     <TextField source="batch" label="table.field.locItem.batch" />
                     <TextField source="unit" label="table.field.locItem.unit" />
                 </StyledDatagrid>
diff --git a/rsf-admin/src/page/statistics/stockManage/WarehouseHistories.jsx b/rsf-admin/src/page/statistics/stockManage/WarehouseHistories.jsx
index eab020b..09ff89b 100644
--- a/rsf-admin/src/page/statistics/stockManage/WarehouseHistories.jsx
+++ b/rsf-admin/src/page/statistics/stockManage/WarehouseHistories.jsx
@@ -207,10 +207,10 @@
                 <TextField source="matnrId" label="table.field.stockItem.matnrId" />,
                 <TextField source="matnrCode" label="table.field.stockItem.matnrCode" />,
                 <TextField source="maktx" label="table.field.stockItem.maktx" />,
-                <NumberField source="anfme" label="table.field.stockItem.anfme" />,
+                <NumberField source="anfme" label="table.field.stockItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
                 <TextField source="stockUnit" label="table.field.stockItem.stockUnit" />,
-                <NumberField source="workQty" label="table.field.stockItem.workQty" />,
-                <NumberField source="qty" label="table.field.stockItem.qty" />,
+                <NumberField source="workQty" label="table.field.stockItem.workQty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
+                <NumberField source="qty" label="table.field.stockItem.qty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
                 <TextField source="splrCode" label="table.field.stockItem.splrCode" />,
                 <TextField source="batch" label="table.field.stockItem.batch" />,
                 <TextField source="splrBatch" label="table.field.stockItem.splrBatch" />,
diff --git a/rsf-admin/src/page/statistics/stockManage/WarehouseStockList.jsx b/rsf-admin/src/page/statistics/stockManage/WarehouseStockList.jsx
index 113b44b..c708e72 100644
--- a/rsf-admin/src/page/statistics/stockManage/WarehouseStockList.jsx
+++ b/rsf-admin/src/page/statistics/stockManage/WarehouseStockList.jsx
@@ -174,8 +174,8 @@
                 <NumberField source="matnrId" label="table.field.warehouseStock.matnrId" />,
                 <TextField source="matnrCode" label="table.field.warehouseStock.matnrCode" />,
                 <TextField source="maktx" label="table.field.warehouseStock.maktx" />,
-                <NumberField source="anfme" label="table.field.warehouseStock.anfme" />,
-                <NumberField source="workQty" label="table.field.warehouseStock.qty" />,
+                <NumberField source="anfme" label="table.field.warehouseStock.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
+                <NumberField source="workQty" label="table.field.warehouseStock.qty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
                 <TextField source="spec" label="table.field.warehouseStock.spec" />,
                 <TextField source="model" label="table.field.warehouseStock.model" />,
                 <TextField source="warehouse$" label="table.field.warehouseStock.warehouse" />,
diff --git a/rsf-admin/src/page/statistics/stockStatisticNum/stockStatisticList.jsx b/rsf-admin/src/page/statistics/stockStatisticNum/stockStatisticList.jsx
index 97ac3f0..491d74b 100644
--- a/rsf-admin/src/page/statistics/stockStatisticNum/stockStatisticList.jsx
+++ b/rsf-admin/src/page/statistics/stockStatisticNum/stockStatisticList.jsx
@@ -110,7 +110,7 @@
                     <NumberField source="count" label="table.field.stockStatistic.count" />
                     <TextField source="inAnfmeCount" label="table.field.stockStatistic.inAnfmeCount" />
                     <TextField source="outAnfmeCount" label="table.field.stockStatistic.outAnfmeCount" />
-                    <NumberField source="anfme" label="table.field.stockStatistic.anfme" />
+                    <NumberField source="anfme" label="table.field.stockStatistic.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                     <NumberField source="inAnfme" label="table.field.stockStatistic.inAnfme" />
                     <TextField source="outAnfme" label="table.field.stockStatistic.outAnfme" />
                 </StyledDatagrid>
diff --git a/rsf-admin/src/page/stockItem/StockItemList.jsx b/rsf-admin/src/page/stockItem/StockItemList.jsx
index 293fa09..1fc2d86 100644
--- a/rsf-admin/src/page/stockItem/StockItemList.jsx
+++ b/rsf-admin/src/page/stockItem/StockItemList.jsx
@@ -142,12 +142,12 @@
                     <NumberField source="matnrId" label="table.field.stockItem.matnrId" />
                     <TextField source="matnrCode" label="table.field.stockItem.matnrCode" />
                     <TextField source="maktx" label="table.field.stockItem.maktx" />
-                    <NumberField source="anfme" label="table.field.stockItem.anfme" />
+                    <NumberField source="anfme" label="table.field.stockItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                     <TextField source="stockUnit" label="table.field.stockItem.stockUnit" />
-                    <NumberField source="workQty" label="table.field.stockItem.workQty" />
-                    <NumberField source="purQty" label="table.field.stockItem.purQty" />
+                    <NumberField source="workQty" label="table.field.stockItem.workQty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+                    <NumberField source="purQty" label="table.field.stockItem.purQty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                     <TextField source="purUnit" label="table.field.stockItem.purUnit" />
-                    <NumberField source="qty" label="table.field.stockItem.qty" />
+                    <NumberField source="qty" label="table.field.stockItem.qty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                     <TextField source="splrCode" label="table.field.stockItem.splrCode" />
                     <TextField source="batch" label="table.field.stockItem.batch" />
                     <TextField source="splrBatch" label="table.field.stockItem.splrBatch" />
diff --git a/rsf-admin/src/page/stockManage/locRevise/ReviseLogItemList.jsx b/rsf-admin/src/page/stockManage/locRevise/ReviseLogItemList.jsx
index 670c8ac..25ac631 100644
--- a/rsf-admin/src/page/stockManage/locRevise/ReviseLogItemList.jsx
+++ b/rsf-admin/src/page/stockManage/locRevise/ReviseLogItemList.jsx
@@ -95,8 +95,8 @@
                     <TextField source="matnrCode" label="table.field.locItem.matnrCode" />
                     <TextField source="maktx" label="table.field.locItem.maktx" />
                     <TextField source="unit" label="table.field.locItem.unit" />
-                    <NumberField source="anfme" label="table.field.locItem.anfme" options={{ maximumFractionDigits: 6 }} />
-                    <NumberField source="reviseQty" label="table.field.locItem.reviseQty" options={{ maximumFractionDigits: 6 }} />
+                    <NumberField source="anfme" label="table.field.locItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
+                    <NumberField source="reviseQty" label="table.field.locItem.reviseQty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                     <CheckDiffField source="diffQty" label="table.field.locItem.diffQty" />
                     <TextField source="batch" label="table.field.locItem.batch" />
                     <TextField source="spec" label="table.field.locItem.spec" />
diff --git a/rsf-admin/src/page/task/TaskItemList.jsx b/rsf-admin/src/page/task/TaskItemList.jsx
index 3518ae1..4485a0f 100644
--- a/rsf-admin/src/page/task/TaskItemList.jsx
+++ b/rsf-admin/src/page/task/TaskItemList.jsx
@@ -153,8 +153,8 @@
                 <TextField source="maktx" label="table.field.taskItem.maktx" />,
                 <TextField source="matnrCode" label="table.field.taskItem.matnrCode" />,
                 <TextField source="unit" label="table.field.taskItem.unit" />,
-                <NumberField source="anfme" label="table.field.taskItem.anfme" options={{ maximumFractionDigits: 6 }} />,
-                <NumberField source="qty" label="table.field.taskItem.qty" options={{ maximumFractionDigits: 6 }} />,
+                <NumberField source="anfme" label="table.field.taskItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
+                <NumberField source="qty" label="table.field.taskItem.qty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
                 <TextField source="platOrderCode" label="table.field.asnOrderItem.platOrderCode" />,
                 <TextField source="platWorkCode" label="table.field.asnOrderItem.platWorkCode" />,
                 <TextField source="projectCode" label="table.field.asnOrderItem.projectCode" />,
diff --git a/rsf-admin/src/page/task/TaskPanel.jsx b/rsf-admin/src/page/task/TaskPanel.jsx
index 0a001ad..13109b9 100644
--- a/rsf-admin/src/page/task/TaskPanel.jsx
+++ b/rsf-admin/src/page/task/TaskPanel.jsx
@@ -70,7 +70,7 @@
                         <TextField source="maktx" label="table.field.taskItem.maktx" />
                         <TextField source="matnrCode" label="table.field.taskItem.matnrCode" />
                         <TextField source="unit" label="table.field.taskItem.unit" />
-                        <NumberField source="anfme" label="table.field.taskItem.anfme" options={{ maximumFractionDigits: 6 }} />
+                        <NumberField source="anfme" label="table.field.taskItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                         <TextField source="batch" label="table.field.taskItem.batch" />
                         <TextField source="spec" label="table.field.taskItem.spec" />
                         <TextField source="model" label="table.field.taskItem.model" />
diff --git a/rsf-admin/src/page/waitPakin/WaitPakinEdit.jsx b/rsf-admin/src/page/waitPakin/WaitPakinEdit.jsx
index b6f182e..06e0fb0 100644
--- a/rsf-admin/src/page/waitPakin/WaitPakinEdit.jsx
+++ b/rsf-admin/src/page/waitPakin/WaitPakinEdit.jsx
@@ -71,6 +71,12 @@
                                     parse={v => v}
                                     autoFocus
                                 />
+                                <TextInput
+                                    label="table.field.waitPakin.asnCodes"
+                                    source="asnCodes"
+                                    readOnly
+                                    parse={v => v}
+                                />
                                 <SelectInput
                                     label="table.field.waitPakin.flagDefect"
                                     readOnly
diff --git a/rsf-admin/src/page/waitPakin/WaitPakinItemList.jsx b/rsf-admin/src/page/waitPakin/WaitPakinItemList.jsx
index 6e99dac..f430cea 100644
--- a/rsf-admin/src/page/waitPakin/WaitPakinItemList.jsx
+++ b/rsf-admin/src/page/waitPakin/WaitPakinItemList.jsx
@@ -67,7 +67,8 @@
     <TextInput source="maktx" label="table.field.waitPakinItem.maktx" />,
     <NumberInput source="matnrId" label="table.field.waitPakinItem.matnrId" />,
     <TextInput source="matnrCode" label="table.field.waitPakinItem.matnrCode" />,
-    <TextInput source="platOrderCode" label="table.field.asnOrderItem.platOrderCode" />,
+    // <TextInput source="platOrderCode" label="table.field.asnOrderItem.platOrderCode" />, // 瀹㈡埛鍗曞彿宸叉敞閲�
+    <TextInput source="asnCode" label="table.field.waitPakinItem.asnCode" />,
     <TextInput source="platWorkCode" label="table.field.asnOrderItem.platWorkCode" />,
     <TextInput source="projectCode" label="table.field.asnOrderItem.projectCode" />,
     <NumberInput source="anfme" label="table.field.waitPakinItem.anfme" />,
@@ -161,17 +162,22 @@
                 <TextField source="maktx" label="table.field.waitPakinItem.maktx" />,
                 <TextField source="batch" label="table.field.waitPakinItem.batch" />,
                 <NumberField source="matnrId" label="table.field.waitPakinItem.matnrId" />,
-                <NumberField source="anfme" label="table.field.waitPakinItem.anfme" />,
+                <NumberField source="anfme" label="table.field.waitPakinItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
                 <TextField source="unit" label="table.field.waitPakinItem.unit" />,
-                <TextField source="platOrderCode" label="table.field.asnOrderItem.platOrderCode" />,
+                // <TextField source="platOrderCode" label="table.field.asnOrderItem.platOrderCode" />, // 瀹㈡埛鍗曞彿宸叉敞閲�
+                <TextField source="asnCode" label="table.field.waitPakinItem.asnCode" />,
                 <TextField source="platWorkCode" label="table.field.asnOrderItem.platWorkCode" />,
                 <TextField source="projectCode" label="table.field.asnOrderItem.projectCode" />,
-                <NumberField source="workQty" label="table.field.waitPakinItem.workQty" />,
-                <NumberField source="qty" label="table.field.waitPakinItem.qty" />,
+                <NumberField source="workQty" label="table.field.waitPakinItem.workQty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
+                <NumberField source="qty" label="table.field.waitPakinItem.qty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
                 <TextField source="fieldsIndex" label="table.field.waitPakinItem.fieldsIndex" />,
-                <TextField source="isptResult$" label="table.field.waitPakinItem.isptResult" />,
+                // <TextField source="isptResult$" label="table.field.waitPakinItem.isptResult" />, // 璐ㄦ绁ㄥ彿宸叉敞閲�
+                // <TextField source="platItemId" label="table.field.waitPakinItem.platItemId" />, // 鐜板搧绁ㄥ彿宸叉敞閲�
             ]
-            const fields = data.map(el => <TextField key={el.fields} source={`extendFields.[${el.fields}]`} label={el.fieldsAlise} />)
+            // 鐜板搧绁ㄥ彿宸叉敞閲婏細杩囨护鎺� extendFields 涓殑鐜板搧绁ㄥ彿(crushNo) 鍙婂埆鍚嶄负鐜板搧绁ㄥ彿鐨勫瓧娈�
+            const fields = data
+                .filter(el => el.fields !== 'crushNo' && el.fieldsAlise !== '鐜板搧绁ㄥ彿')
+                .map(el => <TextField key={el.fields} source={`extendFields.[${el.fields}]`} label={el.fieldsAlise} />)
             const lastArr = [
                 <TextField source="updateBy$" label="common.field.updateBy" />,
                 <DateField source="updateTime" label="common.field.updateTime" showTime />,
@@ -203,7 +209,7 @@
                     preferenceKey='waitPakinItem'
                     bulkActionButtons={false}
                     rowClick={(id, resource, record) => false}
-                    omit={['id', 'pakinId', 'createTime', 'matnrId', 'createBy', 'memo', 'fieldsIndex', 'platWorkCode', 'projectCode']}
+                    omit={['id', 'pakinId', 'createTime', 'matnrId', 'createBy', 'memo', 'fieldsIndex', 'platWorkCode', 'projectCode', 'platOrderCode', 'isptResult$', 'platItemId']}
                 >
                     {columns.map((column) => column)}
                 </StyledDatagrid>}
diff --git a/rsf-admin/src/page/waitPakin/WaitPakinList.jsx b/rsf-admin/src/page/waitPakin/WaitPakinList.jsx
index e63471c..432e57c 100644
--- a/rsf-admin/src/page/waitPakin/WaitPakinList.jsx
+++ b/rsf-admin/src/page/waitPakin/WaitPakinList.jsx
@@ -69,6 +69,7 @@
 
 const filters = [
     <SearchInput source="condition" alwaysOn />,
+    <TextInput source="asnCode" label="table.field.waitPakin.asnCode" />,
     <TextInput source="code" label="table.field.waitPakin.code" />,
     <TextInput source="barcode" label="table.field.waitPakin.barcode" />,
     <NumberInput source="anfme" label="table.field.waitPakin.anfme" />,
@@ -168,7 +169,7 @@
                     preferenceKey='waitPakin'
                     bulkActionButtons={
                         <>
-                            <CreateTaskButton />
+                            {/* <CreateTaskButton /> 涓嬪彂浠诲姟鎸夐挳鏆備笉浣跨敤 */}
                             {/* <BulkDeleteButton mutationMode={OPERATE_MODE} /> */}
                         </>}
                     rowClick={false}
@@ -176,8 +177,9 @@
                 >
                     <NumberField source="id" />
                     <TextField source="code" label="table.field.waitPakin.code" />
+                    <TextField source="asnCodes" label="table.field.waitPakin.asnCodes" sortable={false} />
                     <TextField source="barcode" label="table.field.waitPakin.barcode" />
-                    <NumberField source="anfme" label="table.field.waitPakin.anfme" />
+                    <NumberField source="anfme" label="table.field.waitPakin.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                     <TextField source="ioStatus$" label="table.field.waitPakin.ioStatus" sortable={false} />
                     <TextField source="updateBy$" label="common.field.updateBy" />
                     <DateField source="updateTime" label="common.field.updateTime" showTime />
@@ -186,7 +188,7 @@
                     <TextField source="memo" label="common.field.memo" sortable={false} />
                     <WrapperField cellClassName="opt" label="common.field.opt">
                         <EditButton label="toolbar.detail" sx={{ padding: '1px', fontSize: '.75rem' }} />
-                        <CreateTaskRowButton />
+                        {/* <CreateTaskRowButton /> 涓嬪彂浠诲姟鎸夐挳鏆備笉浣跨敤 */}
                         <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
                     </WrapperField>
                 </StyledDatagrid>
diff --git a/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx b/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx
index 60d1b75..b3f5fe2 100644
--- a/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx
+++ b/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx
@@ -186,9 +186,9 @@
                 <TextField key="maktx" source="maktx" label="table.field.warehouseAreasItem.matnrName" />,
                 <TextField key="matnrCode" source="matnrCode" label="table.field.warehouseAreasItem.matnrCode" />,
                 <TextField key="trackCode" source="trackCode" label="table.field.warehouseAreasItem.barcode" />,
-                <NumberField key="anfme" source="anfme" label="table.field.warehouseAreasItem.anfme" />,
-                <NumberField key="workQty" source="workQty" label="table.field.warehouseAreasItem.workQty" />,
-                <NumberField key="qty" source="qty" label="table.field.warehouseAreasItem.qty" />,
+                <NumberField key="anfme" source="anfme" label="table.field.warehouseAreasItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
+                <NumberField key="workQty" source="workQty" label="table.field.warehouseAreasItem.workQty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
+                <NumberField key="qty" source="qty" label="table.field.warehouseAreasItem.qty" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />,
                 <TextField source="platOrderCode" label="table.field.asnOrderItem.platOrderCode" />,
                 <TextField source="platWorkCode" label="table.field.asnOrderItem.platWorkCode" />,
                 <TextField source="projectCode" label="table.field.asnOrderItem.projectCode" />,
diff --git a/rsf-admin/src/page/warehouseAreasItem/WarehouseIsptResult.jsx b/rsf-admin/src/page/warehouseAreasItem/WarehouseIsptResult.jsx
index 4e2d90a..bb780ad 100644
--- a/rsf-admin/src/page/warehouseAreasItem/WarehouseIsptResult.jsx
+++ b/rsf-admin/src/page/warehouseAreasItem/WarehouseIsptResult.jsx
@@ -112,7 +112,7 @@
                         <TextField source="label" label="table.field.qlyIsptItem.label" />
                         <TextField source="splrBatch" label="table.field.qlyIsptItem.splrBatch" />
                         <NumberField source="dlyQty" label="table.field.qlyIsptItem.dlyQty" />
-                        <NumberField source="anfme" label="table.field.qlyIsptItem.anfme" />
+                        <NumberField source="anfme" label="table.field.qlyIsptItem.anfme" options={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }} />
                         <TextField source="splrName" label="table.field.qlyIsptItem.splrName" />
                         <NumberField source="isptResult$" label="table.field.qlyIsptItem.isptResult" />
                     </StyledDatagrid>
diff --git a/rsf-admin/src/utils/common.js b/rsf-admin/src/utils/common.js
index 3874cd3..a230a7f 100644
--- a/rsf-admin/src/utils/common.js
+++ b/rsf-admin/src/utils/common.js
@@ -1,13 +1,16 @@
 
-/** 搴撳瓨/鏁伴噺鏄剧ず锛氫繚鐣欐渶澶�6浣嶅皬鏁帮紝鍘绘帀鏈熬澶氫綑鐨�0锛堜笉寮哄埗琛ラ浂锛� */
+/** 鍓嶇鏁伴噺鏄剧ず锛氱粺涓�淇濈暀2浣嶅皬鏁帮紙浠呭睍绀猴紝鍚庣涓嶅彉锛� */
 export const formatQuantity = (value) => {
-    if (value == null || value === '') return '0';
+    if (value == null || value === '') return '0.00';
     const n = Number(value);
-    if (Number.isNaN(n)) return '0';
-    if (n < 0) return '0';
-    return n % 1 === 0 ? String(n) : n.toFixed(6).replace(/\.?0+$/, '');
+    if (Number.isNaN(n)) return '0.00';
+    if (n < 0) return '0.00';
+    return n.toFixed(2);
 };
 
+/** 鐢ㄤ簬 react-admin NumberField 鐨勬暟閲忓睍绀� options锛�2浣嶅皬鏁帮級 */
+export const QTY_NUMBER_OPTIONS = { minimumFractionDigits: 2, maximumFractionDigits: 2 };
+
 /** 鏍¢獙鏈�澶� N 浣嶅皬鏁帮紝鐢ㄤ簬鏁伴噺绫诲瓧娈碉紱瓒呰繃鏃惰繑鍥為敊璇俊鎭苟闃绘鎻愪氦 */
 export const maxDecimalPlaces = (maxDecimals, message) => {
     const factor = Math.pow(10, maxDecimals);
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/config/GlobalExceptionHandler.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/config/GlobalExceptionHandler.java
index 655e5e0..ee58bbc 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/config/GlobalExceptionHandler.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/config/GlobalExceptionHandler.java
@@ -28,10 +28,9 @@
     @ExceptionHandler(Exception.class)
     public ResponseEntity<CommonResponse> handleException(Exception e) {
         log.error("绯荤粺寮傚父", e);
-        String msg = e.getMessage() != null ? e.getMessage() : "绯荤粺寮傚父";
         CommonResponse r = new CommonResponse();
         r.setCode(500);
-        r.setMsg(msg);
+        r.setMsg("绯荤粺寮傚父");
         r.setData(ResultData.fail());
         return ResponseEntity.status(HttpStatus.OK).body(r);
     }
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/dto/OrderDto.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/dto/OrderDto.java
index 819e1ad..cc86846 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/dto/OrderDto.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/dto/OrderDto.java
@@ -17,9 +17,9 @@
     private String orderNo;
 
     /**
-     * PO鍗曞彿
+     * 鍗曟嵁鍐呯爜
      */
-    @ApiModelProperty(value = "PO鍗曞彿")
+    @ApiModelProperty(value = "鍗曟嵁鍐呯爜")
     private String poCode;
 
     /**
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/ErpOpParams.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/ErpOpParams.java
index 4012b5e..ed849f8 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/ErpOpParams.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/ErpOpParams.java
@@ -1,11 +1,17 @@
 package com.vincent.rsf.openApi.entity.params;
 
 import com.fasterxml.jackson.annotation.JsonAlias;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.AccessLevel;
 import lombok.Data;
+import lombok.Setter;
 import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -29,11 +35,27 @@
     @ApiModelProperty(value = "涓氬姟绫诲瀷锛屽锛氶噰璐叆搴撳崟銆侀攢鍞嚭搴撳崟銆佽皟鎷ㄧ敵璇峰崟绛�", required = true)
     private String wkType;
 
-    @ApiModelProperty(value = "涓氬姟鏃ユ湡锛屾椂闂存埑绮剧‘鍒扮", required = true)
-    private Long businessTime;
+    @ApiModelProperty(value = "娣诲姞鏃堕棿锛屾敮鎸� yyyy-MM-dd HH:mm:ss 鎴栨椂闂存埑锛堢/姣锛�")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Setter(AccessLevel.NONE)
+    private Date businessTime;
 
-    @ApiModelProperty(value = "鍒涘缓鏃ユ湡锛屾椂闂存埑绮剧‘鍒扮", required = true)
-    private Long createTime;
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿锛屾敮鎸� yyyy-MM-dd HH:mm:ss 鎴栨椂闂存埑锛堢/姣锛�")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Setter(AccessLevel.NONE)
+    private Date createTime;
+
+    @JsonDeserialize(using = FlexibleDateDeserializer.class)
+    public void setBusinessTime(Date businessTime) {
+        this.businessTime = businessTime;
+    }
+
+    @JsonDeserialize(using = FlexibleDateDeserializer.class)
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
 
     @ApiModelProperty(value = "璁㈠崟鏄庣粏", required = true)
     private List<WmsOrderItemParam> orderItems;
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/ExMsgCallbackParams.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/ExMsgCallbackParams.java
index d980d2f..eef96b5 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/ExMsgCallbackParams.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/ExMsgCallbackParams.java
@@ -22,6 +22,6 @@
     @ApiModelProperty("鏈哄櫒浜虹紪鐮�")
     private String robotCode;
 
-    @ApiModelProperty("瀹瑰櫒鐮�")
+    @ApiModelProperty("鏂欑鐮�")
     private String zpallet;
 }
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/FlexibleDateDeserializer.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/FlexibleDateDeserializer.java
new file mode 100644
index 0000000..a13479e
--- /dev/null
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/FlexibleDateDeserializer.java
@@ -0,0 +1,60 @@
+package com.vincent.rsf.openApi.entity.params;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonToken;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.TimeZone;
+
+/**
+ * 鏀寔鏃堕棿鎴筹紙绉�/姣锛変笌瀛楃涓� "yyyy-MM-dd HH:mm:ss" 鐨� Date 鍙嶅簭鍒楀寲锛屼笌 @JsonFormat 閰嶅悎浣跨敤銆�
+ */
+public class FlexibleDateDeserializer extends JsonDeserializer<Date> {
+
+    private static final long MS_THRESHOLD = 10_000_000_000L; // 澶т簬姝や负姣
+    private static final String PATTERN = "yyyy-MM-dd HH:mm:ss";
+    private static final TimeZone DEFAULT_TZ = TimeZone.getTimeZone("GMT+8");
+
+    @Override
+    public Date deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
+        JsonToken t = p.getCurrentToken();
+        if (t == JsonToken.VALUE_NUMBER_INT || t == JsonToken.VALUE_NUMBER_FLOAT) {
+            long v = p.getLongValue();
+            long ms = v >= MS_THRESHOLD ? v : v * 1000;
+            return new Date(ms);
+        }
+        if (t == JsonToken.VALUE_STRING) {
+            String s = p.getText().trim();
+            if (s.isEmpty()) return null;
+            try {
+                long v = Long.parseLong(s);
+                long ms = v >= MS_THRESHOLD ? v : v * 1000;
+                return new Date(ms);
+            } catch (NumberFormatException ignored) {
+            }
+            try {
+                SimpleDateFormat sdf = new SimpleDateFormat(PATTERN);
+                sdf.setTimeZone(DEFAULT_TZ);
+                sdf.setLenient(false);
+                return sdf.parse(s);
+            } catch (Exception ignored) {
+            }
+            if (s.length() >= 10 && s.charAt(4) == '-' && s.charAt(7) == '-') {
+                try {
+                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+                    sdf.setTimeZone(DEFAULT_TZ);
+                    sdf.setLenient(false);
+                    return sdf.parse(s.substring(0, 10));
+                } catch (Exception ignored) {
+                }
+            }
+            return null;
+        }
+        if (t == JsonToken.VALUE_NULL) return null;
+        return (Date) ctxt.handleUnexpectedToken(Date.class, p);
+    }
+}
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/FlexibleTimestampDeserializer.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/FlexibleTimestampDeserializer.java
new file mode 100644
index 0000000..025526e
--- /dev/null
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/FlexibleTimestampDeserializer.java
@@ -0,0 +1,64 @@
+package com.vincent.rsf.openApi.entity.params;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonToken;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.TimeZone;
+
+/**
+ * 灏� JSON 鍙嶅簭鍒楀寲涓� Unix 鏃堕棿鎴筹紙绉掞紝Long锛夈��
+ * 鏀寔锛氭暟瀛楋紙绉掓垨姣锛夈�佸瓧绗︿覆 "yyyy-MM-dd HH:mm:ss" 鎴� "yyyy-MM-dd"銆�
+ */
+public class FlexibleTimestampDeserializer extends JsonDeserializer<Long> {
+
+    private static final long MS_THRESHOLD = 10_000_000_000L; // 澶т簬姝や负姣
+    private static final TimeZone DEFAULT_TZ = TimeZone.getTimeZone("GMT+8");
+
+    @Override
+    public Long deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
+        JsonToken t = p.getCurrentToken();
+        if (t == JsonToken.VALUE_NUMBER_INT || t == JsonToken.VALUE_NUMBER_FLOAT) {
+            long v = p.getLongValue();
+            return v >= MS_THRESHOLD ? v / 1000 : v;
+        }
+        if (t == JsonToken.VALUE_STRING) {
+            String s = p.getText().trim();
+            if (s.isEmpty()) {
+                return null;
+            }
+            try {
+                long v = Long.parseLong(s);
+                return v >= MS_THRESHOLD ? v / 1000 : v;
+            } catch (NumberFormatException ignored) {
+            }
+            try {
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                sdf.setTimeZone(DEFAULT_TZ);
+                sdf.setLenient(false);
+                Date d = sdf.parse(s);
+                return d != null ? d.getTime() / 1000 : null;
+            } catch (Exception ignored) {
+            }
+            if (s.length() >= 10 && s.charAt(4) == '-' && s.charAt(7) == '-') {
+                try {
+                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+                    sdf.setTimeZone(DEFAULT_TZ);
+                    sdf.setLenient(false);
+                    Date d = sdf.parse(s.substring(0, 10));
+                    return d != null ? d.getTime() / 1000 : null;
+                } catch (Exception ignored) {
+                }
+            }
+            return null;
+        }
+        if (t == JsonToken.VALUE_NULL) {
+            return null;
+        }
+        return (Long) ctxt.handleUnexpectedToken(Long.class, p);
+    }
+}
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/ReportDataParam.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/ReportDataParam.java
index 9bbfba7..c91fb75 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/ReportDataParam.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/ReportDataParam.java
@@ -28,7 +28,7 @@
     @ApiModelProperty("閲囪喘閫�璐у崟鍙�/鐢熶骇鍗曞彿/")
     private String OrderNO;
 
-    @ApiModelProperty("鐜板搧绁ㄥ彿")
+    @ApiModelProperty("鐜板搧绁ㄥ彿(宸插簾寮�)")
     private String GoodsNO;
 
     @ApiModelProperty("鐩樼偣鏁伴噺")
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsErpServiceImpl.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsErpServiceImpl.java
index 7b1a0d0..89571c8 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsErpServiceImpl.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsErpServiceImpl.java
@@ -136,6 +136,9 @@
             log.info("order/add 鏀跺埌 operateType=3锛岃蛋缁熶竴鍙栨秷閫昏緫锛� {}", params.getOrderNo());
             return doCancel(params);
         }
+        if (params.getOrderInternalCode() == null || params.getOrderInternalCode().trim().isEmpty()) {
+            throw new CoolException("鍗曟嵁鍐呯爜涓嶈兘涓虹┖锛侊紒");
+        }
         Map<String, Object> mapParams = toServerOrderMap(params);
         List<Map<String, Object>> maps = Collections.singletonList(mapParams);
         log.info("鏂板/淇敼鍗曟嵁锛岃姹傚弬鏁帮細 {}", JSONArray.toJSONString(maps));
@@ -150,9 +153,12 @@
     private Map<String, Object> toServerOrderMap(ErpOpParams params) {
         Map<String, Object> m = new HashMap<>();
         m.put("orderNo", params.getOrderNo());
+        m.put("orderInternalCode", params.getOrderInternalCode());
+        m.put("stationId", params.getStationId());
         m.put("wkType", params.getWkType());
         m.put("type", params.getOrderType() != null ? String.valueOf(params.getOrderType()) : null);
         m.put("orderId", params.getOrderId());
+        m.put("operateType", params.getOperateType());
         double anfmeSum = 0;
         if (params.getOrderItems() != null) {
             List<Map<String, Object>> items = params.getOrderItems().stream()
@@ -167,9 +173,9 @@
         }
         m.put("anfme", anfmeSum);
         if (params.getBusinessTime() != null) {
-            m.put("arrTime", new Date(params.getBusinessTime() * 1000));
+            m.put("arrTime", params.getBusinessTime());
         } else if (params.getCreateTime() != null) {
-            m.put("arrTime", new Date(params.getCreateTime() * 1000));
+            m.put("arrTime", params.getCreateTime());
         }
         return m;
     }
@@ -184,6 +190,10 @@
         m.put("model", item.getModel());
         m.put("unit", item.getUnit());
         m.put("batch", item.getBatch());
+        m.put("planNo", item.getPlanNo());
+        m.put("palletId", item.getPalletId());
+        m.put("targetWareHouseId", item.getTargetWareHouseId());
+        m.put("sourceWareHouseId", item.getSourceWareHouseId());
         return m;
     }
 
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/ReportDataParam.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/ReportDataParam.java
index 1b31828..4f68e75 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/ReportDataParam.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/ReportDataParam.java
@@ -28,7 +28,7 @@
     @ApiModelProperty("閲囪喘閫�璐у崟鍙�/鐢熶骇鍗曞彿/")
     private String OrderNO;
 
-    @ApiModelProperty("鐜板搧绁ㄥ彿")
+    @ApiModelProperty("鐜板搧绁ㄥ彿(宸插簾寮�)")
     private String GoodsNO;
 
     @ApiModelProperty("鐩樼偣鏁伴噺")
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/SyncOrderParams.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/SyncOrderParams.java
index 71a0c16..2573e5e 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/SyncOrderParams.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/SyncOrderParams.java
@@ -28,12 +28,21 @@
     @ApiModelProperty("鍗曞彿")
     private String orderNo;
 
+    @ApiModelProperty("鍗曟嵁鍐呯爜锛屽敮涓�鏍囪瘑")
+    private String orderInternalCode;
+
+    @ApiModelProperty("鍏�/鍑哄簱鎺ラ┏绔欑偣")
+    private String stationId;
+
     @ApiModelProperty("鍘熷簱浣�")
     private String orgLoc;
 
     @ApiModelProperty("璁㈠崟ID")
     private Long orderId;
 
+    @ApiModelProperty("鎿嶄綔绫诲瀷锛�1 鏂板锛�2 淇敼锛�3 鍙栨秷")
+    private Integer operateType;
+
     @ApiModelProperty("鏁伴噺")
     private Double anfme;
 
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/SyncOrdersItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/SyncOrdersItem.java
index 105f5e8..59a7cc9 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/SyncOrdersItem.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/SyncOrdersItem.java
@@ -57,6 +57,18 @@
     @ApiModelProperty("搴撳瓨鎵规")
     private String batch;
 
+    @ApiModelProperty("璁″垝璺熻釜鍙�")
+    private String planNo;
+
+    @ApiModelProperty("鎵樼洏鐮�")
+    private String palletId;
+
+    @ApiModelProperty("寤鸿鍏ュ簱浠撳簱")
+    private String targetWareHouseId;
+
+    @ApiModelProperty("寤鸿鍑哄簱浠撳簱")
+    private String sourceWareHouseId;
+
     @ApiModelProperty("宸叉敹鏁伴噺")
     private Double qty;
 
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/TaskInParam.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/TaskInParam.java
index 2291035..4f689f4 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/TaskInParam.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/params/TaskInParam.java
@@ -16,8 +16,8 @@
     @ApiModelProperty("浣滀笟绔欑偣 or 鏉ユ簮绔欑偣")
     private String sourceStaNo; //浣滀笟绔欑偣 or 鏉ユ簮绔欑偣
 
-    @ApiModelProperty("瀹瑰櫒鏉$爜")
-    private String barcode; //瀹瑰櫒鏉$爜
+    @ApiModelProperty("鏂欑鐮�")
+    private String barcode; //鏂欑鐮�
 
     @ApiModelProperty("搴撲綅绫诲瀷")
     private Integer locType1; //搴撲綅绫诲瀷
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaCheckOrderController.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaCheckOrderController.java
index 912479a..efc9b16 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaCheckOrderController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaCheckOrderController.java
@@ -40,7 +40,7 @@
 
     @PreAuthorize("hasAuthority('manager:task:list')")
     @PostMapping("/getCheckTaskItemList2")
-    @ApiOperation("鏌ヨ鐩樼偣浠诲姟鍒楄〃,鐩存帴鎵鍣ㄧ爜")
+    @ApiOperation("鏌ヨ鐩樼偣浠诲姟鍒楄〃,鐩存帴鎵枡绠辩爜")
     public R getCheckTaskItemList2(@RequestBody Map<String, String> map) {
 
         return pdaCheckOrderService.getCheckTaskItemList2(map.get("barcode"));
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaOutStockController.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaOutStockController.java
index d885a21..f6f532f 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaOutStockController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaOutStockController.java
@@ -51,7 +51,7 @@
 
     @PreAuthorize("hasAuthority('manager:task:list')")
     @PostMapping("/getContainerWaveList")
-    @ApiOperation("鏍规嵁瀹瑰櫒鐮佹煡璇㈡尝娆″強鍑哄簱鍗�")
+    @ApiOperation("鏍规嵁鏂欑鐮佹煡璇㈡尝娆″強鍑哄簱鍗�")
     public R getContainerWaveList(@RequestBody Map<String, String> map) {
         return pdaOutStockService.getContainerWaveList(map);
     }
@@ -73,7 +73,7 @@
 
     @PreAuthorize("hasAuthority('manager:task:list')")
     @PostMapping("/saveWavePick")
-    @ApiOperation("鏍规嵁瀹瑰櫒鐮佹煡璇㈡尝娆″強鍑哄簱鍗�")
+    @ApiOperation("鏍规嵁鏂欑鐮佹煡璇㈡尝娆″強鍑哄簱鍗�")
     public R saveWavePick(@RequestBody ContainerWaveParam containerWaveParam) {
 
         return pdaOutStockService.saveWavePick(containerWaveParam,getLoginUserId());
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/InspectDetlDto.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/InspectDetlDto.java
index bd1f5ad..cc46f55 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/InspectDetlDto.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/InspectDetlDto.java
@@ -16,7 +16,7 @@
     private String code;
     @ApiModelProperty("鍗曞彿ID")
     private Long id;
-    @ApiModelProperty("PO鍗曞彿")
+    @ApiModelProperty("鍗曟嵁鍐呯爜")
     private String poCode;
     @ApiModelProperty("鏄庣粏")
     private List<InspectItemDto> items;
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/ExMsgParams.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/ExMsgParams.java
index 747c704..6053d32 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/ExMsgParams.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/ExMsgParams.java
@@ -21,6 +21,6 @@
     @ApiModelProperty("灏忚溅缂栧彿 ")
     private String robotCode;
 
-    @ApiModelProperty("瀹瑰櫒鐮�")
+    @ApiModelProperty("鏂欑鐮�")
     private String zpallet;
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/AgvServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/AgvServiceImpl.java
index 901ad04..47c6de7 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/AgvServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/AgvServiceImpl.java
@@ -220,7 +220,7 @@
 
     private BasStation checkStaStatus(String barcode, String sta) {
         if (Cools.isEmpty(barcode)) {
-            throw new CoolException("瀹瑰櫒鐮佷笉鑳戒负绌�");
+            throw new CoolException("鏂欑鐮佷笉鑳戒负绌�");
         }
         if (Cools.isEmpty(sta)) {
             throw new CoolException("鎺ラ┏浣嶆潯鐮佷笉鑳戒负绌�");
@@ -230,7 +230,7 @@
                 .eq(WaitPakin::getIoStatus, PakinIOStatus.PAKIN_IO_STATUS_DONE.val)
         );
         if (Cools.isEmpty(waitPakin)) {
-            throw new CoolException("瀹瑰櫒鐮佹湭鎵惧埌缁勬墭淇℃伅,璇锋鏌ョ粍鎵樼姸鎬�");
+            throw new CoolException("鏂欑鐮佹湭鎵惧埌缁勬墭淇℃伅,璇锋鏌ョ粍鎵樼姸鎬�");
         }
         BasStation isBarcodeSta = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
                         .eq(BasStation::getBarcode, barcode)
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
index 5c52b70..1b89038 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
@@ -14,6 +14,7 @@
 import com.vincent.rsf.server.common.security.JwtSubject;
 import com.vincent.rsf.server.common.utils.FieldsUtils;
 import com.vincent.rsf.server.common.utils.JwtUtil;
+import com.vincent.rsf.server.common.utils.QuantityUtils;
 import com.vincent.rsf.server.manager.controller.params.GenerateTaskParams;
 import com.vincent.rsf.server.manager.controller.params.IsptItemsParams;
 import com.vincent.rsf.server.manager.controller.params.WaitPakinParam;
@@ -258,8 +259,9 @@
             throw new CoolException("鏁版嵁閿欒锛氫富鍗曚笉瀛樺湪锛侊紒");
         }
         //TODO /**鏀惰揣鏁伴噺绱姞锛�1. 浼氬嚭瓒呮敹鎯呭喌 2. 浼氭湁鏀惰揣涓嶈冻鎯呭喌*/
-        Double rcptedQty = Math.round((wkOrder.getQty() + receiptQty) * 1000000) / 1000000.0;
-        wkOrder.setQty(rcptedQty).setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_EXCE_ING.val);
+        Double rcptedQty = QuantityUtils.add(wkOrder.getQty(), receiptQty);
+        // 鏂伴『搴忥細鏈墽琛�(缁勬墭)鈫掍换鍔℃墽琛屼腑鈫掑凡瀹屾垚锛屼笉鍐嶈缃墽琛屼腑/鏀惰揣瀹屾垚
+        wkOrder.setQty(rcptedQty); // .setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_EXCE_ING.val)
         if (!asnOrderMapper.updateById(wkOrder)) {
             throw new CoolException("宸叉敹璐ф暟閲忎慨鏀瑰け璐ワ紒锛�");
         }
@@ -306,14 +308,14 @@
                 throw new CoolException("璇疯緭鍏ユ纭殑鏃堕棿鏍煎紡锛侊紒");
             }
 
-            Double itemRcptQty = Math.round((dto.getReceiptQty() + orderItem.getQty()) * 1000000) / 1000000.0;
+            Double itemRcptQty = QuantityUtils.add(dto.getReceiptQty(), orderItem.getQty());
             Boolean allowOver = false;
             if (!Objects.isNull(config)) {
                 if (Boolean.parseBoolean(config.getVal())) {
                     allowOver = true;
                 }
             }
-            if (itemRcptQty.compareTo(orderItem.getAnfme()) > 0 && !allowOver) {
+            if (QuantityUtils.compare(itemRcptQty, orderItem.getAnfme()) > 0 && !allowOver) {
                 throw new CoolException("鏀惰揣鏁伴噺涓嶈兘澶т簬璁″垝鏁伴噺锛侊紒");
             }
 
@@ -350,18 +352,18 @@
             if (asnOrderItemMapper.updateById(orderItem) < 1) {
                 throw new CoolException("閫氱煡鍗曟槑缁嗘暟閲忎慨鏀瑰け璐ワ紒锛�");
             }
-            /**淇濆瓨鏄庣粏鑷虫敹璐у尯**/
-            extracted(loginUserId, dto, areasItem, orderItem, wkOrder, matnr);
-
+            // 鏀惰揣鍖哄凡鍋滅敤锛屼笉鍐嶄繚瀛樿嚦鏀惰揣鍖�
+            // extracted(loginUserId, dto, areasItem, orderItem, wkOrder, matnr);
         }
 
-        WkOrder order = asnOrderMapper.getOne(new LambdaQueryWrapper<WkOrder>().eq(WkOrder::getCode, asnCode));
-        if (order.getQty().compareTo(order.getAnfme()) >= 0.00) {
-            order.setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_RECEIPT_DONE.val).setRleStatus(Short.valueOf("1"));
-            if (!asnOrderMapper.updateById(order)) {
-                throw new CoolException("璁㈠崟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
-            }
-        }
+        // 鏂伴『搴忥細鏈墽琛�(缁勬墭)鈫掍换鍔℃墽琛屼腑鈫掑凡瀹屾垚锛屼笉鍐嶈缃敹璐у畬鎴�
+        // WkOrder order = asnOrderMapper.getOne(new LambdaQueryWrapper<WkOrder>().eq(WkOrder::getCode, asnCode));
+        // if (order.getQty().compareTo(order.getAnfme()) >= 0.00) {
+        //     order.setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_RECEIPT_DONE.val).setRleStatus(Short.valueOf("1"));
+        //     if (!asnOrderMapper.updateById(order)) {
+        //         throw new CoolException("璁㈠崟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+        //     }
+        // }
 
         return R.ok("鏀惰揣鎴愬姛锛侊紒");
     }
@@ -390,7 +392,7 @@
                 .setUnit(orderItem.getStockUnit())
                 .setStockUnit(orderItem.getStockUnit())
                 .setBatch(StringUtils.isBlank(orderItem.getBatch()) ? SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_RECEIPT_BATCH, dto) : orderItem.getBatch())
-                .setAnfme(dto.getReceiptQty())
+                .setAnfme(QuantityUtils.roundToScale(dto.getReceiptQty()))
                 .setSplrBatch(dto.getSplrBatch())
                 .setMatnrCode(matnr.getCode())
                 .setUpdateBy(loginUserId)
@@ -419,8 +421,7 @@
 
         if (!Objects.isNull(serviceOne)) {
             item.setId(serviceOne.getId());
-            Double anfme = Math.round((item.getAnfme() + serviceOne.getAnfme()) * 1000000) / 1000000.0;
-            item.setAnfme(anfme);
+            item.setAnfme(QuantityUtils.add(item.getAnfme(), serviceOne.getAnfme()));
         }
 
         //鏈川妫�
@@ -511,11 +512,13 @@
      * @description 鑾峰彇鏀惰揣鍖�
      * @time 2025/3/11 10:12
      */
+    /** 鏀惰揣鍖哄凡鍋滅敤锛岃繑鍥炵┖鍒楄〃 */
     @Override
     public R getReceiptAreas() {
-        List<WarehouseAreas> areas = warehouseAreasService.list(new LambdaQueryWrapper<WarehouseAreas>()
-                .eq(WarehouseAreas::getType, WarehouseAreaType.WAREHOUSE_AREA_RECEIPT.type));
-        return R.ok(areas);
+        // List<WarehouseAreas> areas = warehouseAreasService.list(new LambdaQueryWrapper<WarehouseAreas>()
+        //         .eq(WarehouseAreas::getType, WarehouseAreaType.WAREHOUSE_AREA_RECEIPT.type));
+        // return R.ok(areas);
+        return R.ok(Collections.emptyList());
     }
 
     /**
@@ -552,7 +555,7 @@
 //            throw new CoolException("绁ㄥ彿涓嶈兘涓虹┖锛侊紒");
 //        }
 //        if (Objects.isNull(code)) {
-//            throw new CoolException("瀹瑰櫒鍙蜂笉鑳戒负绌猴紒锛�");
+//            throw new CoolException("鏂欑鐮佷笉鑳戒负绌猴紒锛�");
 //        }
 //        BasContainer container = basContainerService.getOne(new LambdaQueryWrapper<BasContainer>().eq(BasContainer::getCode, barcode));
 //        if (Objects.isNull(container)) {
@@ -620,34 +623,59 @@
             return R.ok(resultList);
         }
         
-        //TODO 鍚庣画闇�鏍规嵁绛栫暐閰嶇疆锛岃幏鍙栫粍鎷栨暟鎹�傚锛氭贩瑁咃紝鎸夋壒娆℃贩瑁呯瓑
-        LambdaQueryWrapper<WarehouseAreasItem> queryWrapper = new LambdaQueryWrapper<>();
-        
-        // 濡傛灉鏈堿SN鍗曞彿锛屽垯鍙煡璇㈣鍗曞彿涓嬬殑鐗╂枡锛圓SN鍗曞彿浣滀负蹇呴』鏉′欢锛�
+        // 鏀惰揣鍖哄凡鍋滅敤锛氭湁ASN鍗曞彿鏃朵粠璁㈠崟鏄庣粏鏌ュ彲缁勬墭鐗╂枡锛涘彲缁勭洏鏁伴噺 = 璁″垝鏁伴噺 - 宸茬粍鎵樻暟閲� - 宸蹭笂鏋舵暟閲�
         if (!Cools.isEmpty(asnCode)) {
-            // ASN鍗曞彿浣滀负蹇呴』鏉′欢
-            queryWrapper.eq(WarehouseAreasItem::getAsnCode, asnCode);
-            
-            // 濡傛灉鍚屾椂鏈夌墿鏂欑紪鐮侊紝鍒欐煡璇㈣ASN鍗曞彿涓嬬殑璇ョ墿鏂�
-            if (!Cools.isEmpty(matnrCode)) {
-                queryWrapper.eq(WarehouseAreasItem::getMatnrCode, matnrCode);
+            WkOrder order = asnOrderMapper.getOne(new LambdaQueryWrapper<WkOrder>().eq(WkOrder::getCode, asnCode));
+            if (order == null) {
+                logger.info("鏈壘鍒癆SN鍗曞彿: {}", asnCode);
+                return R.ok(Collections.emptyList());
             }
-            
-            // 濡傛灉鍚屾椂鏈夋壒娆★紝鍒欐煡璇㈣ASN鍗曞彿涓嬬殑璇ユ壒娆�
-            if (!Cools.isEmpty(batch)) {
-                queryWrapper.eq(WarehouseAreasItem::getSplrBatch, batch);
+            // 鎸夋槑缁嗘眹鎬诲凡缁勬墭鏁伴噺锛堢粍鎵樻暟閲忎笉浼氬洜鏀瑰崟鑰屽彉锛�
+            List<WaitPakinItem> pakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>().eq(WaitPakinItem::getAsnId, order.getId()));
+            Map<Long, Double> palletizedByItemId = pakinItems.stream()
+                    .collect(Collectors.groupingBy(WaitPakinItem::getAsnItemId, Collectors.summingDouble(w -> w.getAnfme() != null ? w.getAnfme() : 0.0)));
+            palletizedByItemId.replaceAll((k, v) -> QuantityUtils.roundToScale(v));
+            LambdaQueryWrapper<WkOrderItem> itemWrapper = new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, order.getId());
+            if (!Cools.isEmpty(matnrCode)) itemWrapper.eq(WkOrderItem::getMatnrCode, matnrCode);
+            if (!Cools.isEmpty(batch)) itemWrapper.eq(WkOrderItem::getSplrBatch, batch);
+            if (!Objects.isNull(fieldIndex)) itemWrapper.eq(WkOrderItem::getFieldsIndex, fieldIndex);
+            if (!Cools.isEmpty(code)) itemWrapper.eq(WkOrderItem::getTrackCode, code);
+            List<WkOrderItem> orderItems = asnOrderItemMapper.selectList(itemWrapper);
+            List<WarehouseAreasItem> list = new ArrayList<>();
+            for (WkOrderItem oi : orderItems) {
+                Double anfme = QuantityUtils.roundToScale(oi.getAnfme() != null ? oi.getAnfme() : 0.0);
+                Double qty = QuantityUtils.roundToScale(oi.getQty() != null ? oi.getQty() : 0.0);
+                Double workQty = palletizedByItemId.getOrDefault(oi.getId(), 0.0); // 宸茬粍鎵樻暟閲�
+                if (QuantityUtils.compare(QuantityUtils.subtract(QuantityUtils.subtract(anfme, workQty), qty), 0.0) <= 0) continue; // 鍙粍鐩樻暟閲�<=0 涓嶈繑鍥�
+                WarehouseAreasItem v = new WarehouseAreasItem();
+                v.setId(oi.getId());
+                v.setAsnItemId(oi.getId());
+                v.setAsnId(order.getId());
+                v.setAsnCode(order.getCode());
+                v.setAnfme(anfme);
+                v.setQty(qty);
+                v.setWorkQty(QuantityUtils.roundToScale(workQty));
+                v.setMatnrCode(oi.getMatnrCode());
+                v.setMaktx(oi.getMaktx());
+                v.setSplrBatch(oi.getSplrBatch());
+                v.setPlatItemId(oi.getPlatItemId());
+                v.setStockUnit(oi.getStockUnit());
+                v.setUnit(oi.getStockUnit());
+                v.setMatnrId(oi.getMatnrId());
+                v.setFieldsIndex(oi.getFieldsIndex());
+                v.setTrackCode(oi.getTrackCode());
+                if (oi.getFieldsIndex() != null) {
+                    v.setExtendFields(FieldsUtils.getFields(oi.getFieldsIndex()));
+                }
+                list.add(v);
             }
-            
-            // 濡傛灉鍚屾椂鏈夌エ鍙凤紝鍒欐煡璇㈣ASN鍗曞彿涓嬬殑璇ョエ鍙�
-            if (!Objects.isNull(fieldIndex)) {
-                queryWrapper.eq(WarehouseAreasItem::getFieldsIndex, fieldIndex);
-            }
-            
-            // 濡傛灉鍚屾椂鏈夎窡韪爜锛屽垯鏌ヨ璇SN鍗曞彿涓嬬殑璇ヨ窡韪爜
-            if (!Cools.isEmpty(code)) {
-                queryWrapper.eq(WarehouseAreasItem::getTrackCode, code);
-            }
-        } else {
+            logger.info("=== 浠庤鍗曟槑缁嗘煡璇㈠彲缁勬墭鐗╂枡锛堟敹璐у尯宸插仠鐢級asnCode: {} 杩斿洖 {} 鏉�", asnCode, list.size());
+            return R.ok(list);
+        }
+        
+        // 鏃燗SN鍗曞彿鏃舵寜鍏朵粬鏉′欢鏌ワ紙鏀惰揣鍖哄凡鍋滅敤锛屾澶勪粎淇濈暀鍏煎锛岄�氬父鏃犳暟鎹級
+        LambdaQueryWrapper<WarehouseAreasItem> queryWrapper = new LambdaQueryWrapper<>();
+        {
             // 娌℃湁ASN鍗曞彿鏃讹紝鍙互鎵弿浠绘剰鐗╂枡缁勬墭锛屼娇鐢∣R杩炴帴澶氫釜鏉′欢
             // 缁熻鏈夋晥鏉′欢鏁伴噺
             int conditionCount = 0;
@@ -1017,7 +1045,7 @@
             throw new CoolException("褰撳墠涓氬姟锛�" + SerialRuleCode.SYS_STOCK_CODE + "锛岀紪鐮佽鍒欎笉瀛樺湪锛侊紒");
         }
         List<WkOrderItem> itemList = params.getItemList();
-        double sum = itemList.stream().mapToDouble(WkOrderItem::getAnfme).sum();
+        Double sum = QuantityUtils.roundToScale(itemList.stream().mapToDouble(WkOrderItem::getAnfme).sum());
         stock.setAnfme(sum)
                 .setSourceId(order.getId())
                 .setType(order.getType())
@@ -1202,14 +1230,14 @@
     @Override
     public R getUnItemByContainer(Map<String, Object> params) {
         if (Cools.isEmpty(params.get("barcode")) && Cools.isEmpty(params.get("code"))) {
-            throw new CoolException("瀹瑰櫒鍙蜂笌缁勬墭妗g紪鐮佷笉鑳藉叏涓虹┖");
+            throw new CoolException("鏂欑鐮佷笌缁勬墭妗g紪鐮佷笉鑳藉叏涓虹┖");
         }
         WaitPakin waitPakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>()
                 .eq(!Cools.isEmpty(params.get("barcode")), WaitPakin::getBarcode, params.get("barcode"))
                 .eq(!Cools.isEmpty(params.get("code")), WaitPakin::getCode, params.get("code"))
                 .eq(WaitPakin::getIoStatus, PakinIOStatus.PAKIN_IO_STATUS_DONE.val));
         if (Objects.isNull(waitPakin)) {
-            return R.error("鏈壘鍒拌瀹瑰櫒鐮佺殑缁勬墭鏄庣粏锛岃妫�鏌ョ粍鎵樼姸鎬�");
+            return R.error("鏈壘鍒拌鏂欑鐮佺殑缁勬墭鏄庣粏锛岃妫�鏌ョ粍鎵樼姸鎬�");
         }
         List<WaitPakinItem> pakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>()
                 .eq(WaitPakinItem::getPakinId, waitPakin.getId()));
@@ -1325,11 +1353,11 @@
                     .setMaktx(asnOrderItem.getMaktx())
                     .setFieldsIndex(asnOrderItem.getFieldsIndex())
                     .setBarcode(asnOrderItem.getTrackCode())
-                    .setQty(asnOrderItem.getQty())
+                    .setQty(QuantityUtils.roundToScale(asnOrderItem.getQty()))
                     .setStockUnit(asnOrderItem.getStockUnit())
                     .setPurUnit(asnOrderItem.getPurUnit())
                     .setPoCode(asnOrderItem.getPoCode())
-                    .setAnfme(asnOrderItem.getAnfme())
+                    .setAnfme(QuantityUtils.roundToScale(asnOrderItem.getAnfme()))
                     .setPurQty(asnOrderItem.getPurQty())
                     .setSplrBatch(asnOrderItem.getSplrBatch())
                     .setExtendFields(asnOrderItem.getExtendFields())
@@ -1360,7 +1388,7 @@
             if (Objects.isNull(stockItem)) {
                 detlsDto.setStockQty(0.0);
             } else {
-                Double anfme = Math.round((stockItem.getAnfme() + stockItem.getWorkQty()) * 1000000) / 1000000.0;
+                Double anfme = QuantityUtils.add(stockItem.getAnfme(), stockItem.getWorkQty());
                 detlsDto.setStockQty(anfme);
             }
 
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java
index 34f1dda..946f9df 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java
@@ -87,7 +87,7 @@
         lambdaQueryWrapper.eq(Task::getBarcode, barcode);
         Task task = taskService.getOne(lambdaQueryWrapper);
         if (null == task) {
-            throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲浠诲姟");
+            throw new CoolException("鏈壘鍒版枡绠辩爜瀵瑰簲浠诲姟");
         }
         if (!task.getTaskStatus().equals(TaskStsType.AWAIT.id)) {
             return R.error("浠诲姟鐘舵�佷笉鏄瓑寰呯‘璁�");
@@ -115,7 +115,7 @@
         }
         Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, params.getContainer()));
         if (null == task) {
-            throw new CoolException("鏁版嵁閿欒锛屾湭鎵惧埌瀹瑰櫒鐮佸搴旂洏鐐逛换鍔�");
+            throw new CoolException("鏁版嵁閿欒锛屾湭鎵惧埌鏂欑鐮佸搴旂洏鐐逛换鍔�");
         }
         for (CheckDiffItem ckDiffItem : params.getCheckDiffItems()) {
             CheckDiffItem diffItem = new CheckDiffItem();
@@ -234,14 +234,14 @@
         lambdaQueryWrapper.eq(Task::getBarcode, barcode);
         Task task = taskService.getOne(lambdaQueryWrapper);
         if (null == task) {
-            throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲浠诲姟");
+            throw new CoolException("鏈壘鍒版枡绠辩爜瀵瑰簲浠诲姟");
         }
         if (!task.getTaskStatus().equals(TaskStsType.AWAIT.id)) {
             return R.error("浠诲姟鐘舵�佷笉鏄瓑寰呯‘璁�");
         }
         List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
         if (Cools.isEmpty(taskItems)) {
-            throw new CoolException("鏈壘鍒拌瀹瑰櫒鐮佸搴旂殑浠诲姟鏄庣粏");
+            throw new CoolException("鏈壘鍒拌鏂欑鐮佸搴旂殑浠诲姟鏄庣粏");
         }
         String sourceCode = taskItems.stream().findFirst().map(TaskItem::getSourceCode).orElse(null);
         CheckDiff checkDiff = checkDiffService.getOne(new LambdaQueryWrapper<CheckDiff>().eq(CheckDiff::getOrderCode, sourceCode));
@@ -275,7 +275,7 @@
         lambdaQueryWrapper.eq(Task::getBarcode, barcode);
         Task task = taskService.getOne(lambdaQueryWrapper);
         if (null == task) {
-            throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲浠诲姟");
+            throw new CoolException("鏈壘鍒版枡绠辩爜瀵瑰簲浠诲姟");
         }
         // 鍏佽WAVE_SEED锛�199锛岀瓑寰呯‘璁�/鐩樼偣涓級鍜孉WAIT锛�196锛岀瓑寰呯‘璁わ級涓ょ鐘舵��
         if (!task.getTaskStatus().equals(TaskStsType.WAVE_SEED.id) 
@@ -284,7 +284,7 @@
         }
         List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
         if (Cools.isEmpty(taskItems)) {
-            throw new CoolException("鏈壘鍒拌瀹瑰櫒鐮佸搴旂殑浠诲姟鏄庣粏");
+            throw new CoolException("鏈壘鍒拌鏂欑鐮佸搴旂殑浠诲姟鏄庣粏");
         }
         taskItems.forEach(taskItem -> {
             if (!Objects.isNull(taskItem.getFieldsIndex())) {
@@ -319,7 +319,7 @@
         lambdaQueryWrapper.eq(Task::getBarcode, barcode);
         Task task = taskService.getOne(lambdaQueryWrapper);
         if (null == task) {
-            throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲浠诲姟");
+            throw new CoolException("鏈壘鍒版枡绠辩爜瀵瑰簲浠诲姟");
         }
         if (!task.getTaskStatus().equals(TaskStsType.AWAIT.id)) {
             return R.error("浠诲姟鐘舵�佷笉鏄瓑寰呯‘璁�");
@@ -390,7 +390,7 @@
         lambdaQueryWrapper.eq(Task::getBarcode, barcode);
         Task task = taskService.getOne(lambdaQueryWrapper);
         if (null == task) {
-            throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲浠诲姟");
+            throw new CoolException("鏈壘鍒版枡绠辩爜瀵瑰簲浠诲姟");
         }
         // 鍏佽WAVE_SEED锛�199锛岀瓑寰呯‘璁�/鐩樼偣涓級鍜孉WAIT锛�196锛岀瓑寰呯‘璁わ級涓ょ鐘舵��
         if (!task.getTaskStatus().equals(TaskStsType.WAVE_SEED.id) 
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java
index 60ac13b..57332f5 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java
@@ -104,7 +104,7 @@
                 .last("limit 1");
         Task task = taskService.getOne(lambdaQueryWrapper);
         if (null == task) {
-            throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲浠诲姟");
+            throw new CoolException("鏈壘鍒版枡绠辩爜瀵瑰簲浠诲姟");
         }
         // 鍏佽 199锛圵AVE_SEED 鎾涓�/寰呯‘璁わ級鎴� 196锛圓WAIT 绛夊緟纭锛夛紝涓庣洏鐐� PDA 閫昏緫涓�鑷�
         if (!task.getTaskStatus().equals(TaskStsType.WAVE_SEED.id)
@@ -163,7 +163,7 @@
                 .orderByDesc(Task::getId)
                 .last("limit 1"));
         if (null == task) {
-            throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲浠诲姟");
+            throw new CoolException("鏈壘鍒版枡绠辩爜瀵瑰簲浠诲姟");
         }
         if (!task.getTaskStatus().equals(TaskStsType.WAVE_SEED.id)) {
             return R.error("浠诲姟鐘舵�佷笉鏄弨鏂欑媭鎱�");
@@ -194,7 +194,7 @@
 //            containerWaveDto.setTaskItem(taskItem);
 //            Wave wave = waveService.getById(taskItem.getSourceId());
 //            if (null == wave) {
-//                throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲娉㈡");
+//                throw new CoolException("鏈壘鍒版枡绠辩爜瀵瑰簲娉㈡");
 //            }
 //            List<WaveOrderRela> waveOrderRelas = waveOrderRelaService.list(new LambdaQueryWrapper<WaveOrderRela>()
 //                    .eq(WaveOrderRela::getWaveId, wave.getId()));
@@ -235,7 +235,7 @@
             return R.error("绁ㄥ彿涓嶈兘涓虹┖锛侊紒");
         }
         if (Objects.isNull(param.get("barcode"))) {
-            return R.error("瀹瑰櫒鍙蜂笉鑳戒负绌猴紒锛�");
+            return R.error("鏂欑鐮佷笉鑳戒负绌猴紒锛�");
         }
         if (Objects.isNull(param.get("orderId"))) {
             return R.error("璁㈠崟ID涓嶈兘涓虹┖锛侊紒");
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
index 1c2e00b..ca580c6 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
@@ -19,6 +19,7 @@
 import com.vincent.rsf.server.common.domain.BaseParam;
 import com.vincent.rsf.server.common.domain.PageParam;
 import com.vincent.rsf.server.common.utils.FieldsUtils;
+import com.vincent.rsf.server.common.utils.QuantityUtils;
 import com.vincent.rsf.server.manager.controller.dto.LocStockDto;
 import com.vincent.rsf.server.manager.entity.*;
 import com.vincent.rsf.server.manager.enums.*;
@@ -79,6 +80,10 @@
     @Autowired
     private LocService locService;
     @Autowired
+    private OrderWorkTypeService orderWorkTypeService;
+    @Autowired
+    private OrderTypeDictService orderTypeDictService;
+    @Autowired
     private WarehouseAreasService warehouseAreasService;
     @Autowired
     private WarehouseService warehouseService;
@@ -104,6 +109,10 @@
     private DictTypeService dictTypeService;
     @Autowired
     private LocItemService locItemService;
+    @Autowired
+    private WaitPakinItemService waitPakinItemService;
+    @Autowired
+    private WarehouseAreasItemService warehouseAreasItemService;
 
 
     /**
@@ -408,11 +417,37 @@
     public R syncCheckOrder(List<SyncOrderParams> syncOrders, Long loginUserId) {
         if (!syncOrders.isEmpty()) {
             syncOrders.forEach(syncOrder -> {
+                if (StringUtils.isBlank(syncOrder.getOrderInternalCode())) {
+                    throw new CoolException("鍗曟嵁鍐呯爜涓嶈兘涓虹┖锛侊紒");
+                }
+                // 鏄庣粏 lineId锛堝搴� platItemId锛変笉鑳戒负绌猴紝涓斿悓涓�璁㈠崟鍐呬笉鑳介噸澶�
+                if (syncOrder.getOrderItems() != null) {
+                    Set<String> lineIds = new HashSet<>();
+                    for (SyncOrdersItem item : syncOrder.getOrderItems()) {
+                        if (StringUtils.isBlank(item.getPlatItemId())) {
+                            throw new CoolException("鏄庣粏 lineId 涓嶈兘涓虹┖锛侊紒");
+                        }
+                        String lineId = item.getPlatItemId().trim();
+                        if (!lineIds.add(lineId)) {
+                            throw new CoolException("鍚屼竴璁㈠崟鍐呮槑缁� lineId 涓嶈兘閲嶅锛�" + lineId);
+                        }
+                    }
+                }
                 WkOrder wkOrder = new WkOrder();
-                DictData one = dictDataService.getOne(new LambdaQueryWrapper<DictData>().eq(DictData::getDictTypeCode, DictTypeCode.DICT_SYS_BUSINESS_TYPE)
-                        .eq(DictData::getValue, syncOrder.getWkType()), false);
-                if (Objects.isNull(one)) {
+                // 鍏煎 wkType 浼犳暟瀛楋紙绫诲瀷鐮侊級鎴栦腑鏂囷紙鏄剧ず鍚嶏級锛氬厛鎸� label 鍙嶆煡 type锛屽惁鍒欐寜鍘熷�煎綋 type
+                String wkTypeInput = syncOrder.getWkType();
+                String typeCode = StringUtils.isBlank(wkTypeInput) ? null : orderWorkTypeService.getTypeByLabel(wkTypeInput);
+                if (typeCode == null) {
+                    typeCode = wkTypeInput;
+                }
+                if (StringUtils.isBlank(typeCode) || orderWorkTypeService.getLabelByType(typeCode) == null) {
                     throw new CoolException("鍗曟嵁锛�" + syncOrder.getOrderNo() + ", 涓氬姟绫诲瀷涓嶅瓨鍦紒锛�");
+                }
+                // 璁㈠崟绫诲瀷锛氭敮鎸佹暟瀛� 1/2/3銆佷腑鏂囥�屽嚭搴撳崟銆�/銆屽叆搴撳崟銆�/銆岃皟鎷ㄥ崟銆嶆垨鍐呴儴鐮� out/in/transfer锛堟潵鑷瓧鍏革級
+                String typeInput = syncOrder.getType();
+                String resolvedOrderType = orderTypeDictService.resolveType(typeInput);
+                if (typeInput != null && !typeInput.trim().isEmpty() && resolvedOrderType == null) {
+                    throw new CoolException("鍗曟嵁锛�" + syncOrder.getOrderNo() + ", 璁㈠崟绫诲瀷涓嶅瓨鍦紒锛�");
                 }
                 Loc serviceOne = null;
                 if (!Objects.isNull(syncOrder.getOrgLoc())) {
@@ -421,42 +456,56 @@
                 if (!Objects.isNull(serviceOne)) {
                     //TODO 娣诲姞璋冩嫈绉诲簱鍗曞姛鑳�
                 } else {
+                    // operateType=2 瀛樺湪鍒欎慨鏀广�佷笉瀛樺湪鍒欐姤閿欙紱operateType=1 瀛樺湪鍒欎慨鏀广�佷笉瀛樺湪鍒欐柊澧�
                     WkOrder order = asnOrderService.getOne(new LambdaQueryWrapper<WkOrder>()
-                            .eq(!Objects.isNull(syncOrder.getOrderId()), WkOrder::getPoId, syncOrder.getOrderId())
-                            .eq(WkOrder::getPoCode, syncOrder.getOrderNo()));
+                            .eq(WkOrder::getPoCode, syncOrder.getOrderInternalCode()));
                     if (!Objects.isNull(order)) {
-                        if (order.getExceStatus().equals(AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val) ||
-                                order.getExceStatus().equals(AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val)) {
-                            /**鍒犻櫎鍗曟嵁鏄庣粏*/
-                            asnOrderItemService.remove(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, order.getId()));
-                            /**鍒犻櫎涓诲崟*/
-                            asnOrderService.removeById(order.getId());
-                        } else {
-                            throw new CoolException("鍗曟嵁宸叉坊鍔狅紝涓嶅彲鎵ц淇敼鎴栨坊鍔犳搷浣滐紒锛�");
+                        // 浠呮湭鎵ц鐘舵�佸彲琚� order/add 淇敼锛堝叆搴撴湭鎵ц銆佸嚭搴撲换鍔″垵濮嬶級
+                        List<Short> editableStatus = Arrays.asList(AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val, AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val);
+                        if (!editableStatus.contains(order.getExceStatus())) {
+                            throw new CoolException("浠呮湭鎵ц鐘舵�佺殑鍗曟嵁鍙慨鏀癸紒锛�");
                         }
+                        // 瀛樺湪鍒欎慨鏀癸紙1 鍜� 2 鍧囪蛋姝ゅ锛夛紝缁勬墭鏍¢獙鍦� mergeOrderWithPakin/updateOrderNoPakin 鍐�
+                        long pakinCount = waitPakinItemService.count(new LambdaQueryWrapper<WaitPakinItem>()
+                                .eq(WaitPakinItem::getAsnId, order.getId()));
+                        if (pakinCount > 0) {
+                            // 宸茬粍鎵橈細鎸� lineId锛坧latItemId锛夊悎骞讹紝鏍¢獙鏁伴噺涓庡垹闄�
+                            mergeOrderWithPakin(order, syncOrder, resolvedOrderType, typeCode, loginUserId);
+                            // 鏀惰揣鍖哄凡鍋滅敤 // syncReceiptAreaByOrder(order.getId());
+                            return; // 鏈崟宸插鐞嗭紝璺宠繃涓嬫柟鈥滄柊寤轰富鍗�+鏄庣粏鈥�
+                        }
+                        // 鏈粍鎵橈細鍦ㄥ師鍗曚笂鏇存柊涓诲崟+鏄庣粏锛屼繚鐣� exceStatus/qty/workQty锛岄伩鍏嶅啀娆¤Е鍙戝畾鏃朵换鍔″鑷撮噸澶嶆敹璐�
+                        updateOrderNoPakin(order, syncOrder, loginUserId);
+                        // 鏀惰揣鍖哄凡鍋滅敤 // syncReceiptAreaByOrder(order.getId());
+                        return;
+                    } else if (Integer.valueOf(2).equals(syncOrder.getOperateType())) {
+                        // 浠� operateType=2 鏃惰姹傚崟鎹繀椤诲瓨鍦�
+                        throw new CoolException("鍗曟嵁涓嶅瓨鍦紝鏃犳硶淇敼锛侊紒");
                     }
                     String rule = SerialRuleCode.SYS_ASN_ORDER;
-                    if (syncOrder.getType().equals(OrderType.ORDER_OUT.type)) {
+                    if (resolvedOrderType != null && resolvedOrderType.equals(OrderType.ORDER_OUT.type)) {
                         rule = SerialRuleCode.SYS_OUT_STOCK_CODE;
                     }
-
-                    String ruleCode = SerialRuleUtils.generateRuleCode(rule, null);
-                    wkOrder.setType(syncOrder.getType())
-                            .setWkType(one.getValue())
-                            .setAnfme(syncOrder.getAnfme())
-                            .setPoCode(syncOrder.getOrderNo())
+                    // 鏈� orderNo 鍒欑洿鎺ヤ綔涓� WMS 鍗曞彿 code锛屽惁鍒欐寜瑙勫垯鐢熸垚锛沺o_code 瀛樺崟鎹唴鐮侊紙orderInternalCode 宸叉牎楠岄潪绌猴級
+                    String wmsCode = StringUtils.isNotBlank(syncOrder.getOrderNo()) ? syncOrder.getOrderNo() : SerialRuleUtils.generateRuleCode(rule, null);
+                    String poCodeVal = syncOrder.getOrderInternalCode();
+                    wkOrder.setType(resolvedOrderType != null ? resolvedOrderType : syncOrder.getType())
+                            .setWkType(typeCode)
+                            .setAnfme(QuantityUtils.roundToScale(syncOrder.getAnfme()))
+                            .setPoCode(poCodeVal)
                             .setWorkQty(0.0)
                             .setQty(0.0)
                             .setPoId(syncOrder.getOrderId())
-                            .setCode(ruleCode)
+                            .setCode(wmsCode)
                             .setArrTime(syncOrder.getArrTime())
+                            .setStationId(syncOrder.getStationId())
                             .setId(null)
                             .setCreateTime(new Date())
                             .setUpdateTime(new Date())
                             .setCreateBy(loginUserId)
                             .setUpdateBy(loginUserId);
 
-                    if (syncOrder.getType().equals(OrderType.ORDER_OUT.type)){
+                    if (resolvedOrderType != null && resolvedOrderType.equals(OrderType.ORDER_OUT.type)) {
                         wkOrder.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val);
                     }
 
@@ -478,7 +527,7 @@
                     });
                     List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>()
                             .eq(WkOrderItem::getOrderId, wkOrder.getId()));
-                    double sum = orderItems.stream().mapToDouble(WkOrderItem::getAnfme).sum();
+                    Double sum = QuantityUtils.roundToScale(orderItems.stream().mapToDouble(WkOrderItem::getAnfme).sum());
                     wkOrder.setAnfme(sum);
                     if (!asnOrderService.updateById(wkOrder)) {
                         throw new CoolException("璁″垝鏀惰揣鏁伴噺淇敼澶辫触锛侊紒");
@@ -488,6 +537,203 @@
         }
         return R.ok();
     }
+
+    /**
+     * 宸茬粍鎵樺崟鎹殑淇敼鍚堝苟锛氭寜 lineId锛坧latItemId锛夊尮閰嶃��
+     * 瑙勫垯锛氱粍鎵樻暟閲忎笉浼氬洜鏀瑰崟鑰屽彉锛涘凡缁勬墭 100 鏃讹紝淇敼涓� 99 浼氭姤閿欙紝淇敼涓� 101 鍏佽涓斿鍑虹殑 1 鍙啀缁勬墭銆�
+     */
+    private void mergeOrderWithPakin(WkOrder order, SyncOrderParams syncOrder, String resolvedOrderType, String typeCode, Long loginUserId) {
+        if (syncOrder.getOrderItems() != null) {
+            for (SyncOrdersItem it : syncOrder.getOrderItems()) {
+                if (StringUtils.isBlank(it.getPlatItemId())) {
+                    throw new CoolException("鏄庣粏 lineId 涓嶈兘涓虹┖锛侊紒");
+                }
+            }
+        }
+        List<WkOrderItem> existingItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, order.getId()));
+        List<WaitPakinItem> pakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>().eq(WaitPakinItem::getAsnId, order.getId()));
+        Map<Long, Double> palletizedByItemId = pakinItems.stream()
+                .collect(Collectors.groupingBy(WaitPakinItem::getAsnItemId, Collectors.summingDouble(w -> w.getAnfme() != null ? w.getAnfme() : 0.0)));
+        palletizedByItemId.replaceAll((k, v) -> QuantityUtils.roundToScale(v));
+
+        Map<String, SyncOrdersItem> incomingByLineId = new HashMap<>();
+        if (syncOrder.getOrderItems() != null) {
+            for (SyncOrdersItem it : syncOrder.getOrderItems()) {
+                incomingByLineId.put(it.getPlatItemId().trim(), it);
+            }
+        }
+
+        Set<String> existingLineIds = existingItems.stream()
+                .map(e -> StringUtils.isNotBlank(e.getPlatItemId()) ? e.getPlatItemId().trim() : null)
+                .filter(Objects::nonNull)
+                .collect(Collectors.toSet());
+
+        for (WkOrderItem existing : existingItems) {
+            String lineId = StringUtils.isNotBlank(existing.getPlatItemId()) ? existing.getPlatItemId().trim() : null;
+            double palletized = palletizedByItemId.getOrDefault(existing.getId(), 0.0);
+            if (lineId == null || !incomingByLineId.containsKey(lineId)) {
+                if (palletized > 0) {
+                    throw new CoolException("璇ユ槑缁嗗凡缁勬墭锛岄渶瑙i櫎缁勬墭鍚庢墠鑳藉垹闄わ紒锛�");
+                }
+            } else {
+                SyncOrdersItem inc = incomingByLineId.get(lineId);
+                Double newAnfme = QuantityUtils.roundToScale(inc.getAnfme() != null ? inc.getAnfme() : 0.0);
+                // 宸茬粍鎵樻暟閲忎笉鍙橈細鏀瑰皬锛堝 100 鏀逛负 99锛夋姤閿欙紱鏀瑰ぇ锛堝 100 鏀逛负 101锛夊厑璁革紝澶氬嚭鐨勫彲鍐嶇粍鎵�
+                if (QuantityUtils.compare(newAnfme, palletized) < 0) {
+                    throw new CoolException("璇ユ槑缁嗘暟閲忎笉鑳藉皬浜庡凡缁勬墭鏁伴噺锛堝凡缁勬墭 " + palletized + "锛夛紝闇�瑙i櫎缁勬墭鍚庢墠鑳戒慨鏀癸紒锛�");
+                }
+            }
+        }
+
+        order.setAnfme(QuantityUtils.roundToScale(syncOrder.getAnfme() != null ? syncOrder.getAnfme() : 0.0));
+        if (syncOrder.getArrTime() != null) {
+            order.setArrTime(syncOrder.getArrTime());
+        }
+        if (StringUtils.isNotBlank(syncOrder.getStationId())) {
+            order.setStationId(syncOrder.getStationId());
+        }
+        order.setUpdateBy(loginUserId);
+        order.setUpdateTime(new Date());
+        asnOrderService.updateById(order);
+
+        for (WkOrderItem existing : existingItems) {
+            String lineId = StringUtils.isNotBlank(existing.getPlatItemId()) ? existing.getPlatItemId().trim() : null;
+            if (lineId == null || !incomingByLineId.containsKey(lineId)) {
+                asnOrderItemService.removeById(existing.getId());
+                continue;
+            }
+            SyncOrdersItem inc = incomingByLineId.get(lineId);
+            existing.setAnfme(QuantityUtils.roundToScale(inc.getAnfme() != null ? inc.getAnfme() : existing.getAnfme()));
+            existing.setMaktx(inc.getMaktx());
+            existing.setSpec(inc.getSpec());
+            existing.setModel(inc.getModel());
+            existing.setStockUnit(inc.getUnit());
+            existing.setBatch(inc.getBatch());
+            existing.setPlanNo(inc.getPlanNo());
+            existing.setPalletId(inc.getPalletId());
+            existing.setUpdateBy(loginUserId);
+            existing.setUpdateTime(new Date());
+            asnOrderItemService.updateById(existing);
+        }
+
+        for (Map.Entry<String, SyncOrdersItem> e : incomingByLineId.entrySet()) {
+            String key = e.getKey();
+            if (!existingLineIds.contains(key)) {
+                Map<String, Object> map = new ObjectMapper().convertValue(e.getValue(), Map.class);
+                map.put("orderId", order.getId());
+                map.put("poId", order.getPoId());
+                map.put("poCode", order.getPoCode());
+                map.put("order_code", order.getCode());
+                map.put("matnrCode", e.getValue().getMatnr());
+                map.put("platItemId", key);
+                if (!asnOrderItemService.fieldsSave(map, loginUserId)) {
+                    throw new CoolException("鏄庣粏淇濆瓨澶辫触锛侊紒");
+                }
+            }
+        }
+
+        Double sum = QuantityUtils.roundToScale(asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, order.getId()))
+                .stream().mapToDouble(WkOrderItem::getAnfme).sum());
+        order.setAnfme(sum);
+        asnOrderService.updateById(order);
+    }
+
+    /**
+     * 鏈粍鎵樺崟鎹殑淇敼锛氬湪鍘熷崟涓婃洿鏂颁富鍗�+鏄庣粏锛堟寜 lineId 鍖归厤锛夛紝淇濈暀 exceStatus銆乹ty銆亀orkQty锛岄伩鍏嶅垹鍗曢噸寤哄鑷村畾鏃朵换鍔″啀娆℃墽琛屻��
+     */
+    private void updateOrderNoPakin(WkOrder order, SyncOrderParams syncOrder, Long loginUserId) {
+        if (syncOrder.getOrderItems() == null || syncOrder.getOrderItems().isEmpty()) {
+            throw new CoolException("淇敼鏃舵槑缁嗕笉鑳戒负绌猴紒锛�");
+        }
+        Map<String, SyncOrdersItem> incomingByLineId = new HashMap<>();
+        for (SyncOrdersItem it : syncOrder.getOrderItems()) {
+            if (StringUtils.isBlank(it.getPlatItemId())) {
+                throw new CoolException("鏄庣粏 lineId 涓嶈兘涓虹┖锛侊紒");
+            }
+            incomingByLineId.put(it.getPlatItemId().trim(), it);
+        }
+        List<WkOrderItem> existingItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, order.getId()));
+        Set<String> existingLineIds = existingItems.stream()
+                .map(e -> StringUtils.isNotBlank(e.getPlatItemId()) ? e.getPlatItemId().trim() : null)
+                .filter(Objects::nonNull)
+                .collect(Collectors.toSet());
+
+        order.setAnfme(QuantityUtils.roundToScale(syncOrder.getAnfme() != null ? syncOrder.getAnfme() : 0.0));
+        if (syncOrder.getArrTime() != null) {
+            order.setArrTime(syncOrder.getArrTime());
+        }
+        if (StringUtils.isNotBlank(syncOrder.getStationId())) {
+            order.setStationId(syncOrder.getStationId());
+        }
+        order.setUpdateBy(loginUserId);
+        order.setUpdateTime(new Date());
+        asnOrderService.updateById(order);
+
+        for (WkOrderItem existing : existingItems) {
+            String lineId = StringUtils.isNotBlank(existing.getPlatItemId()) ? existing.getPlatItemId().trim() : null;
+            if (lineId == null || !incomingByLineId.containsKey(lineId)) {
+                // 鏀惰揣鍖哄凡鍋滅敤 // warehouseAreasItemService.remove(new LambdaQueryWrapper<WarehouseAreasItem>().eq(WarehouseAreasItem::getAsnItemId, existing.getId()));
+                asnOrderItemService.removeById(existing.getId());
+                continue;
+            }
+            SyncOrdersItem inc = incomingByLineId.get(lineId);
+            existing.setAnfme(QuantityUtils.roundToScale(inc.getAnfme() != null ? inc.getAnfme() : existing.getAnfme()));
+            existing.setMaktx(inc.getMaktx());
+            existing.setSpec(inc.getSpec());
+            existing.setModel(inc.getModel());
+            existing.setStockUnit(inc.getUnit());
+            existing.setBatch(inc.getBatch());
+            existing.setPlanNo(inc.getPlanNo());
+            existing.setPalletId(inc.getPalletId());
+            existing.setUpdateBy(loginUserId);
+            existing.setUpdateTime(new Date());
+            asnOrderItemService.updateById(existing);
+        }
+
+        for (Map.Entry<String, SyncOrdersItem> e : incomingByLineId.entrySet()) {
+            if (existingLineIds.contains(e.getKey())) {
+                continue;
+            }
+            Map<String, Object> map = new ObjectMapper().convertValue(e.getValue(), Map.class);
+            map.put("orderId", order.getId());
+            map.put("poId", order.getPoId());
+            map.put("poCode", order.getPoCode());
+            map.put("order_code", order.getCode());
+            map.put("matnrCode", e.getValue().getMatnr());
+            map.put("platItemId", e.getKey());
+            if (!asnOrderItemService.fieldsSave(map, loginUserId)) {
+                throw new CoolException("鏄庣粏淇濆瓨澶辫触锛侊紒");
+            }
+        }
+
+        Double sum = QuantityUtils.roundToScale(asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, order.getId()))
+                .stream().mapToDouble(WkOrderItem::getAnfme).sum());
+        order.setAnfme(sum);
+        asnOrderService.updateById(order);
+    }
+
+    /** 鏀惰揣鍖哄凡鍋滅敤锛屾柟娉曟暣浣撴敞閲�
+     * 璁㈠崟淇敼鍚庡悓姝ユ敹璐у尯锛氭寜 asnItemId 灏嗘敹璐у尯璁板綍鐨� anfme 鏇存柊涓鸿鍗曟槑缁嗙殑 anfme銆�
+     */
+//    private void syncReceiptAreaByOrder(Long orderId) {
+//        List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, orderId));
+//        if (orderItems.isEmpty()) {
+//            return;
+//        }
+//        List<WarehouseAreasItem> areaItems = warehouseAreasItemService.list(new LambdaQueryWrapper<WarehouseAreasItem>().eq(WarehouseAreasItem::getAsnId, orderId));
+//        Map<Long, Double> itemAnfme = orderItems.stream().collect(Collectors.toMap(WkOrderItem::getId, i -> i.getAnfme() != null ? i.getAnfme() : 0.0, (a, b) -> b));
+//        for (WarehouseAreasItem area : areaItems) {
+//            if (area.getAsnItemId() == null || !itemAnfme.containsKey(area.getAsnItemId())) {
+//                continue;
+//            }
+//            Double anfme = itemAnfme.get(area.getAsnItemId());
+//            if (area.getAnfme() != null && area.getAnfme().equals(anfme)) {
+//                continue;
+//            }
+//            area.setAnfme(anfme);
+//            warehouseAreasItemService.updateById(area);
+//        }
+//    }
 
     /**
      * @author Ryan
@@ -660,7 +906,7 @@
                             .eq(WkOrderItem::getMatnrCode, orderItem.getMatnr())
                             .eq(StringUtils.isNotEmpty(orderItem.getBatch()), WkOrderItem::getSplrBatch, orderItem.getBatch())
                             .eq(StringUtils.isNotEmpty(orderItem.getPlatItemId()), WkOrderItem::getPlatItemId, orderItem.getPlatItemId())
-                            .set(WkOrderItem::getAnfme, orderItem.getAnfme()))) {
+                            .set(WkOrderItem::getAnfme, QuantityUtils.roundToScale(orderItem.getAnfme())))) {
                         throw new CoolException("鍗曟嵁淇敼澶辫触锛侊紒");
                     }
                 } else {
@@ -673,7 +919,7 @@
                     }
                 }
             });
-            wkOrder.setAnfme(order.getAnfme());
+            wkOrder.setAnfme(QuantityUtils.roundToScale(order.getAnfme()));
             if (!asnOrderService.updateById(wkOrder)) {
                 throw new CoolException("涓诲崟鎹慨鏀瑰け璐ワ紒锛�");
             }
@@ -691,31 +937,56 @@
     @Transactional(timeout = 60, rollbackFor = Exception.class)
     public R syncOrderDelete(List<SyncOrderParams> orders) {
         orders.forEach(order -> {
+            // operateType=3锛氬瓨鍦ㄥ垯鍒ゆ柇鏄惁鍙互鍙栨秷锛涗富瑕佹牎楠屽崟鎹唴鐮�(orderInternalCode)锛宱rderNo 鏌ュ埌 1 鏉$户缁紝鏌ュ埌澶氭潯鍒欐姤閿欏己璋冧娇鐢� orderInternalCode
+            WkOrder wkOrder = null;
+            if (StringUtils.isNotEmpty(order.getOrderInternalCode())) {
+                wkOrder = asnOrderService.getOne(new LambdaQueryWrapper<WkOrder>()
+                        .eq(WkOrder::getPoCode, order.getOrderInternalCode()));
+            }
+            if (wkOrder == null && StringUtils.isNotEmpty(order.getOrderNo())) {
+                List<WkOrder> list = asnOrderService.list(new LambdaQueryWrapper<WkOrder>()
+                        .eq(WkOrder::getCode, order.getOrderNo()));
+                if (list.isEmpty()) {
+                    throw new CoolException("鍗曟嵁涓嶅瓨鍦紝鏃犳硶鍙栨秷锛侊紒");
+                }
+                if (list.size() > 1) {
+                    throw new CoolException("鍗曞彿瀵瑰簲澶氭潯鍗曟嵁锛岃浣跨敤鍗曟嵁鍐呯爜(orderInternalCode)鍞竴鎸囧畾鍚庡啀鍙栨秷锛侊紒");
+                }
+                wkOrder = list.get(0);
+            }
+            if (wkOrder == null) {
+                throw new CoolException("鍗曟嵁涓嶅瓨鍦紝鏃犳硶鍙栨秷锛侊紒璇锋彁渚涘崟鎹唴鐮�(orderInternalCode)鎴栧崟鍙�(orderNo)銆�");
+            }
+            final WkOrder finalWkOrder = wkOrder;
+            // 宸茬粍鎵樹笉鍙彇娑�
+            long pakinCount = waitPakinItemService.count(new LambdaQueryWrapper<WaitPakinItem>()
+                    .eq(WaitPakinItem::getAsnId, finalWkOrder.getId()));
+            if (pakinCount > 0) {
+                throw new CoolException("鍗曟嵁宸茬粍鎵橈紝浠呮湭缁勬墭鐘舵�佸彲鍙栨秷锛岃鍏堣В闄ょ粍鎵橈紒锛�");
+            }
+            // 浠呮湭鎵ц鐘舵�佸彲鍙栨秷锛堝叆搴撴湭鎵ц銆佸嚭搴撲换鍔″垵濮嬶級
             List<Short> list = Arrays.asList(AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val,
                     AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val);
-            WkOrder wkOrder = asnOrderService.getOne(new LambdaQueryWrapper<WkOrder>()
-                    .in(WkOrder::getExceStatus, list)
-                    .eq(WkOrder::getCode, order.getOrderNo()));
-            if (Objects.isNull(wkOrder)) {
-                throw new CoolException("璁㈠崟锛�" + wkOrder.getCode() + "锛屽綋鍓嶇姸鎬侊紝涓嶅彲鎵ц鍒犻櫎鎿嶄綔锛侊紒");
+            if (!list.contains(finalWkOrder.getExceStatus())) {
+                throw new CoolException("浠呮湭鎵ц鐘舵�佺殑鍗曟嵁鍙彇娑堬紒锛�");
             }
             order.getOrderItems().forEach(orderItem -> {
                 if (!asnOrderItemService.remove(new LambdaQueryWrapper<WkOrderItem>()
                         .eq(WkOrderItem::getMatnrCode, orderItem.getMatnr())
                         .eq(StringUtils.isNotEmpty(orderItem.getBatch()), WkOrderItem::getSplrBatch, orderItem.getBatch())
                         .eq(StringUtils.isNotEmpty(orderItem.getPlatItemId()), WkOrderItem::getPlatItemId, orderItem.getPlatItemId())
-                        .eq(WkOrderItem::getOrderCode, wkOrder.getCode()))) {
+                        .eq(WkOrderItem::getOrderCode, finalWkOrder.getCode()))) {
                     throw new CoolException("鍗曟嵁鏄庣粏鍒犻櫎澶辫触锛侊紒");
                 }
-                List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, wkOrder.getId()));
+                List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, finalWkOrder.getId()));
                 if (orderItems.isEmpty()) {
-                    if (!asnOrderService.removeById(wkOrder.getId())) {
+                    if (!asnOrderService.removeById(finalWkOrder.getId())) {
                         throw new CoolException("鍗曟嵁鍒犻櫎澶辫触锛侊紒");
                     }
                 } else {
-                    Double sum = orderItems.stream().mapToDouble(WkOrderItem::getAnfme).sum();
+                    Double sum = QuantityUtils.roundToScale(orderItems.stream().mapToDouble(WkOrderItem::getAnfme).sum());
                     if (!asnOrderService.update(new LambdaUpdateWrapper<WkOrder>()
-                            .eq(WkOrder::getId, wkOrder.getId())
+                            .eq(WkOrder::getId, finalWkOrder.getId())
                             .set(WkOrder::getAnfme, sum))) {
                         throw new CoolException("涓诲崟鏁伴噺淇敼澶辫触锛侊紒");
                     }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
index 29bbfa0..58ea573 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
@@ -45,7 +45,6 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.client.RestTemplate;
 
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Date;
@@ -878,6 +877,7 @@
                         throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛佸綋鍓嶄换鍔$姸鎬侊細" + task.getTaskStatus() + "锛岀洰鏍囩姸鎬侊細" + TaskStsType.COMPLETE_IN.id);
                     }
                     log.info("鍏ュ簱浠诲姟鐘舵�佹洿鏂版垚鍔� - 浠诲姟缂栫爜锛歿}", task.getTaskCode());
+                    // 鍏ュ簱瀹屾暣闂幆鐢卞畾鏃朵换鍔″畬鎴愶細TaskSchedules.completeInStock 鎵弿 COMPLETE_IN锛屾墽琛屽簱浣�/缁勬墭/涓婃姤浜戜粨
                 }
             } else if (task.getTaskType().equals(TaskType.TASK_TYPE_OUT.type)
                     || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_AGAIN_OUT.type)
@@ -920,33 +920,7 @@
                         throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛佸綋鍓嶄换鍔$姸鎬侊細" + task.getTaskStatus() + "锛岀洰鏍囩姸鎬侊細" + TaskStsType.COMPLETE_OUT.id);
                     }
                     log.info("鍑哄簱浠诲姟鐘舵�佹洿鏂版垚鍔� - 浠诲姟缂栫爜锛歿}", task.getTaskCode());
-
-                    // 鍏ㄧ増鍑哄簱鍦≧CS鍥炶皟鍚庡鐞嗗簱瀛樺苟璁剧疆涓�199锛岀瓑寰匬DA蹇�熸嫞璐х‘璁ゅ悗鏇存柊涓�200
-                    if (task.getTaskType().equals(TaskType.TASK_TYPE_OUT.type)) {
-                        log.info("鍏ㄧ増鍑哄簱浠诲姟锛屽紑濮嬪鐞嗗簱瀛樺苟鏇存柊鐘舵�佷负199 - 浠诲姟缂栫爜锛歿}", task.getTaskCode());
-                        try {
-                            // 閲嶆柊鏌ヨ浠诲姟浠ヨ幏鍙栨渶鏂扮姸鎬侊紙198锛�
-                            task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskCode, task.getTaskCode()));
-
-                            // 璋冪敤completeTask澶勭悊搴撳瓨锛堜細璁剧疆涓�199锛�
-                            List<Task> taskList = new ArrayList<>();
-                            taskList.add(task);
-                            taskService.completeTask(taskList);
-
-                            // 閲嶆柊鏌ヨ浠诲姟浠ヨ幏鍙栨渶鏂扮姸鎬侊紙199锛�
-                            task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskCode, task.getTaskCode()));
-
-                            if (task.getTaskStatus().equals(TaskStsType.WAVE_SEED.id)) {
-                                log.info("鍏ㄧ増鍑哄簱浠诲姟鐘舵�佸凡鏇存柊涓�199锛堢瓑寰匬DA蹇�熸嫞璐х‘璁ゅ悗鏇存柊涓�200锛� - 浠诲姟缂栫爜锛歿}", task.getTaskCode());
-                            } else {
-                                log.warn("鍏ㄧ増鍑哄簱浠诲姟鐘舵�佹洿鏂颁负199澶辫触 - 浠诲姟缂栫爜锛歿}锛屽綋鍓嶇姸鎬侊細{}",
-                                        task.getTaskCode(), task.getTaskStatus());
-                            }
-                        } catch (Exception e) {
-                            log.error("鍏ㄧ増鍑哄簱浠诲姟澶勭悊澶辫触 - 浠诲姟缂栫爜锛歿}锛岄敊璇細{}", task.getTaskCode(), e.getMessage(), e);
-                            // 涓嶆姏鍑哄紓甯革紝閬垮厤褰卞搷RCS鍥炶皟鐨勬甯歌繑鍥�
-                        }
-                    }
+                    // 鍑哄簱瀹屾暣闂幆锛堝簱瀛樸�佸嚭搴撳崟銆�9.1 涓婃姤浜戜粨锛夌敱瀹氭椂浠诲姟 TaskSchedules.complateOutStock 缁熶竴鎵ц
                 }
             }
         } else {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/event/DictDataChangedEvent.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/event/DictDataChangedEvent.java
new file mode 100644
index 0000000..aee79eb
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/event/DictDataChangedEvent.java
@@ -0,0 +1,20 @@
+package com.vincent.rsf.server.common.event;
+
+import org.springframework.context.ApplicationEvent;
+
+/**
+ * 瀛楀吀鏁版嵁鍙樻洿浜嬩欢锛岀敤浜庨�氱煡渚濊禆璇ュ瓧鍏哥殑缂撳瓨鍒锋柊锛堝璁㈠崟涓氬姟绫诲瀷锛夈��
+ */
+public class DictDataChangedEvent extends ApplicationEvent {
+
+    private final String dictTypeCode;
+
+    public DictDataChangedEvent(Object source, String dictTypeCode) {
+        super(source);
+        this.dictTypeCode = dictTypeCode;
+    }
+
+    public String getDictTypeCode() {
+        return dictTypeCode;
+    }
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/QuantityUtils.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/QuantityUtils.java
index 9f774f6..c116bcd 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/QuantityUtils.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/QuantityUtils.java
@@ -66,7 +66,25 @@
     }
 
     /**
-     * 缁熶竴鑸嶅叆鍒� 6 浣嶅皬鏁板悗杞� Double锛堢敤浜庡瓨搴�/灞曠ず锛岄伩鍏嶆诞鐐瑰熬宸級
+     * 涔樻硶锛歛 * b锛岀粨鏋滀繚鐣� 6 浣嶅皬鏁拌浆 Double
+     */
+    public static Double multiply(Double a, Double b) {
+        return toBigDecimal(a).multiply(toBigDecimal(b)).setScale(SCALE, ROUNDING).doubleValue();
+    }
+
+    /**
+     * 闄ゆ硶锛歛 / b锛岀粨鏋滀繚鐣� 6 浣嶅皬鏁拌浆 Double锛坆=0 鏃惰繑鍥� 0锛�
+     */
+    public static Double divide(Double a, Double b) {
+        if (b == null || toBigDecimal(b).compareTo(BigDecimal.ZERO) == 0) {
+            return 0.0;
+        }
+        return toBigDecimal(a).divide(toBigDecimal(b), SCALE, ROUNDING).doubleValue();
+    }
+
+    /**
+     * 缁熶竴鑸嶅叆鍒� 6 浣嶅皬鏁板悗杞� Double锛堢敤浜庡瓨搴�/灞曠ず銆佸叆鍙傛牎楠岋紝閬垮厤娴偣灏惧樊锛夈��
+     * 鎵�鏈� Double 鍐欏叆瀹炰綋鎴栧弬涓庢瘮杈冨墠寤鸿缁忔鏂规硶鎴� add/subtract 鍋氱簿搴︽帶鍒躲��
      */
     public static Double roundToScale(Double v) {
         if (v == null) {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinController.java
index a464f60..f722a1b 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinController.java
@@ -52,26 +52,58 @@
     @PostMapping("/waitPakin/page")
     public R page(@RequestBody Map<String, Object> map) {
         BaseParam baseParam = buildParam(map, BaseParam.class);
+        // 鍗曟嵁缁勬墭鎸夊崟鍙锋煡璇細鍗曞彿鍦ㄦ槑缁嗚〃 asn_code锛屼粠 map 鍙栧嚭骞剁Щ闄わ紝閬垮厤涓昏〃鏃犳瀛楁鎶ラ敊
+        String asnCode = null;
+        if (baseParam.getMap() != null && baseParam.getMap().containsKey("asnCode")) {
+            Object v = baseParam.getMap().get("asnCode");
+            if (v != null && StringUtils.isNotBlank(v.toString())) {
+                asnCode = v.toString().trim();
+            }
+            baseParam.getMap().remove("asnCode");
+        }
         PageParam<WaitPakin, BaseParam> pageParam = new PageParam<>(baseParam, WaitPakin.class);
-        return R.ok().add(waitPakinService.page(pageParam, pageParam.buildWrapper(true)));
+        com.baomidou.mybatisplus.core.conditions.query.QueryWrapper<WaitPakin> qw = pageParam.buildWrapper(true);
+        if (StringUtils.isNotBlank(asnCode)) {
+            List<Long> pakinIds = waitPakinItemService.list(
+                    new LambdaQueryWrapper<WaitPakinItem>()
+                            .select(WaitPakinItem::getPakinId)
+                            .like(WaitPakinItem::getAsnCode, asnCode))
+                    .stream().map(WaitPakinItem::getPakinId).distinct().collect(Collectors.toList());
+            if (pakinIds.isEmpty()) {
+                qw.and(w -> w.apply("1 = 0"));
+            } else {
+                qw.in("id", pakinIds);
+            }
+        }
+        Page<WaitPakin> page = waitPakinService.page(pageParam, qw);
+        fillAsnCodes(page.getRecords());
+        return R.ok().add(page);
     }
 
     @PreAuthorize("hasAuthority('manager:waitPakin:list')")
     @PostMapping("/waitPakin/list")
     public R list(@RequestBody Map<String, Object> map) {
-        return R.ok().add(waitPakinService.list());
+        List<WaitPakin> list = waitPakinService.list();
+        fillAsnCodes(list);
+        return R.ok().add(list);
     }
 
     @PreAuthorize("hasAuthority('manager:waitPakin:list')")
     @PostMapping({"/waitPakin/many/{ids}", "/waitPakins/many/{ids}"})
     public R many(@PathVariable Long[] ids) {
-        return R.ok().add(waitPakinService.listByIds(Arrays.asList(ids)));
+        List<WaitPakin> list = waitPakinService.listByIds(Arrays.asList(ids));
+        fillAsnCodes(list);
+        return R.ok().add(list);
     }
 
     @PreAuthorize("hasAuthority('manager:waitPakin:list')")
     @GetMapping("/waitPakin/{id}")
     public R get(@PathVariable("id") Long id) {
-        return R.ok().add(waitPakinService.getById(id));
+        WaitPakin one = waitPakinService.getById(id);
+        if (one != null) {
+            fillAsnCodes(Collections.singletonList(one));
+        }
+        return R.ok().add(one);
     }
 
     @PreAuthorize("hasAuthority('manager:waitPakin:save')")
@@ -143,7 +175,9 @@
     @PreAuthorize("hasAuthority('manager:waitPakin:list')")
     @PostMapping("/waitPakin/export")
     public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
-        ExcelUtil.build(ExcelUtil.create(waitPakinService.list(), WaitPakin.class), response);
+        List<WaitPakin> list = waitPakinService.list();
+        fillAsnCodes(list);
+        ExcelUtil.build(ExcelUtil.create(list, WaitPakin.class), response);
     }
 
 
@@ -160,4 +194,28 @@
         return  taskService.generateTasks(taskParams, getLoginUserId());
     }
 
+    /**
+     * 鏍规嵁缁勬墭鏄庣粏濉厖涓绘。鐨勫叧鑱斿叆搴撻�氱煡鍗曞彿锛坅snCodes锛夛紝澶氫釜鍗曞彿閫楀彿鍒嗛殧
+     */
+    private void fillAsnCodes(List<WaitPakin> list) {
+        if (list == null || list.isEmpty()) {
+            return;
+        }
+        List<Long> pakinIds = list.stream().map(WaitPakin::getId).collect(Collectors.toList());
+        List<WaitPakinItem> items = waitPakinItemService.list(
+                new LambdaQueryWrapper<WaitPakinItem>()
+                        .in(WaitPakinItem::getPakinId, pakinIds)
+                        .select(WaitPakinItem::getPakinId, WaitPakinItem::getAsnCode));
+        Map<Long, String> asnCodesByPakinId = pakinIds.stream().collect(Collectors.toMap(
+                pid -> pid,
+                pid -> items.stream()
+                        .filter(i -> pid.equals(i.getPakinId()) && i.getAsnCode() != null && !i.getAsnCode().trim().isEmpty())
+                        .map(WaitPakinItem::getAsnCode)
+                        .distinct()
+                        .collect(Collectors.joining(","))));
+        for (WaitPakin p : list) {
+            p.setAsnCodes(asnCodesByPakinId.get(p.getId()));
+        }
+    }
+
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinLogController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinLogController.java
index 29d85bd..887d203 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinLogController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinLogController.java
@@ -9,7 +9,9 @@
 import com.vincent.rsf.server.common.domain.BaseParam;
 import com.vincent.rsf.server.common.domain.KeyValVo;
 import com.vincent.rsf.server.common.domain.PageParam;
+import com.vincent.rsf.server.manager.entity.WaitPakinItemLog;
 import com.vincent.rsf.server.manager.entity.WaitPakinLog;
+import com.vincent.rsf.server.manager.service.WaitPakinItemLogService;
 import com.vincent.rsf.server.manager.service.WaitPakinLogService;
 import com.vincent.rsf.server.system.controller.BaseController;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -18,37 +20,50 @@
 
 import javax.servlet.http.HttpServletResponse;
 import java.util.*;
+import java.util.stream.Collectors;
 
 @RestController
 public class WaitPakinLogController extends BaseController {
 
     @Autowired
     private WaitPakinLogService waitPakinLogService;
+    @Autowired
+    private WaitPakinItemLogService waitPakinItemLogService;
 
     @PreAuthorize("hasAuthority('manager:waitPakinLog:list')")
     @PostMapping("/waitPakinLog/page")
     public R page(@RequestBody Map<String, Object> map) {
         BaseParam baseParam = buildParam(map, BaseParam.class);
         PageParam<WaitPakinLog, BaseParam> pageParam = new PageParam<>(baseParam, WaitPakinLog.class);
-        return R.ok().add(waitPakinLogService.page(pageParam, pageParam.buildWrapper(true)));
+        Page<WaitPakinLog> page = waitPakinLogService.page(pageParam, pageParam.buildWrapper(true));
+        fillAsnCodesForLog(page.getRecords());
+        return R.ok().add(page);
     }
 
     @PreAuthorize("hasAuthority('manager:waitPakinLog:list')")
     @PostMapping("/waitPakinLog/list")
     public R list(@RequestBody Map<String, Object> map) {
-        return R.ok().add(waitPakinLogService.list());
+        List<WaitPakinLog> list = waitPakinLogService.list();
+        fillAsnCodesForLog(list);
+        return R.ok().add(list);
     }
 
     @PreAuthorize("hasAuthority('manager:waitPakinLog:list')")
     @PostMapping({"/waitPakinLog/many/{ids}", "/waitPakinLogs/many/{ids}"})
     public R many(@PathVariable Long[] ids) {
-        return R.ok().add(waitPakinLogService.listByIds(Arrays.asList(ids)));
+        List<WaitPakinLog> list = waitPakinLogService.listByIds(Arrays.asList(ids));
+        fillAsnCodesForLog(list);
+        return R.ok().add(list);
     }
 
     @PreAuthorize("hasAuthority('manager:waitPakinLog:list')")
     @GetMapping("/waitPakinLog/{id}")
     public R get(@PathVariable("id") Long id) {
-        return R.ok().add(waitPakinLogService.getById(id));
+        WaitPakinLog one = waitPakinLogService.getById(id);
+        if (one != null) {
+            fillAsnCodesForLog(Collections.singletonList(one));
+        }
+        return R.ok().add(one);
     }
 
     @PreAuthorize("hasAuthority('manager:waitPakinLog:save')")
@@ -104,7 +119,33 @@
     @PreAuthorize("hasAuthority('manager:waitPakinLog:list')")
     @PostMapping("/waitPakinLog/export")
     public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
-        ExcelUtil.build(ExcelUtil.create(waitPakinLogService.list(), WaitPakinLog.class), response);
+        List<WaitPakinLog> list = waitPakinLogService.list();
+        fillAsnCodesForLog(list);
+        ExcelUtil.build(ExcelUtil.create(list, WaitPakinLog.class), response);
+    }
+
+    /**
+     * 鏍规嵁缁勬墭鍘嗗彶鏄庣粏濉厖涓绘。鐨勫叧鑱斿叆搴撻�氱煡鍗曞彿锛坅snCodes锛夛紝涓庣粍鎵橀�氱煡妗d繚鎸佷竴鑷�
+     */
+    private void fillAsnCodesForLog(List<WaitPakinLog> list) {
+        if (list == null || list.isEmpty()) {
+            return;
+        }
+        List<Long> logIds = list.stream().map(WaitPakinLog::getId).collect(Collectors.toList());
+        List<WaitPakinItemLog> items = waitPakinItemLogService.list(
+                new LambdaQueryWrapper<WaitPakinItemLog>()
+                        .in(WaitPakinItemLog::getLogId, logIds)
+                        .select(WaitPakinItemLog::getLogId, WaitPakinItemLog::getAsnCode));
+        Map<Long, String> asnCodesByLogId = logIds.stream().collect(Collectors.toMap(
+                logId -> logId,
+                logId -> items.stream()
+                        .filter(i -> logId.equals(i.getLogId()) && i.getAsnCode() != null && !i.getAsnCode().trim().isEmpty())
+                        .map(WaitPakinItemLog::getAsnCode)
+                        .distinct()
+                        .collect(Collectors.joining(","))));
+        for (WaitPakinLog p : list) {
+            p.setAsnCodes(asnCodesByLogId.get(p.getId()));
+        }
     }
 
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderLog.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderLog.java
index 9389780..cd0bd92 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderLog.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderLog.java
@@ -53,9 +53,9 @@
     private String code;
 
     /**
-     * PO鍗曞彿
+     * 鍗曟嵁鍐呯爜
      */
-    @ApiModelProperty(value= "PO鍗曞彿")
+    @ApiModelProperty(value= "鍗曟嵁鍐呯爜")
     private String poCode;
 
     /**
@@ -195,7 +195,7 @@
 
 //    AsnOrderLog asnOrderLog = new AsnOrderLog(
 //            null,    // 缂栧彿
-//            null,    // PO鍗曞彿
+//            null,    // 鍗曟嵁鍐呯爜
 //            null,    // PO鍗曟嵁鏍囪瘑
 //            null,    // 鍗曟嵁绫诲瀷[闈炵┖]
 //            null,    // 涓氬姟绫诲瀷[闈炵┖]
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/BasContainer.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/BasContainer.java
index af188dc..d25a563 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/BasContainer.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/BasContainer.java
@@ -49,9 +49,9 @@
     private Long containerType;
 
     /**
-     * 瀹瑰櫒鏉$爜绫诲瀷
+     * 鏂欑鏉$爜绫诲瀷
      */
-    @ApiModelProperty(value= "瀹瑰櫒鏉$爜绫诲瀷")
+    @ApiModelProperty(value= "鏂欑鏉$爜绫诲瀷")
     private String codeType;
 
     @ApiModelProperty("鏄惁婊$")
@@ -134,7 +134,7 @@
 
 //    BasContainer basContainer = new BasContainer(
 //            null,    // 瀹瑰櫒绫诲瀷
-//            null,    // 瀹瑰櫒鏉$爜绫诲瀷
+//            null,    // 鏂欑鏉$爜绫诲瀷
 //            null,    // 鍙叆搴撳尯
 //            null,    // 鏄惁鍒犻櫎
 //            null,    // 鐘舵��
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/ReviseLog.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/ReviseLog.java
index f23b806..f51774f 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/ReviseLog.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/ReviseLog.java
@@ -70,9 +70,9 @@
     private Integer type;
 
     /**
-     * 瀹瑰櫒鐮�
+     * 鏂欑鐮�
      */
-    @ApiModelProperty(value= "瀹瑰櫒鐮�")
+    @ApiModelProperty(value= "鏂欑鐮�")
     private String barcode;
 
     /**
@@ -187,7 +187,7 @@
 //            null,    // 浠撳簱ID
 //            null,    // 搴撳尯ID
 //            null,    // 绫诲瀷
-//            null,    // 瀹瑰櫒鐮�
+//            null,    // 鏂欑鐮�
 //            null,    // 搴撲綅鐘舵��
 //            null,    // 宸烽亾
 //            null,    // 鎺�
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java
index 758458f..d24d459 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java
@@ -183,7 +183,7 @@
     @ApiModelProperty(value= "娣诲姞浜哄憳")
     private Long createBy;
 
-    /**鐜板搧绁ㄥ彿*/
+    /** 鐜板搧绁ㄥ彿(宸插簾寮冿紝鏃犳姒傚康) */
     @TableField(exist = false)
     private String crushNo;
 
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakin.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakin.java
index cb52cf7..e09b83d 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakin.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakin.java
@@ -15,6 +15,7 @@
 import java.util.Date;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
@@ -50,9 +51,9 @@
     private String code;
 
     /**
-     * 瀹瑰櫒鐮�
+     * 鏂欑鐮�
      */
-    @ApiModelProperty(value= "瀹瑰櫒鐮�")
+    @ApiModelProperty(value= "鏂欑鐮�")
     private String barcode;
 
     /**
@@ -126,6 +127,13 @@
     @ApiModelProperty(value= "澶囨敞")
     private String memo;
 
+    /**
+     * 鍏宠仈鐨勫叆搴撻�氱煡鍗曞彿锛堝涓敤閫楀彿鍒嗛殧锛夛紝浠呮煡璇㈠睍绀虹敤锛屼笉钀藉簱
+     */
+    @ApiModelProperty(value = "鍏宠仈鐨勫叆搴撻�氱煡鍗曞彿锛屽涓敤閫楀彿鍒嗛殧")
+    @TableField(exist = false)
+    private String asnCodes;
+
     public WaitPakin() {}
 
     public WaitPakin(String code,String barcode,Double anfme,Short ioStatus,Integer status,Integer deleted,Integer tenantId,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
@@ -147,7 +155,7 @@
 //            null,    // 缂栫爜
 //            null,    // 璁㈠崟ID
 //            null,    // 璁㈠崟缂栫爜
-//            null,    // 瀹瑰櫒鐮�
+//            null,    // 鏂欑鐮�
 //            null,    // 缁勬嫋鏁伴噺
 //            null,    // 缁勬嫋鐘舵��
 //            null,    // 鐘舵�乕闈炵┖]
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakinLog.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakinLog.java
index 9ec43bf..ca5e2ad 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakinLog.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakinLog.java
@@ -11,6 +11,7 @@
 import java.util.Date;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
@@ -51,9 +52,9 @@
     private String code;
 
     /**
-     * 瀹瑰櫒鐮�
+     * 鏂欑鐮�
      */
-    @ApiModelProperty(value= "瀹瑰櫒鐮�")
+    @ApiModelProperty(value= "鏂欑鐮�")
     private String barcode;
 
     /**
@@ -67,6 +68,13 @@
      */
     @ApiModelProperty(value= "缁勬嫋鐘舵�� 0: 寰呭叆搴�   1:  鍏ュ簱涓�  ")
     private Short ioStatus;
+
+    /**
+     * 鍏宠仈鐨勫叆搴撻�氱煡鍗曞彿锛堝涓敤閫楀彿鍒嗛殧锛夛紝浠呮煡璇㈠睍绀虹敤锛屼笉钀藉簱
+     */
+    @ApiModelProperty(value = "鍏宠仈鐨勫叆搴撻�氱煡鍗曞彿锛屽涓敤閫楀彿鍒嗛殧")
+    @TableField(exist = false)
+    private String asnCodes;
 
     /**
      * 鐘舵�� 1: 姝e父  0: 鍐荤粨  
@@ -142,7 +150,7 @@
 //    WaitPakinLog waitPakinLog = new WaitPakinLog(
 //            null,    // 涓诲崟ID
 //            null,    // 缂栫爜
-//            null,    // 瀹瑰櫒鐮�
+//            null,    // 鏂欑鐮�
 //            null,    // 缁勬嫋鏁伴噺
 //            null,    // 缁勬嫋鐘舵�乕闈炵┖]
 //            null,    // 鐘舵�乕闈炵┖]
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WkOrder.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WkOrder.java
index adb5088..c15aafd 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WkOrder.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WkOrder.java
@@ -50,9 +50,9 @@
     private String code;
 
     /**
-     * PO鍗曞彿
+     * 鍗曟嵁鍐呯爜
      */
-    @ApiModelProperty(value = "PO鍗曞彿")
+    @ApiModelProperty(value = "鍗曟嵁鍐呯爜")
     private String poCode;
 
     /**
@@ -61,6 +61,11 @@
     @ApiModelProperty(value = "PO鍗曟嵁鏍囪瘑")
     private Long poId;
 
+    /** 鍏�/鍑哄簱鎺ラ┏绔欑偣锛�8.3 stationId锛� */
+    @ApiModelProperty(value = "鎺ラ┏绔欑偣")
+    @com.baomidou.mybatisplus.annotation.TableField("station_id")
+    private String stationId;
+
     /**
      * 鍗曟嵁绫诲瀷
      */
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WkOrderItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WkOrderItem.java
index b2d2680..4c19413 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WkOrderItem.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WkOrderItem.java
@@ -145,6 +145,23 @@
      */
     @ApiModelProperty("搴撳瓨鎵规")
     private String batch;
+
+    @ApiModelProperty("璁″垝璺熻釜鍙凤紙8.3 planNo锛�")
+    @com.baomidou.mybatisplus.annotation.TableField("plan_no")
+    private String planNo;
+
+    @ApiModelProperty("鎵樼洏鐮侊紙8.3 palletId锛�")
+    @com.baomidou.mybatisplus.annotation.TableField("pallet_id")
+    private String palletId;
+
+    @ApiModelProperty("寤鸿鍏ュ簱浠撳簱锛�8.3 targetWareHouseId锛�")
+    @com.baomidou.mybatisplus.annotation.TableField("target_ware_house_id")
+    private String targetWareHouseId;
+
+    @ApiModelProperty("寤鸿鍑哄簱浠撳簱锛�8.3 sourceWareHouseId锛�")
+    @com.baomidou.mybatisplus.annotation.TableField("source_ware_house_id")
+    private String sourceWareHouseId;
+
     /**
      * 閲囪喘鍗曚綅
      */
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/AsnOrderTemplate.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/AsnOrderTemplate.java
index e60b1b6..2a3ba76 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/AsnOrderTemplate.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/AsnOrderTemplate.java
@@ -34,10 +34,10 @@
     private String code;
 
     /**
-     * PO鍗曞彿
+     * 鍗曟嵁鍐呯爜
      */
-    @Excel(name = "PO鍗曞彿")
-    @ApiModelProperty(value = "PO鍗曞彿")
+    @Excel(name = "鍗曟嵁鍐呯爜")
+    @ApiModelProperty(value = "鍗曟嵁鍐呯爜")
     @ExcelComment(value = "poCode", example = "PO59755695")
     private String poCode;
 
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/OutStockTemplate.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/OutStockTemplate.java
index 839c006..ffd9410 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/OutStockTemplate.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/OutStockTemplate.java
@@ -28,7 +28,7 @@
     private String code;
 
     /**
-     * PO鍗曞彿
+     * 鍗曟嵁鍐呯爜
      */
     @Excel(name = "DO鍗曞彿")
     @ApiModelProperty(value = "DO鍗曞彿")
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/PurchaseTemplate.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/PurchaseTemplate.java
index b9fbc17..f86e9de 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/PurchaseTemplate.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/PurchaseTemplate.java
@@ -17,8 +17,8 @@
 
     private static final long serialVersionUID = 1L;
 
-    @Excel(name = "*PO鍗曞彿")
-    @ApiModelProperty(value= "*PO鍗曞彿")
+    @Excel(name = "*鍗曟嵁鍐呯爜")
+    @ApiModelProperty(value= "*鍗曟嵁鍐呯爜")
     @ExcelComment(value = "poCode", example = "PO25413975")
     private String poCode;
 
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/TransferTemplate.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/TransferTemplate.java
index 7702547..5f1f348 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/TransferTemplate.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/TransferTemplate.java
@@ -14,10 +14,10 @@
     private String code;
 
     /**
-     * PO鍗曞彿
+     * 鍗曟嵁鍐呯爜
      */
-    @Excel(name = "PO鍗曞彿")
-    @ApiModelProperty(value = "PO鍗曞彿")
+    @Excel(name = "鍗曟嵁鍐呯爜")
+    @ApiModelProperty(value = "鍗曟嵁鍐呯爜")
     @ExcelComment(value = "poCode", example = "PO59755695")
     private String poCode;
 
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/AsnExceStatus.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/AsnExceStatus.java
index f3e67f5..2a08c0b 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/AsnExceStatus.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/AsnExceStatus.java
@@ -9,11 +9,14 @@
  */
 public enum AsnExceStatus {
 
-    //ASN鎵ц鐘舵�佺姸鎬�
+    // ASN/鍏ュ簱鍗曟墽琛岀姸鎬侊紙鏂伴『搴忥級锛氭湭鎵ц(缁勬墭) 鈫� 浠诲姟鎵ц涓� 鈫� 宸插畬鎴�
     ASN_EXCE_STATUS_UN_EXCE("0", "鏈墽琛�"),
+    /** @deprecated 宸插仠鐢紝鏂版祦绋嬩笉鍐嶄娇鐢� */
     ASN_EXCE_STATUS_EXCE_ING("1", "鎵ц涓�"),
+    /** @deprecated 宸插仠鐢紝鏂版祦绋嬩笉鍐嶄娇鐢� */
     ASN_EXCE_STATUS_RECEIPT_DONE("2", "鏀惰揣瀹屾垚"),
     ASN_EXCE_STATUS_TASK_EXCE("3", "浠诲姟鎵ц涓�"),
+    /** 宸插畬鎴愶細鏁村崟鍏ㄦ祦绋嬬粨鏉燂紙鏀惰揣+缁勬墭+涓婃灦/鍏ュ簱浠诲姟绛夛級锛屽彲褰掓。鍘嗗彶銆佷笂鎶� ERP锛涚敱缁勬墭/浠诲姟瀹氭椂鎴栫Щ鍘嗗彶鏃惰缃� */
     ASN_EXCE_STATUS_TASK_DONE("4", "宸插畬鎴�"),
     ASN_EXCE_STATUS_TASK_CANCEL("8", "鍙栨秷"),
     ASN_EXCE_STATUS_TASK_CLOSE("9", "宸插叧闂�"),
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/listener/OrderWorkTypeRefreshListener.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/listener/OrderWorkTypeRefreshListener.java
new file mode 100644
index 0000000..12e191e
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/listener/OrderWorkTypeRefreshListener.java
@@ -0,0 +1,36 @@
+package com.vincent.rsf.server.manager.listener;
+
+import com.vincent.rsf.server.common.event.DictDataChangedEvent;
+import com.vincent.rsf.server.manager.service.OrderTypeDictService;
+import com.vincent.rsf.server.manager.service.OrderWorkTypeService;
+import com.vincent.rsf.server.system.constant.DictTypeCode;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+/**
+ * 瀛楀吀鏁版嵁鍙樻洿鏃跺埛鏂拌鍗曚笟鍔$被鍨嬨�佽鍗曠被鍨嬬紦瀛橈紝浣块厤缃敼瀹岀珛鍒荤敓鏁堛��
+ */
+@Slf4j
+@Component
+public class OrderWorkTypeRefreshListener {
+
+    @Resource
+    private OrderWorkTypeService orderWorkTypeService;
+    @Resource
+    private OrderTypeDictService orderTypeDictService;
+
+    @EventListener
+    public void onDictDataChanged(DictDataChangedEvent event) {
+        if (DictTypeCode.DICT_ORDER_WORK_TYPE.equals(event.getDictTypeCode())) {
+            orderWorkTypeService.refreshCache();
+            log.debug("璁㈠崟涓氬姟绫诲瀷瀛楀吀宸插彉鏇达紝宸插埛鏂扮紦瀛�");
+        }
+        if (DictTypeCode.DICT_SYS_ORDER_TYPE.equals(event.getDictTypeCode())) {
+            orderTypeDictService.refreshCache();
+            log.debug("璁㈠崟绫诲瀷瀛楀吀宸插彉鏇达紝宸插埛鏂扮紦瀛�");
+        }
+    }
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
index 1de8060..9eaaa0e 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
@@ -27,6 +27,7 @@
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
@@ -68,160 +69,156 @@
     @Autowired
     private FieldsItemService fieldsItemService;
 
-    /**
-     * @author Ryan
-     * @date 2025/5/9
-     * @description: 鐩存帴缁勬墭寮�鍏充负true锛屽皢鏀惰揣鍗曠洿鎺ュ姞鍏ヤ复鏃跺簱瀛�
-     * @version 1.0
-     */
-    @Scheduled(cron = "0/25 * * * * ?")
-    @Transactional(rollbackFor = Exception.class)
-    public synchronized void IgnoreReceipt() {
-        Config config = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.DIRECT_WAIT_PAKIN));
-        if (Objects.isNull(config)) {
-            return;
-        }
-        if (!Boolean.parseBoolean(config.getVal())) {
-            return;
-        }
-        //鑷姩鏀惰揣鍗�
-        List<WkOrder> orders = asnOrderService.list(new LambdaQueryWrapper<WkOrder>()
-                .eq(WkOrder::getType, OrderType.ORDER_IN.type)
-                .eq(WkOrder::getExceStatus, AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val));
-         if (!orders.isEmpty()) {
-            for (WkOrder order : orders) {
-                if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_OTHER_TERANSFER.type)) {
-                    WkOrder one = outStockService.getOne(new LambdaQueryWrapper<WkOrder>()
-                            .eq(WkOrder::getPoCode, order.getPoCode())
-                            .eq(WkOrder::getWkType, OrderWorkType.ORDER_WORK_TYPE_STOCK_TERANSFER.type));
-                    if (Objects.isNull(one)) {
-                        throw new CoolException("鏁版嵁閿欒");
-                    }
-                    if (!one.getExceStatus().equals(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val)) {
-                        continue;
-                    }
-                }
-
-                List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, order.getId()));
-                if (orderItems.isEmpty()) {
-                    return;
-                }
-                List<WarehouseAreasItem> items = new ArrayList<>();
-                for (WkOrderItem item : orderItems) {
-                    WarehouseAreas one = warehouseAreasService.getOne(new LambdaQueryWrapper<WarehouseAreas>()
-                            .eq(WarehouseAreas::getType, WarehouseAreasType.WAREHOUSE_AREAS_TYPE_RECEIPT.type), false);
-                    Long areaId = Objects.isNull(one) ? null : one.getId();
-                    String areaName = Objects.isNull(one) ? null : one.getName();
-
-                    WarehouseAreasItem param = new WarehouseAreasItem();
-                    BeanUtils.copyProperties(item, param);
-                    param.setAreaId(one.getId())
-                            .setAsnCode(order.getCode())
-                            .setAreaId(areaId)
-                            .setAreaName(areaName)
-                            .setAsnId(order.getId());
-                    items.add(param);
-                    Matnr matnr = matnrService.getOne(new LambdaQueryWrapper<Matnr>().eq(Matnr::getId, item.getMatnrId()));
-                    if (Objects.isNull(matnr)) {
-                        throw new CoolException("鐗╂枡涓嶅瓨鍦紒锛�");
-                    }
-                    //鏇存柊鏀惰揣鍖哄簱瀛�
-                    try {
-                        updateReceipt(one, item, order, matnr);
-                    } catch (Exception e) {
-                        throw new CoolException(e.getMessage());
-                    }
-
-                    if (!asnOrderItemService.update(new LambdaUpdateWrapper<WkOrderItem>().set(WkOrderItem::getQty, item.getAnfme()).eq(WkOrderItem::getId, item.getId()))) {
-                        throw new CoolException("鏀惰揣鍗曟槑缁嗗畬鎴愭暟閲忎慨鏀瑰け璐ワ紒锛�");
-                    }
-                }
-//                if (!warehouseAreasItemService.saveBatch(items)) {
-//                    throw new CoolException("鏀惰揣鍗曚繚瀛樿嚦鏀惰揣鍖烘墽琛屽け璐ワ紒锛�");
+//    /**
+//     * @author Ryan
+//     * @date 2025/5/9
+//     * @description: 鐩存帴缁勬墭寮�鍏充负true锛屽皢鏀惰揣鍗曠洿鎺ュ姞鍏ヤ复鏃跺簱瀛�
+//     * @version 1.0
+//     */
+//    @Scheduled(cron = "0/25 * * * * ?")
+//    @Transactional(rollbackFor = Exception.class)
+//    public synchronized void IgnoreReceipt() {
+//        Config config = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.DIRECT_WAIT_PAKIN));
+//        if (Objects.isNull(config)) {
+//            return;
+//        }
+//        if (!Boolean.parseBoolean(config.getVal())) {
+//            return;
+//        }
+//        //鑷姩鏀惰揣鍗�
+//        List<WkOrder> orders = asnOrderService.list(new LambdaQueryWrapper<WkOrder>()
+//                .eq(WkOrder::getType, OrderType.ORDER_IN.type)
+//                .eq(WkOrder::getExceStatus, AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val));
+//         if (!orders.isEmpty()) {
+//            for (WkOrder order : orders) {
+//                if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_OTHER_TERANSFER.type)) {
+//                    WkOrder one = outStockService.getOne(new LambdaQueryWrapper<WkOrder>()
+//                            .eq(WkOrder::getPoCode, order.getPoCode())
+//                            .eq(WkOrder::getWkType, OrderWorkType.ORDER_WORK_TYPE_STOCK_TERANSFER.type));
+//                    if (Objects.isNull(one)) {
+//                        throw new CoolException("鏁版嵁閿欒");
+//                    }
+//                    if (!one.getExceStatus().equals(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val)) {
+//                        continue;
+//                    }
 //                }
-
-                if (!asnOrderService.update(new LambdaUpdateWrapper<WkOrder>()
-                        .set(WkOrder::getQty, order.getAnfme())
-                        .set(WkOrder::getExceStatus, AsnExceStatus.ASN_EXCE_STATUS_RECEIPT_DONE.val)
-                        .eq(WkOrder::getId, order.getId()))) {
-                    throw new CoolException("鏀惰揣鍗曠姸鎬佷慨鏀瑰け璐ワ紒锛�");
-                }
-            }
-        }
-    }
+//
+//                List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, order.getId()));
+//                if (orderItems.isEmpty()) {
+//                    return;
+//                }
+//                // 鏀惰揣鍖哄凡鍋滅敤锛氫笉鍐嶅啓鍏ユ敹璐у尯锛屼粎鏇存柊鍗曟嵁鐘舵�佷笌鏁伴噺
+////                List<WarehouseAreas> receiptAreas = warehouseAreasService.list(new LambdaQueryWrapper<WarehouseAreas>()
+////                        .eq(WarehouseAreas::getType, WarehouseAreasType.WAREHOUSE_AREAS_TYPE_RECEIPT.type));
+////                WarehouseAreas receiptArea = receiptAreas.isEmpty() ? null : receiptAreas.get(0);
+////                List<WarehouseAreasItem> items = new ArrayList<>();
+//                for (WkOrderItem item : orderItems) {
+////                    Long areaId = receiptArea == null ? null : receiptArea.getId();
+////                    String areaName = receiptArea == null ? null : receiptArea.getName();
+////                    WarehouseAreasItem param = new WarehouseAreasItem();
+////                    BeanUtils.copyProperties(item, param);
+////                    param.setAsnCode(order.getCode()).setAsnId(order.getId());
+////                    if (areaId != null) {
+////                        param.setAreaId(areaId).setAreaName(areaName);
+////                    }
+////                    items.add(param);
+////                    Matnr matnr = matnrService.getOne(new LambdaQueryWrapper<Matnr>().eq(Matnr::getId, item.getMatnrId()));
+////                    if (Objects.isNull(matnr)) {
+////                        throw new CoolException("鐗╂枡涓嶅瓨鍦紒锛�");
+////                    }
+////                    if (receiptArea != null) {
+////                        try {
+////                            updateReceipt(receiptArea, item, order, matnr);
+////                        } catch (Exception e) {
+////                            throw new CoolException(e.getMessage());
+////                        }
+////                    }
+//                    if (!asnOrderItemService.update(new LambdaUpdateWrapper<WkOrderItem>().set(WkOrderItem::getQty, item.getAnfme()).eq(WkOrderItem::getId, item.getId()))) {
+//                        throw new CoolException("鏀惰揣鍗曟槑缁嗗畬鎴愭暟閲忎慨鏀瑰け璐ワ紒锛�");
+//                    }
+//                }
+////                if (!warehouseAreasItemService.saveBatch(items)) {
+////                    throw new CoolException("鏀惰揣鍗曚繚瀛樿嚦鏀惰揣鍖烘墽琛屽け璐ワ紒锛�");
+////                }
+//
+//                if (!asnOrderService.update(new LambdaUpdateWrapper<WkOrder>()
+//                        .set(WkOrder::getQty, order.getAnfme())
+//                        .set(WkOrder::getExceStatus, AsnExceStatus.ASN_EXCE_STATUS_RECEIPT_DONE.val)
+//                        .eq(WkOrder::getId, order.getId()))) {
+//                    throw new CoolException("鏀惰揣鍗曠姸鎬佷慨鏀瑰け璐ワ紒锛�");
+//                }
+//            }
+//        }
+//    }
 
 
-    /**
+    /** 鏀惰揣鍖哄凡鍋滅敤锛屾柟娉曟暣浣撴敞閲�
      * @author Ryan
      * @date 2025/5/12
      * @description: 鏀惰揣鍖哄簱瀛樻洿鏂�
-     * @version 1.0
      */
-    @Transactional(rollbackFor = Exception.class)
-    public void updateReceipt(WarehouseAreas areasItem, WkOrderItem orderItem, WkOrder wkOrder, Matnr matnr) throws Exception {
-        Companys companys = new Companys();
-        if (StringUtils.isNoneBlank(orderItem.getSplrCode())) {
-            companys = companysService.getOne(new LambdaQueryWrapper<Companys>().eq(Companys::getCode, orderItem.getSplrCode()));
-        }
-
-        WarehouseAreasItem item = new WarehouseAreasItem();
-        item.setTrackCode(orderItem.getBarcode())
-                .setAreaName(areasItem.getName())
-                .setAreaId(areasItem.getId())
-                .setAsnItemId(orderItem.getId())
-                .setAsnCode(wkOrder.getCode())
-                .setAsnId(wkOrder.getId())
-                .setProdTime(orderItem.getProdTime())
-                .setPlatItemId(orderItem.getPlatItemId())
-                .setPlatOrderCode(orderItem.getPlatOrderCode())
-                .setPlatWorkCode(orderItem.getPlatWorkCode())
-                .setProjectCode(orderItem.getProjectCode())
-                .setSplrId(companys.getId())
-                //搴撳瓨鍗曚綅涓烘渶灏忓崟浣�
-                .setUnit(orderItem.getStockUnit())
-                .setStockUnit(orderItem.getStockUnit())
-                .setMatnrCode(matnr.getCode())
-                .setAnfme(orderItem.getAnfme())
-                .setMatnrId(matnr.getId())
-                .setIsptResult(orderItem.getIsptResult())
-                .setMaktx(matnr.getName())
-                .setSplrBatch(orderItem.getSplrBatch())
-                .setWeight(matnr.getWeight())
-                .setFieldsIndex(orderItem.getFieldsIndex())
-                .setShipperId(matnr.getShipperId());
-
-
-        WarehouseAreasItem warehousItem = warehouseAreasItemService.getOne(new LambdaQueryWrapper<WarehouseAreasItem>().eq(StringUtils.isNotBlank(orderItem.getFieldsIndex()), WarehouseAreasItem::getFieldsIndex, orderItem.getFieldsIndex()));
-        if (!Objects.isNull(warehousItem)) {
-            //鐩稿悓绁ㄥ彿锛屾敹璐у尯涓嶅彲鏂板鐩稿悓绁ㄥ彿鏁版嵁
-            FieldsItem fieldsItem = fieldsItemService.getOne(new LambdaQueryWrapper<FieldsItem>()
-                    .eq(FieldsItem::getUuid, orderItem.getFieldsIndex()).last("LIMIT 1"));
-            if (!Objects.isNull(fieldsItem)) {
-                throw new CoolException("绁ㄥ彿锛�" + fieldsItem.getValue() + "宸插湪鏀惰揣鍖猴紝涓嶅彲鎺ㄩ�佺浉褰撶エ鍙锋暟鎹�傝鑱旂郴绠$悊鍛橈紒锛�" );
-            }
-        }
-
-        LambdaQueryWrapper<WarehouseAreasItem> queryWrapper = new LambdaQueryWrapper<WarehouseAreasItem>()
-                .eq(WarehouseAreasItem::getMatnrCode, orderItem.getMatnrCode())
-                .eq(!Cools.isEmpty(orderItem.getFieldsIndex()), WarehouseAreasItem::getFieldsIndex, orderItem.getFieldsIndex())
-                .eq(WarehouseAreasItem::getAsnCode, orderItem.getOrderCode())
-                .eq(StringUtils.isNotBlank(orderItem.getSplrBatch()), WarehouseAreasItem::getSplrBatch, orderItem.getSplrBatch());
-        if (Objects.isNull(orderItem.getIsptResult())) {
-            queryWrapper.isNull(WarehouseAreasItem::getIsptResult);
-        } else {
-            queryWrapper.eq(WarehouseAreasItem::getIsptResult, orderItem.getIsptResult());
-        }
-        WarehouseAreasItem serviceOne = warehouseAreasItemService.getOne(queryWrapper);
-        if (!Objects.isNull(serviceOne)) {
-            item.setId(serviceOne.getId());
-            Double anfme = Math.round((item.getAnfme() + serviceOne.getAnfme()) * 1000000) / 1000000.0;
-            item.setAnfme(anfme);
-        }
-        //鏈川妫�
-        if (!warehouseAreasItemService.saveOrUpdate(item)) {
-            throw new CoolException("鏀惰揣澶辫触锛侊紒");
-        }
-    }
+//    @Transactional(rollbackFor = Exception.class)
+//    public void updateReceipt(WarehouseAreas areasItem, WkOrderItem orderItem, WkOrder wkOrder, Matnr matnr) throws Exception {
+//        Companys companys = new Companys();
+//        if (StringUtils.isNoneBlank(orderItem.getSplrCode())) {
+//            companys = companysService.getOne(new LambdaQueryWrapper<Companys>().eq(Companys::getCode, orderItem.getSplrCode()));
+//        }
+//        WarehouseAreasItem item = new WarehouseAreasItem();
+//        item.setTrackCode(orderItem.getBarcode())
+//                .setAreaName(areasItem.getName())
+//                .setAreaId(areasItem.getId())
+//                .setAsnItemId(orderItem.getId())
+//                .setAsnCode(wkOrder.getCode())
+//                .setAsnId(wkOrder.getId())
+//                .setProdTime(orderItem.getProdTime())
+//                .setPlatItemId(orderItem.getPlatItemId())
+//                .setPlatOrderCode(orderItem.getPlatOrderCode())
+//                .setPlatWorkCode(orderItem.getPlatWorkCode())
+//                .setProjectCode(orderItem.getProjectCode())
+//                .setSplrId(companys.getId())
+//                .setUnit(orderItem.getStockUnit())
+//                .setStockUnit(orderItem.getStockUnit())
+//                .setMatnrCode(matnr.getCode())
+//                .setAnfme(orderItem.getAnfme())
+//                .setMatnrId(matnr.getId())
+//                .setIsptResult(orderItem.getIsptResult())
+//                .setMaktx(matnr.getName())
+//                .setSplrBatch(orderItem.getSplrBatch())
+//                .setWeight(matnr.getWeight())
+//                .setFieldsIndex(orderItem.getFieldsIndex())
+//                .setShipperId(matnr.getShipperId());
+//        List<WarehouseAreasItem> warehousList = StringUtils.isNotBlank(orderItem.getFieldsIndex())
+//                ? warehouseAreasItemService.list(new LambdaQueryWrapper<WarehouseAreasItem>().eq(WarehouseAreasItem::getFieldsIndex, orderItem.getFieldsIndex()))
+//                : Collections.emptyList();
+//        WarehouseAreasItem warehousItem = warehousList.isEmpty() ? null : warehousList.get(0);
+//        if (!Objects.isNull(warehousItem)) {
+//            List<FieldsItem> fieldsList = fieldsItemService.list(new LambdaQueryWrapper<FieldsItem>()
+//                    .eq(FieldsItem::getUuid, orderItem.getFieldsIndex()).last("LIMIT 1"));
+//            FieldsItem fieldsItem = fieldsList.isEmpty() ? null : fieldsList.get(0);
+//            if (!Objects.isNull(fieldsItem)) {
+//                throw new CoolException("绁ㄥ彿锛�" + fieldsItem.getValue() + "宸插湪鏀惰揣鍖猴紝涓嶅彲鎺ㄩ�佺浉褰撶エ鍙锋暟鎹�傝鑱旂郴绠$悊鍛橈紒锛�" );
+//            }
+//        }
+//        LambdaQueryWrapper<WarehouseAreasItem> queryWrapper = new LambdaQueryWrapper<WarehouseAreasItem>()
+//                .eq(WarehouseAreasItem::getMatnrCode, orderItem.getMatnrCode())
+//                .eq(!Cools.isEmpty(orderItem.getFieldsIndex()), WarehouseAreasItem::getFieldsIndex, orderItem.getFieldsIndex())
+//                .eq(WarehouseAreasItem::getAsnCode, orderItem.getOrderCode())
+//                .eq(StringUtils.isNotBlank(orderItem.getSplrBatch()), WarehouseAreasItem::getSplrBatch, orderItem.getSplrBatch());
+//        if (Objects.isNull(orderItem.getIsptResult())) {
+//            queryWrapper.isNull(WarehouseAreasItem::getIsptResult);
+//        } else {
+//            queryWrapper.eq(WarehouseAreasItem::getIsptResult, orderItem.getIsptResult());
+//        }
+//        List<WarehouseAreasItem> serviceList = warehouseAreasItemService.list(queryWrapper);
+//        WarehouseAreasItem serviceOne = serviceList.isEmpty() ? null : serviceList.get(0);
+//        if (!Objects.isNull(serviceOne)) {
+//            item.setId(serviceOne.getId());
+//            item.setAnfme(orderItem.getAnfme());
+//        }
+//        if (!warehouseAreasItemService.saveOrUpdate(item)) {
+//            throw new CoolException("鏀惰揣澶辫触锛侊紒");
+//        }
+//    }
 
 
     /**
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
index 6ce0261..07a4621 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
@@ -104,10 +104,11 @@
 
 
     /**
-     * @param
-     * @return
+     * 瀹屾垚鍏ュ簱锛屾洿鏂板簱浣嶆槑缁嗐�佺粍鎵樼姸鎬侊紝骞跺湪姝ょ粺涓�鎵ц 9.1 鍏�/鍑哄簱缁撴灉涓婃姤浜戜粨銆�
+     * 涓� RCS 鍥炶皟褰㈡垚闂幆锛歊CS 涓婃姤浠诲姟缁撴潫鍚庝粎灏嗕换鍔$姸鎬佺疆涓� COMPLETE_IN锛堣 WcsServiceImpl.receiveExMsg锛夛紝
+     * 鏈畾鏃朵换鍔℃壂鎻� COMPLETE_IN 骞舵墽琛� complateInTask锛堝簱浣嶃�佺粍鎵樸��9.1 涓婃姤浜戜粨锛夈��
+     *
      * @author Ryan
-     * @description 瀹屾垚鍏ュ簱锛屾洿鏂板簱瀛�
      * @time 2025/4/2 12:37
      */
     @Scheduled(cron = "0/3 * * * * ?")
@@ -122,10 +123,12 @@
     }
 
     /**
+     * 瀹屾垚鍑哄簱浠诲姟锛屾洿鏂板簱浣�/鍑哄簱鍗曪紝骞跺湪姝ょ粺涓�鎵ц 9.1 鍏�/鍑哄簱缁撴灉涓婃姤浜戜粨銆�
+     * 涓� RCS 鍥炶皟褰㈡垚闂幆锛歊CS 涓婃姤 END 鍚庝粎灏嗗嚭搴撲换鍔$姸鎬佺疆涓� COMPLETE_OUT锛堣 WcsServiceImpl.receiveExMsg锛夛紝
+     * 鏈畾鏃朵换鍔℃壂鎻� COMPLETE_OUT 骞舵墽琛� completeTask锛堟墸搴撲綅銆佹洿鏂板嚭搴撳崟銆�9.1 涓婃姤浜戜粨锛夈��
+     *
      * @author Ryan
      * @date 2025/5/20
-     * @description: 瀹屾垚鍑哄簱浠诲姟锛屾洿鏂板簱瀛�
-     * @version 1.0
      */
     @Scheduled(cron = "0/5 * * * * ?  ")
     @Transactional(rollbackFor = Exception.class)
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OrderTypeDictService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OrderTypeDictService.java
new file mode 100644
index 0000000..631b292
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OrderTypeDictService.java
@@ -0,0 +1,38 @@
+package com.vincent.rsf.server.manager.service;
+
+import com.vincent.rsf.server.system.entity.DictData;
+
+import java.util.List;
+
+/**
+ * 璁㈠崟绫诲瀷瀛楀吀锛氫粠瀛楀吀琛ㄥ姩鎬佽幏鍙栵紙鍑哄簱鍗�/鍏ュ簱鍗�/璋冩嫧鍗曠瓑锛夛紝鍏煎 API 鐨� 1/2/3銆�
+ */
+public interface OrderTypeDictService {
+
+    /**
+     * 鏌ヨ鎵�鏈夊惎鐢ㄧ殑璁㈠崟绫诲瀷锛堝甫缂撳瓨锛�
+     */
+    List<DictData> listAll();
+
+    /**
+     * 鏍规嵁鏄剧ず鍚嶇О鍙栫被鍨嬬紪鐮侊紝濡� "鍑哄簱鍗�" -> "out"
+     */
+    String getTypeByLabel(String label);
+
+    /**
+     * 鏍规嵁绫诲瀷缂栫爜鍙栨樉绀哄悕绉帮紝濡� "out" -> "鍑哄簱鍗�"
+     */
+    String getLabelByType(String type);
+
+    /**
+     * 瑙f瀽鍏ュ弬涓哄唴閮ㄧ被鍨嬬紪鐮併�傛敮鎸侊細鏁板瓧 1/2/3銆佷腑鏂� "鍑哄簱鍗�"/"鍏ュ簱鍗�"/"璋冩嫧鍗�"銆佸唴閮ㄧ爜 "out"/"in"/"transfer"
+     */
+    String resolveType(String input);
+
+    /**
+     * 瑙f瀽 Integer 绫诲瀷鐨� orderType锛圓PI 绾﹀畾 1=鍑哄簱 2=鍏ュ簱 3=璋冩嫧锛�
+     */
+    String resolveType(Integer orderType);
+
+    void refreshCache();
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OrderWorkTypeService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OrderWorkTypeService.java
new file mode 100644
index 0000000..4ca509a
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OrderWorkTypeService.java
@@ -0,0 +1,31 @@
+package com.vincent.rsf.server.manager.service;
+
+import com.vincent.rsf.server.system.entity.DictData;
+
+import java.util.List;
+
+/**
+ * 璁㈠崟涓氬姟绫诲瀷锛氫粠瀛楀吀琛ㄥ姩鎬佽幏鍙栦笌閰嶇疆锛屾浛浠�/琛ュ厖 OrderWorkType 鏋氫妇銆�
+ */
+public interface OrderWorkTypeService {
+
+    /**
+     * 鏌ヨ鎵�鏈夊惎鐢ㄧ殑璁㈠崟涓氬姟绫诲瀷锛堝甫缂撳瓨锛屽瓧鍏稿彉鏇村悗闇�璋冪敤 refreshCache锛�
+     */
+    List<DictData> listAll();
+
+    /**
+     * 鏍规嵁鏄剧ず鍚嶇О锛坙abel锛夊彇绫诲瀷缂栫爜锛坴alue锛夛紝濡� "閲囪喘鍏ュ簱鍗�" -> "1"
+     */
+    String getTypeByLabel(String label);
+
+    /**
+     * 鏍规嵁绫诲瀷缂栫爜锛坴alue锛夊彇鏄剧ず鍚嶇О锛坙abel锛夛紝濡� "1" -> "閲囪喘鍏ュ簱鍗�"
+     */
+    String getLabelByType(String type);
+
+    /**
+     * 娓呴櫎缂撳瓨锛屼笅娆� listAll 鏃朵粠鏁版嵁搴撻噸鏂板姞杞斤紙瀛楀吀鏁版嵁鍙樻洿鍚庤皟鐢級
+     */
+    void refreshCache();
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderLogServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderLogServiceImpl.java
index a6e2119..f5d7936 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderLogServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderLogServiceImpl.java
@@ -50,7 +50,7 @@
         BeanUtils.copyProperties(orderLog, order);
         order.setId(orderLog.getAsnId())
                 .setDeleted(0)
-                .setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_EXCE_ING.val);
+                .setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val); // 鏂伴『搴忥細涓嶅啀浣跨敤鎵ц涓�
 
         WkOrder wkOrder = asnOrderService.getOne(new LambdaQueryWrapper<WkOrder>().eq(WkOrder::getCode, orderLog.getCode()));
         if (!Objects.isNull(wkOrder)) {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java
index 45e209c..1f39b07 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java
@@ -69,6 +69,8 @@
     private AsnOrderService asnOrderService;
     @Autowired
     private TaskService taskService;
+    @Autowired
+    private WaitPakinItemService waitPakinItemService;
 
     @Override
     public boolean notifyInspect(List<WkOrder> orders) {
@@ -379,6 +381,12 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public R removeOrders(List<Long> ids) {
+        // 宸茬粍鎵樹笉鍙垹闄わ紝闇�鍏堣В闄ょ粍鎵�
+        long palletizedCount = waitPakinItemService.count(new LambdaQueryWrapper<WaitPakinItem>()
+                .in(WaitPakinItem::getAsnId, ids));
+        if (palletizedCount > 0) {
+            throw new CoolException("鍗曟嵁宸茬粍鎵橈紝璇峰厛瑙i櫎缁勬墭鍚庡啀鍒犻櫎锛侊紒");
+        }
         for (Long id : ids) {
             List<WkOrderItem> list = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>()
                     .eq(WkOrderItem::getOrderId, id));
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OrderTypeDictServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OrderTypeDictServiceImpl.java
new file mode 100644
index 0000000..0d768e7
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OrderTypeDictServiceImpl.java
@@ -0,0 +1,98 @@
+package com.vincent.rsf.server.manager.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.vincent.rsf.server.manager.enums.OrderType;
+import com.vincent.rsf.server.manager.service.OrderTypeDictService;
+import com.vincent.rsf.server.system.constant.DictTypeCode;
+import com.vincent.rsf.server.system.entity.DictData;
+import com.vincent.rsf.server.system.service.DictDataService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 璁㈠崟绫诲瀷锛氫紭鍏堜粠瀛楀吀琛ㄨ鍙栵紝鍏煎 API 鏁板瓧 1/2/3 涓庢灇涓惧洖閫�銆�
+ */
+@Slf4j
+@Service
+public class OrderTypeDictServiceImpl implements OrderTypeDictService {
+
+    private static final Map<String, String> API_NUMERIC_MAP = new HashMap<>();
+    static {
+        API_NUMERIC_MAP.put("1", OrderType.ORDER_OUT.type);   // 鍑哄簱鍗�
+        API_NUMERIC_MAP.put("2", OrderType.ORDER_IN.type);    // 鍏ュ簱鍗�
+        API_NUMERIC_MAP.put("3", OrderType.ORDER_TRANSFER.type); // 璋冩嫧鍗�
+    }
+
+    @Resource
+    private DictDataService dictDataService;
+
+    private volatile List<DictData> cache;
+    private static final Object CACHE_LOCK = new Object();
+
+    @Override
+    public List<DictData> listAll() {
+        if (cache != null && !cache.isEmpty()) {
+            return cache;
+        }
+        synchronized (CACHE_LOCK) {
+            if (cache != null && !cache.isEmpty()) {
+                return cache;
+            }
+            List<DictData> list = dictDataService.list(new LambdaQueryWrapper<DictData>()
+                    .eq(DictData::getDictTypeCode, DictTypeCode.DICT_SYS_ORDER_TYPE)
+                    .eq(DictData::getStatus, 1)
+                    .orderByAsc(DictData::getSort));
+            cache = list;
+            return cache;
+        }
+    }
+
+    @Override
+    public String getTypeByLabel(String label) {
+        if (label == null || label.isEmpty()) return null;
+        for (DictData d : listAll()) {
+            if (label.equals(d.getLabel())) return d.getValue();
+        }
+        return OrderType.getTypeVal(label);
+    }
+
+    @Override
+    public String getLabelByType(String type) {
+        if (type == null || type.isEmpty()) return null;
+        for (DictData d : listAll()) {
+            if (type.equals(d.getValue())) return d.getLabel();
+        }
+        return OrderType.getValType(type);
+    }
+
+    @Override
+    public String resolveType(String input) {
+        if (input == null) return null;
+        String s = input.trim();
+        if (s.isEmpty()) return null;
+        if (API_NUMERIC_MAP.containsKey(s)) return API_NUMERIC_MAP.get(s);
+        String byLabel = getTypeByLabel(s);
+        if (byLabel != null) return byLabel;
+        if (getLabelByType(s) != null) return s;
+        return null;
+    }
+
+    @Override
+    public String resolveType(Integer orderType) {
+        if (orderType == null) return null;
+        return API_NUMERIC_MAP.get(String.valueOf(orderType));
+    }
+
+    @Override
+    public void refreshCache() {
+        synchronized (CACHE_LOCK) {
+            cache = null;
+        }
+        log.info("璁㈠崟绫诲瀷瀛楀吀缂撳瓨宸插埛鏂�");
+    }
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OrderWorkTypeServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OrderWorkTypeServiceImpl.java
new file mode 100644
index 0000000..2ee979b
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OrderWorkTypeServiceImpl.java
@@ -0,0 +1,81 @@
+package com.vincent.rsf.server.manager.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.vincent.rsf.server.manager.enums.OrderWorkType;
+import com.vincent.rsf.server.manager.service.OrderWorkTypeService;
+import com.vincent.rsf.server.system.constant.DictTypeCode;
+import com.vincent.rsf.server.system.entity.DictData;
+import com.vincent.rsf.server.system.service.DictDataService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 璁㈠崟涓氬姟绫诲瀷锛氫紭鍏堜粠瀛楀吀琛ㄨ鍙栵紙鍙厤缃級锛屾棤鍒欏洖閫�鍒� OrderWorkType 鏋氫妇銆�
+ */
+@Slf4j
+@Service
+public class OrderWorkTypeServiceImpl implements OrderWorkTypeService {
+
+    @Resource
+    private DictDataService dictDataService;
+
+    private volatile List<DictData> cache;
+    private static final Object CACHE_LOCK = new Object();
+
+    @Override
+    public List<DictData> listAll() {
+        if (cache != null && !cache.isEmpty()) {
+            return cache;
+        }
+        synchronized (CACHE_LOCK) {
+            if (cache != null && !cache.isEmpty()) {
+                return cache;
+            }
+            List<DictData> list = dictDataService.list(new LambdaQueryWrapper<DictData>()
+                    .eq(DictData::getDictTypeCode, DictTypeCode.DICT_ORDER_WORK_TYPE)
+                    .eq(DictData::getStatus, 1)
+                    .orderByAsc(DictData::getSort));
+            cache = list;
+            return cache;
+        }
+    }
+
+    @Override
+    public String getTypeByLabel(String label) {
+        if (label == null || label.isEmpty()) {
+            return null;
+        }
+        for (DictData d : listAll()) {
+            if (label.equals(d.getLabel())) {
+                return d.getValue();
+            }
+        }
+        // 鍥為��鍒版灇涓�
+        return OrderWorkType.getWorkType(label);
+    }
+
+    @Override
+    public String getLabelByType(String type) {
+        if (type == null || type.isEmpty()) {
+            return null;
+        }
+        for (DictData d : listAll()) {
+            if (type.equals(d.getValue())) {
+                return d.getLabel();
+            }
+        }
+        // 鍥為��鍒版灇涓�
+        return OrderWorkType.getWorkDesc(type);
+    }
+
+    @Override
+    public void refreshCache() {
+        synchronized (CACHE_LOCK) {
+            cache = null;
+        }
+        log.info("璁㈠崟涓氬姟绫诲瀷瀛楀吀缂撳瓨宸插埛鏂�");
+    }
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
index 4e4640d..0bd3bb6 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -467,16 +467,18 @@
         if (success.compareAndSet(false, true)) {
             Long loginUserId = SystemAuthUtils.getLoginUserId();
             for (Task task : tasks) {
-                if (task.getTaskType().equals(TaskType.TASK_TYPE_IN.type)) {
-                    //1.鍏ュ簱
+                if (task.getTaskType().equals(TaskType.TASK_TYPE_IN.type) || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_IN.type)) {
+                    //1.鍏ュ簱銆�54.骞舵澘鍐嶅叆搴�
                     complateInstock(task, loginUserId);
                 } else if (task.getTaskType().equals(TaskType.TASK_TYPE_PICK_IN.type) || task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_IN.type)) {
-                    //53.鎷f枡鍐嶅叆搴�
-                    //57.鐩樼偣鍐嶅叆搴�
+                    //53.鎷f枡鍐嶅叆搴撱��57.鐩樼偣鍐嶅叆搴�
                     pickComplateInStock(task, loginUserId);
                 } else if (task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) {
-                    //绉诲簱
+                    //11.搴撴牸绉昏浇
                     moveInStock(task, loginUserId);
+                } else if (task.getTaskType().equals(TaskType.TASK_TYPE_EMPITY_IN.type)) {
+                    //10.绌烘澘鍏ュ簱锛氫笌鏅�氬叆搴撳叡鐢ㄤ竴涓畬鎴愰�昏緫锛堣嫢鏈夌粍鎵樺垯鏇存柊缁勬墭/搴撲綅骞朵笂鎶ヤ簯浠擄級
+                    complateInstock(task, loginUserId);
                 }
             }
         }
@@ -812,7 +814,11 @@
                 .set(Task::getTaskStatus, TaskStsType.UPDATED_IN.id))) {
             throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
         }
-
+        // 9.1 鍏�/鍑哄簱缁撴灉涓婃姤锛氬簱鏍肩Щ杞藉畬鎴愬悗閫氱煡浜戜粨锛堜笌瀹氭椂浠诲姟闂幆涓�鑷达級
+        List<TaskItem> moveTaskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
+        if (!moveTaskItems.isEmpty()) {
+            reportInOutResultToCloud(task, loc, moveTaskItems, null, true);
+        }
     }
 
 
@@ -911,7 +917,8 @@
         if (!taskService.updateById(task)) {
             throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
         }
-
+        // 9.1 鍏�/鍑哄簱缁撴灉涓婃姤锛氭嫞鏂欏啀鍏ュ簱/鐩樼偣鍐嶅叆搴撳畬鎴愬悗閫氱煡浜戜粨锛堜笌瀹氭椂浠诲姟闂幆涓�鑷达級
+        reportInOutResultToCloud(task, loc, taskItems, null, true);
     }
 
     /**
@@ -2222,10 +2229,10 @@
             List<TaskItem> items = orderMap.get(key);
             //淇濆瓨鍏ュ嚭搴撴槑缁�
             saveStockItems(items, task, pakinItem.getId(), pakinItem.getAsnCode(), pakinItem.getWkType(), pakinItem.getType(), loginUserId);
-            //绉诲嚭鏀惰揣鍖哄簱瀛橈紝 淇敼缁勬墭鐘舵�侊紙鍙湁褰搒ource涓嶄负null鏃舵墠闇�瑕佺Щ闄ゆ敹璐у尯搴撳瓨锛�
-            if (Objects.nonNull(pakinItem.getSource())) {
-                removeReceiptStock(pakinItem, loginUserId);
-            }
+            // 鏀惰揣鍖哄凡鍋滅敤锛屼笉鍐嶇Щ鍑烘敹璐у尯搴撳瓨
+            // if (Objects.nonNull(pakinItem.getSource())) {
+            //     removeReceiptStock(pakinItem, loginUserId);
+            // }
         });
 
         Set<Long> pkinItemIds = taskItems.stream().map(TaskItem::getSource).collect(Collectors.toSet());
@@ -2452,6 +2459,9 @@
             Date now = new Date();
             for (TaskItem item : taskItems) {
                 String orderNo = isInbound ? sourceToOrderNo.get(item.getSource()) : (item.getPlatOrderCode() != null ? item.getPlatOrderCode() : item.getPlatWorkCode());
+                if (orderNo == null && isInbound) {
+                    orderNo = item.getPlatOrderCode() != null ? item.getPlatOrderCode() : item.getPlatWorkCode();
+                }
                 if (orderNo == null || item.getMatnrCode() == null) {
                     continue;
                 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java
index 0e9c566..c367545 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java
@@ -243,7 +243,7 @@
             throw new CoolException("鍑哄簱鍗曟槑缁嗕繚瀛樺け璐ワ紒锛�");
         }
 
-        transfer.setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_EXCE_ING.val);
+        transfer.setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val); // 鏂伴『搴忥細涓嶅啀浣跨敤鎵ц涓�
 
         if (!this.updateById(transfer)) {
             throw new CoolException("璋冩嫈鍗曟洿鏂板け璐ワ紒锛�");
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java
index 137fa7a..eea2499 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java
@@ -11,6 +11,7 @@
 import com.vincent.rsf.server.manager.mapper.MatnrMapper;
 import com.vincent.rsf.server.manager.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vincent.rsf.server.common.utils.QuantityUtils;
 import com.vincent.rsf.server.system.constant.SerialRuleCode;
 import com.vincent.rsf.server.system.utils.SerialRuleUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -66,9 +67,9 @@
         WaitPakin pakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>()
                 .eq(WaitPakin::getBarcode, waitPakin.getBarcode()));
 
-        // 濡傛灉瀹瑰櫒鍙峰凡缁忕粍鎵樿繃锛屾彁绀哄凡缁勬墭锛岃鏇存崲瀹瑰櫒鏉$爜
+        // 濡傛灉鏂欑鐮佸凡缁忕粍鎵樿繃锛屾彁绀哄凡缁勬墭锛岃鏇存崲鏂欑鐮�
         if (!Objects.isNull(pakin)) {
-            throw new CoolException("宸茬粍鎵橈紝璇锋洿鎹㈠鍣ㄦ潯鐮�");
+            throw new CoolException("宸茬粍鎵橈紝璇锋洿鎹㈡枡绠辩爜");
         }
 
         List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, waitPakin.getBarcode()));
@@ -76,13 +77,13 @@
             throw new CoolException("褰撳墠鏂欑宸叉湁浠诲姟妗e湪鎵ц锛屼笉鑳藉啀娆$粍鎵橈紒锛�");
         }
         
-        // 妫�鏌ュ鍣ㄥ彿鏄惁鍦ㄥ簱瀛樹腑瀛樺湪锛堥�氳繃搴撲綅琛ㄦ煡璇級
+        // 妫�鏌ユ枡绠辩爜鏄惁鍦ㄥ簱瀛樹腑瀛樺湪锛堥�氳繃搴撲綅琛ㄦ煡璇級
         List<Loc> locs = locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, waitPakin.getBarcode()));
         if (!locs.isEmpty()) {
-            throw new CoolException("鍦ㄥ簱锛岃鏇存崲瀹瑰櫒鏉$爜");
+            throw new CoolException("鍦ㄥ簱锛岃鏇存崲鏂欑鐮�");
         }
 
-        double sum = waitPakin.getItems().stream().mapToDouble(PakinItem::getReceiptQty).sum();
+        Double sum = QuantityUtils.roundToScale(waitPakin.getItems().stream().mapToDouble(PakinItem::getReceiptQty).sum());
 
         WaitPakin waitPakin1 = new WaitPakin();
         if (Objects.isNull(pakin)) {
@@ -144,47 +145,49 @@
                 if (pakinItem1.getReceiptQty() == null || pakinItem1.getReceiptQty().compareTo(0.0) <= 0) {
                     throw new CoolException("缁勬墭鏁伴噺涓嶈兘灏忎簬绛変簬闆讹紒锛�");
                 }
-                pakinItem.setAnfme(pakinItem1.getReceiptQty())
+                pakinItem.setAnfme(QuantityUtils.roundToScale(pakinItem1.getReceiptQty()))
                         .setTrackCode(pakinItem1.getTrackCode());
             } else {
-                // 鏈堿SN鍗曞彿锛屼粠鏀惰揣鍖鸿幏鍙栫墿鏂欎俊鎭�
-                WarehouseAreasItem warehouseAreasItems = warehouseAreasItemService.getById(pakinItem1.getId());
-                if (null == warehouseAreasItems) {
-                    throw new CoolException("鐗╂枡鏈�佽嚦鏀惰揣鍖猴紒锛�");
+                // 鏀惰揣鍖哄凡鍋滅敤锛氭湁ASN鍗曞彿鏃朵粠璁㈠崟鏄庣粏鑾峰彇鐗╂枡淇℃伅
+                WkOrderItem orderItem = asnOrderItemService.getById(pakinItem1.getId());
+                if (null == orderItem) {
+                    throw new CoolException("璁㈠崟鏄庣粏涓嶅瓨鍦紒锛�");
                 }
-                
-                pakinItem.setAnfme(warehouseAreasItems.getAnfme())
+                WkOrder order = asnOrderService.getById(orderItem.getOrderId());
+                if (null == order) {
+                    throw new CoolException("璁㈠崟涓嶅瓨鍦紒锛�");
+                }
+                pakinItem.setAnfme(QuantityUtils.roundToScale(orderItem.getAnfme()))
                         .setPakinId(waitPakin1.getId())
-                        .setSource(warehouseAreasItems.getId())
-                        .setAsnId(warehouseAreasItems.getAsnId())
-                        .setAsnCode(warehouseAreasItems.getAsnCode())
-                        .setAsnItemId(warehouseAreasItems.getAsnItemId())
-                        .setIsptResult(warehouseAreasItems.getIsptResult())
-                        .setPlatItemId(warehouseAreasItems.getPlatItemId())
-                        .setPlatOrderCode(warehouseAreasItems.getPlatOrderCode())
-                        .setPlatWorkCode(warehouseAreasItems.getPlatWorkCode())
-                        .setProjectCode(warehouseAreasItems.getProjectCode())
-                        .setBatch(warehouseAreasItems.getSplrBatch())
-                        .setUnit(warehouseAreasItems.getStockUnit())
-                        .setFieldsIndex(warehouseAreasItems.getFieldsIndex())
-                        .setMatnrId(warehouseAreasItems.getMatnrId())
-                        .setMaktx(warehouseAreasItems.getMaktx())
+                        .setSource(null) // 鏀惰揣鍖哄凡鍋滅敤锛屼笉鍏宠仈鏀惰揣鍖�
+                        .setAsnId(order.getId())
+                        .setAsnCode(order.getCode())
+                        .setAsnItemId(orderItem.getId())
+                        .setIsptResult(orderItem.getIsptResult())
+                        .setPlatItemId(orderItem.getPlatItemId())
+                        .setPlatOrderCode(orderItem.getPlatOrderCode())
+                        .setPlatWorkCode(orderItem.getPlatWorkCode())
+                        .setProjectCode(orderItem.getProjectCode())
+                        .setBatch(orderItem.getSplrBatch())
+                        .setUnit(orderItem.getStockUnit())
+                        .setFieldsIndex(orderItem.getFieldsIndex())
+                        .setMatnrId(orderItem.getMatnrId())
+                        .setMaktx(orderItem.getMaktx())
                         .setUpdateBy(userId)
                         .setCreateBy(userId)
-                        .setMatnrCode(warehouseAreasItems.getMatnrCode());
-                
-                WkOrder order = asnOrderService.getById(warehouseAreasItems.getAsnId());
-                if (!Objects.isNull(order)) {
-                    pakinItem.setType(null == order.getType() ? null : order.getType())
-                            .setWkType(null == order.getWkType() ? null : Short.parseShort(order.getWkType()));
-                }
+                        .setMatnrCode(orderItem.getMatnrCode());
+                pakinItem.setType(null == order.getType() ? null : order.getType())
+                        .setWkType(StringUtils.isNotBlank(order.getWkType()) ? Short.parseShort(order.getWkType()) : null);
 
                 for (PakinItem waitPakinItem : waitPakin.getItems()) {
-                    if (waitPakinItem.getId().equals(warehouseAreasItems.getId())) {
-                        if (waitPakinItem.getReceiptQty() > warehouseAreasItems.getAnfme() || waitPakinItem.getReceiptQty().compareTo(0.0) <= 0) {
-                            throw new CoolException("缁勬墭鏁伴噺涓嶈兘澶т簬鏀惰揣鏁伴噺涓斾笉鑳藉皬浜庨浂锛侊紒");
+                    if (waitPakinItem.getId().equals(orderItem.getId())) {
+                        if (waitPakinItem.getReceiptQty() == null || waitPakinItem.getReceiptQty().compareTo(0.0) <= 0) {
+                            throw new CoolException("缁勬墭鏁伴噺涓嶈兘灏忎簬绛変簬闆讹紒锛�");
                         }
-                        pakinItem.setAnfme(waitPakinItem.getReceiptQty())
+                        if (QuantityUtils.compare(waitPakinItem.getReceiptQty(), orderItem.getAnfme()) > 0) {
+                            throw new CoolException("缁勬墭鏁伴噺涓嶈兘澶т簬璁″垝鏁伴噺锛侊紒");
+                        }
+                        pakinItem.setAnfme(QuantityUtils.roundToScale(waitPakinItem.getReceiptQty()))
                                 .setTrackCode(waitPakinItem.getTrackCode());
                     }
                 }
@@ -200,31 +203,22 @@
         List<WaitPakinItem> pakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>().eq(WaitPakinItem::getPakinId, waitPakin1.getId()));
         Double waitSum = 0.0;
         if (!pakinItems.isEmpty()) {
-            waitSum = pakinItems.stream().mapToDouble(WaitPakinItem::getAnfme).sum();
+            waitSum = QuantityUtils.roundToScale(pakinItems.stream().mapToDouble(WaitPakinItem::getAnfme).sum());
         }
 //        Double total = Math.round((sum + waitSum) * 100) / 100.0;
 
-        for (WaitPakinItem pakinItem : items) {
-            // 濡傛灉source涓虹┖锛堟病鏈堿SN鍗曞彿锛屼笉鍦ㄦ敹璐у尯锛夛紝璺宠繃鏀惰揣鍖烘洿鏂�
-            if (Objects.isNull(pakinItem.getSource())) {
-                continue;
-            }
-            
-            WarehouseAreasItem one = warehouseAreasItemService.getOne(new LambdaQueryWrapper<WarehouseAreasItem>()
-                    .eq(WarehouseAreasItem::getId, pakinItem.getSource()));
-            if (Objects.isNull(one)) {
-                throw new CoolException("鏀惰揣鍖烘暟鎹敊璇紒锛�");
-            }
-            Double workQty = Math.round((one.getWorkQty() + pakinItem.getAnfme()) * 1000000) / 1000000.0;
-            Double qty = Math.round((workQty + one.getQty()) * 1000000) / 1000000.0;
-            one.setWorkQty(workQty);
-            if (qty.compareTo(one.getAnfme()) > 0) {
-                throw new CoolException("缁勬墭鏁伴噺涓嶈兘澶т簬鏀惰揣鏁伴噺锛侊紒");
-            }
-            if (!warehouseAreasItemService.saveOrUpdate(one)) {
-                throw new CoolException("鏀惰揣鍖烘墽琛屾暟閲忎慨鏀瑰け璐ワ紒锛�");
-            }
-        }
+        // 鏀惰揣鍖哄凡鍋滅敤锛屼笉鍐嶆洿鏂版敹璐у尯
+        // for (WaitPakinItem pakinItem : items) {
+        //     if (Objects.isNull(pakinItem.getSource())) continue;
+        //     WarehouseAreasItem one = warehouseAreasItemService.getOne(new LambdaQueryWrapper<WarehouseAreasItem>()
+        //             .eq(WarehouseAreasItem::getId, pakinItem.getSource()));
+        //     if (Objects.isNull(one)) throw new CoolException("鏀惰揣鍖烘暟鎹敊璇紒锛�");
+        //     Double workQty = Math.round((one.getWorkQty() + pakinItem.getAnfme()) * 1000000) / 1000000.0;
+        //     Double qty = Math.round((workQty + one.getQty()) * 1000000) / 1000000.0;
+        //     one.setWorkQty(workQty);
+        //     if (qty.compareTo(one.getAnfme()) > 0) throw new CoolException("缁勬墭鏁伴噺涓嶈兘澶т簬鏀惰揣鏁伴噺锛侊紒");
+        //     if (!warehouseAreasItemService.saveOrUpdate(one)) throw new CoolException("鏀惰揣鍖烘墽琛屾暟閲忎慨鏀瑰け璐ワ紒锛�");
+        // }
 
         waitPakin1.setAnfme(waitSum);
         if (!this.updateById(waitPakin1)) {
@@ -265,21 +259,22 @@
 //            if (!waitPakinItemService.removeByIds(ids)) {
 //                throw new CoolException("缁勬墭鏄庣粏瑙g粦澶辫触锛侊紒");
 //            }
-            List<Long> list2 = pakinItems.stream().map(WaitPakinItem::getSource).collect(Collectors.toList());
-            List<WarehouseAreasItem> warehouseAreasItems = warehouseAreasItemService.listByIds(list2);
+            // 鏀惰揣鍖哄凡鍋滅敤锛氫粎淇濈暀闈炵┖ source 鐢ㄤ簬鍏煎鏃ф暟鎹紝涓嶅啀鏇存柊鏀惰揣鍖�
+            List<Long> list2 = pakinItems.stream().map(WaitPakinItem::getSource).filter(Objects::nonNull).collect(Collectors.toList());
+            List<WarehouseAreasItem> warehouseAreasItems = list2.isEmpty() ? Collections.emptyList() : warehouseAreasItemService.listByIds(list2);
             for (int i1 = 0; i1 < pakinItems.size(); i1++) {
                 for (PakinItem item : paramItems) {
                     if (item.getId().equals(pakinItems.get(i1).getId())) {
-                        if (pakinItems.get(i1).getAnfme().compareTo(item.getReceiptQty()) > 0) {
-                            if (item.getReceiptQty().compareTo(0.00) == 0) {
+                        if (QuantityUtils.compare(pakinItems.get(i1).getAnfme(), item.getReceiptQty()) > 0) {
+                            if (QuantityUtils.compare(item.getReceiptQty(), 0.00) == 0) {
                                 throw new CoolException("瑙g粦鏁伴噺涓嶈兘涓洪浂锛侊紒");
                             }
-                            Double reslt = Math.round((pakinItems.get(i1).getAnfme() - pakinItems.get(i1).getWorkQty() - pakinItems.get(i1).getQty()) * 1000000) / 1000000.0;
-                            if (item.getReceiptQty().compareTo(reslt) > 0) {
+                            Double reslt = QuantityUtils.subtract(QuantityUtils.subtract(pakinItems.get(i1).getAnfme(), pakinItems.get(i1).getWorkQty()), pakinItems.get(i1).getQty());
+                            if (QuantityUtils.compare(item.getReceiptQty(), reslt) > 0) {
                                 throw new CoolException("瑙g粦鏁伴噺涓嶈兘澶т簬鍓╀綑鍙墽琛屾暟锛侊紒");
                             }
 
-                            Double anfme = Math.round((pakinItems.get(i1).getAnfme() - item.getReceiptQty()) * 1000000) / 1000000.0;
+                            Double anfme = QuantityUtils.subtract(pakinItems.get(i1).getAnfme(), item.getReceiptQty());
                            pakinItems.get(i1).setAnfme(anfme);
                            if (!waitPakinItemService.updateById(pakinItems.get(i1))) {
                                throw new CoolException("缁勬墭鏄庣粏鏁伴噺淇敼澶辫触锛侊紒");
@@ -289,28 +284,28 @@
                                 throw new CoolException("缁勬墭鏄庣粏鍒犻櫎澶辫触锛侊紒");
                             }
                         }
-                        for (int i = 0; i < warehouseAreasItems.size(); i++) {
-                            if (warehouseAreasItems.get(i).getId().equals(pakinItems.get(i1).getSource())) {
-                                double v = Math.round((warehouseAreasItems.get(i).getWorkQty() - item.getReceiptQty()) * 1000000) / 1000000.0;
-                                warehouseAreasItems.get(i).setWorkQty(v);
-                                if (!warehouseAreasItemService.updateById(warehouseAreasItems.get(i))) {
-                                    throw new CoolException("鏀惰揣鍖烘暟閲忎慨鏀瑰け璐ワ紒锛�");
-                                }
-                            }
-                        }
+                        // 鏀惰揣鍖哄凡鍋滅敤锛屼笉鍐嶅洖鍐欐敹璐у尯
+                        // for (int i = 0; i < warehouseAreasItems.size(); i++) {
+                        //     if (warehouseAreasItems.get(i).getId().equals(pakinItems.get(i1).getSource())) {
+                        //         double v = Math.round((warehouseAreasItems.get(i).getWorkQty() - item.getReceiptQty()) * 1000000) / 1000000.0;
+                        //         warehouseAreasItems.get(i).setWorkQty(v);
+                        //         if (!warehouseAreasItemService.updateById(warehouseAreasItems.get(i))) {
+                        //             throw new CoolException("鏀惰揣鍖烘暟閲忎慨鏀瑰け璐ワ紒锛�");
+                        //         }
+                        //     }
+                        // }
                     }
                 }
             }
 
-            double anfmes = paramItems.stream().mapToDouble(PakinItem::getReceiptQty).sum();
+            Double anfmes = QuantityUtils.roundToScale(paramItems.stream().mapToDouble(PakinItem::getReceiptQty).sum());
 //            double anfmes = warehouseAreasItems.stream().mapToDouble(WarehouseAreasItem::getAnfme).sum();
-            if (waitPakins.getAnfme().compareTo(anfmes) <= 0) {
+            if (QuantityUtils.compare(waitPakins.getAnfme(), anfmes) <= 0) {
                 if (!waitPakinService.removeById(waitPakins.getId())) {
                     throw new CoolException("缁勬墭鍒犻櫎澶辫触锛侊紒");
                 }
             } else {
-                Double anfme = Math.round((waitPakins.getAnfme() - anfmes) * 1000000) / 1000000.0;
-                waitPakins.setAnfme(anfme);
+                waitPakins.setAnfme(QuantityUtils.subtract(waitPakins.getAnfme(), anfmes));
                 if (!waitPakinService.updateById(waitPakins)) {
                     throw new CoolException("缁勬墭鏁版嵁淇敼澶辫触锛侊紒");
                 }
@@ -338,26 +333,23 @@
                 return R.error("缁勬嫋妗f湁鏄庣粏浠诲姟");
             }
 
-            Set<Long> sourceIds = pakinItems.stream().map(WaitPakinItem::getSource).collect(Collectors.toSet());
+            Set<Long> sourceIds = pakinItems.stream().map(WaitPakinItem::getSource).filter(Objects::nonNull).collect(Collectors.toSet());
 
-            List<WarehouseAreasItem> areasItems = warehouseAreasItemService.list(new LambdaQueryWrapper<WarehouseAreasItem>()
-                    .in(WarehouseAreasItem::getId, sourceIds));
+            List<WarehouseAreasItem> areasItems = sourceIds.isEmpty() ? Collections.emptyList() : warehouseAreasItemService.list(new LambdaQueryWrapper<WarehouseAreasItem>().in(WarehouseAreasItem::getId, sourceIds));
 
-            if (areasItems.isEmpty()) {
-                return R.error("鏀惰揣鍖烘暟鎹笉瀛樺湪锛侊紒");
-            }
-
-            Map<Long, List<WaitPakinItem>> listMap = pakinItems.stream().collect(Collectors.groupingBy(WaitPakinItem::getSource));
-            for (WarehouseAreasItem item : areasItems) {
-                List<WaitPakinItem> pakin = listMap.get(item.getId());
-                if (Objects.isNull(pakin)) {
-                    continue;
-                }
-                double sum = pakin.stream().mapToDouble(WaitPakinItem::getAnfme).sum();
-                Double workQty = Math.round((item.getWorkQty() - sum) * 1000000) / 1000000.0;
-                item.setWorkQty(workQty);
-                if (!warehouseAreasItemService.updateById(item)) {
-                    throw new CoolException("鏀惰揣鍖烘暟鎹洖婊氬け璐ワ紒锛�");
+            // 鏀惰揣鍖哄凡鍋滅敤锛屼粎鍏煎鏃ф暟鎹椂鍥炴粴鏀惰揣鍖烘暟閲�
+            if (!areasItems.isEmpty()) {
+                Map<Long, List<WaitPakinItem>> listMap = pakinItems.stream().collect(Collectors.groupingBy(WaitPakinItem::getSource));
+                for (WarehouseAreasItem item : areasItems) {
+                    List<WaitPakinItem> pakin = listMap.get(item.getId());
+                    if (Objects.isNull(pakin)) {
+                        continue;
+                    }
+                    Double sum = QuantityUtils.roundToScale(pakin.stream().mapToDouble(WaitPakinItem::getAnfme).sum());
+                    item.setWorkQty(QuantityUtils.subtract(item.getWorkQty(), sum));
+                    if (!warehouseAreasItemService.updateById(item)) {
+                        throw new CoolException("鏀惰揣鍖烘暟鎹洖婊氬け璐ワ紒锛�");
+                    }
                 }
             }
 
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/DictTypeCode.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/DictTypeCode.java
index 9bec209..87712ba 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/DictTypeCode.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/DictTypeCode.java
@@ -98,4 +98,7 @@
     public final static String SYS_TRANSFER_TYPE = "sys_transfer_type";
     /**搴撳瓨璋冩暣*/
     public final static String SYS_STOCK_REVISE_TYPE =  "sys_stock_revise_type";
+
+    /** 璁㈠崟涓氬姟绫诲瀷锛堝彲鐣岄潰閰嶇疆锛屼笌 OrderWorkType 鏋氫妇瀵瑰簲锛� */
+    public final static String DICT_ORDER_WORK_TYPE = "sys_order_work_type";
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/DictDataServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/DictDataServiceImpl.java
index c788c76..9526a17 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/DictDataServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/DictDataServiceImpl.java
@@ -1,12 +1,55 @@
 package com.vincent.rsf.server.system.service.impl;
 
-import com.vincent.rsf.server.system.mapper.DictDataMapper;
-import com.vincent.rsf.server.system.entity.DictData;
-import com.vincent.rsf.server.system.service.DictDataService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vincent.rsf.server.common.event.DictDataChangedEvent;
+import com.vincent.rsf.server.system.entity.DictData;
+import com.vincent.rsf.server.system.mapper.DictDataMapper;
+import com.vincent.rsf.server.system.service.DictDataService;
+import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+import java.util.stream.Collectors;
 
 @Service("dictDataService")
 public class DictDataServiceImpl extends ServiceImpl<DictDataMapper, DictData> implements DictDataService {
 
+    @Resource
+    private ApplicationEventPublisher applicationEventPublisher;
+
+    @Override
+    public boolean save(DictData entity) {
+        boolean result = super.save(entity);
+        if (result && entity.getDictTypeCode() != null) {
+            applicationEventPublisher.publishEvent(new DictDataChangedEvent(this, entity.getDictTypeCode()));
+        }
+        return result;
+    }
+
+    @Override
+    public boolean updateById(DictData entity) {
+        boolean result = super.updateById(entity);
+        if (result && entity.getDictTypeCode() != null) {
+            applicationEventPublisher.publishEvent(new DictDataChangedEvent(this, entity.getDictTypeCode()));
+        }
+        return result;
+    }
+
+    @Override
+    public boolean removeByIds(Collection<? extends Serializable> list) {
+        if (list == null || list.isEmpty()) {
+            return true;
+        }
+        List<DictData> before = listByIds(list);
+        boolean result = super.removeByIds(list);
+        if (result && before != null) {
+            for (String dictTypeCode : before.stream().map(DictData::getDictTypeCode).filter(c -> c != null).distinct().collect(Collectors.toList())) {
+                applicationEventPublisher.publishEvent(new DictDataChangedEvent(this, dictTypeCode));
+            }
+        }
+        return result;
+    }
 }
diff --git a/version/db/man_asn_order_add_8_3_fields.sql b/version/db/man_asn_order_add_8_3_fields.sql
new file mode 100644
index 0000000..cd220b4
--- /dev/null
+++ b/version/db/man_asn_order_add_8_3_fields.sql
@@ -0,0 +1,15 @@
+-- 8.3 鎺ュ彛鏈娇鐢ㄥ瓧娈垫帴鍏ワ細涓诲崟 stationId锛涙槑缁� planNo銆乸alletId銆乼argetWareHouseId銆乻ourceWareHouseId
+-- 鍗曟嵁鍐呯爜鐢� po_code 瀛樺偍锛堟帴鍙� orderInternalCode锛夛紝涓嶅崟鐙缓 order_internal_code 瀛楁
+-- 鑻ヤ箣鍓嶅凡鎵ц杩囨坊鍔� order_internal_code锛屽彲鍏堟墽琛岋細ALTER TABLE man_asn_order DROP COLUMN order_internal_code;
+-- 鎵ц鍓嶈纭琛� man_asn_order銆乵an_asn_order_item 宸插瓨鍦�
+
+-- 涓诲崟 man_asn_order
+ALTER TABLE `man_asn_order`
+  ADD COLUMN `station_id` varchar(64) DEFAULT NULL COMMENT '鍏�/鍑哄簱鎺ラ┏绔欑偣';
+
+-- 鏄庣粏 man_asn_order_item
+ALTER TABLE `man_asn_order_item`
+  ADD COLUMN `plan_no` varchar(64) DEFAULT NULL COMMENT '璁″垝璺熻釜鍙�' AFTER `batch`,
+  ADD COLUMN `pallet_id` varchar(64) DEFAULT NULL COMMENT '鎵樼洏鐮�' AFTER `plan_no`,
+  ADD COLUMN `target_ware_house_id` varchar(64) DEFAULT NULL COMMENT '寤鸿鍏ュ簱浠撳簱' AFTER `pallet_id`,
+  ADD COLUMN `source_ware_house_id` varchar(64) DEFAULT NULL COMMENT '寤鸿鍑哄簱浠撳簱' AFTER `target_ware_house_id`;
diff --git a/version/db/out_stock_order_log_menu.sql b/version/db/out_stock_order_log_menu.sql
index 787f70e..2f823d1 100644
--- a/version/db/out_stock_order_log_menu.sql
+++ b/version/db/out_stock_order_log_menu.sql
@@ -1,7 +1,7 @@
--- 鍑哄簱鍘嗗彶鍗曡彍鍗曪細涓庛�屽叆搴撳巻鍙插崟銆嶅悓绾э紝鍏辩敤 asnOrderLog 鎺ュ彛锛屼粎鍓嶇 resource=outStockOrderLog銆佸浐瀹� type=out
+-- 鍑哄簱鍘嗗彶鍗曡彍鍗曪細涓庛�屽叆搴撳巻鍙插崟銆嶅悓绾э紝鍏辩敤 asnOrderLog 鎺ュ彛锛屽浘鏍囦笌鍑哄簱閫氱煡鍗曚竴鑷达紙HorizontalRule锛�
 -- 鎵ц鍓嶉渶宸插瓨鍦� component='asnOrderLog' 鐨勮彍鍗曪紝鍚﹀垯鏈� INSERT 涓嶄細鎻掑叆浠讳綍琛�
 INSERT INTO `sys_menu` (`id`, `name`, `parent_id`, `parent_name`, `path`, `path_name`, `route`, `component`, `brief`, `code`, `type`, `authority`, `icon`, `sort`, `meta`, `tenant_id`, `status`, `deleted`, `create_time`, `create_by`, `update_time`, `update_by`, `memo`)
-SELECT 52, 'menu.outStockOrderLog', m.parent_id, m.parent_name, CONCAT(IFNULL(m.path,''), ',52'), 'menu.outStockOrderLog', '/histories/outStockOrderLog', 'outStockOrderLog', NULL, NULL, 0, NULL, 'Outbox', 2, NULL, 1, 1, 0, NULL, NULL, NULL, NULL, NULL
+SELECT 52, 'menu.outStockOrderLog', m.parent_id, m.parent_name, CONCAT(IFNULL(m.path,''), ',52'), 'menu.outStockOrderLog', '/histories/outStockOrderLog', 'outStockOrderLog', NULL, NULL, 0, NULL, 'HorizontalRule', 2, NULL, 1, 1, 0, NULL, NULL, NULL, NULL, NULL
 FROM `sys_menu` m WHERE m.component = 'asnOrderLog' LIMIT 1;
 
 -- 鍑哄簱鍘嗗彶鍗曞垪琛ㄦ潈闄愶紙涓庡叆搴撳巻鍙插崟鍏辩敤 manager:asnOrderLog:list锛屾湁璇ユ潈闄愬嵆鍙闂袱涓彍鍗曪級
diff --git a/version/db/sys_order_type_dict.sql b/version/db/sys_order_type_dict.sql
new file mode 100644
index 0000000..7e665e5
--- /dev/null
+++ b/version/db/sys_order_type_dict.sql
@@ -0,0 +1,20 @@
+-- 璁㈠崟绫诲瀷瀛楀吀锛�1 鍑哄簱鍗� 2 鍏ュ簱鍗� 3 璋冩嫧鍗� 绛夛紝鍙湪銆愮郴缁�-鏁版嵁瀛楀吀銆戜腑缁存姢
+-- value = 鍐呴儴缂栫爜锛坥ut/in/transfer锛夛紝label = 鏄剧ず鍚嶇О锛汚PI 鐨� orderType 1/2/3 鍦ㄤ唬鐮佷腑鏄犲皠涓� out/in/transfer
+
+INSERT INTO `sys_dict_type` (`code`, `name`, `description`, `status`, `deleted`, `tenant_id`, `create_by`, `create_time`, `update_by`, `update_time`, `memo`)
+SELECT 'sys_order_type', '璁㈠崟绫诲瀷', '鍑哄簱鍗�/鍏ュ簱鍗�/璋冩嫧鍗曠瓑锛屼笌 wk_order.type 瀵瑰簲', 1, 0, 1, NULL, NOW(), NULL, NOW(), NULL
+FROM DUAL
+WHERE NOT EXISTS (SELECT 1 FROM sys_dict_type WHERE code = 'sys_order_type' LIMIT 1);
+
+INSERT INTO `sys_dict_data` (`dict_type_id`, `dict_type_code`, `value`, `label`, `sort`, `status`, `deleted`, `tenant_id`, `create_by`, `create_time`, `update_by`, `update_time`, `memo`)
+SELECT t.id, 'sys_order_type', v.val, v.lbl, v.srt, 1, 0, 1, NULL, NOW(), NULL, NOW(), NULL
+FROM sys_dict_type t
+CROSS JOIN (
+  SELECT 'out' AS val, '鍑哄簱鍗�' AS lbl, 1 AS srt
+  UNION ALL SELECT 'in', '鍏ュ簱鍗�', 2
+  UNION ALL SELECT 'transfer', '璋冩嫧鍗�', 3
+  UNION ALL SELECT 'revise', '搴撳瓨璋冩暣', 4
+  UNION ALL SELECT 'check', '鐩樼偣鍗�', 5
+) v
+WHERE t.code = 'sys_order_type'
+  AND NOT EXISTS (SELECT 1 FROM sys_dict_data d WHERE d.dict_type_code = 'sys_order_type' AND d.value = v.val LIMIT 1);
diff --git a/version/db/sys_order_work_type_dict.sql b/version/db/sys_order_work_type_dict.sql
new file mode 100644
index 0000000..150e7c7
--- /dev/null
+++ b/version/db/sys_order_work_type_dict.sql
@@ -0,0 +1,22 @@
+-- 璁㈠崟涓氬姟绫诲瀷瀛楀吀锛氫笌 OrderWorkType 鏋氫妇瀵瑰簲锛屽彲鍦ㄣ�愮郴缁�-鏁版嵁瀛楀吀銆戜腑缁存姢
+-- 鎵ц鍓嶈纭 sys_dict_type銆乻ys_dict_data 琛ㄥ瓨鍦紱琛ㄧ粨鏋勯渶鍚� create_by/create_time 绛夛紙涓庡疄浣撲竴鑷达級
+-- value = 绫诲瀷缂栫爜锛堝 1銆�2锛夛紝label = 鏄剧ず鍚嶇О锛堝 閲囪喘鍏ュ簱鍗曪級
+
+-- 1. 瀛楀吀绫诲瀷锛堣嫢宸插瓨鍦� sys_order_work_type 鍙烦杩囨湰娈碉級
+INSERT INTO `sys_dict_type` (`code`, `name`, `description`, `status`, `deleted`, `tenant_id`, `create_by`, `create_time`, `update_by`, `update_time`, `memo`)
+SELECT 'sys_order_work_type', '璁㈠崟涓氬姟绫诲瀷', '鍏ュ簱/鍑哄簱/璋冩嫧绛変笟鍔$被鍨嬶紝涓� wk_order.wk_type 瀵瑰簲', 1, 0, 1, NULL, NOW(), NULL, NOW(), NULL
+FROM DUAL
+WHERE NOT EXISTS (SELECT 1 FROM sys_dict_type WHERE code = 'sys_order_work_type' LIMIT 1);
+
+-- 2. 瀛楀吀鏁版嵁锛坉ict_type_id 鍙栦笂涓�姝ョ被鍨嬬殑 id锛涜嫢琛ㄧ粨鏋勪负 id 鑷鍙幓鎺� id 鍒楋級
+INSERT INTO `sys_dict_data` (`dict_type_id`, `dict_type_code`, `value`, `label`, `sort`, `status`, `deleted`, `tenant_id`, `create_by`, `create_time`, `update_by`, `update_time`, `memo`)
+SELECT t.id, 'sys_order_work_type', v.val, v.lbl, v.srt, 1, 0, 1, NULL, NOW(), NULL, NOW(), NULL
+FROM sys_dict_type t
+CROSS JOIN (
+  SELECT '1' AS val, '閲囪喘鍏ュ簱鍗�' AS lbl, 1 AS srt UNION ALL SELECT '2','鐢熶骇鍏ュ簱鍗�',2 UNION ALL SELECT '3','棰嗘枡閫�鍥炲叆搴撳崟',3 UNION ALL SELECT '4','閿�鍞��鍥炲叆搴撳崟',4 UNION ALL SELECT '5','鍏跺畠鍏ュ簱鍗�',5
+  UNION ALL SELECT '6','璋冩嫈鍏ュ簱鍗�',6 UNION ALL SELECT '7','搴撳瓨璋冩暣鍗�',7 UNION ALL SELECT '8','璋冩嫈鍏ュ簱鍗�(椤圭洰)',8 UNION ALL SELECT '11','閿�鍞嚭搴撳崟',11 UNION ALL SELECT '12','棰嗘枡鍑哄簱鍗�',12
+  UNION ALL SELECT '13','閲囪喘閫�鍥炲嚭搴撳崟',13 UNION ALL SELECT '14','鍏跺畠鍑哄簱鍗�',14 UNION ALL SELECT '15','搴撳瓨鍑哄簱',15 UNION ALL SELECT '16','鐩樼偣鍑哄簱',16 UNION ALL SELECT '17','璋冩嫈鍑哄簱鍗�',17
+  UNION ALL SELECT '18','鐢熶骇琛ユ枡',18 UNION ALL SELECT '19','澶栧彂鍔犲伐',19
+) v
+WHERE t.code = 'sys_order_work_type'
+  AND NOT EXISTS (SELECT 1 FROM sys_dict_data d WHERE d.dict_type_code = 'sys_order_work_type' AND d.value = v.val LIMIT 1);
diff --git a/version/db/wave_menu.sql b/version/db/wave_menu.sql
new file mode 100644
index 0000000..72d4535
--- /dev/null
+++ b/version/db/wave_menu.sql
@@ -0,0 +1,37 @@
+-- 娉㈡绠$悊鑿滃崟锛氳嫢 sys_menu 涓凡瀛樺湪 component='wave' 鐨勮彍鍗曞垯璺宠繃
+-- 鎵ц鍚庨渶鍦ㄣ�愮郴缁熺鐞� -> 瑙掕壊绠$悊 -> 鍒嗛厤鏉冮檺銆戜腑涓哄搴旇鑹插嬀閫夈�屾尝娆$鐞嗐�嶅苟淇濆瓨锛岃彍鍗曟墠浼氬湪渚ф爮鏄剧ず
+
+INSERT INTO `sys_menu` (`name`, `parent_id`, `parent_name`, `path`, `path_name`, `route`, `component`, `brief`, `code`, `type`, `authority`, `icon`, `sort`, `meta`, `tenant_id`, `status`, `deleted`, `create_time`, `create_by`, `update_time`, `update_by`, `memo`)
+SELECT 'menu.wave', 0, NULL, '', '', '/orders/wave', 'wave', NULL, NULL, 0, NULL, 'Waves', 0, NULL, 1, 1, 0, NOW(), NULL, NOW(), NULL, '娉㈡绠$悊'
+FROM DUAL
+WHERE NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `component` = 'wave' AND `type` = 0 LIMIT 1);
+
+-- 娉㈡绠$悊-鍒楄〃鏌ヨ鏉冮檺锛堣闂尝娆″垪琛ㄩ〉鍜屾帴鍙i渶瑕侊級
+INSERT INTO `sys_menu` (`name`, `parent_id`, `path`, `path_name`, `route`, `component`, `type`, `authority`, `sort`, `tenant_id`, `status`, `deleted`)
+SELECT 'Query 娉㈡', m.id, CONCAT(IFNULL(m.path,''), ',', m.id), NULL, NULL, NULL, 1, 'manager:wave:list', 0, 1, 1, 0
+FROM `sys_menu` m WHERE m.component = 'wave' AND m.type = 0 LIMIT 1;
+
+-- 娉㈡绠$悊-淇濆瓨鏉冮檺
+INSERT INTO `sys_menu` (`name`, `parent_id`, `path`, `type`, `authority`, `sort`, `tenant_id`, `status`, `deleted`)
+SELECT 'Create 娉㈡', m.id, CONCAT(IFNULL(m.path,''), ',', m.id), 1, 'manager:wave:save', 1, 1, 1, 0
+FROM `sys_menu` m WHERE m.component = 'wave' AND m.type = 0 LIMIT 1;
+
+-- 娉㈡绠$悊-鏇存柊鏉冮檺
+INSERT INTO `sys_menu` (`name`, `parent_id`, `path`, `type`, `authority`, `sort`, `tenant_id`, `status`, `deleted`)
+SELECT 'Update 娉㈡', m.id, CONCAT(IFNULL(m.path,''), ',', m.id), 1, 'manager:wave:update', 2, 1, 1, 0
+FROM `sys_menu` m WHERE m.component = 'wave' AND m.type = 0 LIMIT 1;
+
+-- 娉㈡绠$悊-鍒犻櫎鏉冮檺
+INSERT INTO `sys_menu` (`name`, `parent_id`, `path`, `type`, `authority`, `sort`, `tenant_id`, `status`, `deleted`)
+SELECT 'Delete 娉㈡', m.id, CONCAT(IFNULL(m.path,''), ',', m.id), 1, 'manager:wave:remove', 3, 1, 1, 0
+FROM `sys_menu` m WHERE m.component = 'wave' AND m.type = 0 LIMIT 1;
+
+-- 娉㈡鏄庣粏-鍒楄〃鏉冮檺锛堣繘鍏ユ尝娆℃槑缁嗛渶 manager:waveItem:list锛岃嫢鎺ュ彛鏈夎姹傚彲鍐嶅姞锛�
+INSERT INTO `sys_menu` (`name`, `parent_id`, `path`, `type`, `authority`, `sort`, `tenant_id`, `status`, `deleted`)
+SELECT 'Query 娉㈡鏄庣粏', m.id, CONCAT(IFNULL(m.path,''), ',', m.id), 1, 'manager:waveItem:list', 4, 1, 1, 0
+FROM `sys_menu` m WHERE m.component = 'wave' AND m.type = 0 LIMIT 1;
+
+-- 娉㈡鏄庣粏-鏇存柊鏉冮檺锛堜笅鍙戜换鍔$瓑鎿嶄綔锛�
+INSERT INTO `sys_menu` (`name`, `parent_id`, `path`, `type`, `authority`, `sort`, `tenant_id`, `status`, `deleted`)
+SELECT 'Update 娉㈡鏄庣粏', m.id, CONCAT(IFNULL(m.path,''), ',', m.id), 1, 'manager:waveItem:update', 5, 1, 1, 0
+FROM `sys_menu` m WHERE m.component = 'wave' AND m.type = 0 LIMIT 1;

--
Gitblit v1.9.1