From 8ae1a147aefadbb255edde088e7c12535c5f02d4 Mon Sep 17 00:00:00 2001
From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com>
Date: 星期三, 08 十月 2025 20:35:51 +0800
Subject: [PATCH] 完善输送线和堆垛机任务处理逻辑在CommonConveyorLine_NewCW.cs`中添加版本注释和设备属性定义,增强设备连接状态检查与命令发送逻辑。 修改 CommonConveyorLine_GWJob.cs`的任务查询逻辑,确保在特定条件下不下发新任务。在CommonConveyorLine_NewCWJob.cs中实现请求入库和出库的处理逻辑,确保任务状态更新。在 RequestInbound.cs中添加出库任务和新任务的处理逻辑,增强异常处理。 在CommonStackerCrane_NewCWJob.cs中实现堆垛机任务完成事件的处理,确保状态更新和前端通知。新增设备型号修改相关常量和 DTO 类,更新服务接口和实现逻辑,确保设备型号修改请求的正确处理。修改 Dt_TaskService.cs中的任务处理逻辑,确保出库任务的库存判断和状态更新。

---
 Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs |  160 ++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 108 insertions(+), 52 deletions(-)

diff --git a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs
index c0fedb2..7323b07 100644
--- a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs
+++ b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs
@@ -1,10 +1,13 @@
 锘縰sing Mapster;
 using Masuit.Tools;
+using SixLabors.Fonts.Tables.AdvancedTypographic;
 using SqlSugar;
 using WIDESEA_Common.CustomModels;
 using WIDESEA_Core.Const;
+using WIDESEA_DTO;
 using WIDESEA_DTO.MOM;
 using WIDESEA_DTO.WMS;
+using WIDESEA_Model.Models;
 using WIDESEAWCS_Model.Models;
 using WIDESEAWCS_QuartzJob.Models;
 
@@ -184,28 +187,33 @@
 
             if (!result.Success)
             {
-                //var taskNG = new Dt_Task
-                //{
-                //    CurrentAddress = input.Position,
-                //    Grade = 1,
-                //    Roadway = input.Roadways,
-                //    TargetAddress = stationManager.stationNGLocation,
-                //    Dispatchertime = DateTime.Now,
-                //    MaterialNo = "",
-                //    NextAddress = stationManager.stationNGChildCode,
-                //    OrderNo = null,
-                //    PalletCode = input.PalletCode,
-                //    SourceAddress = stationManager.stationLocation,
-                //    TaskState = (int)TaskInStatusEnum.Line_InFinish,
-                //    TaskType = (int)TaskOutboundTypeEnum.InToOut,
-                //    TaskNum = await BaseDal.GetTaskNo(),
-                //    Creater = "System",
-                //    ProductionLine = result.ProductionLine,
-                //    ProcessCode = result.ProcessCode,
-                //};
-                //return taskNG;
-                Console.WriteLine($"{result.MOMMessage}");
-                return null;
+                List<string> strings = new List<string>() { "2036","2038","2084","2086"};
+                if (input.Position.Contains(strings))
+                {
+                    Console.WriteLine($"{result.MOMMessage}");
+                    return null;
+                }
+                var taskNG = new Dt_Task
+                {
+                    CurrentAddress = input.Position,
+                    Grade = 1,
+                    Roadway = input.Roadways,
+                    TargetAddress = stationManager.stationNGLocation,
+                    Dispatchertime = DateTime.Now,
+                    MaterialNo = "",
+                    NextAddress = stationManager.stationNGChildCode,
+                    OrderNo = null,
+                    PalletCode = input.PalletCode,
+                    SourceAddress = stationManager.stationLocation,
+                    TaskState = (int)TaskInStatusEnum.Line_InFinish,
+                    TaskType = (int)TaskOutboundTypeEnum.InToOut,
+                    TaskNum = await BaseDal.GetTaskNo(),
+                    Creater = "System",
+                    ProductionLine = result.ProductionLine,
+                    ProcessCode = result.ProcessCode,
+                };
+                return taskNG;
+               
             }
 
             if (result.SerialNos.Count <= 0)
@@ -606,11 +614,17 @@
             taskHty.Creater = App.User.UserName != null ? App.User.UserName : "System";
 
             var location = _locationRepository.QueryFirst(x => x.LocationCode == task.SourceAddress && x.RoadwayNo == task.Roadway);
-            int lastStatus = location.LocationStatus;
-            location.LocationStatus = (int)LocationEnum.Free;
+
+            if(location != null)
+            {
+                int lastStatus = location.LocationStatus;
+                location.LocationStatus = (int)LocationEnum.Free; 
+                _locationStatusChangeRecordRepository.AddLocationStatusChangeRecord(location, lastStatus, (int)StatusChangeTypeEnum.AutomaticDelivery, task.TaskNum);
+            }
+
             task.TaskState = (int)TaskOutStatusEnum.OutFinish;
 
