From a95c4e748b01da8bea6ba0f8e6af9c281bc582d7 Mon Sep 17 00:00:00 2001 From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com> Date: 星期二, 29 七月 2025 09:22:13 +0800 Subject: [PATCH] 优化日志格式并增强库存查询逻辑在 CommonConveyorLineJob.cs和CommonConveyorLine_GWJob.cs文件中,修改了日志输出格式,添加了时间戳以提高可读性和可追溯性。部分代码中的ToJsonString()方法被替换为 Serialize()方法,以统一序列化方式。与此同时,在 Dt_TaskService.cs文件中增加了库存信息查询逻辑,以确保出库时能够正确处理库存条件,增强系统的健壮性。 --- Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs | 128 +++++++++++++++++++++++++++++++++++------- 1 files changed, 105 insertions(+), 23 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 19282f0..6bd38fe 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,9 +1,12 @@ -锘縰sing Masuit.Tools; +锘縰sing Mapster; +using Masuit.Tools; +using SixLabors.Fonts.Tables.AdvancedTypographic; using SqlSugar; using WIDESEA_Common.CustomModels; using WIDESEA_Core.Const; using WIDESEA_DTO.MOM; using WIDESEA_DTO.WMS; +using WIDESEA_Model.Models; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob.Models; @@ -183,6 +186,12 @@ if (!result.Success) { + 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, @@ -203,6 +212,7 @@ ProcessCode = result.ProcessCode, }; return taskNG; + } if (result.SerialNos.Count <= 0) @@ -586,17 +596,50 @@ #region 鐩存帴鍑哄簱浠诲姟瀹屾垚 - public async Task<WebResponseContent> CompleteInToOutTaskAsync(Dt_Task task) + public async Task<WebResponseContent> CompleteInToOutTaskAsync(Dt_Task task,DtStockInfo stock) { WebResponseContent content = new WebResponseContent(); try { - //娣诲姞鍘嗗彶 - var taskHty = CreateHistoricalTask(task); - // 娣诲姞鍘嗗彶浠诲姟 - var isTaskHtyAdd = await _task_HtyRepository.AddDataAsync(taskHty) > 0; - //鍒犻櫎浠诲姟 - BaseDal.DeleteData(task); + DtStockInfo_Hty stockInfo_Hty = null; + if (stock != null) + { + stockInfo_Hty = stock.Adapt<DtStockInfo_Hty>(); + stockInfo_Hty.ModifyDate = DateTime.Now; + } + var taskHty = task.Adapt<Dt_Task_Hty>(); + taskHty.FinishTime = DateTime.Now; + taskHty.OperateType = App.User.UserName != null ? (int)OperateTypeEnum.浜哄伐瀹屾垚 : (int)OperateTypeEnum.鑷姩瀹屾垚; + taskHty.Creater = App.User.UserName != null ? App.User.UserName : "System"; + + var location = _locationRepository.QueryFirst(x => x.LocationCode == task.SourceAddress && x.RoadwayNo == task.Roadway); + + 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; + + + // 浜嬪姟澶勭悊 + await _unitOfWorkManage.UseTranAsync(async () => + { + if (stockInfo_Hty != null) + { + await DeleteStockInfoAsync(stock.Id); + await DeleteStockInfoDetailsAsync(stock.StockInfoDetails); + await AddStockInfoHtyAsync(stockInfo_Hty); + } + if (location != null) + { + await UpdateLocationAsync(location); + } + await DeleteTaskAsync(task.TaskId); + await AddTaskHtyAsync(taskHty); + }); return content.OK(); } @@ -1035,6 +1078,7 @@ WebResponseContent content = new WebResponseContent(); try { + LogFactory.GetLog($"鍖呰璇锋眰鍑哄簱浠诲姟").Info(true, $"銆愯姹傚弬鏁般�戯細銆恵JsonConvert.SerializeObject(json)}銆憑Environment.NewLine}{Environment.NewLine}"); Dt_StationManager station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == json.Position && x.stationType == 12 && x.stationArea == "Call"); if (station == null) { throw new Exception($"鏈壘鍒板寘瑁呯珯鍙颁俊鎭紝璇锋鏌ヤ紶鍏ュ弬鏁皗json.Position}"); } @@ -1072,20 +1116,42 @@ // .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(); + 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 && materielCodes.Contains(d.MaterielCode)) + .AnyAsync(); + + if (hasMatchingDetail) + { + stockInfo = stock; + break; + } + } if (stockInfo == null) throw new Exception($"搴撳唴{station.productLine}鏃犳弧瓒虫潯浠剁殑搴撳瓨鍙嚭搴�"); DtLocationInfo locationInfo = _locationRepository.QueryFirst(x => x.AreaId == 5 && x.LocationCode == stockInfo.LocationCode); @@ -1107,14 +1173,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); @@ -1125,11 +1189,15 @@ _locationStatusChangeRecordRepository.AddLocationStatusChangeRecord(stockInfo.LocationInfo, lastStatus, (int)StatusChangeTypeEnum.AutomaticDelivery, task.TaskNum); + LogFactory.GetLog($"鍖呰璇锋眰鍑哄簱浠诲姟").Info(true, $"銆愯繑鍥炲弬鏁般�戯細銆恵JsonConvert.SerializeObject(taskDTO)}銆憑Environment.NewLine}{Environment.NewLine}"); return content.OK(data: taskDTO); } 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}"); } } @@ -1637,6 +1705,20 @@ return content.Error(ex.Message); } } + public WebResponseContent GetLocationStatus() + { + WebResponseContent content = new WebResponseContent(); + try + { + List<DtLocationInfo> LocationList = _locationRepository.Db.Queryable<DtLocationInfo>().Where(x => x.LocationStatus != 2 && x.LocationStatus != 0).ToList(); + return content.OK1(total1: LocationList.Count, data: LocationList); + } + catch (Exception ex) + { + return content.Error(ex.Message); + } + + } } internal class TaskHourData -- Gitblit v1.9.3