From 24b202e031752ec82bc216a8213d7d345f1ea4aa Mon Sep 17 00:00:00 2001
From: 肖洋 <cathay_xy@163.com>
Date: 星期一, 25 十一月 2024 16:18:24 +0800
Subject: [PATCH] 2

---
 Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs |  310 +++++++++++++++++++++++++-------------------------
 1 files changed, 155 insertions(+), 155 deletions(-)

diff --git a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs
index 54847d1..a1e0369 100644
--- a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs
+++ b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs
@@ -2,6 +2,9 @@
 using Mapster;
 using Masuit.Tools;
 using Masuit.Tools.Models;
+using Microsoft.EntityFrameworkCore;
+using System.Linq;
+using System.Threading.Tasks;
 using WIDESEA_DTO.MOM;
 using WIDESEA_DTO.WMS;
 using WIDESEA_IStorageBasicRepository;
@@ -10,10 +13,11 @@
 using WIDESEA_StorageBasicRepository;
 using WIDESEA_StorageTaskRepository;
 using WIDESEA_StoragIntegrationServices;
+using WIDESEAWCS_BasicInfoRepository;
 
 namespace WIDESEA_StorageOutTaskServices;
 
-public class Dt_TaskService : ServiceBase<Dt_Task, IDt_TaskRepository>, IDt_TaskService
+public partial class Dt_TaskService : ServiceBase<Dt_Task, IDt_TaskRepository>, IDt_TaskService
 {
     private readonly LogFactory LogFactory = new LogFactory();
     private readonly IUnitOfWorkManage _unitOfWorkManage;
@@ -36,6 +40,7 @@
     private readonly IDt_AreaInfoRepository _areaInfoRepository; //鍖哄煙
     private readonly IAgingInOrOutInputService _agingInOrOutInputService; //闈欑疆\闄堝寲
     private readonly IProductionRepository _productionRepository; //鐢熶骇
+    private readonly IDt_StationManagerRepository _stationManagerRepository;
 
     public Dt_TaskService(IDt_TaskRepository BaseDal,
                                 IUnitOfWorkManage unitOfWorkManage,
@@ -57,7 +62,8 @@
                                 IDt_AreaInfoRepository areaInfoRepository,
                                 IAgingInOrOutInputService agingInOrOutInputService,
                                 IStockInfoDetailRepository stockInfoDetailRepository,
-                                IProductionRepository productionRepository) : base(BaseDal)
+                                IProductionRepository productionRepository,
+                                IDt_StationManagerRepository stationManagerRepository) : base(BaseDal)
     {
         _unitOfWorkManage = unitOfWorkManage;
         _outOrderRepository = outOrderRepository;
@@ -79,6 +85,7 @@
         _agingInOrOutInputService = agingInOrOutInputService;
         _stockInfoDetailRepository = stockInfoDetailRepository;
         _productionRepository = productionRepository;
+        _stationManagerRepository = stationManagerRepository;
     }
 
     #region 澶栭儴鎺ュ彛鏂规硶
@@ -96,10 +103,12 @@
                 //var process = await SqlSugarHelper.Db.Queryable<Dt_EquipmentProcess>()
                 //    .FirstAsync(x => x.EquipmentName == task.Roadway);
                 //var info = JsonConvert.DeserializeObject<ResponseEqptRunDto>(process.ProcessValue);
-
-                var agingOutputDto = MapToAgingOutputDto(stock);
-                content = await _agingInOrOutInputService.GetOCVOutputAsync(agingOutputDto);
-                ValidateResponse(content);
+                if (!task.Roadway.Contains("FR"))  //闈炲垎瀹瑰簱鍖哄潎涓婃姤MOM鍑哄叆绔�
+                {
+                    var agingOutputDto = MapToAgingOutputDto(stock);
+                    content = await _agingInOrOutInputService.GetOCVOutputAsync(agingOutputDto);
+                    ValidateResponse(content);
+                }
             }
 
             // 鏇存柊搴撳瓨鐘舵�佸拰浠诲姟鐘舵��
