From c3bb5047c194a0145caca7681f0df5a8feeaaa9b Mon Sep 17 00:00:00 2001
From: Rodney Chen <rodney.chen@hotmail.com>
Date: 星期五, 18 四月 2025 16:30:40 +0800
Subject: [PATCH] 收货单增加选择单据

---
 Tiger.Model.Net/packages.config                          |    2 
 Tiger.Api/Language.db                                    |    0 
 Tiger.Business.WMS/Transaction/Yada/In_BIZ_U9_RECEIPT.cs |  110 ++++++++++++++++++++++++++++--------
 Tiger.Model.Net/Tiger.Model.Net.csproj                   |    3 +
 Tiger.Model.Net/Entitys/WMS/Api/Input_Entitys.cs         |   33 ++++++++++
 5 files changed, 120 insertions(+), 28 deletions(-)

diff --git a/Tiger.Api/Language.db b/Tiger.Api/Language.db
index dd343fe..d73a9a9 100644
--- a/Tiger.Api/Language.db
+++ b/Tiger.Api/Language.db
Binary files differ
diff --git a/Tiger.Business.WMS/Transaction/Yada/In_BIZ_U9_RECEIPT.cs b/Tiger.Business.WMS/Transaction/Yada/In_BIZ_U9_RECEIPT.cs
index d5eed81..f9d0006 100644
--- a/Tiger.Business.WMS/Transaction/Yada/In_BIZ_U9_RECEIPT.cs
+++ b/Tiger.Business.WMS/Transaction/Yada/In_BIZ_U9_RECEIPT.cs
@@ -30,7 +30,7 @@
         }
 
         #region Propertys & Variables
-        public string CurOrderNo { get; set; }
+        public BIZ_U9_RECEIPT CurOrder { get; set; }
         #endregion
 
         #region Functions
@@ -42,23 +42,46 @@
             var action = new ApiAction<ScanOutput>(new ScanOutput());
             try
             {
-                if (input.SN.IsNullOrEmpty())
+                if (input.Command == "ScanOrder")
                 {
-                    action.IsSuccessed = false;
-                    //action.LocaleMsg = Biz.L("鏉$爜涓嶈兘涓虹┖");
-                    action.LocaleMsg = Biz.L("WMS.Default.ScanItem.SnEmptyFailure");
-                    return SetOutPutMqttMsg(action, input.Locale);
+                    var inputOrder = new BaseInput<BIZ_U9_RECEIPT>(input);
+                    if (inputOrder.Data?.ORDER_NO == null)
+                    {
+                        action.IsSuccessed = false;
+                        //action.LocaleMsg = Biz.L("閫夋嫨鐨勫崟鍙蜂笉鑳戒负绌�");
+                        action.LocaleMsg = Biz.L("WMS.Default.ScanOrder.OrderNoEmptyFailure");
+                        return SetOutPutMqttMsg(action, input.Locale);
+                    }
+                    action = await ScanOrder(inputOrder);
                 }
-                //鍒ゆ柇鎵弿鐨勬槸鍚﹁揣鏋�
-                var whUnit = await MainDB.Queryable<V_WH_UNIT>().Where(t => (t.SHELF_CODE.ToUpper() == input.SN || t.LOCATION_CODE.ToUpper() == input.SN) && t.AUTH_ORG == OrgCode).IncludesAllFirstLayer().FirstAsync();
-                //if (string.IsNullOrEmpty(CurScanShelf?.ShelfCode))
-                if (!whUnit.IsNullOrEmpty() || string.IsNullOrEmpty(CurScanShelf?.ShelfCode))
+                else
                 {
-                    action = await ScanShelf(input.SN, whUnit);
-                }
-                else//鎵弿鐗╂枡骞跺鏍�
-                {
-                    action = await ScanItem(input);
+                    if (CurOrder.IsNullOrEmpty())
+                    {
+                        action.IsSuccessed = false;
+                        //action.LocaleMsg = Biz.L("涓婃灦鍓嶈鍏堥�夋嫨闇�瑕佷笂鏋剁殑鏀惰揣鍗�");
+                        action.LocaleMsg = Biz.L("WMS.In_BIZ_U9_RECEIPT.ScanItem.NoScanOrder");
+                        action.Data.Command = "ScanOrder";
+                        return SetOutPutMqttMsg(action, input.Locale);
+                    }
+                    if (input.SN.IsNullOrEmpty())
+                    {
+                        action.IsSuccessed = false;
+                        //action.LocaleMsg = Biz.L("鏉$爜涓嶈兘涓虹┖");
+                        action.LocaleMsg = Biz.L("WMS.Default.ScanItem.SnEmptyFailure");
+                        return SetOutPutMqttMsg(action, input.Locale);
+                    }
+                    //鍒ゆ柇鎵弿鐨勬槸鍚﹁揣鏋�
+                    var whUnit = await MainDB.Queryable<V_WH_UNIT>().Where(t => (t.SHELF_CODE.ToUpper() == input.SN || t.LOCATION_CODE.ToUpper() == input.SN) && t.AUTH_ORG == OrgCode).IncludesAllFirstLayer().FirstAsync();
+                    //if (string.IsNullOrEmpty(CurScanShelf?.ShelfCode))
+                    if (!whUnit.IsNullOrEmpty() || string.IsNullOrEmpty(CurScanShelf?.ShelfCode))
+                    {
+                        action = await ScanShelf(input.SN, whUnit);
+                    }
+                    else//鎵弿鐗╂枡骞跺鏍�
+                    {
+                        action = await ScanItem(input);
+                    }
                 }
             }
             catch (Exception ex)
