From e2655143a06ee42eec06a97b045f33a09fbb3a3f Mon Sep 17 00:00:00 2001
From: 肖洋 <cathay_xy@163.com>
Date: 星期二, 24 十二月 2024 17:40:18 +0800
Subject: [PATCH] 合并更改

---
 Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs |  265 +++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 228 insertions(+), 37 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 ffd4a8a..b19f3b0 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
@@ -1,6 +1,8 @@
 锘縰sing Mapster;
 using Masuit.Tools;
+using SixLabors.Fonts.Tables.AdvancedTypographic;
 using System.Text.RegularExpressions;
+using System.Threading.Tasks;
 using WIDESEA_Core.Const;
 using WIDESEA_DTO.MOM;
 using WIDESEA_DTO.WMS;
@@ -78,7 +80,7 @@
                 //var process = await SqlSugarHelper.Db.Queryable<Dt_EquipmentProcess>()
                 //    .FirstAsync(x => x.EquipmentName == task.Roadway);
                 //var info = JsonConvert.DeserializeObject<ResponseEqptRunDto>(process.ProcessValue);
-                if (!task.Roadway.Contains("FR"))  //闈炲垎瀹瑰簱鍖哄潎涓婃姤MOM鍑哄叆绔�
+                if (!task.Roadway.Contains("FR") && stock.ProcessCode != "OCVB")  //闈炲垎瀹瑰簱鍖轰笌褰撳墠宸ュ簭鏄疧CVB鍧囦笂鎶OM鍑哄叆绔�
                 {
                     var agingOutputDto = MapToAgingOutputDto(stock);
                     content = await _agingInOrOutInputService.GetOCVOutputAsync(agingOutputDto);
@@ -285,7 +287,7 @@
         WebResponseContent content = new WebResponseContent();
         try
         {
-            if (task.TaskType == (int)TaskInboundTypeEnum.InNG)
+            if (task.TaskType == (int)TaskInboundTypeEnum.InNG || task.TaskType == (int)TaskInboundTypeEnum.InQuality)
             {
                 task.TaskState = (int)TaskInStatusEnum.SC_InFinish;
                 // 鍒涘缓鍘嗗彶浠诲姟瀹炰緥妯″瀷
@@ -418,11 +420,21 @@
         }
         else
         {
-            var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.SourceAddress);
-            if (station.stationPLC == "1017")
-                area = _areaInfoRepository.QueryFirst(x => x.AreaID == Convert.ToInt32(station.stationNGLocation));
+            //var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.SourceAddress);
+            //if (station.stationPLC == "1017")
+            //    area = _areaInfoRepository.QueryFirst(x => x.AreaID == Convert.ToInt32(station.stationNGLocation));
+            //else
+            //    area = _areaInfoRepository.QueryFirst(x => x.AreaID == loation.AreaId);
+            //if (area == null)
+            //    throw new Exception("鏈壘鍒板搴斿尯鍩熶俊鎭�");
+
+            if (boxing.ProcessCode == "OCV1")
+                area = _areaInfoRepository.QueryFirst(x => x.AreaID == 6);
+            else if (boxing.ProcessCode == "OCVB")
+                area = _areaInfoRepository.QueryFirst(x => x.AreaID == 7);
             else
                 area = _areaInfoRepository.QueryFirst(x => x.AreaID == loation.AreaId);
+
             if (area == null)
                 throw new Exception("鏈壘鍒板搴斿尯鍩熶俊鎭�");
         }
@@ -444,31 +456,46 @@
             Remark = boxing.BoxingInfoDetails.Count().ToString(),
         };
 
-        // 澶勭悊璇锋眰鍙傛暟
-        AgingInputDto agingInputDto = new AgingInputDto()
+        if (boxing.ProcessCode != "OCVB" && !task.Roadway.Contains("FR"))
         {
-            SerialNos = boxing.BoxingInfoDetails
-                .Select(item => new SerialNoInDto { SerialNo = item.SerialNumber, PositionNo = item.OrderNo })
-                .ToList(),
-            TrayBarcode = task.PalletCode,
-            OpFlag = 1,
-            EquipmentCode = area.Spare2,
-            Software = area.Spare3
-        };
+            // 澶勭悊璇锋眰鍙傛暟
+            AgingInputDto agingInputDto = new AgingInputDto()
+            {
+                SerialNos = boxing.BoxingInfoDetails
+                    .Select(item => new SerialNoInDto { SerialNo = item.SerialNumber, PositionNo = item.OrderNo })
+                    .ToList(),
+                TrayBarcode = task.PalletCode,
+                OpFlag = 1,
+                EquipmentCode = area.Spare2,
+                Software = area.Spare3
+            };
 
