From 164f2cf0a8d85a2ebd2955f8f322d5f6bb4d3857 Mon Sep 17 00:00:00 2001
From: schangxiang@126.com <schangxiang@126.com>
Date: 周一, 23 12月 2024 09:23:58 +0800
Subject: [PATCH] 22

---
 LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsOperationTask/WmsOperationTaskService.cs |  754 ++++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 661 insertions(+), 93 deletions(-)

diff --git a/LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsOperationTask/WmsOperationTaskService.cs b/LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsOperationTask/WmsOperationTaskService.cs
index 66cd5c8..e8c37cd 100644
--- a/LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsOperationTask/WmsOperationTaskService.cs
+++ b/LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsOperationTask/WmsOperationTaskService.cs
@@ -8,6 +8,8 @@
 using Microsoft.CodeAnalysis.Operations;
 using Admin.NET.Application.Service.WmsTask.WmsRbLineTask.Dto;
 using Furion.DatabaseAccessor;
+using Admin.NET.Application.Service.WmsCommonnQuery.Dto;
+using Admin.NET.Application.CommonHelper;
 
 namespace Admin.NET.Application;
 /// <summary>
@@ -16,6 +18,9 @@
 [ApiDescriptionSettings(ApplicationConst.WmsTaskGroupName, Order = 100)]
 public class WmsOperationTaskService : IDynamicApiController, ITransient
 {
+    private static readonly SemaphoreSlim semaphore = new SemaphoreSlim(1, 1);
+    private static readonly SemaphoreSlim semaphore2 = new SemaphoreSlim(1, 1);
+
     private readonly SqlSugarRepository<WmsRbLineTask> _rep;
     private readonly SqlSugarRepository<WmsStockQuan> _wmsStockQuanRep;
     private readonly SqlSugarRepository<Mes_Package_Gather> _mesPackageGatherRep;
@@ -25,6 +30,10 @@
     private readonly SqlSugarRepository<WmsRecordUpiProcess> _wmsRecordUpiProcessRep;
     private readonly SqlSugarRepository<WmsRecordPackageProcess> _wmsRecordPackageProcessRep;
     private readonly SqlSugarRepository<Mes_Upi_LineQueue> _mes_Upi_LineQueueRep;
+    private readonly SqlSugarRepository<Mes_Package_LineQueue> _mes_Package_LineQueueRep;
+    private readonly SqlSugarRepository<WmsRecordUpiNg> _wmsRecordUpiNgRep;
+    private readonly SqlSugarRepository<Mes_Package_UnLine_Record> _mes_Package_UnLine_RecordRep;
+    private readonly WmsCommonnQueryService _wmsCommonnQueryService;
 
     public WmsOperationTaskService(
         SqlSugarRepository<Mes_Upi_LineQueue> mes_Upi_LineQueueRep,
@@ -35,8 +44,15 @@
         , SqlSugarRepository<Mes_Order_Gather> mesOrderGatherRep
         , SqlSugarRepository<WmsRecordUpiProcess> wmsRecordUpiProcessRep
         , SqlSugarRepository<WmsRecordPackageProcess> wmsRecordPackageProcessRep
+        , SqlSugarRepository<WmsRecordUpiNg> wmsRecordUpiNgRep
+        , WmsCommonnQueryService wmsCommonnQueryService
+        , SqlSugarRepository<Mes_Package_LineQueue> mes_Package_LineQueueRep
+        , SqlSugarRepository<Mes_Package_UnLine_Record> mes_Package_UnLine_RecordRep
         )
     {
+        _mes_Package_LineQueueRep = mes_Package_LineQueueRep;
+        _wmsCommonnQueryService = wmsCommonnQueryService;
+        _wmsRecordUpiNgRep = wmsRecordUpiNgRep;
         _sysConfigRep = sysConfigRep;
         _mesPackageGatherRep = mesPackageGatherRep;
         _rep = rep;
@@ -46,6 +62,7 @@
         _wmsRecordUpiProcessRep = wmsRecordUpiProcessRep;
         _wmsRecordPackageProcessRep = wmsRecordPackageProcessRep;
         _mes_Upi_LineQueueRep = mes_Upi_LineQueueRep;
+        _mes_Package_UnLine_RecordRep = mes_Package_UnLine_RecordRep;
     }
 
 
@@ -65,25 +82,139 @@
         {
             throw Oops.Oh("鍙傛暟涓嶈兘涓虹┖");
         }
+        //楠岃瘉浼犻�掔殑鍖呮槸鍚﹂兘鍦ㄩ綈鍖呬箣鍐呫��
+        List<WmsPackListOutput> packList = await _wmsCommonnQueryService.PackList(new Service.WmsCommonnQuery.Dto.PackListInput() { IsPack = false });
+
         List<WmsStockQuan> updateQuanList = new List<WmsStockQuan>();
         foreach (var item in input.PackageCodeList)
         {
+            var isExistCount = packList.Where(x => x.PackageCode == item).Count();
+            if (isExistCount == 0)
+            {
+                throw Oops.Oh($"鍖厈item}涓嶆槸缂哄寘鐘舵�侊紝璇锋鏌ワ紒");
+            }
+
             var quanList = await _wmsStockQuanRep.AsQueryable().Where(x => x.PackageCode == item).ToListAsync();
-            var isExist = quanList.Where(x => x.StockStatus == StockStatusEnum.榻愬寘寰呭嚭搴�).Count();
+            var isExist = quanList.Where(x => x.StockStatus == StockStatusEnum.榻愬寘寰呭嚭搴� || x.StockStatus == StockStatusEnum.浜哄伐榻愬寘鍑哄簱浠诲姟宸插垱寤�).Count();
             if (isExist > 0)
             {
-                throw Oops.Oh($"鍖厈item}涓叾涓湁鏉跨姸鎬佹槸'{StockStatusEnum.榻愬寘寰呭嚭搴�.ToString()}'锛屼笉鍏佽寮哄埗鍑哄簱");
+                throw Oops.Oh($"鍖厈item}涓叾涓湁鏉跨姸鎬佹槸'{StockStatusEnum.榻愬寘寰呭嚭搴�.ToString()}' 鎴�'{StockStatusEnum.浜哄伐榻愬寘鍑哄簱浠诲姟宸插垱寤�.ToString()}'锛屼笉鍏佽寮哄埗鍑哄簱");
             }
 
             //鏇存柊鐘舵�� 
             foreach (var quan in quanList)
             {
+                if (quan.StockStatus != StockStatusEnum.鍦ㄥ簱 && quan.StockStatus != StockStatusEnum.宸插喕缁�)
+                {
+                    throw Oops.Oh($"閮ㄤ欢鏉$爜{quan.Upi}鐨勫簱瀛樼姸鎬佷笉鏄�'{StockStatusEnum.鍦ㄥ簱.ToString()}鎴杮StockStatusEnum.宸插喕缁�.ToString()}'鐘舵��");
+                }
+
                 quan.StockStatus = StockStatusEnum.浜哄伐寮哄埗寰呭嚭搴�;
                 quan.StockStatusName = StockStatusEnum.浜哄伐寮哄埗寰呭嚭搴�.ToString();
                 quan.UpdateTime = DateTime.Now;
                 quan.OperReason = "浜哄伐寮哄埗寰呭嚭搴�";
             }
             updateQuanList.AddRange(quanList);
+
+            var packageObj = await _mesPackageGatherRep.GetFirstAsync(x => x.PackageCode == item);
+            packageObj.UpiFlag = UpiFlagEnum.NG;
+            packageObj.UpiStatus = UpiStatusEnum.宸蹭笅绾�;
+            await _mesPackageGatherRep.UpdateAsync(packageObj);
+
+
+            //涓嬬嚎鏇存柊 璁㈠崟琛ㄦ暟鎹� _mesOrderGatherRep
+            await UpdateOrderGather(packageObj, true);
+
+            foreach (var quan in quanList)
+            {
+                //娓呯悊 闃熷垪琛�
+                var removeUpiList = await _mes_Upi_LineQueueRep.AsQueryable().Where(x => x.Upi == quan.Upi).ToListAsync();
+                if (removeUpiList?.Count > 0)
+                {
+                    await _mes_Upi_LineQueueRep.DeleteAsync(removeUpiList);
+                }
+
+                var removePackageList = await _mes_Package_LineQueueRep.AsQueryable().Where(x => x.PackageCode == quan.PackageCode).ToListAsync();
+                if (removePackageList?.Count > 0)
+                {
+                    await _mes_Package_LineQueueRep.DeleteAsync(removePackageList);
+                }
+            }
+        }
+
+        //妯″紡鍒ゆ柇
+        var client = await WCFServiceHelper.GetWCFService_SAPCC_Client(_sysConfigRep);
+        var res = await client.ValidateModeAsync(1);
+        if (res.result == false)
+        {
+            throw Oops.Oh(res.resMsg);
+        }
+
+        await _wmsStockQuanRep.UpdateRangeAsync(updateQuanList);
+
+    }
+
+
+    /// <summary>
+    /// 浜哄伐榻愬寘鍑哄簱
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost]
+    [ApiDescriptionSettings(Name = "PersonOutbound")]
+    [Description("WmsOperationTask/PersonOutbound")]
+    [UnitOfWork]
+    public async Task PersonOutbound(PersonOutboundInput input)
+    {
+        if (input == null || input.PackageCodeList?.Count == 0)
+        {
+            throw Oops.Oh("鍙傛暟涓嶈兘涓虹┖");
+        }
+        //楠岃瘉浼犻�掔殑鍖呮槸鍚﹂兘鍦ㄩ綈鍖呬箣鍐呫��
+        List<WmsPackListOutput> packList = await _wmsCommonnQueryService.PackList(new Service.WmsCommonnQuery.Dto.PackListInput() { IsPack = true });
+
+        List<WmsStockQuan> updateQuanList = new List<WmsStockQuan>();
+        foreach (var item in input.PackageCodeList)
+        {
+            var isExistCount = packList.Where(x => x.PackageCode == item).Count();
+            if (isExistCount == 0)
+            {
+                throw Oops.Oh($"鍖厈item}涓嶆槸榻愬寘鐘舵�侊紝璇锋鏌ワ紒");
+            }
+
+            var quanList = await _wmsStockQuanRep.AsQueryable().Where(x => x.PackageCode == item).ToListAsync();
+            var isExist = quanList.Where(x => x.StockStatus == StockStatusEnum.浜哄伐寮哄埗寰呭嚭搴� || x.StockStatus == StockStatusEnum.浜哄伐寮哄埗浠诲姟宸插垱寤�).Count();
+            if (isExist > 0)
+            {
+                throw Oops.Oh($"鍖厈item}涓叾涓湁鏉跨姸鎬佹槸'{StockStatusEnum.浜哄伐寮哄埗寰呭嚭搴�.ToString()}'鎴�'{StockStatusEnum.浜哄伐寮哄埗浠诲姟宸插垱寤�.ToString()}'锛屼笉鍏佽浜哄伐榻愬寘鍑哄簱");
+            }
+
+            //鏇存柊鐘舵�� 
+            foreach (var quan in quanList)
+            {
+                if (quan.StockStatus != StockStatusEnum.鍦ㄥ簱 && quan.StockStatus != StockStatusEnum.宸插喕缁�)
+                {
+                    throw Oops.Oh($"閮ㄤ欢鏉$爜{quan.Upi}鐨勫簱瀛樼姸鎬佷笉鏄�'{StockStatusEnum.鍦ㄥ簱.ToString()}鎴杮StockStatusEnum.宸插喕缁�.ToString()}'鐘舵��");
+                }
+                quan.StockStatus = StockStatusEnum.榻愬寘寰呭嚭搴�;
+                quan.StockStatusName = StockStatusEnum.榻愬寘寰呭嚭搴�.ToString();
+                quan.UpdateTime = DateTime.Now;
+                quan.OperReason = "浜哄伐榻愬寘鍑哄簱";
+            }
+            updateQuanList.AddRange(quanList);
+
+            var packageObj = await _mesPackageGatherRep.GetFirstAsync(x => x.PackageCode == item);
+            packageObj.UpiStatus = UpiStatusEnum.宸查綈鍖�;
+            packageObj.IsQiBao = true;
+            await _mesPackageGatherRep.UpdateAsync(packageObj);
+        }
+
+        //妯″紡鍒ゆ柇
+        var client = await WCFServiceHelper.GetWCFService_SAPCC_Client(_sysConfigRep);
+        var res = await client.ValidateModeAsync(2);
+        if (res.result == false)
+        {
+            throw Oops.Oh(res.resMsg);
         }
 
         await _wmsStockQuanRep.UpdateRangeAsync(updateQuanList);
@@ -91,7 +222,7 @@
     }
 
     /// <summary>