@@ -69,6 +92,35 @@
                 action.CatchExceptionWithLog(ex, Biz.L("WMS.Default.Scan.ScanException", input.SN));
             }
             return SetOutPutMqttMsg(action, input.Locale);
+        }
+
+        /// <summary>
+        /// 鎵弿涓嬫灦鍗曟嵁鍙风爜
+        /// </summary>
+        public async Task<ApiAction<ScanOutput>> ScanOrder(BaseInput<BIZ_U9_RECEIPT> input)
+        {
+            var action = new ApiAction<ScanOutput>(new ScanOutput());
+            try
+            {
+                var receipt = await MainDB.Queryable<BIZ_U9_RECEIPT>().Where(q => q.ORDER_NO == input.Data.ORDER_NO).Includes(q => q.Details, d => d._ItemInfos).IncludesAllFirstLayer().FirstAsync();
+                if (receipt.IsNullOrEmpty())
+                {
+                    action.IsSuccessed = false;
+                    //action.LocaleMsg = Biz.L("鎵句笉鍒版敹璐у崟[{0}]鐨勪俊鎭紝璇烽噸鏂伴�夋嫨姝g‘鐨勬敹璐у崟");
+                    action.LocaleMsg = Biz.L("WMS.In_BIZ_U9_RECEIPT.ScanOrder.ReceiptNotExists", input.Data.ORDER_NO);
+                    return SetOutPutMqttMsg(action, input.Locale);
+                }
+                action.Data.Command = "Normal";
+                action.Data.Data = CurOrder = receipt;
+            }
+            catch (Exception ex)
+            {
+                //鍙栨秷褰撳墠鎿嶄綔
+                ResetTrans();
+                //action.CatchExceptionWithLog(ex, $"閫夋嫨鏀惰揣鍗曞紓甯�(Data: {0})");
+                action.CatchExceptionWithLog(ex, Biz.L("WMS.In_BIZ_U9_RECEIPT.ScanOrderException", input?.Data));
+            }
+            return action;
         }
 
         /// <summary>