@@ -131,6 +140,13 @@
         {
             throw new Exception("鏈壘鍒板搴旂殑搴撳尯淇℃伅");
         }
+
+        var parameterInfo = JsonConvert.DeserializeObject<List<ParameterInfo>>(stock.ParameterInfos).FirstOrDefault(y => y.Description.Contains("鏃堕棿"));
+        if (parameterInfo == null) throw new Exception("");
+
+        var outHours = (DateTime.Now - stock.OutboundTime.Value).TotalHours;
+        var isNG = outHours > parameterInfo.LowerSpecificationsLimit.ToDouble() && outHours < parameterInfo.UpperSpecificationsLimit.ToDouble();
+
         return new AgingOutputDto
         {
             OpFlag = 1,
@@ -142,18 +158,17 @@
                 SlotNo = x.OrderNo.ToInt32(),
                 SerialNo = x.SerialNumber,
                 SerialNoResult = true,
-                ParameterInfo = new List<ParameterInfo> { new ParameterInfo() { Value = (DateTime.Now - stock.CreateDate).TotalMinutes.ToString() } }
-                //ParameterInfo = info.ParameterInfo.Select(y => new ParameterInfo()
-                //{
-                //    LowerLomit = y.LowerControlLimit,
-                //    UpperLimit = y.UpperControlLimit,
-                //    ParameterResult = y.EquipmentAvailabilityFlag,
-                //    ParameterCode = y.ParameterCode,
-                //    ParameterDesc = y.Description,
-                //    TargetValue = y.TargetValue,
-                //    Value = (DateTime.Parse(stock.LinedProcessFeedbackTime, null, System.Globalization.DateTimeStyles.RoundtripKind).ToLocalTime() - stock.CreateDate).TotalMinutes.ToString(),
-                //    DefectCode = y.UOMCode
-                //}).ToList()
+                ParameterInfo = new List<ParameterInfoOutput> {
+                    new ParameterInfoOutput() {
+                        Value = outHours.ToString(),
+                        ParameterCode =parameterInfo.ParameterCode,
+                        ParameterDesc = parameterInfo.Description,
+                        ParameterResult  = isNG.ToString(),
+                        TargetValue = parameterInfo.TargetValue,
+                        LowerLomit = parameterInfo.LowerSpecificationsLimit,
+                        UpperLimit = parameterInfo.UpperSpecificationsLimit,
+                    }
+                }
             }).ToList()
         };
     }
@@ -266,6 +281,27 @@
         WebResponseContent content = new WebResponseContent();
         try
         {
+            if (task.TaskType == (int)TaskInboundTypeEnum.InNG)
+            {
+                task.TaskState = (int)TaskInStatusEnum.SC_InFinish;
+                // 鍒涘缓鍘嗗彶浠诲姟瀹炰緥妯″瀷
+                var taskHtyNG = CreateHistoricalTask(task);
+
+                // 鎵ц鏁版嵁搴撲簨鍔�
+                await _unitOfWorkManage.UseTranAsync(async () =>
+                {
+
+                    // 娣诲姞鍘嗗彶浠诲姟
+                    var isTaskHtyAdd = await _task_HtyRepository.AddDataAsync(taskHtyNG) > 0;
+
+                    // 鍒犻櫎浠诲姟鏁版嵁
+                    var isTaskDelete = await Delete(task.TaskId);
+                    if (!isTaskHtyAdd || !isTaskDelete)
+                        throw new Exception("娣诲姞澶辫触");
+                });
+                return content.OK("鍏ュ簱浠诲姟瀹屾垚鎴愬姛");
+            }
+
             // 鑾峰彇瑁呯淇℃伅鍜岀洰鏍囦綅缃俊鎭�
             var boxing = await _boxingInfoRepository.QueryFirstNavAsync(x => x.PalletCode == task.PalletCode);
             var locationInf = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.TargetAddress);
@@ -371,6 +407,8 @@
         //2024骞�11鏈�16鏃ワ細鏂板瀛楁璁$畻搴斿嚭搴撴椂闂�
         stock.OutboundTime = Convert.ToDateTime(respone.LinedProcessFeedbackTime).AddHours(Convert.ToDouble(respone.SpecialParameterDuration));
         stock.ProductionLine = respone.ProductionLine;