-    /// 鍒ゆ柇榻愬
+    /// 涓嬬嚎鏀捐
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
@@ -101,78 +232,175 @@
     [UnitOfWork]
     public async Task<ValidateQiTaoOutput> ValdateQiTao(ValidateQiTaoInput input)
     {
-        ValidateQiTaoOutput output = new ValidateQiTaoOutput();
-        if (input == null || input.PackageCode == null)
+        await semaphore2.WaitAsync();
+        try
         {
-            throw Oops.Oh("鍙傛暟涓嶈兘涓虹┖");
-        }
-
-        var package = await _mesPackageGatherRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).FirstAsync();
-        if (package == null)
-        {
-            throw Oops.Oh($"娌℃湁鎵惧埌鍖呭彿{input.PackageCode}鐨勬眹鎬绘暟鎹�");
-        }
-
-
-
-        var sysConfig = await _sysConfigRep.GetFirstAsync(x => x.Code == CommonConst.WmsBZ30_QiTao);
-        if (sysConfig == null)
-        {
-            throw Oops.Oh($"娌℃湁閰嶇疆 鍒ゆ柇榻愬 鍊�");
-        }
-        if (!string.IsNullOrEmpty(sysConfig.Value) && sysConfig.Value.Trim() != "鏃�")
-        {
-            throw Oops.Oh($"鍒ゆ柇榻愬鍊煎凡缁忓瓨鍦ㄥ�納sysConfig.Value},涓嶅厑璁告搷浣�");
-        }
-
-        //璁板綍宸ヤ綔鏃堕棿鍜屽伐浣滀汉
-        var curUserName = App.User.FindFirst(ClaimConst.RealName)?.Value;
-
-        var setValue = "";
-        var _QiTaoReuslt = "";
-        var other_orderList = await _mesPackageGatherRep.AsQueryable().Where(x => x.Info5 == package.Info5 && x.PackageCode != input.PackageCode).ToListAsync();
-        var num = other_orderList.Where(x => x.UpiStatus == UpiStatusEnum.鍒濆 || x.UpiStatus == UpiStatusEnum.涓嶉綈鍖�).Count();
-        if (num > 0)
-        {
-            //涓嶉綈濂�
-            setValue = $"{input.PackageCode}|涓嶉綈濂梶" + curUserName;
-            _QiTaoReuslt = "涓嶉綈濂�";
-        }
-        else
-        {
-            setValue = $"{input.PackageCode}|榻愬|" + curUserName;
-            _QiTaoReuslt = "榻愬";
-        }
-
-
-        sysConfig.Value = setValue;
-        await _sysConfigRep.UpdateAsync(sysConfig);
-        //*/
-
-
-        var sysConfig_wms_unline_oper = await _sysConfigRep.GetFirstAsync(x => x.Code == CommonConst.wms_unline_oper);
-        if (sysConfig_wms_unline_oper == null)
-        {
-            throw Oops.Oh($"娌℃湁閰嶇疆 鍖呰涓嬬嚎鎿嶄綔浜� 鍊�");
-        }
-        if (sysConfig_wms_unline_oper.Value != curUserName)
-        {
-            sysConfig_wms_unline_oper.Value = curUserName;
-            await _sysConfigRep.UpdateAsync(sysConfig_wms_unline_oper);
-
-            var sysConfig_wms_unline_time = await _sysConfigRep.GetFirstAsync(x => x.Code == CommonConst.wms_unline_time);
-            if (sysConfig_wms_unline_time == null)
+            ValidateQiTaoOutput output = new ValidateQiTaoOutput();
+            if (input == null || input.PackageCode == null)
             {
-                throw Oops.Oh($"娌℃湁閰嶇疆 鍖呰涓嬬嚎鐧婚檰鏃堕棿 鍊�");
+                throw Oops.Oh("鍙傛暟涓嶈兘涓虹┖");
             }
-            sysConfig_wms_unline_time.Value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
-            await _sysConfigRep.UpdateAsync(sysConfig_wms_unline_time);
+
+            var package = await _mesPackageGatherRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).FirstAsync();
+            if (package == null)
+            {
+                throw Oops.Oh($"娌℃湁鎵惧埌鍖呭彿{input.PackageCode}鐨勬眹鎬绘暟鎹�");
+            }
+
+            if (package.UpiStatus == UpiStatusEnum.宸蹭笅绾�)
+            {
+                throw Oops.Oh($"鍖厈input.PackageCode}宸蹭笅绾�");
+            }
+
+            var unlineObj = await _mes_Package_UnLine_RecordRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).FirstAsync();
+            if (unlineObj != null)
+            {
+                throw Oops.Oh($"鍖呭彿{input.PackageCode}宸茬粡涓嬬嚎");
+            }
+
+            //鍒ゆ柇鏄惁鏄柊鐢熶骇璁㈠崟
+            var _QiTaoReuslt = "";
+            bool isNewOrder = false;
+            string _location = "BZ-33";
+            var lastPackageUnline = await _mes_Package_UnLine_RecordRep.AsQueryable().Where(x => x.UpiFlag == UpiFlagEnum.姝e父 && x.Location != "浜哄伐").OrderByDescending(x => x.Id).FirstAsync();
+            if (lastPackageUnline == null)
+            {//璁や负鏄柊鐢熶骇璁㈠崟
+                isNewOrder = true;
+            }
+            else
+            {
+                if (lastPackageUnline.Info5 != package.Info5)
+                {//璁や负鏄柊鐢熶骇璁㈠崟
+                    isNewOrder = true;
+                    if (lastPackageUnline.Location == "BZ-33")
+                    {
+                        _location = "BZ-32";
+                    }
+                    else
+                    {
+                        _location = "BZ-33";
+                    }
+                }
+                else
+                {
+                    _location = lastPackageUnline.Location;
+                }
+            }
+            if (string.IsNullOrEmpty(_location))
+            {//榛樿
+                _location = "BZ-33";
+            }
+
+            _QiTaoReuslt = (bool)isNewOrder ? "鏂拌鍗�" : "褰撳墠璁㈠崟";
+
+
+            //璁板綍宸ヤ綔鏃堕棿鍜屽伐浣滀汉
+            var curUserName = App.User.FindFirst(ClaimConst.RealName)?.Value;
+
+            var sysConfig_wms_unline_oper = await _sysConfigRep.GetFirstAsync(x => x.Code == CommonConst.wms_unline_oper);
+            if (sysConfig_wms_unline_oper == null)
+            {
+                throw Oops.Oh($"娌℃湁閰嶇疆 鍖呰涓嬬嚎鎿嶄綔浜� 鍊�");
+            }
+            if (sysConfig_wms_unline_oper.Value != curUserName)
+            {
+                sysConfig_wms_unline_oper.Value = curUserName;
+                await _sysConfigRep.UpdateAsync(sysConfig_wms_unline_oper);
+
+                var sysConfig_wms_unline_time = await _sysConfigRep.GetFirstAsync(x => x.Code == CommonConst.wms_unline_time);
+                if (sysConfig_wms_unline_time == null)
+                {
+                    throw Oops.Oh($"娌℃湁閰嶇疆 鍖呰涓嬬嚎鐧婚檰鏃堕棿 鍊�");
+                }
+                sysConfig_wms_unline_time.Value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+                await _sysConfigRep.UpdateAsync(sysConfig_wms_unline_time);
+            }
+
+
+
+            //璇锋眰PLC
+            //鍒ゆ柇鏂瑰悜
+            bool myLocation = false;
+            if (_location == "BZ-33")
+            {
+                myLocation = false;
+            }
+            else
+            {
+                myLocation = true;
+            }
+            var client = await WCFServiceHelper.GetWCFService_SAPCC_Client(_sysConfigRep);
+            var res = await client.WriteQiTaoInfoAsync(myLocation);
+            if (res.result == false)
+            {
+                throw Oops.Oh(res.resMsg);
+            }
+
+
+            //鏇存柊鏁版嵁
+            package.UpiStatus = UpiStatusEnum.宸蹭笅绾�;
+            package.AreaCode = AreaCodeEnum.涓嬬嚎鍖哄煙;
+            await _mesPackageGatherRep.UpdateAsync(package);
+
+            var upiList = await _mesBatchOrderUpiRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).ToListAsync();
+            foreach (var item in upiList)
+            {
+                item.UpiStatus = UpiStatusEnum.宸蹭笅绾�;
+                item.AreaCode = AreaCodeEnum.涓嬬嚎鍖哄煙;
+                item.UpdateTime = DateTime.Now;
+            }
+            await _mesBatchOrderUpiRep.UpdateRangeAsync(upiList);
+            //鍒犻櫎闃熷垪淇℃伅
+            var lineQueue = await _mes_Package_LineQueueRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).FirstAsync();
+            if (lineQueue != null)
+            {
+                await _mes_Package_LineQueueRep.DeleteAsync(lineQueue);
+            }
+            //澶勭悊琛�  mes_order_gather
+            await UpdateOrderGather(package, false);
+
+            var _cretaorName = App.User.FindFirst(ClaimConst.RealName)?.Value;
+
+            //鏂板涓嬬嚎璁板綍琛�
+            var all_upiList = await _mesBatchOrderUpiRep.AsQueryable().Where(x => x.Info5 == package.Info5).ToListAsync();
+            var all_unlineList = await _mes_Package_UnLine_RecordRep.AsQueryable().Where(x => x.Info5 == package.Info5).ToListAsync();
+            Mes_Package_UnLine_Record record = new Mes_Package_UnLine_Record();
+            record = package.Adapt<Mes_Package_UnLine_Record>();
+            record.Id = Yitter.IdGenerator.YitIdHelper.NextId();
+            record.Location = _location;
+            record.AllPackageNum = all_upiList.GroupBy(x => x.PackageCode).Count();
+            record.CurUnlineIndexPackageNum = all_unlineList.GroupBy(x => x.PackageCode).Count() + 1;
+            record.CreateTime = DateTime.Now;
+            record.CreateUserName = _cretaorName;
+            await _mes_Package_UnLine_RecordRep.InsertAsync(record);
+
+            //璁板綍鍖呭饱鍘�
+            WmsRecordPackageProcess wmsRecordPackage = new WmsRecordPackageProcess();
+            wmsRecordPackage = package.Adapt<WmsRecordPackageProcess>();
+            wmsRecordPackage.Id = Yitter.IdGenerator.YitIdHelper.NextId();
+            wmsRecordPackage.Location = "";
+            wmsRecordPackage.OperRemark = "姝e父涓嬬嚎";
+            wmsRecordPackage.CreateTime = DateTime.Now;
+            wmsRecordPackage.CreateUserName = _cretaorName;
+            await _wmsRecordPackageProcessRep.InsertAsync(wmsRecordPackage);
+
+
+            output = package.Adapt<ValidateQiTaoOutput>();
+            output.QiTaoReuslt = _QiTaoReuslt + $",绗瑊record.CurUnlineIndexPackageNum}鍖呬笅绾�,鍏眥record.AllPackageNum}鍖�";
+            output.IsNewOrder = isNewOrder;
+            //output.IsNewOrder = false;
+            return output;
+        }
+        catch (Exception)
+        {
+
+            throw;
+        }
+        finally
+        {
+            semaphore2.Release();
         }
 