-            _locationStatusChangeRecordRepository.AddLocationStatusChangeRecord(location, lastStatus, (int)StatusChangeTypeEnum.AutomaticDelivery, task.TaskNum);
+            
             // 浜嬪姟澶勭悊
             await _unitOfWorkManage.UseTranAsync(async () =>
             {
@@ -620,8 +634,10 @@
                     await DeleteStockInfoDetailsAsync(stock.StockInfoDetails);
                     await AddStockInfoHtyAsync(stockInfo_Hty);
                 }
-
-                await UpdateLocationAsync(location);
+                if (location != null)
+                {
+                    await UpdateLocationAsync(location);
+                }
                 await DeleteTaskAsync(task.TaskId);
                 await AddTaskHtyAsync(taskHty);
             });
@@ -1066,20 +1082,36 @@
             Dt_StationManager station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == json.Position && x.stationType == 12 && x.stationArea == "Call");
             if (station == null) { throw new Exception($"鏈壘鍒板寘瑁呯珯鍙颁俊鎭紝璇锋鏌ヤ紶鍏ュ弬鏁皗json.Position}"); }
 
+            EqptRunDto basic = new EqptRunDto()
+            {
+                EquipmentModel = "0",
+                Password ="",
+                EmployeeNo = "82412152",
+                SessionId = Guid.NewGuid().ToString(),
+                RequestTime = TimeZoneInfo.ConvertTimeToUtc(DateTime.Now).ToString("yyyy-MM-ddTHH:mm:ss.fffZ"),
+                Software = "鍖呰涓婃枡",
+                EquipmentCode = station.stationEquipMOM,
+            };
+            var result = _agingInOrOutInputService.Change(basic).Result;
+            var respone = JsonConvert.DeserializeObject<EqptRunDTO>(result.Data.ToString());
+            if(!result.Status || !respone.Success)
+            {
+                throw new Exception($"{station.productLine}鑾峰彇MOM鎹㈠瀷鏁版嵁寮傚父,寮傚父淇℃伅{respone.MOMMessage}");
+            }
+
             var deviceCode = SqlSugarHelper.DbWCS.Queryable<Dt_DeviceInfo>()
                 .Where(x => x.DeviceStatus == "1")
                 .Where(x => x.DeviceCode.Contains("CWSC")) // 杩囨护鏉′欢
                 .ToList().Select(x => x.DeviceCode).ToList();
 
-            //var outBoundMateriel = AppSettings.app<OutBoundMateriel>("OutBoundMateriel");
-            var outBoundMateriel = _dt_ChangeoversRepository.QueryData(x => x.Status == "1").ToList();
-            List<string>? materielCodes = outBoundMateriel.Count != 0
-                ? outBoundMateriel.Where(x => x.ProductionLine == station.productLine && x.ProcessCode == "CWSC3")
-                                  .Select(x => x.MaterielCode)
-                                  .ToList()
-                : null;
+            //var outBoundMateriel = _dt_ChangeoversRepository.QueryData(x => x.Status == "1").ToList();
+            //List<string>? materielCodes = outBoundMateriel.Count != 0
+            //    ? outBoundMateriel.Where(x => x.ProductionLine == station.productLine && x.ProcessCode == "CWSC3")
+            //                      .Select(x => x.MaterielCode)
+            //                      .ToList()
+            //    : null;
 
-            #region
+            #region Redis缂撳瓨鏌ヨ浠g爜
             //// 浠庣紦瀛樹腑鑾峰彇搴撳瓨淇℃伅
             //IDictionary<string, DtStockInfo>? stockInfos = _simpleCacheService.HashGetAll<DtStockInfo>(WIDESEA_Cache.CacheConst.Cache_DtStockInfo);
             //List<DtStockInfo> stockInfoList = stockInfos.Values.ToList();
@@ -1099,22 +1131,45 @@
             //    .WhereIF(!materielCodes.IsNullOrEmpty(), x => x.StockInfoDetails != null && x.StockInfoDetails.Any(y => materielCodes.Contains(y.MaterielCode)))
             //    .FirstOrDefault();
             // 淇敼鍚庣殑鏌ヨ浠g爜