-        var result = _agingInOrOutInputService.GetOCVInputAsync(agingInputDto).Result;
-        var respone = JsonConvert.DeserializeObject<ResponeAgingInputDto>(result.Data.ToString());
-        if (respone.ProductionLine == null || respone.ParameterInfos == null || respone.SpecialParameterDuration.IsNullOrEmpty())
-        {
-            throw new Exception("MOM鏁版嵁杩斿洖閿欒");
+            var result = _agingInOrOutInputService.GetOCVInputAsync(agingInputDto).Result;
+            var respone = JsonConvert.DeserializeObject<ResponeAgingInputDto>(result.Data.ToString());
+
+            bool isFull = false;
+            if (!task.Roadway.Contains("FR"))
+            {
+                isFull = respone.SpecialParameterDuration.IsNullOrEmpty();
+            }
+            if (respone.ProductionLine == null || respone.ParameterInfos == null)
+            {
+                throw new Exception("MOM鏁版嵁杩斿洖閿欒");
+            }
+            stock.LinedProcessFeedbackTime = respone.LinedProcessFeedbackTime;
+            stock.SpecialParameterDuration = respone.SpecialParameterDuration;
+            //2024骞�11鏈�16鏃ワ細鏂板瀛楁璁$畻搴斿嚭搴撴椂闂�
+            stock.OutboundTime = Convert.ToDateTime(respone.LinedProcessFeedbackTime == null ? DateTime.Now : respone.LinedProcessFeedbackTime).AddHours(Convert.ToDouble(respone.SpecialParameterDuration));
+            stock.ProductionLine = respone.ProductionLine;
+            stock.ParameterInfos = respone.ParameterInfos.ToJsonString();
+            stock.StockStatus = 1;
         }
-        stock.LinedProcessFeedbackTime = respone.LinedProcessFeedbackTime;
-        stock.SpecialParameterDuration = respone.SpecialParameterDuration;
-        //2024骞�11鏈�16鏃ワ細鏂板瀛楁璁$畻搴斿嚭搴撴椂闂�
-        stock.OutboundTime = Convert.ToDateTime(respone.LinedProcessFeedbackTime == null ? DateTime.Now : respone.LinedProcessFeedbackTime).AddHours(Convert.ToDouble(respone.SpecialParameterDuration));
-        stock.ProductionLine = respone.ProductionLine;
-        stock.ParameterInfos = respone.ParameterInfos.ToJsonString();
-        stock.StockStatus = 1;
+        else
+        {
+            stock.OutboundTime = DateTime.Now;
+            stock.StockStatus = 1;
+            stock.ProductionLine = boxing.ProductionLine;
+        }
 
         // 璁板綍鏃ュ織
         LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "鍏ュ簱浠诲姟瀹屾垚", $"璐т綅鍦板潃锛歿task.TargetAddress},淇敼鍚庤揣浣嶆暟鎹細{locationInf}");
@@ -514,6 +541,7 @@
             case (int)TaskInboundTypeEnum.Inbound:
             case (int)TaskInboundTypeEnum.InTray:
             case (int)TaskInboundTypeEnum.InNG:
+            case (int)TaskInboundTypeEnum.InQuality:
                 LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "鍏ュ簱浠诲姟", "");
                 return await CompleteInboundTaskAsync(task);
 
@@ -956,6 +984,7 @@
             PalletCode = palletCode,
             IsFull = true,
             ProcessCode = result.ProcessCode,