-
-        output = package.Adapt<ValidateQiTaoOutput>();
-        output.QiTaoReuslt = _QiTaoReuslt;
-        return output;
     }
 
 
@@ -208,16 +436,22 @@
             throw Oops.Oh($"娌℃湁鎵惧埌鍖呭彿{input.PackageCode}鐨勬眹鎬绘暟鎹�");
         }
 
+        var _cretaorName = App.User.FindFirst(ClaimConst.RealName)?.Value;
+
         WmsRecordPackageProcess wmsRecordPackage = new WmsRecordPackageProcess();
         wmsRecordPackage = singlePackage.Adapt<WmsRecordPackageProcess>();
+        wmsRecordPackage.Id = Yitter.IdGenerator.YitIdHelper.NextId();
         wmsRecordPackage.CreateTime = DateTime.Now;
+        wmsRecordPackage.CreateUserName = _cretaorName;
         wmsRecordPackage.Location = "BZ29";
         wmsRecordPackage.OperRemark = "鏍稿鏍囩";
         await _wmsRecordPackageProcessRep.InsertAsync(wmsRecordPackage);
 
         WmsRecordUpiProcess wmsRecordUpi = new WmsRecordUpiProcess();
         wmsRecordUpi = singleUpi.Adapt<WmsRecordUpiProcess>();
