|  |  | 
 |  |  | using Mapster; | 
 |  |  | using Masuit.Tools; | 
 |  |  | using NewLife.Caching; | 
 |  |  | using SqlSugar; | 
 |  |  | using System.Text.RegularExpressions; | 
 |  |  | using WIDESEA_Cache; | 
 |  |  | 
 |  |  |         { | 
 |  |  |             if (task.TaskType == (int)TaskOutboundTypeEnum.Outbound) | 
 |  |  |             { | 
 |  |  |                 #region 老版本 | 
 |  |  |                 //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") && stock.ProcessCode != "OCVB")  //非分容库区与当前工序是OCVB均上报MOM出入站 | 
 |  |  |                 //{ | 
 |  |  |                 //    var agingOutputDto = MapToAgingOutputDto(stock); | 
 |  |  |                 //    content = await _agingInOrOutInputService.GetOCVOutputAsync(agingOutputDto); | 
 |  |  |                 //    //ValidateResponse(content); | 
 |  |  |                 //    var result = JsonConvert.DeserializeObject<BasicResult>(content.Data.ToString()); | 
 |  |  |                 //    if (!result.Success || !agingOutputDto.SerialNos[0].SerialNoResult) | 
 |  |  |                 //    { | 
 |  |  |                 //        if (result.MessageCode == "E10001") | 
 |  |  |                 //        { | 
 |  |  |                 //            var area = _areaInfoRepository.QueryFirst(x => x.AreaCode == stock.AreaCode); | 
 |  |  |                 //            if (area == null) | 
 |  |  |                 //            { | 
 |  |  |                 //                throw new Exception("未找到对应的库区信息"); | 
 |  |  |                 //            } | 
 |  |  |                 //            var trayCells = new TrayCellsStatusDto() | 
 |  |  |                 //            { | 
 |  |  |                 //                Software = area.Spare3, | 
 |  |  |                 //                TrayBarcode = task.PalletCode, | 
 |  |  |                 //                EquipmentCode = area.Spare2, | 
 |  |  |                 //                SceneType = area.Spare4 | 
 |  |  |                 //            }; | 
 |  |  |                 //            content = await _cellStateService.GetTrayCellStatusAsync(trayCells); | 
 |  |  |                 //            if (!content.Status) return content; | 
 |  |  |  | 
 |  |  |                 //            var ResultTray = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(content.Data.ToString()); | 
 |  |  |                 //            if (ResultTray.SerialNos.Count > 0) | 
 |  |  |                 //            { | 
 |  |  |                 //                var parameterInfo = JsonConvert.DeserializeObject<List<ParameterInfo>>(stock.ParameterInfos).FirstOrDefault(y => y.Description.Contains("时间")); | 
 |  |  |                 //                if (parameterInfo == null) throw new Exception(""); | 
 |  |  |  | 
 |  |  |                 //                var outHours = (DateTime.Now - (stock.LinedProcessFeedbackTime == null ? stock.CreateDate : stock.LinedProcessFeedbackTime.ToDateTime())).TotalHours; | 
 |  |  |  | 
 |  |  |                 //                var isNG = outHours > parameterInfo.LowerSpecificationsLimit.ToDouble() && outHours < parameterInfo.UpperSpecificationsLimit.ToDouble(); | 
 |  |  |  | 
 |  |  |                 //                var defectCode = string.Empty; | 
 |  |  |                 //                if (!isNG) defectCode = "TQCK"; | 
 |  |  |                 //                var outputDto = new AgingOutputDto | 
 |  |  |                 //                { | 
 |  |  |                 //                    OpFlag = 1, | 
 |  |  |                 //                    Software = area.Spare3, | 
 |  |  |                 //                    EquipmentCode = area.Spare2, | 
 |  |  |                 //                    TrayBarcode = stock.PalletCode, | 
 |  |  |                 //                    SerialNos = ResultTray.SerialNos.Select(x => new SerialNoOutDto | 
 |  |  |                 //                    { | 
 |  |  |                 //                        SlotNo = x.PositionNo, | 
 |  |  |                 //                        SerialNo = x.SerialNo, | 
 |  |  |                 //                        SerialNoResult = true, //isNG, | 
 |  |  |                 //                        ParameterInfo = new List<ParameterInfoOutput> { | 
 |  |  |                 //                            new ParameterInfoOutput() { | 
 |  |  |                 //                                Value = outHours.ToString(), | 
 |  |  |                 //                                ParameterCode =parameterInfo.ParameterCode, | 
 |  |  |                 //                                ParameterDesc = parameterInfo.Description, | 
 |  |  |                 //                                ParameterResult  = "OK", //isNG.ToString(), | 
 |  |  |                 //                                TargetValue = parameterInfo.TargetValue, | 
 |  |  |                 //                                LowerLomit = parameterInfo.LowerSpecificationsLimit, | 
 |  |  |                 //                                UpperLimit = parameterInfo.UpperSpecificationsLimit, | 
 |  |  |                 //                                DefectCode = defectCode, | 
 |  |  |                 //                                UOMCode = parameterInfo.UOMCode, | 
 |  |  |                 //                            } | 
 |  |  |                 //                        } | 
 |  |  |                 //                    }).ToList() | 
 |  |  |                 //                }; | 
 |  |  |  | 
 |  |  |                 //                content = await _agingInOrOutInputService.GetOCVOutputAsync(outputDto); | 
 |  |  |                 //                result = JsonConvert.DeserializeObject<BasicResult>(content.Data.ToString()); | 
 |  |  |                 //                if (!result.Success) | 
 |  |  |                 //                    task.Remark = "NG"; | 
 |  |  |                 //            } | 
 |  |  |                 //        } | 
 |  |  |                 //        else | 
 |  |  |                 //            task.Remark = "NG"; | 
 |  |  |                 //    } | 
 |  |  |                 //} | 
 |  |  |                 #endregion 老版本 | 
 |  |  |  | 
 |  |  |                 if (task.TaskType == (int)TaskOutboundTypeEnum.Outbound) | 
 |  |  |                 { | 
 |  |  |                     if (!task.Roadway.Contains("FR") && stock.ProcessCode != "OCVB") | 
 |  |  | 
 |  |  |                 await DeleteTaskAsync(task.TaskId); | 
 |  |  |                 await AddTaskHtyAsync(taskHty); | 
 |  |  |             }); | 
 |  |  |             try | 
 |  |  |             { | 
 |  |  |                 using(_simpleCacheService.AcquireLock(WIDESEA_Cache.CacheConst.Cache_DtStockInfo, 2000)) | 
 |  |  |                 { | 
 |  |  |                     _simpleCacheService.HashDel<DtStockInfo>(WIDESEA_Cache.CacheConst.Cache_DtStockInfo, new string[] { stock.PalletCode }); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             catch (Exception ex) | 
 |  |  |             { | 
 |  |  |                 LogFactory.GetLog("删除缓存失败").Error(true, $"{stock.PalletCode}_删除缓存失败,异常信息:{ex.Message}"); | 
 |  |  |                 using(_simpleCacheService.AcquireLock(WIDESEA_Cache.CacheConst.Cache_DtStockInfo, 2000)) | 
 |  |  |                 { | 
 |  |  |                     _simpleCacheService.HashDel<DtStockInfo>(WIDESEA_Cache.CacheConst.Cache_DtStockInfo, new string[] { stock.PalletCode }); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             return content.OK("任务完成成功", task.Remark); | 
 |  |  |         } | 
 |  |  | 
 |  |  |             { | 
 |  |  |                 _locationStatusChangeRecordRepository.AddLocationStatusChangeRecord(locationInf, lastStatus, (int)StatusChangeTypeEnum.AutomaticStorage, task.TaskNum); | 
 |  |  |  | 
 |  |  |                 _simpleCacheService.HashAdd(WIDESEA_Cache.CacheConst.Cache_DtStockInfo, stock.PalletCode, stock); | 
 |  |  |                 stock.StockInfoDetails = new List<DtStockInfoDetail>() { { stock.StockInfoDetails[0] } }; | 
 |  |  |                 using(_simpleCacheService.AcquireLock(WIDESEA_Cache.CacheConst.Cache_DtStockInfo, 2000)) | 
 |  |  |                 { | 
 |  |  |                     _simpleCacheService.HashAdd(WIDESEA_Cache.CacheConst.Cache_DtStockInfo, stock.PalletCode, stock); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 content.OK("入库任务完成成功"); | 
 |  |  |             } | 
 |  |  | 
 |  |  |                           .OrderBy(x => x.OutboundTime) | 
 |  |  |                           .FirstOrDefault(); | 
 |  |  |  | 
 |  |  |         if (result != null) | 
 |  |  |         { | 
 |  |  |             stockInfoList = stockInfoList.Where(x => x != result).ToList(); | 
 |  |  |             _simpleCacheService.HashDel<DtStockInfo>(WIDESEA_Cache.CacheConst.Cache_DtStockInfo, new string[] { result.PalletCode }); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         return result; | 
 |  |  |  | 
 |  |  |         if (stockInfoList.IsNullOrEmpty()) | 
 |  |  |         { | 
 |  |  |             stockInfoList = await _stockInfoRepository.Db.Queryable<DtStockInfo>().IncludesAllFirstLayer().ToListAsync(); | 
 |  |  |  | 
 |  |  |             result = stockInfoList.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 && x.LocationInfo.EnalbeStatus == (int)EnableEnum.Enable) // 过滤条件 | 
 |  |  |                 .WhereIF(!devices.IsNullOrEmpty(), x => devices.Contains(x.LocationInfo.RoadwayNo)) | 
 |  |  |                 .WhereIF(!materielCodes.IsNullOrEmpty(), x => x.StockInfoDetails.Any(y => materielCodes.Contains(y.MaterielCode))) | 
 |  |  |                 .OrderBy(x => x.OutboundTime) // 排序 | 
 |  |  |                 .FirstOrDefault(); // 获取第一个元素 | 
 |  |  |  | 
 |  |  |             if (result != null) | 
 |  |  |             { | 
 |  |  |                 // 排除 result 中的元素 | 
 |  |  |                 stockInfoList = stockInfoList.Where(x => x != result).ToList(); | 
 |  |  |             } | 
 |  |  |             foreach (var item in stockInfoList) | 
 |  |  |             { | 
 |  |  |                 _simpleCacheService.HashAdd(WIDESEA_Cache.CacheConst.Cache_DtStockInfo, item.PalletCode, item); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         else | 
 |  |  |         { | 
 |  |  |             result = stockInfoList.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 && x.LocationInfo.EnalbeStatus == (int)EnableEnum.Enable) // 过滤条件 | 
 |  |  |                 .WhereIF(!devices.IsNullOrEmpty(), x => devices.Contains(x.LocationInfo.RoadwayNo)) | 
 |  |  |                 .WhereIF(!materielCodes.IsNullOrEmpty(), x => x.StockInfoDetails.Any(y => materielCodes.Contains(y.MaterielCode))) | 
 |  |  |                 .OrderBy(x => x.OutboundTime) // 排序 | 
 |  |  |                 .FirstOrDefault(); // 获取第一个元素 | 
 |  |  |             if (result != null) | 
 |  |  |             { | 
 |  |  |                 // 排除 result 中的元素 | 
 |  |  |                 stockInfoList = stockInfoList.Where(x => x != result).ToList(); | 
 |  |  |             } | 
 |  |  |             string[] xfasd = new string[] { result.PalletCode }; | 
 |  |  |             _simpleCacheService.HashDel<DtStockInfo>(WIDESEA_Cache.CacheConst.Cache_DtStockInfo, new string[] { result.PalletCode }); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         #region | 
 |  |  |         //var result = await _stockInfoRepository.Db.Queryable<DtStockInfo>() | 
 |  |  |         //    .Includes(x => x.LocationInfo) // 预加载LocationInfo | 
 |  |  |         //    .Includes(x => x.StockInfoDetails) // 预加载StockInfoDetails | 
 |  |  |         //    .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 && x.LocationInfo.EnalbeStatus == (int)EnableEnum.Enable) // 过滤条件 | 
 |  |  |         //    .WhereIF(!devices.IsNullOrEmpty(), x => devices.Contains(x.LocationInfo.RoadwayNo)) | 
 |  |  |         //    .WhereIF(!materielCodes.IsNullOrEmpty(), x => x.StockInfoDetails.Any(y => materielCodes.Contains(y.MaterielCode))) | 
 |  |  |         //    .OrderBy(x => x.OutboundTime) // 排序 | 
 |  |  |         //    .FirstAsync(); // 获取第一个元素 | 
 |  |  |         #endregion 请求出库(实盘&空盘) | 
 |  |  |  | 
 |  |  |         return result; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |             .OrderBy(x => x.OutboundTime) // 排序 | 
 |  |  |             .FirstOrDefault(); // 获取第一个元素 | 
 |  |  |  | 
 |  |  |         if (result != null) | 
 |  |  |         { | 
 |  |  |             stockInfoList = stockInfoList.Where(x => x != result).ToList(); | 
 |  |  |             _simpleCacheService.HashDel<DtStockInfo>(WIDESEA_Cache.CacheConst.Cache_DtStockInfo, new string[] { result.PalletCode }); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         return result; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |             .OrderBy(x => x.CreateDate) // 排序 | 
 |  |  |             .FirstOrDefault(); // 转换为列表 | 
 |  |  |  | 
 |  |  |         if (result != null) | 
 |  |  |         { | 
 |  |  |             stockInfoList = stockInfoList.Where(x => x != result).ToList(); | 
 |  |  |             _simpleCacheService.HashDel<DtStockInfo>(WIDESEA_Cache.CacheConst.Cache_DtStockInfo, new string[] { result.PalletCode }); | 
 |  |  |         } | 
 |  |  |         //if (result != null) | 
 |  |  |         //{ | 
 |  |  |         //    stockInfoList = stockInfoList.Where(x => x != result).ToList(); | 
 |  |  |         //    _simpleCacheService.HashDel<DtStockInfo>(WIDESEA_Cache.CacheConst.Cache_DtStockInfo, new string[] { result.PalletCode }); | 
 |  |  |         //} | 
 |  |  |  | 
 |  |  |         return result; | 
 |  |  |     } |