From 4c8504f8deca450723fcdcf4f772f6cc67049c03 Mon Sep 17 00:00:00 2001
From: Rodney Chen <rodney.chen@hotmail.com>
Date: 星期六, 28 十二月 2024 23:12:52 +0800
Subject: [PATCH] 优化了一些已知问题

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

diff --git a/Tiger.Business.WMS/Transaction/Out_Default.cs b/Tiger.Business.WMS/Transaction/Out_Default.cs
index a12de29..ad368c4 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,11 +163,12 @@
                     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;
                     action.LocaleMsg = downResult.LocaleMsg;
+                    CurInvItem = null;
                     return action;
                 }
                 TakeDownInfo downInfo = downResult.Data;
@@ -162,6 +208,7 @@
                 };
                 //action.LocaleMsg = Biz.L($"鎵弿鏉$爜[{0}]浠庡偍浣峓{1}]涓嬫灦鎴愬姛");
                 action.LocaleMsg = Biz.L("WMS.Default.ScanItem.TakeDownSucceeded", CurInvItem.SN, CurInvItem.Location?.LOCATION_CODE);
+                CurInvItem = null;
             }
             catch (Exception ex)
             {

--
Gitblit v1.9.3