+        wmsRecordUpi.Id = Yitter.IdGenerator.YitIdHelper.NextId();
         wmsRecordUpi.CreateTime = DateTime.Now;
+        wmsRecordUpi.CreateUserName = _cretaorName;
         wmsRecordUpi.Location = "BZ29";
         wmsRecordUpi.OperRemark = "鏍稿鏍囩";
         await _wmsRecordUpiProcessRep.InsertAsync(wmsRecordUpi);
@@ -227,7 +461,7 @@
 
 
     /// <summary>
-    /// NG鍖呬笅绾�
+    /// NG鍖呬笅绾挎垨 姝e父鍖� 涓嬬嚎 -鎵弿鍖呭彿
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
@@ -237,61 +471,287 @@
     [UnitOfWork]
     public async Task UnlineForNGPackage(UnlineForNGPackageInput input)
     {
+        await semaphore.WaitAsync();
+        try
+        {
+            if (input == null)
+            {
+                throw Oops.Oh("鍙傛暟涓嶈兘涓虹┖");
+            }
+            if (string.IsNullOrEmpty(input.PackageCode))
+            {
+                throw Oops.Oh("鍖呭彿涓嶈兘涓虹┖");
+            }
+            //if (string.IsNullOrEmpty(input.Reason))
+            //{
+            //    throw Oops.Oh("鍘熷洜涓嶈兘涓虹┖");
+            //}
+            string _OperRemark = "姝e父浜哄伐涓嬬嚎";
+            UpiFlagEnum upiFlagEnum = UpiFlagEnum.姝e父;
+            if (input.IsNG)
+            {
+                upiFlagEnum = UpiFlagEnum.NG;
+                _OperRemark = "NG涓嬬嚎";
+            }
+
+            var singlePackage = await _mesPackageGatherRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).FirstAsync();
+            if (singlePackage == null)
+            {
+                throw Oops.Oh($"娌℃湁鎵惧埌鍖呭彿{input.PackageCode}鐨勬眹鎬绘暟鎹�");
+            }
+
+            if (singlePackage.UpiStatus == UpiStatusEnum.宸蹭笅绾�)
+            {
+                throw Oops.Oh($"鍖呭彿{input.PackageCode}宸茬粡涓嬬嚎");
+            }
+
+            singlePackage.UpiFlag = upiFlagEnum;
+            singlePackage.UpdateTime = DateTime.Now;
+            singlePackage.UpiStatus = UpiStatusEnum.宸蹭笅绾�;
+            singlePackage.AreaCode = AreaCodeEnum.涓嬬嚎鍖哄煙;
+
+            var upiLineQueueList = await _mes_Upi_LineQueueRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).ToListAsync();
+            if (upiLineQueueList?.Count > 0)
+            {
+                await _mes_Upi_LineQueueRep.DeleteAsync(upiLineQueueList);
+            }
+
+            var upiList = await _mesBatchOrderUpiRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).ToListAsync();
+            if (upiList == null)
+            {
+                throw Oops.Oh($"娌℃湁鎵惧埌鍖呭彿{input.PackageCode}鐨勬澘浠舵暟鎹�");
+            }
+            var _cretaorName = App.User.FindFirst(ClaimConst.RealName)?.Value;
+
+            foreach (var item in upiList)
+            {
+                item.UpiFlag = UpiFlagEnum.NG;
+                item.UpdateTime = DateTime.Now;
+                item.UpiStatus = UpiStatusEnum.宸蹭笅绾�;
+                item.AreaCode = AreaCodeEnum.涓嬬嚎鍖哄煙;
+
+                WmsRecordUpiProcess wmsRecordUpi = new WmsRecordUpiProcess();
+                wmsRecordUpi = item.Adapt<WmsRecordUpiProcess>();
+                wmsRecordUpi.Id = Yitter.IdGenerator.YitIdHelper.NextId();
+                wmsRecordUpi.CreateTime = DateTime.Now;
+                wmsRecordUpi.CreateUserName = _cretaorName;
+                wmsRecordUpi.Location = "";
+                wmsRecordUpi.OperRemark = _OperRemark;
+                await _wmsRecordUpiProcessRep.InsertAsync(wmsRecordUpi);
+
+                WmsRecordUpiNg wmsRecordUpiNg = new WmsRecordUpiNg();
+                wmsRecordUpiNg = item.Adapt<WmsRecordUpiNg>();
+                wmsRecordUpiNg.Id = Yitter.IdGenerator.YitIdHelper.NextId();
+                wmsRecordUpiNg.CreateTime = DateTime.Now;
+                wmsRecordUpiNg.CreateUserName = _cretaorName;
+                wmsRecordUpiNg.OperRemark = _OperRemark;
+                await _wmsRecordUpiNgRep.InsertAsync(wmsRecordUpiNg);
+
+
+
+                //娓呯悊 闃熷垪琛�
+                var removeUpiList = await _mes_Upi_LineQueueRep.AsQueryable().Where(x => x.Upi == item.UPI).ToListAsync();
+                if (removeUpiList?.Count > 0)
+                {
+                    await _mes_Upi_LineQueueRep.DeleteAsync(removeUpiList);
+                }
+
+                var removePackageList = await _mes_Package_LineQueueRep.AsQueryable().Where(x => x.PackageCode == item.PackageCode).ToListAsync();
+                if (removePackageList?.Count > 0)
+                {
+                    await _mes_Package_LineQueueRep.DeleteAsync(removePackageList);
+                }
+
+
+            }
+
+            //涓嬬嚎鏇存柊 璁㈠崟琛ㄦ暟鎹� _mesOrderGatherRep
+            await UpdateOrderGather(singlePackage, input.IsNG);
+
+
+            WmsRecordPackageProcess wmsRecordPackage = new WmsRecordPackageProcess();
+            wmsRecordPackage = singlePackage.Adapt<WmsRecordPackageProcess>();
+            wmsRecordPackage.Id = Yitter.IdGenerator.YitIdHelper.NextId();
+            wmsRecordPackage.Location = "";
+            wmsRecordPackage.OperRemark = _OperRemark;
+            wmsRecordPackage.CreateTime = DateTime.Now;
+            wmsRecordPackage.CreateUserName = _cretaorName;
+            await _wmsRecordPackageProcessRep.InsertAsync(wmsRecordPackage);
+
+
+            //鏂板涓嬬嚎璁板綍琛�
+            var all_upiList = await _mesBatchOrderUpiRep.AsQueryable().Where(x => x.Info5 == singlePackage.Info5).ToListAsync();
+            var all_unlineList = await _mes_Package_UnLine_RecordRep.AsQueryable().Where(x => x.Info5 == singlePackage.Info5).ToListAsync();
+            Mes_Package_UnLine_Record record = new Mes_Package_UnLine_Record();
+            record = singlePackage.Adapt<Mes_Package_UnLine_Record>();
+            record.Id = Yitter.IdGenerator.YitIdHelper.NextId();
+            record.Location = "浜哄伐";
+            record.AllPackageNum = all_upiList.GroupBy(x => x.PackageCode).Count();
+            record.CurUnlineIndexPackageNum = all_unlineList.GroupBy(x => x.PackageCode).Count() + 1;
+            record.CreateTime = DateTime.Now;
+            record.CreateUserName = _cretaorName;
+            await _mes_Package_UnLine_RecordRep.InsertAsync(record);
+
+
+            await _mesPackageGatherRep.UpdateAsync(singlePackage);
+            await _mesBatchOrderUpiRep.UpdateRangeAsync(upiList);
+        }
+        catch (Exception)
+        {
+
+            throw;
+        }
+        finally
+        {
+            semaphore.Release();
+        }
+    }
+
+    /// <summary>
+    /// 鍏叡-涓嬬嚎鏇存柊 璁㈠崟琛ㄦ暟鎹�
+    /// </summary>
+    /// <param name="singlePackage"></param>
+    /// <returns></returns>
+    private async Task UpdateOrderGather(Mes_Package_Gather singlePackage, bool isNG)
+    {
+        //涓嬬嚎鏇存柊 璁㈠崟琛ㄦ暟鎹� _mesOrderGatherRep
+        bool isAdd = false;
+        var order = await _mesOrderGatherRep.AsQueryable().Where(x => x.Info5 == singlePackage.Info5).FirstAsync();
+        if (order == null)
+        {
+            isAdd = true;
+            order = new Mes_Order_Gather()
+            {
+                Info5 = singlePackage.Info5,
+                OrderId = singlePackage.OrderId,
+                PlanNo = singlePackage.PlanNo,
+            };
+        }
+        var packageList = await _mesPackageGatherRep.AsQueryable().Where(x => x.Info5 == singlePackage.Info5).ToListAsync();
+        order.PackageNum = packageList.Count();
+        order.UnLinePackageNum = packageList.Where(x => x.UpiStatus == UpiStatusEnum.宸蹭笅绾�).Count() + 1;
+        if (order.UnLinePackageNum > order.PackageNum)
+        {
+            order.UnLinePackageNum = order.PackageNum;
+        }
+        order.NgPackageNum = packageList.Where(x => x.UpiStatus == UpiStatusEnum.宸蹭笅绾� && x.UpiFlag == UpiFlagEnum.NG).Count();
+        if (isNG)
+        {
+            order.NgPackageNum = order.NgPackageNum + 1;
+        }
+        if (order.NgPackageNum > order.PackageNum)
+        {
+            order.NgPackageNum = order.PackageNum;
+        }
+
+        order.NoUnLinePackageNum = order.PackageNum - order.UnLinePackageNum;
+
+        order.AllPackageArea = packageList.Sum(x => Convert.ToDecimal(x.Info13));
+        order.ScanPackageArea = packageList.Where(x => x.UpiStatus == UpiStatusEnum.宸蹭笅绾� && x.UpiFlag == (int)UpiFlagEnum.姝e父).Sum(x => Convert.ToDecimal(x.Info13));
+        if (isNG == false)
+        {
+            order.ScanPackageArea = order.ScanPackageArea + Convert.ToDecimal(singlePackage.Info13);
+        }
+
+        order.NoScanPackageArea = order.AllPackageArea - order.ScanPackageArea;
+
+        //鍒ゆ柇璇ヨ鍗曟槸鍚﹀凡涓嬬嚎
+        if (order.NoUnLinePackageNum == 0)
+        {
+            order.IsUnline = true;
+            order.UnlineTime = DateTime.Now;
+            //order.UnlinePerson = _UnlinePerson;
+        }
+
+        if (isAdd)
+        {
+            await _mesOrderGatherRep.InsertAsync(order);
+        }
+        else
+        {
+            await _mesOrderGatherRep.UpdateAsync(order);
+        }
+    }
+
+    /// <summary>
+    /// 鏍囪NG-鎵弿浠跺彿
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost]
+    [ApiDescriptionSettings(Name = "SetNG")]
+    [Description("WmsOperationTask/SetNG")]
+    [UnitOfWork]
+    public async Task SetNG(SetNGInput input)
+    {
         if (input == null)
         {
             throw Oops.Oh("鍙傛暟涓嶈兘涓虹┖");
         }
-        if (string.IsNullOrEmpty(input.PackageCode))
+        if (string.IsNullOrEmpty(input.Upi))
         {
-            throw Oops.Oh("鍖呭彿涓嶈兘涓虹┖");
+            throw Oops.Oh("閮ㄤ欢鏉$爜涓嶈兘涓虹┖");
         }
-        if (string.IsNullOrEmpty(input.Reason))
-        {
-            throw Oops.Oh("鍘熷洜涓嶈兘涓虹┖");
-        }
+        //if (string.IsNullOrEmpty(input.Reason))
+        //{
+        //    throw Oops.Oh("鍘熷洜涓嶈兘涓虹┖");
+        //}
 
-        var singlePackage = await _mesPackageGatherRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).FirstAsync();
+        var singleUpi = await _mesBatchOrderUpiRep.AsQueryable().Where(x => x.UPI == input.Upi).FirstAsync();
+        if (singleUpi == null)
+        {
+            throw Oops.Oh($"娌℃湁鎵惧埌閮ㄤ欢鏉$爜{input.Upi}鐨勬暟鎹�");
+        }
+        var packageCode = singleUpi.PackageCode;
+        var singlePackage = await _mesPackageGatherRep.AsQueryable().Where(x => x.PackageCode == packageCode).FirstAsync();
         if (singlePackage == null)
         {
-            throw Oops.Oh($"娌℃湁鎵惧埌鍖呭彿{input.PackageCode}鐨勬眹鎬绘暟鎹�");
+            throw Oops.Oh($"娌℃湁鎵惧埌鍖呭彿{packageCode}鐨勬眹鎬绘暟鎹�");
         }
