| | |
| | | using 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; |
| | | |
| | |
| | | |
| | | 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) |
| | |
| | | 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 () => |
| | | { |
| | |
| | | await DeleteStockInfoDetailsAsync(stock.StockInfoDetails); |
| | | await AddStockInfoHtyAsync(stockInfo_Hty); |
| | | } |
| | | |
| | | await UpdateLocationAsync(location); |
| | | if (location != null) |
| | | { |
| | | await UpdateLocationAsync(location); |
| | | } |
| | | await DeleteTaskAsync(task.TaskId); |
| | | await AddTaskHtyAsync(taskHty); |
| | | }); |
| | |
| | | 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缓存查询代码 |
| | | //// 从缓存中获取库存信息 |
| | | //IDictionary<string, DtStockInfo>? stockInfos = _simpleCacheService.HashGetAll<DtStockInfo>(WIDESEA_Cache.CacheConst.Cache_DtStockInfo); |
| | | //List<DtStockInfo> stockInfoList = stockInfos.Values.ToList(); |
| | |
| | | // .WhereIF(!materielCodes.IsNullOrEmpty(), x => x.StockInfoDetails != null && x.StockInfoDetails.Any(y => materielCodes.Contains(y.MaterielCode))) |
| | | // .FirstOrDefault(); |
| | | // 修改后的查询代码 |
| | | #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); |
| | | |
| | |
| | | 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); |
| | |
| | | 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}"); |
| | | } |
| | | } |