+        stock.ParameterInfos = respone.ParameterInfos.ToJsonString();
+        stock.StockStatus = 1;
 
         // 璁板綍鏃ュ織
         LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "鍏ュ簱浠诲姟瀹屾垚", $"璐т綅鍦板潃锛歿task.TargetAddress},淇敼鍚庤揣浣嶆暟鎹細{locationInf}");
@@ -402,6 +440,11 @@
             return content.Error("浠诲姟涓嶅瓨鍦�");
         }
         LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "楠岃瘉浠诲姟鏄惁瀛樺湪", JsonConvert.SerializeObject(task));
+
+        if(task.TaskType == (int)TaskOutboundTypeEnum.InToOut)
+        {
+           return await CompleteInToOutTaskAsync(task);
+        }
 
         // 楠岃瘉搴撳瓨鏄惁瀛樺湪
         var stock = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == task.PalletCode);
@@ -463,6 +506,13 @@
                 }
             }
 
+
+            var stock = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == input.PalletCode && x.IsFull);
+            if (stock != null)
+            {
+                // TODO璐ㄦ鍥炲簱
+            }
+
             var area = await _areaInfoRepository.QueryFirstAsync(x => x.Spare1.Contains(input.Position));
             if (area == null)
                 return content.Error("鏀圭偣浣嶄笉鍦ㄥ尯鍩熷垪琛ㄤ腑瀛樺湪");
@@ -484,8 +534,35 @@
             // 娣诲姞缁勭洏淇℃伅
             // 灏哻ontent.Data杞崲涓篟esultTrayCellsStatus瀵硅薄
             var result = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(content.Data.ToString());
-            if (result.SerialNos.Count <= 0)
+            if (!result.Success)
                 return content.Error(result.MOMMessage);
+
+            // 鑾峰彇寮傚父鐢佃姱
+            var serialNosError = result.SerialNos.Where(x => x.SerialNoStatus != 1).ToList();
+            if (serialNosError.Count > 0)
+            {
+                // TODO 鍒涘缓浠诲姟閫佽嚦NG鎺掑嚭鍙�
+                var efg = _stationManagerRepository.QueryData(x => x.stationType == 1 && x.stationChildCode == input.Position && x.stationArea == area.AreaCode).ToList();
+                //List<string> NGStation = input.Position == "1088" ? new List<string>() { "1020" } : new List<string>() { "JZSC01" };
+                if(efg.Count <= 0)
+                {
+                    throw new Exception("鏈壘鍒癗G鍏ュ簱绔欏彴閰嶇疆");
+                }
+                List<string> NGStation = efg.Select(x => x.stationNGLocation).ToList();
+                if (NGStation.Count <= 0)
+                {
+                    NGStation = efg.Select(x => x.stationNGChildCode).ToList();
+                }
+                content = await CreateNewTask(input, NGStation, 2);
+                return content.Error("瀛樺湪寮傚父鐢佃姱");
+            }
+
+            if (result.SerialNos.Count <= 0)
+            {
+                // Todo 绌烘墭鐩樺叆搴撻�昏緫
+                content = await RequestTrayInTaskAsync(input);
+                return content;
+            }
 
             // TODO 鑾峰彇鏈湴鏂欐灞炴�т笌鏁寸洏鐢佃姱灞炴�ц幏鍙栫殑鍊艰繘琛屽姣旓紝濡傛灉涓�鑷村垯缁х画锛屽惁鍒欒繑鍥為敊璇俊鎭�
             //var productions = await _productionRepository.QueryDataAsync(x => result.TrayBarcodePropertys.Select(x => x.TrayBarcodeProperty).ToList().Contains(x.TrayBarcodeProperty));
@@ -518,7 +595,13 @@
             //// 璋冪敤GetProcessResponseAsync鏂规硶锛岃幏鍙栧伐鑹哄搷搴�
             //var processResponse = await GetProcessResponseAsync(process, input.Position);
 