+
+        var _cretaorName = App.User.FindFirst(ClaimConst.RealName)?.Value;
 
         singlePackage.UpiFlag = UpiFlagEnum.NG;
         singlePackage.UpdateTime = DateTime.Now;
-        singlePackage.UpiStatus = UpiStatusEnum.宸蹭笅绾�;
-        singlePackage.AreaCode = AreaCodeEnum.涓嬬嚎鍖哄煙;
+        singlePackage.UpdateUserName = _cretaorName;
 
-        var upiLineQueueList = await _mes_Upi_LineQueueRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).ToListAsync();
-        if (upiLineQueueList?.Count > 0)
-        {
-            await _mes_Upi_LineQueueRep.DeleteAsync(upiLineQueueList);
-        }
-
-        var upiList = await _mesBatchOrderUpiRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).ToListAsync();
+        var upiList = await _mesBatchOrderUpiRep.AsQueryable().Where(x => x.PackageCode == packageCode).ToListAsync();
         if (upiList == null)
         {
-            throw Oops.Oh($"娌℃湁鎵惧埌鍖呭彿{input.PackageCode}鐨勬澘浠舵暟鎹�");
+            throw Oops.Oh($"娌℃湁鎵惧埌鍖呭彿{packageCode}鐨勬澘浠舵暟鎹�");
         }
         foreach (var item in upiList)
         {
             item.UpiFlag = UpiFlagEnum.NG;
             item.UpdateTime = DateTime.Now;
-            item.UpiStatus = UpiStatusEnum.宸蹭笅绾�;
-            item.AreaCode = AreaCodeEnum.涓嬬嚎鍖哄煙;
+            item.UpdateUserName = _cretaorName;
 
             WmsRecordUpiProcess wmsRecordUpi = new WmsRecordUpiProcess();
             wmsRecordUpi = item.Adapt<WmsRecordUpiProcess>();
+            wmsRecordUpi.Id = Yitter.IdGenerator.YitIdHelper.NextId();
             wmsRecordUpi.CreateTime = DateTime.Now;
+            wmsRecordUpi.CreateUserName = _cretaorName;
             wmsRecordUpi.Location = "";
-            wmsRecordUpi.OperRemark = "NG涓嬬嚎";
+            wmsRecordUpi.OperRemark = "鏍囪NG";
             await _wmsRecordUpiProcessRep.InsertAsync(wmsRecordUpi);
+
+            WmsRecordUpiNg wmsRecordUpiNg = new WmsRecordUpiNg();
+            wmsRecordUpiNg = item.Adapt<WmsRecordUpiNg>();
+            wmsRecordUpiNg.Id = Yitter.IdGenerator.YitIdHelper.NextId();
+            wmsRecordUpiNg.CreateTime = DateTime.Now;
+            wmsRecordUpiNg.CreateUserName = _cretaorName;
+            wmsRecordUpiNg.OperRemark = "鏍囪NG";
+            await _wmsRecordUpiNgRep.InsertAsync(wmsRecordUpiNg);
         }
 
 
         WmsRecordPackageProcess wmsRecordPackage = new WmsRecordPackageProcess();
         wmsRecordPackage = singlePackage.Adapt<WmsRecordPackageProcess>();
