From e83bd2f6a38957c0d47c9e0a6c6b2ca45836e114 Mon Sep 17 00:00:00 2001
From: pan <antony1029@163.com>
Date: 星期六, 08 十一月 2025 10:13:43 +0800
Subject: [PATCH] 提交

---
 项目代码/WMS无仓储版/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.878.3237/CodeChunks.db-wal      |    0 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/Allocate/AllocateDto.cs                                        |    2 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/Inbound/InboundOrderAddDTO.cs                                  |    2 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_BasicService/MaterielInfoService.cs                                |    1 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs            |   22 +
 项目代码/WIDESEA_WMSClient/src/extension/inbound/extend/Pallet.vue                                            |    8 
 项目代码/WIDESEA_WMSClient/src/views/Login.vue                                                                |    2 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IBasicService/IInvokeMESService.cs                                 |    2 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_BasicService/MaterialUnitService.cs                                |  397 +++++++++++++++++++++++++++--------
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs                              |   44 ++-
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs                            |    2 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/Basic/MaterialUnitDto.cs                                       |   52 ++++
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/LocationEnum/LocationTypeEnum.cs                            |   14 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs                                     |    8 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.878.3237/SemanticSymbols.db     |    0 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.878.3237/SemanticSymbols.db-wal |    0 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder.cs                          |    2 
 项目代码/WIDESEA_WMSClient/public/webconfig.js                                                                |    4 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.878.3237/CodeChunks.db          |    0 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrder.cs                            |    2 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs                   |    4 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IBasicService/IMaterialUnitService.cs                              |   18 +
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Allocate/Dt_ AllocateOrder.cs                         |    2 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrderDetail.cs                      |    4 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_BasicService/InvokeMESService.cs                                   |   20 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/Outbound/OutboundOrderAddDTO.cs                                |    2 
 26 files changed, 458 insertions(+), 156 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/public/webconfig.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/public/webconfig.js"
index 207a38c..9317640 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/public/webconfig.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/public/webconfig.js"
@@ -1,4 +1,4 @@
 window.webConfig = {
-    "webApiBaseUrl": "http://localhost:9291/",
-    "webApiProduction":"http://localhost:9291/"
+    "webApiBaseUrl": "http://172.19.69.152:9291/",
+    "webApiProduction":"http://172.19.69.152:9291/"
 }
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/Pallet.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/Pallet.vue"
index bad8e33..baa1fdc 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/Pallet.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/Pallet.vue"
@@ -14,7 +14,7 @@
       
       <!-- 鎵樼洏淇℃伅鏄剧ず -->
       <div class="tray-info" v-if="trayBarcode">
-        <i class="el-icon-s-management"></i> 褰撳墠鎵樼洏: {{ trayBarcode }}
+        <i class="el-icon-s-management"></i> 褰撳墠鏂欑: {{ trayBarcode }}
        <!--  <el-button 
           class="small-button"
           type="text" 
@@ -49,7 +49,7 @@
                  class="custom-input"
             >
               <template slot="prepend">
-                <span>鏂欑銆傜爜</span>
+                <span> 鏂欑鏉$爜</span>
               </template>
               <template slot="append">
                 <el-button 
@@ -95,7 +95,7 @@
           </div>
           
           <div class="input-tips">
-            <p>鎻愮ず锛氬厛杈撳叆鎵樼洏鏉$爜锛岀劧鍚庤緭鍏ョ墿鏂欐潯鐮�</p>
+            <p>鎻愮ず锛氬厛杈撳叆鏂欑鐮侊紝鐒跺悗杈撳叆鐗╂枡鏉$爜</p>
        
           </div>
         
@@ -147,7 +147,7 @@
           
           <div v-if="materials.length === 0" class="empty-state">
             <i class="el-icon-document"></i>
-            <p v-if="!trayBarcode">璇峰厛杈撳叆鎵樼洏鏉$爜</p>
+            <p v-if="!trayBarcode">璇峰厛杈撳叆鏂欑鏉$爜</p>
             <p v-else>鏆傛棤鐗╂枡鏁版嵁锛岃鎵弿鎴栬緭鍏ョ墿鏂欐潯鐮�</p>
           </div>
           
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/Login.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/Login.vue"
index 81243fa..6283b76 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/Login.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/Login.vue"
@@ -1,6 +1,6 @@
 <template>
   <div class="login-container">
-    <div class="project-name">WIDESEA_WMS</div>
+    <div class="project-name">WMS</div>
     <div class="login-form">
       <div class="form-user" @keypress="loginPress">
         <div class="login-text">
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.878.3237/CodeChunks.db" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.878.3237/CodeChunks.db"
index 0e1fe96..d86c3f7 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.878.3237/CodeChunks.db"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.878.3237/CodeChunks.db"
Binary files differ
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.878.3237/CodeChunks.db-wal" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.878.3237/CodeChunks.db-wal"
index a822eb0..345348c 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.878.3237/CodeChunks.db-wal"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.878.3237/CodeChunks.db-wal"
Binary files differ
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.878.3237/SemanticSymbols.db" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.878.3237/SemanticSymbols.db"
index ea3934b..809b6d7 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.878.3237/SemanticSymbols.db"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.878.3237/SemanticSymbols.db"
Binary files differ
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.878.3237/SemanticSymbols.db-wal" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.878.3237/SemanticSymbols.db-wal"
index b03c7db..becea88 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.878.3237/SemanticSymbols.db-wal"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.878.3237/SemanticSymbols.db-wal"
Binary files differ
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/InvokeMESService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/InvokeMESService.cs"
index e6d9f57..0b48c40 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/InvokeMESService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/InvokeMESService.cs"
@@ -28,24 +28,24 @@
             _logger = logger;
         }
 
-        public async Task FeedbackInbound(  FeedbackInboundRequestModel model)
+        public async Task<ResponseModel> FeedbackInbound(  FeedbackInboundRequestModel model)
         {
             string json = JsonConvert.SerializeObject(model);
             var content = new StringContent(json, Encoding.UTF8, "application/json");
             var _client = _httpClientFactory.CreateClient("MESUrl");
             _client.DefaultRequestHeaders.Clear();
             _client.DefaultRequestHeaders.Add("Accept", "application/json");
-
+            _logger.LogInformation("InvokeMESService  FeedbackInbound :  " + json);
             var response = await _client.PostAsync("AldMaterialWarehousing/MaterialWarehousing", content);
             string body = await response.Content.ReadAsStringAsync();
-
+            _logger.LogInformation("InvokeMESService  FeedbackInbound  body:  " + body);
             if (!response.IsSuccessStatusCode)
             {
 
                 throw new HttpRequestException(body);
             }
 
-            // JsonConvert.DeserializeObject<ResponseModel>(body);
+           return JsonConvert.DeserializeObject<ResponseModel>(body);
         }
 
         public async Task FeedbackOutbound(  FeedbackOutboundRequestModel model)
