From 5695f1eb41693f799de0c76efd22909df34ff6d0 Mon Sep 17 00:00:00 2001
From: Rodney Chen <rodney.chen@hotmail.com>
Date: 星期五, 27 十二月 2024 21:27:30 +0800
Subject: [PATCH] 优化标准上下架逻辑

---
 Tiger.Business.WMS/Transaction/Out_Default.cs |  105 +++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 75 insertions(+), 30 deletions(-)

diff --git a/Tiger.Business.WMS/Transaction/Out_Default.cs b/Tiger.Business.WMS/Transaction/Out_Default.cs
index a12de29..bd176e8 100644
--- a/Tiger.Business.WMS/Transaction/Out_Default.cs
+++ b/Tiger.Business.WMS/Transaction/Out_Default.cs
@@ -10,6 +10,7 @@
 using Tiger.Model;
 using Tiger.IBusiness;
 using Org.BouncyCastle.Ocsp;
+using Tiger.Model.MES.Yada;
 
 namespace Tiger.Business.WMS.Transaction
 {
@@ -77,39 +78,83 @@
             var action = new ApiAction<ScanOutput>(new ScanOutput() { Command = Command });
             try
             {
-                //瑙f瀽鏉$爜
-                Result<IInventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true);
-                if (!result.IsSuccessed)
+                if (CurInvItem.IsNullOrEmpty())
                 {
-                    action.IsSuccessed = false;
-                    action.LocaleMsg = result.LocaleMsg;
-                    return action;
-                }
-                CurInvItem = result.Data as Inventory;
+                    //瑙f瀽鏉$爜
+                    Result<IInventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true);
+                    if (!result.IsSuccessed)
+                    {
+                        action.IsSuccessed = false;
+                        action.LocaleMsg = result.LocaleMsg;
+                        return action;
+                    }
+                    var inv = result.Data as Inventory;
 
-                //楠岃瘉鏉$爜鏄惁姝g‘
-                if (!CurInvItem.isNormalStatus || CurInvItem.Status != WMS_ITEM.STATUSs.InStore)
-                {
-                    action.IsSuccessed = false;
-                    //action.LocaleMsg = Biz.L($"鐘舵�乕{0}]寮傚父锛岃閲嶆柊鎵弿");
-                    action.LocaleMsg = Biz.L("WMS.Default.ScanItem.StatusException", string.Join(',', CurInvItem.StatusList.Select(x => x.GetDesc())));
-                    return action;
+                    //楠岃瘉鏉$爜鏄惁姝g‘
+                    if (!inv.isNormalStatus || inv.Status != WMS_ITEM.STATUSs.InStore)
+                    {
+                        action.IsSuccessed = false;
+                        //action.LocaleMsg = Biz.L($"鐘舵�乕{0}]寮傚父锛岃閲嶆柊鎵弿");
+                        action.LocaleMsg = Biz.L("WMS.Default.ScanItem.StatusException", string.Join(',', inv.StatusList.Select(x => x.GetDesc())));
+                        return action;
+                    }
+                    //鍌ㄤ綅楠岃瘉
+                    if (inv.Location.IsNullOrEmpty())
+                    {
+                        action.IsSuccessed = false;
+                        //action.LocaleMsg = Biz.L($"鏉$爜[{0}]搴撳瓨淇℃伅寮傚父: 娌℃湁鍌ㄤ綅淇℃伅锛岃鍏堜笂鏋跺悗鍐嶆壂鎻�(鍌ㄤ綅Id: {1})");
+                        action.LocaleMsg = Biz.L("WMS.Default.ScanItem.LocationIsNull", inv.CurPkg.SN, inv.CurPkg.LOCATION_ID);
+                        return action;
+                    }
+                    //鐗╂枡楠岃瘉
+                    if (inv.ItemInfo.IsNullOrEmpty() || inv.ItemInfo.IS_ACTIVE == "N")
+                    {
+                        action.IsSuccessed = false;
+                        //action.LocaleMsg = Biz.L($"鐗╂枡缂栫爜[{0}]涓嶅瓨鍦ㄦ垨鑰呰鐗╂枡鏈惎鐢�");
+                        action.LocaleMsg = Biz.L("WMS.Default.ScanItem.ItemCodeNotExistsOrNotActive", inv.ItemInfo.ITEM_CODE.IsNullOrEmpty(inv.Barcode.ItemCode));
+                        return action;
+                    }
+                    CurInvItem = inv;
+
+                    //鎶婄墿鏂欐暟閲忚繑鍥炲墠绔‘璁よ涓嬫灦鐨勬暟閲�
+                    if (CurInvItem.Items.Any(q => q.QTY > 1))
+                    {
+                        action.Data.Data = CurInvItem.Items.Select(q => new { q.SN, q.QTY });
+                        action.Data.Command = Command = "ComfirmQty";
+                        //action.LocaleMsg = Biz.L("璇风‘璁ゆ潯鐮乕{0}]瑕佷笅鏋剁殑鏁伴噺");
+                        action.LocaleMsg = Biz.L("WMS.Default.ScanItem.ComfirmOutQty", input.SN);
+                        return action;
+                    }
                 }