+        wmsRecordPackage.Id = Yitter.IdGenerator.YitIdHelper.NextId();
         wmsRecordPackage.Location = "";
-        wmsRecordPackage.OperRemark = "NG涓嬬嚎";
+        wmsRecordPackage.OperRemark = "鏍囪NG";
+        wmsRecordPackage.CreateTime = DateTime.Now;
+        wmsRecordPackage.CreateUserName = _cretaorName;
         await _wmsRecordPackageProcessRep.InsertAsync(wmsRecordPackage);
 
 
@@ -300,5 +760,113 @@
 
     }
 
+
+    /// <summary>
+    /// 鍙栨秷NG-鎵弿浠跺彿
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost]
+    [ApiDescriptionSettings(Name = "CancelNG")]
+    [Description("WmsOperationTask/CancelNG")]
+    [UnitOfWork]
+    public async Task CancelNG(CancelNGInput input)
+    {
+        if (input == null)
+        {
+            throw Oops.Oh("鍙傛暟涓嶈兘涓虹┖");
+        }
+        if (string.IsNullOrEmpty(input.Upi))
+        {
+            throw Oops.Oh("閮ㄤ欢鏉$爜涓嶈兘涓虹┖");
+        }
+        //if (string.IsNullOrEmpty(input.Reason))
+        //{
+        //    throw Oops.Oh("鍘熷洜涓嶈兘涓虹┖");
+        //}
+
+        var singleUpi = await _mesBatchOrderUpiRep.AsQueryable().Where(x => x.UPI == input.Upi).FirstAsync();
+        if (singleUpi == null)
+        {
+            throw Oops.Oh($"娌℃湁鎵惧埌閮ㄤ欢鏉$爜{input.Upi}鐨勬暟鎹�");
+        }
+        var packageCode = singleUpi.PackageCode;
+        var singlePackage = await _mesPackageGatherRep.AsQueryable().Where(x => x.PackageCode == packageCode).FirstAsync();
+        if (singlePackage == null)
+        {
+            throw Oops.Oh($"娌℃湁鎵惧埌鍖呭彿{packageCode}鐨勬眹鎬绘暟鎹�");
+        }
+
+        var _cretaorName = App.User.FindFirst(ClaimConst.RealName)?.Value;
+
+        singlePackage.UpiFlag = UpiFlagEnum.姝e父;
+        singlePackage.UpdateTime = DateTime.Now;
+        singlePackage.UpdateUserName = _cretaorName;
+
+        var upiList = await _mesBatchOrderUpiRep.AsQueryable().Where(x => x.PackageCode == packageCode).ToListAsync();
+        if (upiList == null)
+        {
+            throw Oops.Oh($"娌℃湁鎵惧埌鍖呭彿{packageCode}鐨勬澘浠舵暟鎹�");
+        }
+        foreach (var item in upiList)
+        {
+            item.UpiFlag = UpiFlagEnum.姝e父;
+            item.UpdateTime = DateTime.Now;
+            item.UpdateUserName = _cretaorName;
+
+            WmsRecordUpiProcess wmsRecordUpi = new WmsRecordUpiProcess();
+            wmsRecordUpi = item.Adapt<WmsRecordUpiProcess>();
+            wmsRecordUpi.Id = Yitter.IdGenerator.YitIdHelper.NextId();
+            wmsRecordUpi.CreateTime = DateTime.Now;
+            wmsRecordUpi.CreateUserName = _cretaorName;
+            wmsRecordUpi.Location = "";
+            wmsRecordUpi.OperRemark = "鍙栨秷NG";
+            await _wmsRecordUpiProcessRep.InsertAsync(wmsRecordUpi);
+
+            WmsRecordUpiNg wmsRecordUpiNg = new WmsRecordUpiNg();
+            wmsRecordUpiNg = item.Adapt<WmsRecordUpiNg>();
+            wmsRecordUpiNg.Id = Yitter.IdGenerator.YitIdHelper.NextId();
+            wmsRecordUpiNg.CreateTime = DateTime.Now;
+            wmsRecordUpiNg.CreateUserName = _cretaorName;
+            wmsRecordUpiNg.OperRemark = "鍙栨秷NG";
+            await _wmsRecordUpiNgRep.InsertAsync(wmsRecordUpiNg);
+        }
+
+
+        WmsRecordPackageProcess wmsRecordPackage = new WmsRecordPackageProcess();
+        wmsRecordPackage = singlePackage.Adapt<WmsRecordPackageProcess>();
+        wmsRecordPackage.Id = Yitter.IdGenerator.YitIdHelper.NextId();
+        wmsRecordPackage.Location = "";
+        wmsRecordPackage.OperRemark = "鍙栨秷NG";
+        wmsRecordPackage.CreateTime = DateTime.Now;
+        wmsRecordPackage.CreateUserName = _cretaorName;
+        await _wmsRecordPackageProcessRep.InsertAsync(wmsRecordPackage);
+
+
+        await _mesPackageGatherRep.UpdateAsync(singlePackage);
+        await _mesBatchOrderUpiRep.UpdateRangeAsync(upiList);
+
+    }
+
+
+    /// <summary>
+    /// 鎵爜璁板綍娓呴櫎
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost]
+    [ApiDescriptionSettings(Name = "PartClear")]
+    [Description("WmsOperationTask/PartClear")]
+    public async Task PartClear()
+    {
+        //妯″紡鍒ゆ柇
+        var client = await WCFServiceHelper.GetWCFService_SAPCC_Client(_sysConfigRep);
+        var res = await client.WriteStation_PartClearAsync();
+        if (res.result == false)
+        {
+            throw Oops.Oh(res.resMsg);
+        }
+    }
+
 }
 

--
Gitblit v1.9.3