@@ -115,17 +167,18 @@
 	                    action.LocaleMsg = Biz.L("WMS.Default.ScanItem.DefaultLocationError", inv.ItemInfo.ITEM_CODE, inv.ItemInfo.DEFAULT_LOCATION);
 	                    return SetOutPutMqttMsg(action, input.Locale);
                     }
+                    //鍒ゆ柇褰撳墠鏉$爜鏄惁灞炰簬褰撳墠鏀惰揣鍗�
+                    if (CurInvItem.Items.First().TRANS_NO != CurOrder.ORDER_NO)
+                    {
+                        action.IsSuccessed = false;
+                        //action.LocaleMsg = Biz.L("鏉$爜鎵�灞炵殑鍗曟嵁[{0}]涓嶆槸閫夋嫨鐨勬敹璐у崟[{1}]锛岃閲嶆柊鎵弿姝g‘鐨勬潯鐮佹垨閫夋嫨鍏朵粬鏀惰揣鍗�");
+                        action.LocaleMsg = Biz.L("WMS.In_BIZ_U9_RECEIPT.ScanItem.NotCurOrder", CurInvItem.Items.First().TRANS_NO, CurOrder.ORDER_NO);
+                        return SetOutPutMqttMsg(action, input.Locale);
+                    }
                     CurInvItem = inv;
                 }
 
-                var receipt = await MainDB.Queryable<BIZ_U9_RECEIPT>().Where(q => q.ORDER_NO == CurInvItem.Items.First().TRANS_NO).IncludesAllFirstLayer().FirstAsync();
-                if (receipt.IsNullOrEmpty())
-                {
-                    action.IsSuccessed = false;
-                    //action.LocaleMsg = Biz.L("鏀惰揣鍗曚腑鎵句笉鍒版潯鐮佹墍灞炵殑鍗曟嵁[{0}]淇℃伅锛岃閲嶆柊鎵弿鏀惰揣鍗曠殑鏉$爜鎴栭�夋嫨姝g‘鐨勫姛鑳戒笂鏋�");
-                    action.LocaleMsg = Biz.L("WMS.In_BIZ_U9_RECEIPT.ScanItem.ReceiptNotExists", CurInvItem.Items.First().TRANS_NO);
-                    return SetOutPutMqttMsg(action, input.Locale);
-                }
+                var receipt = await MainDB.Queryable<BIZ_U9_RECEIPT>().Where(q => q.ORDER_NO == CurOrder.ORDER_NO).Includes(q => q.Details, d => d._ItemInfos).IncludesAllFirstLayer().FirstAsync();
                 var receiptDtl = receipt.Details.First(q => q.LINE_NO == CurInvItem.Items.First().TRANS_LINE);
                 if (receiptDtl.STATUS > BIZ_U9_RECEIPT.STATUSs.Storing.GetValue())
                 {
@@ -216,7 +269,7 @@
                     return SetOutPutMqttMsg(action, input.Locale);
                 }
 
-                CurOrderNo = receipt.ORDER_NO;
+                CurOrder = receipt;
 
                 //鎵ц涓婃灦鏁版嵁澶勭悊
                 foreach (var item in CurInvItem.Items)
@@ -352,6 +405,13 @@
                     action.IsSuccessed = false;
                     //action.LocaleMsg = Biz.L("璇疯緭鍏ユ垨鎵弿鏈夋晥鐨勮揣鏋�/鍌ㄤ綅鐮�");
                     action.LocaleMsg = Biz.L("WMS.Default.ScanShelf.ShelfCanNotEmpty");
+                    return action;
+                }
+                if (!CurOrder.Details.Any(q => q.ItemInfo.DEFAULT_LOCATION.IsNullOrEmpty() || q.ItemInfo.DEFAULT_LOCATION == Code))
+                {
+                    action.IsSuccessed = false;
+                    //action.LocaleMsg = Biz.L("褰撳墠鍌ㄤ綅[{0}]涓嶅湪鏀惰揣鍗曢渶瑕佷笂鏋剁殑鍌ㄤ綅鍒楄〃涓細{1}");
+                    action.LocaleMsg = Biz.L("WMS.In_BIZ_U9_RECEIPT.ScanShelf.NoContainLocation", Code, string.Join(", ", CurOrder.Details.Select(q => q.ItemInfo.DEFAULT_LOCATION)));
                     return action;
                 }
 
