|  |  |  | 
|---|
|  |  |  | using Masuit.Tools; | 
|---|
|  |  |  | using WIDESEA_Common; | 
|---|
|  |  |  | using WIDESEA_Common.CustomModels; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //using WIDESEA_Common.CustomModels; | 
|---|
|  |  |  | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | locations = await _locationRepository.QueryDataAsync(x => x.LocationStatus == (int)LocationEnum.Distribute && x.RoadwayNo == requestTask.Roadways && x.EnalbeStatus == 1 && x.LocationType == 1); | 
|---|
|  |  |  | if (locations == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | locations = await _locationRepository.QueryDataAsync(x => x.LocationStatus == (int)LocationEnum.Free && x.RoadwayNo == requestTask.Roadways && x.EnalbeStatus == 1 && x.LocationType == 1); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (locations == null) | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Thread.Sleep(10000); | 
|---|
|  |  |  | Thread.Sleep(TimeSpan.FromMinutes(10)); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var area = await _areaInfoRepository.QueryFirstAsync(x => x.AreaCode == "GWSC1"); | 
|---|
|  |  |  | var devices = SqlSugarHelper.DbWCS.Queryable<Dt_DeviceInfo>() | 
|---|
|  |  |  | .Where(x => x.DeviceStatus == "1") | 
|---|
|  |  |  | .Where(x => x.DeviceCode.Contains("GWSC")) | 
|---|
|  |  |  | .ToList(); | 
|---|
|  |  |  | var deviceCode = devices.Select(x => x.DeviceCode).ToList(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var stockInfo = await _stockInfoRepository.Db.Queryable<DtStockInfo>() | 
|---|
|  |  |  | .Includes(x => x.LocationInfo) // 预加载LocationInfo | 
|---|
|  |  |  | .Includes(x => x.StockInfoDetails) // 预加载StockInfoDetails | 
|---|
|  |  |  | .Where(x => x.AreaCode == area.AreaCode && x.OutboundTime < DateTime.Now && x.IsFull == true) // 过滤条件 | 
|---|
|  |  |  | .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && x.LocationInfo.AreaId == area.AreaID) // 过滤条件 | 
|---|
|  |  |  | .WhereIF(!deviceCode.IsNullOrEmpty(), x => deviceCode.Contains(x.LocationInfo.RoadwayNo)) | 
|---|
|  |  |  | .OrderBy(x => x.OutboundTime) // 排序 | 
|---|
|  |  |  | .ToListAsync(); // 获取第一个元素 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #region  常温3出库至包装 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 用于追踪每个请求的调用次数和最后请求时间。 | 
|---|
|  |  |  | private static readonly Dictionary<string, (int Count, DateTime LastRequestTime)> requestTracker = new(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// 常温3出库至包装 | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | 
|---|
|  |  |  | WebResponseContent content = new WebResponseContent(); | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Dt_StationManager station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == json.Position && x.stationType == 12 && x.stationArea == "Call"); | 
|---|
|  |  |  | //string requestKey = JsonConvert.SerializeObject(json); | 
|---|
|  |  |  | //// 检查请求次数和时间限制 | 
|---|
|  |  |  | //if (requestTracker.TryGetValue(requestKey, out var requestInfo)) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    if (requestInfo.Count >= 9 && DateTime.Now < requestInfo.LastRequestTime.AddMinutes(5)) | 
|---|
|  |  |  | //    { | 
|---|
|  |  |  | //        // 如果请求次数超过限制且未超过10分钟,抛出异常 | 
|---|
|  |  |  | //        throw new InvalidOperationException("请求次数已达到限制,请稍后再试。"); | 
|---|
|  |  |  | //    } | 
|---|
|  |  |  | //} | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //// 更新请求跟踪信息 | 
|---|
|  |  |  | //if (requestTracker.ContainsKey(requestKey)) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    requestTracker[requestKey] = (requestInfo.Count + 1, DateTime.Now); | 
|---|
|  |  |  | //} | 
|---|
|  |  |  | //else | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    requestTracker[requestKey] = (1, DateTime.Now); | 
|---|
|  |  |  | //} | 
|---|
|  |  |  | //LogFactory.GetLog("常温3出库至包装").Info(true, $"常温3出库至包装传入参数:" + JsonConvert.SerializeObject(json, Formatting.Indented)); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Dt_StationManager station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == json.Position && x.stationType == 12 && x.stationArea == "Call"); | 
|---|
|  |  |  | if (station == null) { throw new Exception($"未找到包装站台信息,请检查传入参数{json.Position}"); } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var devices = SqlSugarHelper.DbWCS.Queryable<Dt_DeviceInfo>() | 
|---|
|  |  |  | .Where(x => x.DeviceStatus == "1") | 
|---|
|  |  |  | .Where(x => x.DeviceCode.Contains("CWSC")) // 过滤条件 | 
|---|
|  |  |  | .ToList(); | 
|---|
|  |  |  | var deviceCode = devices.Select(x => x.DeviceCode).ToList(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //LogFactory.GetLog("常温3出库至包装").Info(true, $"常温3出库至包装传入参数:" + JsonConvert.SerializeObject(json, Formatting.Indented)); | 
|---|
|  |  |  | var stockInfo = _stockInfoRepository.Db.Queryable<DtStockInfo>() | 
|---|
|  |  |  | .Where(x => x.ProductionLine == station.productLine) | 
|---|
|  |  |  | .Includes(x => x.LocationInfo) // 预加载LocationInfo | 
|---|
|  |  |  | .Where(x => x.AreaCode == "CWSC3" && x.IsFull == true) // 过滤条件 | 
|---|
|  |  |  | .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock) // 过滤条件 | 
|---|
|  |  |  | .WhereIF(!deviceCode.IsNullOrEmpty(), x => deviceCode.Contains(x.LocationInfo.RoadwayNo)) | 
|---|
|  |  |  | .OrderBy(x => x.OutboundTime) // 排序 | 
|---|
|  |  |  | .First(); // 获取第一个元素 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //DtStockInfo stockInfo = _stockInfoRepository.QueryFirst(X => X.IsFull && X.AreaCode == "CWSC3" && X.ProductionLine == station.productLine); | 
|---|
|  |  |  | if (stockInfo == null) throw new Exception("库内无满足条件的库存可出库"); | 
|---|
|  |  |  | if (stockInfo == null) throw new Exception($"库内{station.productLine}无满足条件的库存可出库"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | DtLocationInfo locationInfo = _locationRepository.QueryFirst(x => x.AreaId == 5 && x.LocationCode == stockInfo.LocationCode); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #region 分容空框入库改为直接出库 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public async Task<WebResponseContent> SetEmptyOutbyInToOutAsync(RequestTaskDto request) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | WebResponseContent content = new WebResponseContent(); | 
|---|
|  |  |  | var task = await BaseDal.QueryFirstAsync(x => x.PalletCode == request.PalletCode && x.CurrentAddress == request.Position); | 
|---|
|  |  |  | var task = await BaseDal.QueryFirstAsync(x => x.PalletCode == request.PalletCode); | 
|---|
|  |  |  | if (!task.IsNullOrEmpty()) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var fromStation = await _stationManagerRepository.QueryFirstAsync(x => x.stationChildCode == request.Position); | 
|---|
|  |  |  | var toStation = await _stationManagerRepository.QueryFirstAsync(x => x.stationType == 7 && x.productLine == fromStation.productLine && x.stationArea == fromStation.stationArea); | 
|---|
|  |  |  | if (!toStation.IsNullOrEmpty()) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var location = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.TargetAddress && x.AreaId == int.Parse(fromStation.stationArea)); | 
|---|
|  |  |  | task.TargetAddress = toStation.stationLocation; | 
|---|
|  |  |  | task.NextAddress = toStation.stationChildCode; | 
|---|
|  |  |  | task.Grade = 3; | 
|---|
|  |  |  | task.TaskType = (int)TaskOutboundTypeEnum.InToOut; | 
|---|
|  |  |  | task.TaskState = (int)TaskOutStatusEnum.OutNew; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var location = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.TargetAddress); | 
|---|
|  |  |  | location.LocationStatus = (int)LocationEnum.Free; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | await _locationRepository.UpdateDataAsync(location); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #region 分容空框出库改为直接出库 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// 分容空框出库改为直接出库 | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | /// <param name="request"></param> | 
|---|
|  |  |  | /// <returns></returns> | 
|---|
|  |  |  | public async Task<WebResponseContent> SetEmptyOutbyInToOutOneAsync(RequestTaskDto request) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | WebResponseContent content = new WebResponseContent(); | 
|---|
|  |  |  | var task = await BaseDal.QueryFirstAsync(x => x.PalletCode == request.PalletCode); | 
|---|
|  |  |  | if (!task.IsNullOrEmpty()) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var toStation = await _stationManagerRepository.QueryFirstAsync(x => x.stationChildCode == request.Position); | 
|---|
|  |  |  | var fromStation = await _stationManagerRepository.QueryFirstAsync(x => x.stationType == 6 && x.productLine == toStation.productLine && x.stationArea == toStation.stationArea); | 
|---|
|  |  |  | if (!fromStation.IsNullOrEmpty()) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //var location = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.TargetAddress && x.AreaId == int.Parse(fromStation.stationArea)); | 
|---|
|  |  |  | task.SourceAddress = toStation.stationLocation; | 
|---|
|  |  |  | task.CurrentAddress = toStation.stationChildCode; | 
|---|
|  |  |  | task.Grade = 3; | 
|---|
|  |  |  | task.TaskType = (int)TaskOutboundTypeEnum.InToOut; | 
|---|
|  |  |  | task.TaskState = (int)TaskOutStatusEnum.OutNew; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //location.LocationStatus = (int)LocationEnum.Free; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //await _locationRepository.UpdateDataAsync(location); | 
|---|
|  |  |  | await BaseDal.UpdateDataAsync(task); | 
|---|
|  |  |  | return content.OK("成功"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | ConsoleHelper.WriteErrorLine("分容空框出库改为直接出库:未找到对应站台"); | 
|---|
|  |  |  | content.Error("未找到对应站台"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | ConsoleHelper.WriteErrorLine("分容空框出库改为直接出库:未找到任务"); | 
|---|
|  |  |  | content.Error("未找到任务"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return content; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  | } | 
|---|