-                //鍌ㄤ綅楠岃瘉
-                if (CurInvItem.Location.IsNullOrEmpty())
+
+                Dictionary<string, decimal> downDic = null;
+                //鏇存柊涓嬫灦鍚庣殑鐗╂枡鏁伴噺
+                if (Command == "ComfirmQty")
                 {
-                    action.IsSuccessed = false;
-                    //action.LocaleMsg = Biz.L($"鏉$爜[{0}]搴撳瓨淇℃伅寮傚父: 娌℃湁鍌ㄤ綅淇℃伅锛岃鍏堜笂鏋跺悗鍐嶆壂鎻�(鍌ㄤ綅Id: {1})");
-                    action.LocaleMsg = Biz.L("WMS.Default.ScanItem.LocationIsNull", CurInvItem.CurPkg.SN, CurInvItem.CurPkg.LOCATION_ID);
-                    return action;
-                }
-                //鐗╂枡楠岃瘉
-                if (CurInvItem.ItemInfo.IsNullOrEmpty() || CurInvItem.ItemInfo.IS_ACTIVE == "N")
-                {
-                    action.IsSuccessed = false;
-                    //action.LocaleMsg = Biz.L($"鐗╂枡缂栫爜[{0}]涓嶅瓨鍦ㄦ垨鑰呰鐗╂枡鏈惎鐢�");
-                    action.LocaleMsg = Biz.L("WMS.Default.ScanItem.ItemCodeNotExistsOrNotActive", CurInvItem.ItemInfo.ITEM_CODE.IsNullOrEmpty(CurInvItem.Barcode.ItemCode));
-                    return action;
+                    var qtyList = (input.Data ?? "").JsonToObject<List<WMS_ITEM>>() ?? new List<WMS_ITEM>();
+                    if (!qtyList.Any() || qtyList.Sum(q => q.QTY) <= 0)
+                    {
+                        action.IsSuccessed = false;
+                        action.Data.Data = CurInvItem.Items.Select(q => new { q.SN, q.QTY });
+                        action.Data.Command = Command = "ComfirmQty";
+                        //action.LocaleMsg = Biz.L("涓嬫灦鏁伴噺涓嶈兘灏忎簬绛変簬闆讹紝璇烽噸鏂扮‘璁ゆ潯鐮乕{0}]鐨勪笅鏋舵暟閲�");
+                        action.LocaleMsg = Biz.L("WMS.Default.ScanItem.ReComfirmOutQty", input.SN);
+                        return action;
+                    }
+                    else if (qtyList.Any(q => q.QTY > CurInvItem.Items.First(i => i.SN == q.SN).QTY))
+                    {
+                        action.IsSuccessed = false;
+                        action.Data.Data = CurInvItem.Items.Select(q => new { q.SN, q.QTY });
+                        action.Data.Command = Command = "ComfirmQty";
+                        //action.LocaleMsg = Biz.L("涓嬫灦鏁伴噺涓嶈兘瓒呰繃鍘熸潯鐮佹暟閲忥紝璇烽噸鏂扮‘璁ゆ潯鐮乕{0}]鐨勪笅鏋舵暟閲�");
+                        action.LocaleMsg = Biz.L("WMS.Default.ScanItem.ReComfirmExceedOutQty", input.SN);
+                        return action;
+                    }
+                    else
+                    {
+                        downDic = qtyList.ToDictionary(k => k.SN, v => v.QTY);
+                        Command = "Normal";
+                    }
                 }
 
                 //鍑哄簱涓嬫灦
@@ -118,7 +163,7 @@
                     item.TRANS_CODE = "Out_Default";
                     item.TRANS_NO = $"Out_Default_{DateTime.Now:yyyyMMdd}";
                 }
-                Result<TakeDownInfo> downResult = WMS_ITEM_Biz.WmsItem.TakeDown(CurInvItem, input.AuthOption, WMS_ITEM.STATUSs.Sended);
+                Result<TakeDownInfo> downResult = WMS_ITEM_Biz.WmsItem.TakeDown(CurInvItem, downDic, input.AuthOption, WMS_ITEM.STATUSs.OffShelf);
                 if (!downResult.IsSuccessed)
                 {
                     action.IsSuccessed = false;

--
Gitblit v1.9.3