@@ -496,7 +556,7 @@
         public async Task<ApiAction<BIZ_U9_RECEIPT>> GetCurOrder()
         {
             var action = new ApiAction<BIZ_U9_RECEIPT>();
-            action.Data = await MainDB.Queryable<BIZ_U9_RECEIPT>().Where(q => q.ORDER_NO == CurOrderNo).IncludesAllFirstLayer().FirstAsync();
+            action.Data = CurOrder;
             return action;
         }
 
diff --git a/Tiger.Model.Net/Entitys/WMS/Api/Input_Entitys.cs b/Tiger.Model.Net/Entitys/WMS/Api/Input_Entitys.cs
index 5119042..7295a07 100644
--- a/Tiger.Model.Net/Entitys/WMS/Api/Input_Entitys.cs
+++ b/Tiger.Model.Net/Entitys/WMS/Api/Input_Entitys.cs
@@ -1,10 +1,10 @@
-锘縰sing System;
+锘縰sing Newtonsoft.Json;
+using System;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
-using Tiger.Model.Minsun;
 
 namespace Tiger.Model
 {
@@ -43,6 +43,35 @@
         /// </summary>
         public string Data { get; set; }
     }
+
+
+    public class BaseInput<T> : BaseInput
+    {
+        public BaseInput()
+        {
+        }
+
+        public BaseInput(BaseInput input)
+        {
+            if (input != null)
+            {
+	            AuthOption = input.AuthOption;
+	            Locale = input.Locale;
+	            Command = input.Command;
+	            SN = input.SN;
+	            ItemCode = input.ItemCode;
+	            OrderNo = input.OrderNo;
+	            Options = input.Options;
+	            Data = JsonConvert.DeserializeObject<T>(input.Data);
+            }
+        }
+
+        /// <summary>
+        /// 褰撳墠鎿嶄綔闇�瑕佹彁浜ょ殑鏁版嵁
+        /// </summary>
+        public new T Data { get; set; }
+    }
+
     public class BaseInputWithPage : BaseInput
     {
         public int pageIndex { get; set; }
diff --git a/Tiger.Model.Net/Tiger.Model.Net.csproj b/Tiger.Model.Net/Tiger.Model.Net.csproj
index da5901f..a9c58fc 100644
--- a/Tiger.Model.Net/Tiger.Model.Net.csproj
+++ b/Tiger.Model.Net/Tiger.Model.Net.csproj
@@ -61,6 +61,9 @@
     <ErrorReport>prompt</ErrorReport>
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+      <HintPath>..\packages\Newtonsoft.Json.13.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
+    </Reference>
     <Reference Include="SqlSugar, Version=5.1.4.170, Culture=neutral, processorArchitecture=MSIL">
       <HintPath>..\packages\SqlSugar.5.1.4.171-preview11\lib\SqlSugar.dll</HintPath>
     </Reference>
diff --git a/Tiger.Model.Net/packages.config b/Tiger.Model.Net/packages.config
index 37ba543..7d2564c 100644
--- a/Tiger.Model.Net/packages.config
+++ b/Tiger.Model.Net/packages.config
@@ -1,5 +1,5 @@
 锘�<?xml version="1.0" encoding="utf-8"?>
 <packages>
-  <package id="Newtonsoft.Json" version="13.0.3" targetFramework="net452" />
+  <package id="Newtonsoft.Json" version="13.0.2" targetFramework="net48" />
   <package id="SqlSugar" version="5.1.4.171-preview11" targetFramework="net48" />
 </packages>
\ No newline at end of file

--
Gitblit v1.9.3