-            List<string> strings = input.Position == "1088" ? new List<string>() { "CHSC01" } : new List<string>() { "JZSC01" };
+            //List<string> strings = input.Position == "1088" ? new List<string>() { "CHSC01" } : new List<string>() { "JZSC01" };
+            var stationManagers = _stationManagerRepository.QueryData(x => x.stationType == 1 && x.stationChildCode == input.Position && x.stationArea == area.AreaCode).ToList();
+            if (stationManagers.Count <= 0)
+            {
+                throw new Exception("鏈壘鍒癗G鍏ュ簱绔欏彴閰嶇疆");
+            }
+            List<string> strings = stationManagers.Select(x=>x.Roadway).ToList();
             // 璋冪敤CreateNewTask鏂规硶锛屽垱寤烘柊浠诲姟
             content = await CreateNewTask(input, strings);
             if (content.Status)
@@ -592,11 +675,17 @@
                 return content.OK(data: task);
             }
 
+            var stationManagers = _stationManagerRepository.QueryData(x => x.stationType == 1 && x.stationChildCode == input.Position).ToList();
+            if (stationManagers.Count <= 0)
+            {
+                throw new Exception("鏈壘鍒扮┖鎵樼洏鍏ュ簱绔欏彴閰嶇疆");
+            }
+
+
             // 鑾峰彇鐩爣鍦板潃
-            List<string> strings = input.Position == "1016" ? new List<string>() { "CHSC01" } : new List<string>() { "JZSC01" };
+            List<string> strings = stationManagers.Select(x => x.Roadway).ToList();
 
             return await CreateNewTask(input, strings, 1);
-            //return await CreateNewTask(input, null, 1);
         }
         catch (Exception)
         {
@@ -642,38 +731,6 @@
                 SerialNo = item.SerialNo
             }).ToList()
         };
-    }
-
-    // 鑾峰彇宸ヨ壓鍝嶅簲
-    private async Task<List<Dt_EquipmentProcess>> GetProcessResponseAsync(ProcessApplyDto process, string position)
-    {
-        // 濡傛灉process涓簄ull锛屽垯杩斿洖null
-        if (process == null) return null;
-
-        // 璋冪敤_processApplyService.GetProcessApplyAsync鏂规硶锛岃幏鍙栧伐鑹虹敵璇�
-        WebResponseContent content = await _processApplyService.GetProcessApplyAsync(process);
-        // 濡傛灉鐘舵�佷负false锛屽垯杩斿洖null
-        if (!content.Status) return null;
-
-        // 灏哻ontent.Data杞崲涓篟esultProcessApply瀵硅薄
-        var apply = JsonConvert.DeserializeObject<ResultProcessApply>(content.Data.ToString());
-        // 鏍规嵁position鐨勫�硷紝杩斿洖涓嶅悓鐨凞t_EquipmentProcess鍒楄〃
-        switch (position)
-        {
-            case "1088":
-                return SqlSugarHelper.Db.Queryable<Dt_EquipmentProcess>()
-                    .Where(x => x.EquipmentType == "闄堝寲" && x.WipOrderNo == apply.WipOrderNo || x.ProductDesc == apply.ProductNo)
-                    .ToList();
-
-            case "1339":
-            case "1406":
-                return SqlSugarHelper.Db.Queryable<Dt_EquipmentProcess>()
-                    .Where(x => x.EquipmentType == "闈欑疆" && x.WipOrderNo == apply.WipOrderNo || x.ProductDesc == apply.ProductNo)
-                    .ToList();
-
-            default:
-                return new List<Dt_EquipmentProcess>();
-        }
     }
 
     #endregion 璇锋眰浠诲姟鍏ュ簱
@@ -1191,80 +1248,6 @@
 
     #region 浠诲姟璇锋眰鏂规硶
 