@@ -73,15 +73,15 @@
             string json = JsonConvert.SerializeObject(model);
 
 
-            string userDataEncoded = Uri.EscapeDataString(json);
-            //string baseUrl = "http://mestest.ald.com//OrBitWCFServiceR15/orbitwebapi.ashx?"; 
-            string userTicket = await GetToken(UserName, Password);
-            string api = "WMS_BarcodeInformation";
+            //string userDataEncoded = Uri.EscapeDataString(json);
+            ////string baseUrl = "http://mestest.ald.com//OrBitWCFServiceR15/orbitwebapi.ashx?"; 
+            //string userTicket = await GetToken(UserName, Password);
+            //string api = "WMS_BarcodeInformation";
 
 
             var client = _httpClientFactory.CreateClient("MESUrl");
             // 鎷兼帴 URL 鍙傛暟
-            string url = $"{client.BaseAddress}UserTicket={userTicket}&API={api}&UserData={userDataEncoded}";
+           // string url = $"{client.BaseAddress}UserTicket={userTicket}&API={api}&UserData={userDataEncoded}";
 
 
             client.DefaultRequestHeaders.Clear();
@@ -91,7 +91,7 @@
 
             var content = new StringContent(json, Encoding.UTF8, "application/json");
 
-            using var response = await client.PostAsync(url, content);
+            using var response = await client.PostAsync("", content);
             var responseText = await response.Content.ReadAsStringAsync();
             if (!response.IsSuccessStatusCode)
             {
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/MaterialUnitService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/MaterialUnitService.cs"
index 14c2945..e0c46ef 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/MaterialUnitService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/MaterialUnitService.cs"
@@ -1,4 +1,6 @@
-锘縰sing Microsoft.Extensions.Logging;
+锘縰sing Microsoft.AspNetCore.JsonPatch.Internal;
+using Microsoft.Extensions.Logging;
+using SqlSugar;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -6,9 +8,11 @@
 using System.Threading.Tasks;
 using WIDESEA_Core.BaseRepository;
 using WIDESEA_Core.BaseServices;
+using WIDESEA_DTO.Basic;
 using WIDESEA_IBasicService;
 using WIDESEA_Model.Models;
 using WIDESEA_Model.Models.Basic;
+ 
 
 namespace WIDESEA_BasicService
 {
@@ -23,10 +27,72 @@
             _logger = logger;
             _materielInfoRepository = materielInfoRepository;
         }
+
+
+        /// <summary>
+        /// 鑾峰彇鐗╂枡鍙婂叾鎵�鏈夊崟浣嶈浆鎹㈠叧绯伙紙浣跨敤MaterialUnit宸﹁繛鎺aterial锛�
+        /// </summary>
+        private async Task<MaterialWithUnits> GetMaterialWithUnitsAsync(string materialCode)
+        {
+             
+            var unitConversions = await Repository.Db.Queryable<Dt_MaterialUnit>()
+                .LeftJoin<Dt_MaterielInfo>((u, m) => u.ItemNo == m.MaterielCode)
+                .Where((u, m) => u.ItemNo == materialCode)
+                .Select((u, m) => new
+                {
+                    MaterialCode = u.ItemNo,
+                    FromUom = u.FromUom,
+                    ToUom = u.ToUom,
+                    Ratio = u.Ratio,
+                    IssueUnit = m.usageUOM,
+                    PurchaseUnit = m.purchaseUOM,
+                    StockUnit = m.inventoryUOM
+                })
+                .ToListAsync();
+
+            if (!unitConversions.Any())
+            {
+                // 濡傛灉娌℃湁鎵惧埌鍗曚綅杞崲璁板綍锛屽皾璇曠洿鎺ヨ幏鍙栫墿鏂欎俊鎭�
+                var material = await _materielInfoRepository.Db.Queryable<Dt_MaterielInfo>()
+                    .Where(m => m.MaterielCode == materialCode)
+                    .FirstAsync();
+
+                if (material == null)
+                {
+                    throw new ArgumentException($"鏈壘鍒扮墿鏂欑紪鍙�: {materialCode}");
+                }
+
+                return new MaterialWithUnits
+                {
+                    MaterialCode = materialCode,
+                    IssueUnit = material.usageUOM,
+                    PurchaseUnit = material.purchaseUOM,
+                    StockUnit = material.inventoryUOM
+                };
+            }
+
+            // 浠庣涓�鏉¤褰曚腑鑾峰彇鐗╂枡淇℃伅锛堟墍鏈夎褰曢兘鏈夌浉鍚岀殑鐗╂枡淇℃伅锛�
+            var firstRecord = unitConversions.First();
+
+            return new MaterialWithUnits
+            {
+                MaterialCode = materialCode,
+                IssueUnit = firstRecord.IssueUnit,
+                PurchaseUnit = firstRecord.PurchaseUnit,
+                StockUnit = firstRecord.StockUnit,
+                UnitConversions = unitConversions.Select(u => new UnitConversion
+                {
+                    FromUom = u.FromUom,
+                    ToUom = u.ToUom,
+                    Ratio = u.Ratio
+                }).ToList()
+            };
+        }
+
         /// <summary>
         /// 鍗曚綅杞崲
         /// </summary>
-        public async Task<decimal> ConvertAsync(string materialCode, decimal quantity, string fromUnit, string toUnit)
+        public async Task<MaterialWithUnitConversionResult> ConvertAsync(string materialCode, decimal quantity, string fromUnit, string toUnit)
         {
             if (string.IsNullOrEmpty(materialCode))
                 throw new ArgumentException("鐗╂枡缂栧彿涓嶈兘涓虹┖");
@@ -34,11 +100,12 @@
             if (string.IsNullOrEmpty(fromUnit) || string.IsNullOrEmpty(toUnit))
                 throw new ArgumentException("鍗曚綅涓嶈兘涓虹┖");
 
-            // 濡傛灉鍗曚綅鐩稿悓锛岀洿鎺ヨ繑鍥�
+            // 濡傛灉鍗曚綅鐩稿悓锛岀洿鎺ヨ繑鍥烇紝涓嶈繘琛岃浆鎹�
             if (fromUnit.Equals(toUnit, StringComparison.OrdinalIgnoreCase))
-                return quantity;
+                return new MaterialWithUnitConversionResult(quantity, toUnit, false);
 
-            var ratio = await GetConversionRatioAsync(materialCode, fromUnit, toUnit);
+            var materialData = await GetMaterialWithUnitsAsync(materialCode);
+            var ratio = GetConversionRatioFromData(materialData, fromUnit, toUnit);
 
             if (ratio == null)
             {
@@ -46,141 +113,291 @@
                 throw new InvalidOperationException($"鏈壘鍒扮墿鏂� {materialCode} 浠� {fromUnit} 鍒� {toUnit} 鐨勫崟浣嶈浆鎹㈠叧绯�");
             }
 
-            return quantity * ratio.Value;
+            var convertedQuantity = quantity * ratio.Value;
+            return new MaterialWithUnitConversionResult(convertedQuantity, toUnit, true);
+        }
+
+        private  MaterialWithUnitConversionResult ConvertAsync(MaterialWithUnits materialData, decimal quantity, string fromUnit, string toUnit)
+        {
+            if(materialData==null)
+                throw new ArgumentException("鐗╂枡涓嶅瓨鍦�");
+
+            if (string.IsNullOrEmpty(fromUnit) || string.IsNullOrEmpty(toUnit))
+                throw new ArgumentException("鍗曚綅涓嶈兘涓虹┖");
+
+            // 濡傛灉鍗曚綅鐩稿悓锛岀洿鎺ヨ繑鍥烇紝涓嶈繘琛岃浆鎹�
+            if (fromUnit.Equals(toUnit, StringComparison.OrdinalIgnoreCase))
+                return new MaterialWithUnitConversionResult(quantity, toUnit, false);
+
+        
+            var ratio = GetConversionRatioFromData(materialData, fromUnit, toUnit);
+
+            if (ratio == null)
+            {
+                _logger.LogWarning($"鏈壘鍒扮墿鏂� {materialData.MaterialCode} 浠� {fromUnit} 鍒� {toUnit} 鐨勫崟浣嶈浆鎹㈠叧绯�");
+                throw new InvalidOperationException($"鏈壘鍒扮墿鏂� {materialData.MaterialCode} 浠� {fromUnit} 鍒� {toUnit} 鐨勫崟浣嶈浆鎹㈠叧绯�");
+            }
+
+            var convertedQuantity = quantity * ratio.Value;
+            return new MaterialWithUnitConversionResult(convertedQuantity, toUnit, true);
         }
 
         /// <summary>
         /// 閲囪喘鍗曚綅杞簱瀛樺崟浣�
         /// </summary>
-        public async Task<decimal> ConvertPurchaseToStockAsync(string materialCode, decimal quantity)
+        public async Task<MaterialWithUnitConversionResult> ConvertPurchaseToStockAsync(string materialCode, decimal quantity)
         {
-            // 鑾峰彇鐗╂枡淇℃伅
-            var material = await _materielInfoRepository.Db.Queryable<Dt_MaterielInfo>()
-                .Where(x => x.MaterielCode == materialCode)
-                .FirstAsync();
+            var materialData = await GetMaterialWithUnitsAsync(materialCode);
 
-            if (material == null)
-            {
-                throw new ArgumentException($"鏈壘鍒扮墿鏂欑紪鍙�: {materialCode}");
-            }
+            // 濡傛灉閲囪喘鍗曚綅鍜屽簱瀛樺崟浣嶇浉鍚岋紝鐩存帴杩斿洖
+            if (materialData.PurchaseUnit.Equals(materialData.StockUnit, StringComparison.OrdinalIgnoreCase))
+                return new MaterialWithUnitConversionResult(quantity, materialData.StockUnit, false);
 
-            return await ConvertAsync(materialCode, quantity, material.purchaseUOM, material.inventoryUOM);
+            return ConvertAsync(materialData, quantity, materialData.PurchaseUnit, materialData.StockUnit);
         }
 
         /// <summary>
         /// 棰嗘枡鍗曚綅杞簱瀛樺崟浣�
         /// </summary>
-        public async Task<decimal> ConvertIssueToStockAsync(string materialCode, decimal quantity)
+        public async Task<MaterialWithUnitConversionResult> ConvertIssueToStockAsync(string materialCode, decimal quantity)
         {
-            // 鑾峰彇鐗╂枡淇℃伅
-            var material = await _materielInfoRepository.Db.Queryable<Dt_MaterielInfo>()
-                .Where(x => x.MaterielCode == materialCode)
-                .FirstAsync();
+            var materialData = await GetMaterialWithUnitsAsync(materialCode);
 
-            if (material == null)
-            {
-                throw new ArgumentException($"鏈壘鍒扮墿鏂欑紪鍙�: {materialCode}");
-            }
+            // 濡傛灉棰嗘枡鍗曚綅鍜屽簱瀛樺崟浣嶇浉鍚岋紝鐩存帴杩斿洖
+            if (materialData.IssueUnit.Equals(materialData.StockUnit, StringComparison.OrdinalIgnoreCase))
+                return new MaterialWithUnitConversionResult(quantity, materialData.StockUnit, false);
 
-            return await ConvertAsync(materialCode, quantity, material.usageUOM, material.inventoryUOM);
+            return   ConvertAsync(materialData, quantity, materialData.IssueUnit, materialData.StockUnit);
         }
+
         /// <summary>
         /// 鑾峰彇鍗曚綅杞崲姣旂巼
         /// </summary>
         public async Task<decimal?> GetConversionRatioAsync(string materialCode, string fromUnit, string toUnit)
         {
-            // 灏濊瘯鐩存帴鏌ユ壘杞崲鍏崇郴
-            var conversion = await Repository.Db.Queryable<Dt_MaterialUnit>()
-                .Where(x => x.ItemNo == materialCode &&
-                           x.FromUom == fromUnit &&
-                           x.ToUom == toUnit)
-                .FirstAsync();
+            // 濡傛灉鍗曚綅鐩稿悓锛屾瘮鐜囦负1
+            if (fromUnit.Equals(toUnit, StringComparison.OrdinalIgnoreCase))
+                return 1m;
 
-            if (conversion != null)
+            var materialData = await GetMaterialWithUnitsAsync(materialCode);
+            return GetConversionRatioFromData(materialData, fromUnit, toUnit);
+        }
+
+        /// <summary>
+        /// 浠庡唴瀛樻暟鎹腑鑾峰彇杞崲姣旂巼
+        /// </summary>
+        private decimal? GetConversionRatioFromData(MaterialWithUnits materialData, string fromUnit, string toUnit)
+        {
+            // 鐩存帴鏌ユ壘杞崲鍏崇郴
+            var directConversion = materialData.UnitConversions
+                .FirstOrDefault(x => x.FromUom.Equals(fromUnit, StringComparison.OrdinalIgnoreCase) &&
+                                    x.ToUom.Equals(toUnit, StringComparison.OrdinalIgnoreCase));
+
+            if (directConversion != null)
             {
-                return conversion.Ratio;
+                return directConversion.Ratio;
             }
 
-            // 灏濊瘯鏌ユ壘鍙嶅悜杞崲鍏崇郴锛堝彇鍊掓暟锛�
-            var reverseConversion = await Repository.Db.Queryable<Dt_MaterialUnit>()
-                .Where(x => x.ItemNo == materialCode &&
-                           x.FromUom == toUnit &&
-                           x.ToUom == fromUnit)
-                .FirstAsync();
+            // 鏌ユ壘鍙嶅悜杞崲鍏崇郴锛堝彇鍊掓暟锛�
+            var reverseConversion = materialData.UnitConversions
+                .FirstOrDefault(x => x.FromUom.Equals(toUnit, StringComparison.OrdinalIgnoreCase) &&
+                                    x.ToUom.Equals(fromUnit, StringComparison.OrdinalIgnoreCase));
 
             if (reverseConversion != null)
             {
                 return 1 / reverseConversion.Ratio;
             }
 
-            // 灏濊瘯閫氳繃涓棿鍗曚綅锛堝簱瀛樺崟浣嶏級杩涜杞崲
-            var material = await _materielInfoRepository.Db.Queryable<Dt_MaterielInfo>()
-                .Where(x => x.MaterielCode == materialCode)
-                .FirstAsync();
+            // 閫氳繃搴撳瓨鍗曚綅杩涜闂存帴杞崲
+            var stockUnit = materialData.StockUnit;
 
-            if (material != null)
+            // 鏌ユ壘 fromUnit -> stockUnit 鐨勮浆鎹�
+            var fromToStock = materialData.UnitConversions
+                .FirstOrDefault(x => x.FromUom.Equals(fromUnit, StringComparison.OrdinalIgnoreCase) &&
+                                    x.ToUom.Equals(stockUnit, StringComparison.OrdinalIgnoreCase));
+            var stockToFrom = materialData.UnitConversions
+                .FirstOrDefault(x => x.FromUom.Equals(stockUnit, StringComparison.OrdinalIgnoreCase) &&
+                                    x.ToUom.Equals(fromUnit, StringComparison.OrdinalIgnoreCase));
+
+            // 鏌ユ壘 stockUnit -> toUnit 鐨勮浆鎹�
+            var stockToTo = materialData.UnitConversions
+                .FirstOrDefault(x => x.FromUom.Equals(stockUnit, StringComparison.OrdinalIgnoreCase) &&
+                                    x.ToUom.Equals(toUnit, StringComparison.OrdinalIgnoreCase));
+            var toToStock = materialData.UnitConversions
+                .FirstOrDefault(x => x.FromUom.Equals(toUnit, StringComparison.OrdinalIgnoreCase) &&
+                                    x.ToUom.Equals(stockUnit, StringComparison.OrdinalIgnoreCase));
+
+            decimal? ratioFromToStock = null;
+            decimal? ratioStockToTo = null;
+
+            // 璁$畻 fromUnit -> stockUnit 鐨勬瘮鐜�
+            if (fromToStock != null)
             {
-                var stockUnit = material.inventoryUOM;
+                ratioFromToStock = fromToStock.Ratio;
+            }
+            else if (stockToFrom != null)
+            {
+                ratioFromToStock = 1 / stockToFrom.Ratio;
+            }
+            else if (fromUnit.Equals(stockUnit, StringComparison.OrdinalIgnoreCase))
+            {
+                ratioFromToStock = 1; // 濡傛灉婧愬崟浣嶅氨鏄簱瀛樺崟浣嶏紝姣旂巼涓�1
+            }
 
-                // 濡傛灉鐩爣鍗曚綅宸茬粡鏄簱瀛樺崟浣嶏紝鐩存帴鏌ユ壘婧愬崟浣嶅埌搴撳瓨鍗曚綅鐨勮浆鎹�
-                if (toUnit.Equals(stockUnit, StringComparison.OrdinalIgnoreCase))
-                {
-                    var toStockRatio = await GetDirectRatioAsync(materialCode, fromUnit, stockUnit);
-                    if (toStockRatio != null) return toStockRatio;
-                }
+            // 璁$畻 stockUnit -> toUnit 鐨勬瘮鐜�
+            if (stockToTo != null)
+            {
+                ratioStockToTo = stockToTo.Ratio;
+            }
+            else if (toToStock != null)
+            {
+                ratioStockToTo = 1 / toToStock.Ratio;
+            }
+            else if (toUnit.Equals(stockUnit, StringComparison.OrdinalIgnoreCase))
+            {
+                ratioStockToTo = 1; // 濡傛灉鐩爣鍗曚綅灏辨槸搴撳瓨鍗曚綅锛屾瘮鐜囦负1
+            }
 
-                // 濡傛灉婧愬崟浣嶆槸搴撳瓨鍗曚綅锛岀洿鎺ユ煡鎵惧簱瀛樺崟浣嶅埌鐩爣鍗曚綅鐨勮浆鎹�
-                if (fromUnit.Equals(stockUnit, StringComparison.OrdinalIgnoreCase))
-                {
-                    var fromStockRatio = await GetDirectRatioAsync(materialCode, stockUnit, toUnit);
-                    if (fromStockRatio != null) return fromStockRatio;
-                }
-
-                // 閫氳繃搴撳瓨鍗曚綅杩涜闂存帴杞崲锛歠romUnit -> stockUnit -> toUnit
-                var ratio1 = await GetDirectRatioAsync(materialCode, fromUnit, stockUnit);
-                var ratio2 = await GetDirectRatioAsync(materialCode, stockUnit, toUnit);
-
-                if (ratio1 != null && ratio2 != null)
-                {
-                    return ratio1 * ratio2;
-                }
+            // 濡傛灉鎵惧埌浜嗕袱鏉¤矾寰勶紝杩斿洖涔樼Н
+            if (ratioFromToStock != null && ratioStockToTo != null)
+            {
+                return ratioFromToStock * ratioStockToTo;
             }
 
             return null;
         }
 
         /// <summary>
-        /// 鑾峰彇鐩存帴杞崲姣旂巼锛堝寘鍚鍚戝拰鍙嶅悜鏌ユ壘锛�
+        /// 鎵归噺杞崲锛堜紭鍖栨�ц兘锛屼竴娆℃煡璇㈠鐞嗗涓墿鏂欙級
         /// </summary>
-        private async Task<decimal?> GetDirectRatioAsync(string materialCode, string fromUnit, string toUnit)
+        public async Task<Dictionary<string, MaterialWithUnitConversionResult>> BatchConvertAsync(List<BatchConversionRequest> requests)
         {
-            // 姝e悜鏌ユ壘
-            var conversion = await Repository.Db.Queryable<Dt_MaterialUnit>()
-                .Where(x => x.ItemNo == materialCode &&
-                           x.FromUom == fromUnit &&
-                           x.ToUom == toUnit)
-                .FirstAsync();
+            if (requests == null || !requests.Any())
+                return new Dictionary<string, MaterialWithUnitConversionResult>();
 
-            if (conversion != null)
+            // 鎸夌墿鏂欑紪鍙峰垎缁�
+            var materialGroups = requests.GroupBy(x => x.MaterialCode);
+            var results = new Dictionary<string, MaterialWithUnitConversionResult>();
+
+            foreach (var group in materialGroups)
             {
-                return conversion.Ratio;
+                var materialCode = group.Key;
+                var materialData = await GetMaterialWithUnitsAsync(materialCode);
+
+                foreach (var request in group)
+                {
+                    try
+                    {
+                        // 濡傛灉鍗曚綅鐩稿悓锛岀洿鎺ヨ繑鍥�
+                        if (request.FromUnit.Equals(request.ToUnit, StringComparison.OrdinalIgnoreCase))
+                        {
+                            results[request.RequestId] = new MaterialWithUnitConversionResult(request.Quantity, request.ToUnit, false);
+                            continue;
+                        }
+
+                        var ratio = GetConversionRatioFromData(materialData, request.FromUnit, request.ToUnit);
+                        if (ratio != null)
+                        {
+                            var convertedQuantity = request.Quantity * ratio.Value;
+                            results[request.RequestId] = new MaterialWithUnitConversionResult(convertedQuantity, request.ToUnit, true);
+                        }
+                        else
+                        {
+                            _logger.LogWarning($"鏈壘鍒扮墿鏂� {materialCode} 浠� {request.FromUnit} 鍒� {request.ToUnit} 鐨勫崟浣嶈浆鎹㈠叧绯�");
+                            results[request.RequestId] = new MaterialWithUnitConversionResult(request.Quantity, request.ToUnit, false);
+                        }
+                    }
+                    catch (Exception ex)
+                    {
+                        _logger.LogError(ex, $"鎵归噺杞崲鐗╂枡 {materialCode} 鏃跺彂鐢熼敊璇�");
+                        results[request.RequestId] = new MaterialWithUnitConversionResult(request.Quantity, request.ToUnit, false);
+                    }
+                }
             }
 
-            // 鍙嶅悜鏌ユ壘
-            var reverseConversion = await Repository.Db.Queryable<Dt_MaterialUnit>()
-                .Where(x => x.ItemNo == materialCode &&
-                           x.FromUom == toUnit &&
-                           x.ToUom == fromUnit)
-                .FirstAsync();
-
-            if (reverseConversion != null)
-            {
-                return 1 / reverseConversion.Ratio;
-            }
-
-            return null;
+            return results;
         }
 
+        /// <summary>
+        /// 鎵归噺閲囪喘鍗曚綅杞簱瀛樺崟浣�
+        /// </summary>
+        public async Task<Dictionary<string, MaterialWithUnitConversionResult>> BatchConvertPurchaseToStockAsync(List<BatchConversionRequest> requests)
+        {
+            if (requests == null || !requests.Any())
+                return new Dictionary<string, MaterialWithUnitConversionResult>();
+
+            // 鎸夌墿鏂欑紪鍙峰垎缁�
+            var materialGroups = requests.GroupBy(x => x.MaterialCode);
+            var results = new Dictionary<string, MaterialWithUnitConversionResult>();
+
+            foreach (var group in materialGroups)
+            {
+                var materialCode = group.Key;
+                var materialData = await GetMaterialWithUnitsAsync(materialCode);
+
+                foreach (var request in group)
+                {
+                    try
+                    {
+                        // 濡傛灉閲囪喘鍗曚綅鍜屽簱瀛樺崟浣嶇浉鍚岋紝鐩存帴杩斿洖
+                        if (materialData.PurchaseUnit.Equals(materialData.StockUnit, StringComparison.OrdinalIgnoreCase))
+                        {
+                            results[request.RequestId] = new MaterialWithUnitConversionResult(request.Quantity, materialData.StockUnit, false);
+                            continue;
+                        }
+
+                        var ratio = GetConversionRatioFromData(materialData, materialData.PurchaseUnit, materialData.StockUnit);
+                        if (ratio != null)
+                        {
+                            var convertedQuantity = request.Quantity * ratio.Value;
+                            results[request.RequestId] = new MaterialWithUnitConversionResult(convertedQuantity, materialData.StockUnit, true);
+                        }
+                        else
+                        {
+                            _logger.LogWarning($"鏈壘鍒扮墿鏂� {materialCode} 浠庨噰璐崟浣嶅埌搴撳瓨鍗曚綅鐨勮浆鎹㈠叧绯�");
+                            results[request.RequestId] = new MaterialWithUnitConversionResult(request.Quantity, materialData.StockUnit, false);
+                        }
+                    }
+                    catch (Exception ex)
+                    {
+                        _logger.LogError(ex, $"鎵归噺杞崲鐗╂枡 {materialCode} 閲囪喘鍗曚綅鍒板簱瀛樺崟浣嶆椂鍙戠敓閿欒");
+                        results[request.RequestId] = new MaterialWithUnitConversionResult(request.Quantity, materialData.StockUnit, false);
+                    }
+                }
+            }
+
+            return results;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鐗╂枡鐨勫簱瀛樺崟浣�
+        /// </summary>
+        public async Task<string> GetStockUnitAsync(string materialCode)
+        {
+            var materialData = await GetMaterialWithUnitsAsync(materialCode);
+            return materialData.StockUnit;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鐗╂枡鐨勯噰璐崟浣�
+        /// </summary>
+        public async Task<string> GetPurchaseUnitAsync(string materialCode)
+        {
+            var materialData = await GetMaterialWithUnitsAsync(materialCode);
+            return materialData.PurchaseUnit;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鐗╂枡鐨勯鏂欏崟浣�
+        /// </summary>
+        public async Task<string> GetIssueUnitAsync(string materialCode)
+        {
+            var materialData = await GetMaterialWithUnitsAsync(materialCode);
+            return materialData.IssueUnit;
+        }
+
+
+
     }
 }
 
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/MaterielInfoService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/MaterielInfoService.cs"
index 6e0fd69..930cee1 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/MaterielInfoService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/MaterielInfoService.cs"
@@ -20,5 +20,6 @@
 
         public IRepository<Dt_MaterielInfo> Repository => BaseDal;
 
+
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/LocationEnum/LocationTypeEnum.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/LocationEnum/LocationTypeEnum.cs"
index 0c7d4ce..d97e18f 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/LocationEnum/LocationTypeEnum.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/LocationEnum/LocationTypeEnum.cs"
@@ -23,19 +23,19 @@
         /// </summary>
         [Description("涓嶈壇鍝佸尯")]
         Defective = 1,
+        /// <summary>
+        /// PCBA鍖�
+        /// </summary>
+        [Description("PCBA鍖�")]
+        PCBA = 2,
 
         /// <summary> 
         /// 淇濈◣鍖�
         /// </summary>
         [Description("淇濈◣鍖�")]
-        Bonded = 2,
+        Bonded = 3,
 
-        /// <summary>
-        /// PCBA鍖�
-        /// </summary>
-        [Description("PCBA鍖�")]
-        PCBA = 3, 
-
+        
       
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Allocate/AllocateDto.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Allocate/AllocateDto.cs"
index 69ac035..faef31e 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Allocate/AllocateDto.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Allocate/AllocateDto.cs"
@@ -43,7 +43,7 @@
         /// 鏄惁鍒嗘壒
         /// </summary>
         [JsonProperty("isBatch")]
-        public bool IsBatch { get; set; }
+        public int IsBatch { get; set; }
 
         /// <summary>
         /// 鍘傚尯浠g爜
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Basic/MaterialUnitDto.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Basic/MaterialUnitDto.cs"
new file mode 100644
index 0000000..d0021d6
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Basic/MaterialUnitDto.cs"
@@ -0,0 +1,52 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_DTO.Basic
+{
+    public class MaterialWithUnits
+    {
+        public string MaterialCode { get; set; }
+        public string IssueUnit { get; set; }
+        public string PurchaseUnit { get; set; }
+        public string StockUnit { get; set; }
+        public List<UnitConversion> UnitConversions { get; set; } = new List<UnitConversion>();
+    }
+
+    public class UnitConversion
+    {
+        public string FromUom { get; set; }
+        public string ToUom { get; set; }
+        public decimal Ratio { get; set; }
+    }
+
+    public class MaterialWithUnitConversionResult
+    {
+        public decimal Quantity { get; set; }
+        public string Unit { get; set; }
+        public bool Converted { get; set; } // 鏍囪鏄惁瀹為檯杩涜浜嗚浆鎹�
+
+        public MaterialWithUnitConversionResult(decimal quantity, string unit, bool converted = true)
+        {
+            Quantity = quantity;
+            Unit = unit;
+            Converted = converted;
+        }
+
+        public override string ToString()
+        {
+            return $"{Quantity} {Unit}";
+        }
+    }
+
+    public class BatchConversionRequest
+    {
+        public string RequestId { get; set; }
+        public string MaterialCode { get; set; }
+        public decimal Quantity { get; set; }
+        public string FromUnit { get; set; }
+        public string ToUnit { get; set; }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Inbound/InboundOrderAddDTO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Inbound/InboundOrderAddDTO.cs"
index 7059cf7..45c7849 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Inbound/InboundOrderAddDTO.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Inbound/InboundOrderAddDTO.cs"
@@ -125,7 +125,7 @@
 
         public string business_type { get; set; }
 
-        public bool isBatch { get; set; }
+        public int isBatch { get; set; }
 
         public string factoryArea { get; set; }
 
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Outbound/OutboundOrderAddDTO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Outbound/OutboundOrderAddDTO.cs"
index b77c62d..7224f7b 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Outbound/OutboundOrderAddDTO.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Outbound/OutboundOrderAddDTO.cs"
@@ -67,7 +67,7 @@
 
         public string business_type { get; set; }
 
-        public bool isBatch { get; set; }
+        public int isBatch { get; set; }
 
         public string factoryArea { get; set; }
 
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IBasicService/IInvokeMESService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IBasicService/IInvokeMESService.cs"
index 681c19e..b4be4dd 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IBasicService/IInvokeMESService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IBasicService/IInvokeMESService.cs"
@@ -12,7 +12,7 @@
 {
     public interface IInvokeMESService : IDependency
     {
-        Task FeedbackInbound(FeedbackInboundRequestModel model);
+        Task<ResponseModel> FeedbackInbound(FeedbackInboundRequestModel model);
 
         Task FeedbackOutbound(FeedbackOutboundRequestModel model);
 
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IBasicService/IMaterialUnitService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IBasicService/IMaterialUnitService.cs"
index 68eb274..9e544d6 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IBasicService/IMaterialUnitService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IBasicService/IMaterialUnitService.cs"
@@ -1,10 +1,12 @@
-锘縰sing System;
+锘縰sing Microsoft.AspNetCore.JsonPatch.Internal;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using WIDESEA_Core.BaseRepository;
 using WIDESEA_Core.BaseServices;
+using WIDESEA_DTO.Basic;
 using WIDESEA_Model.Models;
 using WIDESEA_Model.Models.Basic;
 
@@ -14,10 +16,14 @@
     {
         IRepository<Dt_MaterialUnit> Repository { get; }
 
-          Task<decimal> ConvertAsync(string materialCode, decimal quantity, string fromUnit, string toUnit);
-
-        Task<decimal> ConvertPurchaseToStockAsync(string materialCode, decimal quantity);
-
-        Task<decimal> ConvertIssueToStockAsync(string materialCode, decimal quantity);
+        Task<Dictionary<string, MaterialWithUnitConversionResult>> BatchConvertAsync(List<BatchConversionRequest> requests);
+        Task<Dictionary<string, MaterialWithUnitConversionResult>> BatchConvertPurchaseToStockAsync(List<BatchConversionRequest> requests);
+        Task<MaterialWithUnitConversionResult> ConvertAsync(string materialCode, decimal quantity, string fromUnit, string toUnit);
+        Task<MaterialWithUnitConversionResult> ConvertIssueToStockAsync(string materialCode, decimal quantity);
+        Task<MaterialWithUnitConversionResult> ConvertPurchaseToStockAsync(string materialCode, decimal quantity);
+        Task<decimal?> GetConversionRatioAsync(string materialCode, string fromUnit, string toUnit);
+        Task<string> GetIssueUnitAsync(string materialCode);
+        Task<string> GetPurchaseUnitAsync(string materialCode);
+        Task<string> GetStockUnitAsync(string materialCode);
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs"
index 9af2996..a05f54c 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs"
@@ -16,7 +16,7 @@
     {
         IRepository<Dt_InboundOrder> Repository { get; }
 
-        WebResponseContent ReceiveInboundOrder(List<Dt_InboundOrder> models, int operateType);
+        Task<WebResponseContent> ReceiveInboundOrder(List<Dt_InboundOrder> models, int operateType);
 
 
         WebResponseContent BarcodeMaterielGroup(BarcodeMaterielGroupDTO materielGroupDTO);
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs"
index 7e3d41c..5ecdbe0 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs"
@@ -1,5 +1,6 @@
 锘縰sing AutoMapper;
 using SqlSugar;
+using System.Threading.Tasks;
 using WIDESEA_Common.CommonEnum;
 using WIDESEA_Common.OrderEnum;
 using WIDESEA_Common.StockEnum;
@@ -29,12 +30,12 @@
         private readonly IRepository<Dt_Task> _taskRepository;
 
         private IStockService _stockService;
-
+        private readonly IMaterialUnitService _materialUnitService;
         private readonly IInboundOrderDetailService _inboundOrderDetailService;
         private readonly IRepository<Dt_InboundOrderDetail> _inboundOrderDetailRepository;
         public IRepository<Dt_InboundOrder> Repository => BaseDal;
 
-        public InboundOrderService(IRepository<Dt_InboundOrder> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_InboundOrderDetail> inboundOrderDetailRepository, IRepository<Dt_Task> taskRepository, IStockService stockService, IInboundOrderDetailService inboundOrderDetailService) : base(BaseDal)
+        public InboundOrderService(IRepository<Dt_InboundOrder> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_InboundOrderDetail> inboundOrderDetailRepository, IRepository<Dt_Task> taskRepository, IStockService stockService, IInboundOrderDetailService inboundOrderDetailService, IMaterialUnitService materialUnitService) : base(BaseDal)
         {
             _mapper = mapper;
             _unitOfWorkManage = unitOfWorkManage;
@@ -42,16 +43,17 @@
             _taskRepository = taskRepository;
             _stockService = stockService;
             _inboundOrderDetailService = inboundOrderDetailService;
+            _materialUnitService = materialUnitService;
         }
 
-        public WebResponseContent ReceiveInboundOrder(List<Dt_InboundOrder> models, int operateType)
+        public async Task<WebResponseContent> ReceiveInboundOrder(List<Dt_InboundOrder> models, int operateType)
         {
             try
             {
                 return operateType switch
                 {
-                    1 => AddInboundOrder(models),
-                    2 => UpdateInboundOrder(models),
+                    1 =>await AddInboundOrder(models),
+                    2 => await UpdateInboundOrder(models),
                     3 => DeleteInboundOrder(models),
 
                     _ => WebResponseContent.Instance.OK(),
@@ -63,7 +65,7 @@
             }
         }
 
-        public WebResponseContent AddInboundOrder(List<Dt_InboundOrder> models)
+        public async Task<WebResponseContent> AddInboundOrder(List<Dt_InboundOrder> models)
         {
             try
             {
@@ -77,6 +79,13 @@
 
                 foreach (var model in models)
                 {
+                    foreach (var item in model.Details)
+                    {
+                        var purchaseToStockResult = await _materialUnitService.ConvertPurchaseToStockAsync(item.MaterielCode, item.BarcodeQty);
+                        item.Unit= purchaseToStockResult.Unit;  
+                        item.OrderQuantity=purchaseToStockResult.Quantity;  
+                    }
+
                     model.InboundOrderNo = CreateCodeByRule(nameof(RuleCodeEnum.InboundOrderRule));
                     Db.InsertNav(model).Include(x => x.Details).ExecuteCommand();
                 }
@@ -87,7 +96,7 @@
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
-        public WebResponseContent UpdateInboundOrder(List<Dt_InboundOrder> models)
+        public async Task<WebResponseContent> UpdateInboundOrder(List<Dt_InboundOrder> models)
         {
             try
             {
@@ -131,6 +140,10 @@
                                     BarcodeQty = item.BarcodeQty,
                                     OrderQuantity = item.OrderQuantity
                                 };
+                                var purchaseToStockResult = await _materialUnitService.ConvertPurchaseToStockAsync(item.MaterielCode, item.BarcodeQty);
+                                inboundOrderDetail.Unit = purchaseToStockResult.Unit;
+                                inboundOrderDetail.OrderQuantity = purchaseToStockResult.Quantity;
+
                                 inboundOrderDetails.Add(inboundOrderDetail);
                             }
                             else
@@ -304,7 +317,8 @@
 
                 var dbinboundOrderDetails = _inboundOrderDetailService.GetByBarcode(materielGroupDTO.Barcodes);
 
-                if (dbinboundOrderDetails != null && !dbinboundOrderDetails.Any()) {
+                if (dbinboundOrderDetails != null && !dbinboundOrderDetails.Any())
+                {
                     return content = WebResponseContent.Instance.Error($"鍗曟嵁涓病鏈夎{materielGroupDTO.Barcodes}鏉$爜鏁版嵁銆�");
                 }
 
@@ -332,14 +346,14 @@
                         Barcode = item.Barcode,
                         MaterielCode = item.MaterielCode,
                         BatchNo = item.BatchNo,
-                        Unit = item.BarcodeUnit,
+                        Unit = item.Unit,
                         InboundOrderRowNo = item.lineNo,
                         SupplyCode = item.SupplyCode,
                         WarehouseCode = item.WarehouseCode,
-                        StockQuantity = item.BarcodeQty,
+                        StockQuantity = item.OrderQuantity,
                         Status = 0,
                         OrderNo = inboundOrder.InboundOrderNo,
-                        BusinessType=inboundOrder.BusinessType,
+                        BusinessType = inboundOrder.BusinessType,
                     });
 
                     item.ReceiptQuantity = item.BarcodeQty;
@@ -351,7 +365,7 @@
                     stockInfo.PalletCode = materielGroupDTO.PalletCode;
                     stockInfo.StockStatus = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt();
                 }
-
+                stockInfo.PalletType = (int)PalletTypeEnum.None;
 
                 List<int> updateDetailIds = dbinboundOrderDetails.Select(x => x.Id).ToList();
                 if (inboundOrder.OrderStatus == InOrderStatusEnum.鏈紑濮�.ObjToInt())
@@ -391,7 +405,7 @@
                 (bool, string, object?) result2 = ModelValidate.ValidateModelData(materielGroupDTO);
                 if (!result2.Item1) return content = WebResponseContent.Instance.Error(result2.Item2);
 
-             
+
                 Dt_StockInfo? stockInfo = _stockService.StockInfoService.GetStockByPalletCode(materielGroupDTO.PalletCode);
                 if (stockInfo != null && !string.IsNullOrEmpty(stockInfo.LocationCode) && stockInfo.StockStatus != StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt())
                 {
@@ -416,7 +430,7 @@
                         stockInfo.StockStatus = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt();
                     }
 
-                        _unitOfWorkManage.BeginTran();
+                    _unitOfWorkManage.BeginTran();
 
                     _stockService.StockInfoService.AddMaterielGroup(stockInfo);
                     _unitOfWorkManage.CommitTran();
@@ -429,7 +443,7 @@
                 }
 
 
-               
+
             }
             catch (Exception ex)
             {
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Allocate/Dt_ AllocateOrder.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Allocate/Dt_ AllocateOrder.cs"
index c20497a..b2abc43 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Allocate/Dt_ AllocateOrder.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Allocate/Dt_ AllocateOrder.cs"
@@ -87,7 +87,7 @@
         /// 鏄惁鎵规
         /// </summary>
         [SugarColumn(IsNullable = false, ColumnDescription = "鏄惁鎵规")]
-        public bool? IsBatch { get; set; }
+        public int IsBatch { get; set; }
 
         /// <summary>
         /// 鍘傚尯
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrder.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrder.cs"
index ccff342..9b819b1 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrder.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrder.cs"
@@ -78,7 +78,7 @@
         /// 榛樿鍊�:
         ///</summary>
         [SugarColumn(ColumnName = "isBatch", ColumnDescription = "鏄惁鍒嗘壒")]
-        public bool? IsBatch { get; set; }
+        public int IsBatch { get; set; }
 
         /// <summary>
         /// 澶�  娉�:鍘傚尯
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrderDetail.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrderDetail.cs"
index 52732a7..d230385 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrderDetail.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrderDetail.cs"
@@ -45,9 +45,9 @@
         public string BatchNo { get; set; }
 
         /// <summary>
-        /// 鍗曟嵁鏁伴噺
+        /// 鍗曟嵁鍗曚綅杞崲鍚庣殑鏁伴噺
         /// </summary>
-        [SugarColumn(IsNullable = false, ColumnDescription = "鍗曟嵁鏁伴噺")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍗曟嵁鍗曚綅杞崲鍚庣殑鏁伴噺")]
         public decimal OrderQuantity { get; set; }
 
         /// <summary>
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder.cs"
index f5d40c0..a401406 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder.cs"
@@ -84,7 +84,7 @@
         /// 榛樿鍊�:
         ///</summary>
         [SugarColumn(ColumnName = "isBatch", ColumnDescription = "鏄惁鍒嗘壒")]
-        public bool? IsBatch { get; set; }
+        public int IsBatch { get; set; }
 
         /// <summary>
         /// 澶�  娉�:鍘傚尯
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
index e1afe73..225e7f6 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
@@ -156,7 +156,7 @@
             decimal beforeQuantity = 0;
 
             //鏌ュ簱瀛�
-            Dt_StockInfo stockInfo = _stockRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == task.PalletCode && x.WarehouseId == task.WarehouseId).First();
+            Dt_StockInfo stockInfo = _stockRepository.Db.Queryable<Dt_StockInfo>().Includes(x => x.Details).Where(x => x.PalletCode == task.PalletCode && x.WarehouseId == task.WarehouseId).First();
             if (stockInfo == null)
             {
                 return WebResponseContent.Instance.Error($"鏈壘鍒版墭鐩樺搴旂殑缁勭洏淇℃伅");
@@ -264,7 +264,7 @@
                                supplyCode = group.Key.SupplyCode,
                                batchNo = group.Key.BatchNo,
                                lineNo = group.Key.lineNo,
-                               warehouseCode = group.Key.WarehouseCode,
+                               warehouseCode = group.Key.WarehouseCode=="0"?"1072": group.Key.WarehouseCode,
                                unit= group.Key.BarcodeUnit,
                                barcodes = group.Select(row => new FeedbackBarcodesModel
                                {
@@ -273,7 +273,7 @@
                                }).ToList()
                            }).ToList();
                         feedmodel.details = groupedData;
-
+                        
                         _invokeMESService.FeedbackInbound(feedmodel);
                     }
 
@@ -359,7 +359,7 @@
                     return content.Error($"鏈壘鍒板搴旂殑缁堢偣璐т綅淇℃伅");
                 }
 
-                _stockRepository.Db.Deleteable(stockInfo);
+               // _stockRepository.Db.Deleteable(stockInfo);
 
                 int beforeStatus = locationInfo.LocationStatus;
 
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs"
index 7a1760d..c149407 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs"
@@ -2,6 +2,7 @@
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
+using Newtonsoft.Json;
 using SqlSugar;
 using System.Net;
 using System.Threading.Tasks;
@@ -33,19 +34,26 @@
         private readonly IESSApiService _eSSApiService;
         private readonly ILocationInfoService _locationInfoService;
         private readonly IDailySequenceService _dailySequenceService;
-        public InboundOrderController(IInboundOrderService service, WIDESEA_IBasicService.IErpApiService erpApiService, WIDESEA_IBasicService.IInvokeMESService invokeMESService, IESSApiService eSSApiService, IDailySequenceService dailySequenceService, ILocationInfoService locationInfoService) : base(service)
+        private readonly IMaterialUnitService _materialUnitService;
+        private readonly ILogger<InboundOrderController> _logger;
+        public InboundOrderController(IInboundOrderService service, WIDESEA_IBasicService.IErpApiService erpApiService, WIDESEA_IBasicService.IInvokeMESService invokeMESService, IESSApiService eSSApiService, IDailySequenceService dailySequenceService, ILocationInfoService locationInfoService, ILogger<InboundOrderController> logger, IMaterialUnitService materialUnitService) : base(service)
         {
             this.erpApiService = erpApiService;
             _invokeMESService = invokeMESService;
             _eSSApiService = eSSApiService;
             _dailySequenceService = dailySequenceService;
             _locationInfoService = locationInfoService;
+            _logger = logger;
+            _materialUnitService = materialUnitService;
         }
 
         [HttpPost, Route("Test"), AllowAnonymous, MethodParamsValidate]
         public async Task<WebResponseContent> Test()
         {
-            
+            var purchaseToStockResult = await _materialUnitService.ConvertPurchaseToStockAsync("101001-00002", 10);
+
+            var pdddurchaseToStockResult = await _materialUnitService.ConvertPurchaseToStockAsync("100513-00210", 10);
+
             var sddd = _locationInfoService.AssignLocation();
             var code = sddd.LocationCode;
             // await _dailySequenceService.GetNextSequenceAsync();
@@ -88,10 +96,10 @@
         /// <param name="model"></param>
         /// <returns></returns>
         [HttpPost, Route("ReceiveInboundOrder"), AllowAnonymous, MethodParamsValidate]
-        public WebResponseContent ReceiveInboundOrder([FromBody] InboundRequestModel model)
+        public async Task<WebResponseContent> ReceiveInboundOrder([FromBody] InboundRequestModel model)
         {
 
-
+            _logger.LogInformation("InboundOrderController ReceiveInboundOrder:  " +  JsonConvert.SerializeObject(model));
             List<Dt_InboundOrder> inboundOrders = new List<Dt_InboundOrder>();
 
             foreach (var item in model.inBounds)
@@ -133,7 +141,9 @@
                             BatchNo = detailitem.batchNo,
                             Unit = detailitem.unit,
                             WarehouseCode = detailitem.warehouseCode,
-                            OrderQuantity = detailitem.qty
+                            OrderQuantity = detailitem.qty,
+                            BarcodeUnit = detailitem.unit,
+                            BarcodeQty = detailitem.qty,
                         };
                         dt_InboundOrder.Details.Add(inboundOrderDetail);
                     }
@@ -147,7 +157,7 @@
                 inboundOrders.Add(dt_InboundOrder);
             }
 
-            var content = Service.ReceiveInboundOrder(inboundOrders, model.operationType);
+            var content =await Service.ReceiveInboundOrder(inboundOrders, model.operationType);
 
             if (content.Status) return WebResponseContent.Instance.OK(200);
             else return WebResponseContent.Instance.Error(content.Message);
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
index 4140475..6622900 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
@@ -27,7 +27,9 @@
         [HttpPost, Route("Test"), AllowAnonymous, MethodParamsValidate]
         public async Task<WebResponseContent> PalletOutboundTask(string endStation, string palletCode = "")
         {
-            var result=await Service.PalletOutboundTask(endStation, palletCode);
+            var ssd = Service.TaskCompleted("93");
+
+            var result = await Service.PalletOutboundTask(endStation, palletCode);
 
             return result;
         }

--
Gitblit v1.9.3