+            ProductionLine = result.ProductionLine,
             BoxingInfoDetails = result.SerialNos.Select(serialNoObj => new DtBoxingInfoDetail
             {
                 SerialNumber = serialNoObj.SerialNo,
@@ -993,15 +1022,15 @@
     /// <param name="areaCode">鍖哄煙缂栫爜</param>
     /// <param name="roadways">宸烽亾缂栫爜闆嗗悎</param>
     /// <returns>杩斿洖缁撴灉闆�</returns>
-    public async Task<WebResponseContent> RequestTrayOutTaskAsync(string position, int tag, string areaCode, string productionLine)
+    public async Task<WebResponseContent> RequestTrayOutTaskAsync(string position, int tag, string areaCode, List<string> areaCodes, string productionLine)
     {
         WebResponseContent content = new WebResponseContent();
         try
         {
             // 鏍规嵁鎵樼洏绫诲瀷鏌ヨ搴撳瓨淇℃伅
             DtStockInfo stockInfo = tag == (int)TaskOutboundTypeEnum.Outbound
-                ? QueryStockInfoForRealTrayAsync(areaCode, productionLine).Result
-                : QueryStockInfoForEmptyTrayAsync(areaCode).Result;
+                ? areaCode != "CWSC1" ? await QueryStockInfoForRealTrayAsync(areaCode, areaCodes, productionLine) : await QueryStockInfoForRealTrayCWAsync(areaCodes, productionLine)
+                : await QueryStockInfoForEmptyTrayAsync(areaCode);
 
             if (stockInfo == null)
             {
@@ -1048,7 +1077,7 @@
     /// <summary>
     /// 鏌ヨ瀹炵洏搴撳瓨淇℃伅
     /// </summary>
-    private async Task<DtStockInfo> QueryStockInfoForRealTrayAsync(string areaCode, string productionLine)
+    private async Task<DtStockInfo> QueryStockInfoForRealTrayAsync(string areaCode, List<string> devices, string productionLine)
     {
         var area = await _areaInfoRepository.QueryFirstAsync(x => x.AreaCode == areaCode);
 
@@ -1056,6 +1085,29 @@
             .Includes(x => x.LocationInfo) // 棰勫姞杞絃ocationInfo
             .Includes(x => x.StockInfoDetails) // 棰勫姞杞絊tockInfoDetails
             .Where(x => x.AreaCode == areaCode && x.OutboundTime < DateTime.Now && x.IsFull == true) // 杩囨护鏉′欢
+            .WhereIF(!productionLine.IsNullOrEmpty(), x => x.ProductionLine == productionLine)
+            .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && x.LocationInfo.AreaId == area.AreaID) // 杩囨护鏉′欢
+            .WhereIF(!devices.IsNullOrEmpty(), x => devices.Contains(x.LocationInfo.RoadwayNo))
+            .OrderBy(x => x.OutboundTime) // 鎺掑簭
+            .FirstAsync(); // 鑾峰彇绗竴涓厓绱�
+
+        //var firstOrDefault = result.FirstOrDefault(x => roadways.Contains(x.LocationInfo.RoadwayNo)); // 鏌ユ壘绗竴涓尮閰嶇殑鍏冪礌
+        //var firstOrDefault = result[0]; // 鏌ユ壘绗竴涓尮閰嶇殑鍏冪礌
+        //return firstOrDefault;
+        return result;
+    }
+
+    /// <summary>
+    /// 鏌ヨ甯告俯瀹炵洏搴撳瓨淇℃伅
+    /// </summary>
+    private async Task<DtStockInfo> QueryStockInfoForRealTrayCWAsync(List<string> areaCodes, string productionLine)
+    {
+        var area = await _areaInfoRepository.QueryFirstAsync(x => x.AreaCode == "CWSC1");
+
+        var result = await _stockInfoRepository.Db.Queryable<DtStockInfo>()
+            .Includes(x => x.LocationInfo) // 棰勫姞杞絃ocationInfo
+            .Includes(x => x.StockInfoDetails) // 棰勫姞杞絊tockInfoDetails
+            .Where(x => areaCodes.Contains(x.AreaCode) && x.OutboundTime < DateTime.Now && x.IsFull == true) // 杩囨护鏉′欢
             .WhereIF(!productionLine.IsNullOrEmpty(), x => x.ProductionLine == productionLine)
             .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && x.LocationInfo.AreaId == area.AreaID) // 杩囨护鏉′欢
             .OrderBy(x => x.OutboundTime) // 鎺掑簭
@@ -1095,7 +1147,7 @@
     {
         return new Dt_Task
         {
-            Grade = 1,
+            Grade = tag == 104 ? 2 : 1,
             Roadway = stockInfo.LocationInfo.RoadwayNo,
             TargetAddress = position,
             Dispatchertime = DateTime.Now,
@@ -1122,7 +1174,7 @@
         return new WMSTaskDTO
         {
             TaskNum = task.TaskNum.Value,
-            Grade = 1,
+            Grade = task.Grade.Value,
             PalletCode = task.PalletCode,
             RoadWay = task.Roadway,
             SourceAddress = task.SourceAddress,
@@ -1220,7 +1272,7 @@
             {
                 if (stockInfo.LocationInfo.RoadwayNo == "JZSC1")
                 {
-                    task = CreateTask(stockInfo, "1359-4", taskType);
+                    task = CreateTask(stockInfo, "002-021-001", taskType);
                 }
             }
             //var taskId = await BaseDal.AddDataAsync(task);
@@ -1275,6 +1327,109 @@
 
     #endregion 鎸囧畾浠诲姟鍑哄簱
 
+    #region 闈欑疆寮傚父鍙e叆搴�
+
+    public async Task<WebResponseContent> CreateAndSendInboundTask(string palletCode, string position)
+    {
+        WebResponseContent content = new WebResponseContent();
+        try
+        {
+            // 鏌ヨ搴撳瓨淇℃伅
+            var stockInfo = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == palletCode);
+            if (stockInfo == null)
+            {
+                var taskOld = BaseDal.QueryFirst(x => x.PalletCode == palletCode);
+                if (!taskOld.IsNullOrEmpty())
+                {// 鍒涘缓WMS浠诲姟
+                    WMSTaskDTO taskDTO = new WMSTaskDTO()
+                    {
+                        TaskNum = taskOld.TaskNum.Value,
+                        Grade = 1,
+                        PalletCode = taskOld.PalletCode,
+                        RoadWay = taskOld.Roadway,
+                        SourceAddress = taskOld.CurrentAddress,
+                        TargetAddress = taskOld.TargetAddress,
+                        TaskState = taskOld.TaskState.Value,
+                        Id = 0,
+                        TaskType = taskOld.TaskType,
+                    };
+                    return content.OK(data: taskDTO);
+                }
+                var area = _areaInfoRepository.QueryFirst(x => x.AreaID == 2);
+                var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == position);
+                TrayCellsStatusDto trayCells = CreateTrayCellsStatusDto(area, palletCode);
+                content = await GetTrayCellStatusAsync(trayCells);
+                if (!content.Status) return content;
+
+                ConsoleHelper.WriteErrorLine(content.ToJsonString());
+                var result = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(content.Data.ToString());
+                if (result.SerialNos.Count > 0)
+                {
+                    var location = await GetLocationDistributeAsync(station.Roadway);
+
+                    ConsoleHelper.WriteErrorLine(location.ToJsonString());
+                    // 鍒涘缓鏂颁换鍔″疄渚�
+                    var task = new Dt_Task
+                    {
+                        CurrentAddress = station.stationLocation,
+                        Grade = 1,
+                        Roadway = station.Roadway,
+                        TargetAddress = location.LocationCode,
+                        Dispatchertime = DateTime.Now,
+                        MaterialNo = "",
+                        NextAddress = location.LocationCode,
+                        OrderNo = null,
+                        PalletCode = palletCode,
+                        SourceAddress = position,
+                        TaskState = (int)TaskInStatusEnum.Line_InFinish,
+                        TaskType = (int)TaskInboundTypeEnum.Inbound,
+                        TaskNum = await BaseDal.GetTaskNo(),
+                        Creater = "Systeam"
+                    };
+
+                    // 鍒涘缓WMS浠诲姟
+                    WMSTaskDTO taskDTO = new WMSTaskDTO()
+                    {
+                        TaskNum = task.TaskNum.Value,
+                        Grade = 1,
+                        PalletCode = task.PalletCode,
+                        RoadWay = task.Roadway,
+                        SourceAddress = task.SourceAddress,
+                        TargetAddress = task.TargetAddress,
+                        TaskState = task.TaskState.Value,
+                        Id = 0,
+                        TaskType = task.TaskType,
+                    };
+
+                    await _unitOfWorkManage.UseTranAsync(async () =>
+                    {
+                        // 娣诲姞浠诲姟鍒版暟鎹簱
+                        await BaseDal.AddDataAsync(task);
+                        // 鏇存柊搴撳瓨浣嶇疆鐘舵�佷负涓嶅彲鐢�
+                        location.LocationStatus = (int)LocationEnum.InStockDisable;
+                        await _locationRepository.UpdateDataAsync(location);
+                    });
+
+                    content.OK(data: taskDTO);
+                }
+                else
+                    content.Error(result.MOMMessage);
+            }
+            else
+            {
+                // TODO璐ㄦ鍥炲簱
+                var area = _areaInfoRepository.QueryFirst(x => x.AreaID == 2);
+            }
+        }
+        catch (Exception ex)
+        {
+            content.Error(ex.Message);
+        }
+        return content;
+    }
+
+    #endregion 闈欑疆寮傚父鍙e叆搴�
+
     #endregion 澶栭儴鎺ュ彛鏂规硶
 
     #region 鍐呴儴璋冪敤鏂规硶
@@ -1318,7 +1473,35 @@
     {
         return await BaseDal.Delete(ids);
     }
+    public override WebResponseContent DeleteData(object[] key)
+    {
+        WebResponseContent content = new WebResponseContent();
+        // 鍒涘缓鍘嗗彶浠诲姟瀹炰緥妯″瀷
+        try
+        {
+            Dt_Task task = BaseDal.QueryFirst(x => x.TaskId == Convert.ToInt32(key[0]));
+            if (task == null)
+            {
+                return content.Error("鏈壘鍒颁换鍔′俊鎭�!");
+            }
+            var taskHtyNG = CreateHistoricalTask(task, true);
 
+            // 鎵ц鏁版嵁搴撲簨鍔�
+
+            // 娣诲姞鍘嗗彶浠诲姟
+            var isTaskHtyAdd = _task_HtyRepository.AddData(taskHtyNG) > 0;
+
+            // 鍒犻櫎浠诲姟鏁版嵁
+            var isTaskDelete = BaseDal.Delete(task.TaskId);
+
+            return content.OK("鍒犻櫎鎴愬姛!");
+        }
+        catch (Exception ex)
+        {
+            return content.Error("鍒犻櫎浠诲姟寮傚父锛�" + ex.Message);
+        }
+
+    }
     /// <summary>
     /// 閫氳繃ID鑾峰彇浠诲姟
     /// </summary>
@@ -1428,7 +1611,7 @@
     /// </summary>
     /// <param name="task"></param>
     /// <returns></returns>
-    private Dt_Task_Hty CreateHistoricalTask(Dt_Task task)
+    private Dt_Task_Hty CreateHistoricalTask(Dt_Task task, bool isHand = false)
     {
         // 鏇存柊浠诲姟鐘舵��
         task.TaskState = TaskOutStatusEnum.OutFinish.ObjToInt();
@@ -1438,7 +1621,7 @@
         var taskHty = _mapper.Map<Dt_Task_Hty>(task);
         taskHty.FinishTime = DateTime.Now;
         taskHty.TaskId = 0;
-        taskHty.OperateType = (int)OperateTypeEnum.鑷姩瀹屾垚;
+        taskHty.OperateType = isHand ? (int)OperateTypeEnum.浜哄伐鍒犻櫎 : (int)OperateTypeEnum.鑷姩瀹屾垚;
         taskHty.SourceId = task.TaskId;
         taskHty.TaskState = TaskOutStatusEnum.OutFinish.ObjToInt();
         return taskHty;
@@ -1556,6 +1739,14 @@
             var content = new WebResponseContent();
 
             // 鑾峰彇鐩爣鍦板潃鍜屾洿鏂颁换鍔$姸鎬�
+
+
+            input.Position = Regex.Replace(input.Position, @"-(\d+)", "");
+            if (Convert.ToInt32(input.Position) > 1999)
+            {
+                input.Position = (Convert.ToInt32(input.Position) - 1000).ToString();
+            }
+
             if (task.TaskType == (int)TaskInboundTypeEnum.InNG)
             {
                 // TODO 鏍规嵁宸烽亾鏌ユ壘瀵瑰簲NG鍙o紝鐜板湪榛樿鍘婚潤缃爢鍨涙満鐨勫紓甯稿彛璐т綅鍙�
@@ -1568,7 +1759,7 @@
             }
             else if (task.TaskType == (int)TaskInboundTypeEnum.InQuality)
             {
-                var stockInfo = _stockInfoRepository.QueryFirst(x => x.PalletCode == input.PalletCode);
+                var stockInfo = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == input.PalletCode);
                 task.CurrentAddress = input.Position;
                 task.TargetAddress = stockInfo.LocationInfo.LocationCode;
                 task.NextAddress = stockInfo.LocationInfo.LocationCode;

--
Gitblit v1.9.3