-            #endregion
-            var stockInfo = await _stockInfoRepository.Db.Queryable<DtStockInfo>()
-                                .Includes(x => x.LocationInfo)
-                                .Includes(x => x.StockInfoDetails)
-                                .Where(x => x.ProductionLine == station.productLine)
-                                .Where(x => x.AreaCode == "CWSC3" && x.IsFull == true)
-                                // 澧炲姞瀵� LocationInfo 鐨勭┖鍊兼鏌�
-                                .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock)
-                                // 澧炲姞瀵� LocationInfo 鐨勭┖鍊兼鏌�
-                                .WhereIF(!deviceCode.IsNullOrEmpty(), x => deviceCode.Contains(x.LocationInfo.RoadwayNo))
-                                .WhereIF(!materielCodes.IsNullOrEmpty(), x => x.StockInfoDetails.Any(y => materielCodes.Contains(y.MaterielCode)))
-                                .OrderBy(x => x.OutboundTime)
-                                .FirstAsync();
 
+            //var stockInfo = await _stockInfoRepository.Db.Queryable<DtStockInfo>()
+            //                    .Includes(x => x.LocationInfo)
+            //                    .Includes(x => x.StockInfoDetails)
+            //                    .Where(x => x.ProductionLine == station.productLine)
+            //                    .Where(x => x.AreaCode == "CWSC3" && x.IsFull == true)
+            //                    // 澧炲姞瀵� LocationInfo 鐨勭┖鍊兼鏌�
+            //                    .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock)
+            //                    // 澧炲姞瀵� LocationInfo 鐨勭┖鍊兼鏌�
+            //                    .WhereIF(!deviceCode.IsNullOrEmpty(), x => deviceCode.Contains(x.LocationInfo.RoadwayNo))
+            //                    .WhereIF(!materielCodes.IsNullOrEmpty(), x => x.StockInfoDetails.Any(y => materielCodes.Contains(y.MaterielCode)))
+            //                    .OrderBy(x => x.OutboundTime)
+            //                    .FirstAsync();
+            #endregion 
 
-            if (stockInfo == null) throw new Exception($"搴撳唴{station.productLine}鏃犳弧瓒虫潯浠剁殑搴撳瓨鍙嚭搴�");
+            DtStockInfo stockInfo = null;
+            var stockInfoList = await _stockInfoRepository.Db.Queryable<DtStockInfo>()
+                .Includes(x => x.LocationInfo)
+                .Where(x => x.ProductionLine == station.productLine
+                        && x.AreaCode == "CWSC3"
+                        && x.IsFull == true
+                        && x.LocationInfo.LocationStatus == (int)LocationEnum.InStock)
+                .WhereIF(!deviceCode.IsNullOrEmpty(), x => deviceCode.Contains(x.LocationInfo.RoadwayNo))
+                .OrderBy(x => x.OutboundTime)
+                .ToListAsync();
+
+            foreach (var stock in stockInfoList)
+            {
+                var hasMatchingDetail = await _stockInfoRepository.Db.Queryable<DtStockInfoDetail>()
+                    .Where(d => d.StockId == stock.Id && respone.PreProductNo.Contains(d.MaterielCode))
+                    .AnyAsync();
+
+                if (hasMatchingDetail)
+                {
+                    stockInfo = stock;
+                    break;
+                }
+            }
+            if (stockInfo == null) throw new Exception($"CWSC3搴撳唴銆恵station.productLine}銆�,銆愮墿鏂欑紪鐮亄respone.PreProductNo}銆戞棤婊¤冻鏉′欢鐨勫簱瀛樺彲鍑哄簱");
 
             DtLocationInfo locationInfo = _locationRepository.QueryFirst(x => x.AreaId == 5 && x.LocationCode == stockInfo.LocationCode);
 
@@ -1135,14 +1190,12 @@
                 SourceAddress = stockInfo.LocationCode,
                 TaskState = (int)TaskOutStatusEnum.OutNew,
                 TaskType = (int)TaskOutboundTypeEnum.Outbound,
-                TaskNum = await BaseDal.GetTaskNo(),
+                TaskNum = BaseDal.GetTaskNo().Result,
                 Creater = "System",
                 ProductionLine = stockInfo.ProductionLine,
                 ProcessCode = stockInfo.ProcessCode,
             };
-
             WMSTaskDTO taskDTO = CreateTaskDTO(task);
-
             int lastStatus = locationInfo.LocationStatus;
 
             BaseDal.AddData(task);
@@ -1158,6 +1211,9 @@
         catch (Exception ex)
         {
             Console.WriteLine($"CW3鑷冲寘瑁呭嚭搴撳紓甯�:{ex.ToString()}");
+
+            LogFactory.GetLog($"鍖呰璇锋眰鍑哄簱浠诲姟").Info(true, $"銆愬紓甯搞�戯細銆恵ex.Message}銆憑Environment.NewLine}銆恵ex.StackTrace}銆憑Environment.NewLine}{Environment.NewLine}");
+
             return content.Error($"澶辫触锛歿ex.Message}");
         }
     }

--
Gitblit v1.9.3