-    /// <summary>
-    /// 鏇存柊鐜版湁浠诲姟
-    /// </summary>
-    /// <param name="input">璇锋眰妯″瀷</param>
-    /// <param name="areaId">鍖哄煙ID</param>
-    /// <param name="task">浠诲姟瀹炰緥</param>
-    /// <param name="content">鍝嶅簲鍐呭</param>
-    /// <returns></returns>
-    //private async Task<WebResponseContent> UpdateExistingTask(RequestTaskDto input, Dt_Task task)
-    //{
-    //    // 鍒涘缓WebResponseContent瀵硅薄
-    //    WebResponseContent content = new WebResponseContent();
-    //    // 瀹氫箟鍙橀噺
-    //    string toAddress;
-    //    int taskState;
-    //    string original = task.CurrentAddress;
-    //    DtLocationInfo location = new DtLocationInfo();
-    //    int beforeStatus = 0;
-
-    //    // 澶勭悊鍏ュ簱浠诲姟
-    //    location = await GetLocationDistributeAsync(task.Roadway);
-    //    toAddress = location.LocationCode;
-    //    taskState = (int)TaskInStatusEnum.Line_InFinish;
-    //    beforeStatus = location.LocationStatus;
-
-    //    // 鏇存柊璐т綅淇℃伅
-    //    location.LocationStatus = (int)LocationEnum.Lock;
-
-    //    // 鏇存柊浠诲姟淇℃伅
-    //    task.CurrentAddress = input.Position;
-    //    task.TargetAddress = toAddress;
-    //    task.NextAddress = toAddress;
-    //    task.TaskState = taskState;
-
-    //    // 寮�濮嬩簨鍔�
-    //    _unitOfWorkManage.BeginTran();
-    //    // 瀹氫箟鍙橀噺
-    //    bool isUpdateLo = true;
-    //    bool isUpdateChange = true;
-
-    //    // 灏濊瘯鏇存柊浠诲姟
-    //    bool isResult = await BaseDal.UpdateDataAsync(task);
-    //    bool isTaskDetail = await _taskExecuteDetailRepository.AddDetailAsync(task, false, TaskDescription.GetTaskUpdateDescription(task.PalletCode, original, input.Position, TaskInStatusEnum.Line_InFinish.GetIntegralRuleTypeEnumDesc()));
-
-    //    // 鍒涘缓LocationChangeRecordDto瀵硅薄
-    //    LocationChangeRecordDto changeRecordDto = new LocationChangeRecordDto()
-    //    {
-    //        // 璁剧疆鍙橀噺
-    //        AfterStatus = location.LocationStatus,
-    //        BeforeStatus = beforeStatus,
-    //        TaskNum = task.TaskNum.Value,
-    //        LocationId = location.Id,
-    //        LocationCode = location.LocationCode,
-    //        ChangeType = (int)StatusChangeTypeEnum.AutomaticStorage,
-    //    };
-    //    // 鏇存柊浣嶇疆鐘舵��
-    //    isUpdateChange = _locationStatusChangeRecordRepository.AddStatusChangeRecord(changeRecordDto);
-    //    isUpdateLo = await _locationRepository.UpdateDataAsync(location);
-
-    //    if (isResult && isUpdateLo && isTaskDetail)
-    //    {
-    //        // 鎻愪氦浜嬪姟
-    //        _unitOfWorkManage.CommitTran();
-    //        content.OK(data: task);
-    //    }
-    //    else
-    //    {
-    //        // 鍥炴粴浜嬪姟
-    //        _unitOfWorkManage.RollbackTran();
-    //        content.Error("鏇存柊浠诲姟澶辫触");
-    //    }
-    //    return content;
-    //}
-
     // 鏇存柊浠诲姟璐т綅
 
     private async Task<WebResponseContent> UpdateExistingTask(RequestTaskDto input, Dt_Task task)
@@ -1280,33 +1263,46 @@
             var content = new WebResponseContent();
 
             // 鑾峰彇鐩爣鍦板潃鍜屾洿鏂颁换鍔$姸鎬�
-            var location = await GetLocationDistributeAsync(task.Roadway);
-            if (location == null)
+            if (task.TaskType == (int)TaskInboundTypeEnum.InNG)
             {
-                return content.Error("鏃犳硶鑾峰彇璐т綅淇℃伅");
+                // TODO 鏍规嵁宸烽亾鏌ユ壘瀵瑰簲NG鍙o紝鐜板湪榛樿鍘婚潤缃爢鍨涙満鐨勫紓甯稿彛璐т綅鍙�
+                task.CurrentAddress = input.Position;
+                task.TargetAddress = "002-021-000";
+                task.NextAddress = "002-021-000";
+                task.TaskState = (int)TaskInStatusEnum.Line_InFinish;
+                bool isResult = await BaseDal.UpdateDataAsync(task);
+                return content.OK(data: task);
+            }
+            else
+            {
+                var location = await GetLocationDistributeAsync(task.Roadway);
+                if (location == null)
+                {
+                    return content.Error("鏃犳硶鑾峰彇璐т綅淇℃伅");
+                }
+
+                string toAddress = location.LocationCode;
+                int taskState = (int)TaskInStatusEnum.Line_InFinish;
+                int beforeStatus = location.LocationStatus;
+                // 鏇存柊璐т綅淇℃伅
+                location.LocationStatus = (int)LocationEnum.Lock;
+
+                // 鏇存柊浠诲姟淇℃伅
+                MapTaskProperties(task, input, toAddress, taskState);
+
+                // 寮�濮嬩簨鍔�
+                var isResult = await UpdateTaskAsync(task, location, beforeStatus);
+                if (!isResult)
+                {
+                    _unitOfWorkManage.RollbackTran();
+                    return content.Error("鏇存柊浠诲姟澶辫触");
+                }
+
+                // 鎻愪氦浜嬪姟
+                _unitOfWorkManage.CommitTran();
+                return content.OK(data: task);
             }
 
-            string toAddress = location.LocationCode;
-            int taskState = (int)TaskInStatusEnum.Line_InFinish;
-            int beforeStatus = location.LocationStatus;
-
-            // 鏇存柊璐т綅淇℃伅
-            location.LocationStatus = (int)LocationEnum.Lock;
-
-            // 鏇存柊浠诲姟淇℃伅
-            MapTaskProperties(task, input, toAddress, taskState);
-
-            // 寮�濮嬩簨鍔�
-            var isResult = await UpdateTaskAsync(task, location, beforeStatus);
-            if (!isResult)
-            {
-                _unitOfWorkManage.RollbackTran();
-                return content.Error("鏇存柊浠诲姟澶辫触");
-            }
-
-            // 鎻愪氦浜嬪姟
-            _unitOfWorkManage.CommitTran();
-            return content.OK(data: task);
         }
         catch (Exception ex)
         {
@@ -1360,7 +1356,11 @@
 
         // 鑾峰彇鐩爣鍦板潃
         //string ToAddress = await GetRoadWayAsync(process);
-        string ToAddress = await GetRoadWayAsync(input, process);
+        string ToAddress = string.Empty;
+        if (flag != 2)
+            ToAddress = await GetRoadWayAsync(input, process);
+        else
+            ToAddress = process[0];
 
         // 鍒涘缓鏂颁换鍔″疄渚�
         var task = new Dt_Task
@@ -1376,7 +1376,7 @@
             PalletCode = input.PalletCode,
             SourceAddress = input.Position,
             TaskState = (int)TaskInStatusEnum.InNew,
-            TaskType = flag == 0 ? (int)TaskInboundTypeEnum.Inbound : (int)TaskInboundTypeEnum.InTray,
+            TaskType = flag == 0 ? (int)TaskInboundTypeEnum.Inbound : flag == 1 ? (int)TaskInboundTypeEnum.InTray : (int)TaskInboundTypeEnum.InNG,
             TaskNum = await BaseDal.GetTaskNo(),
             Creater = "Systeam"
         };
@@ -1398,7 +1398,7 @@
                     PalletCode = task.PalletCode,
                     RoadWay = task.Roadway,
                     SourceAddress = task.SourceAddress,
-                    TargetAddress = task.Roadway,
+                    TargetAddress = task.TargetAddress,
                     TaskState = task.TaskState.Value,
                     Id = 0,
                     TaskType = task.TaskType,

--
Gitblit v1.9.3