| | |
| | | using Masuit.Tools; |
| | | using Microsoft.Extensions.DependencyInjection; |
| | | using Microsoft.Extensions.Hosting; |
| | | using Microsoft.Extensions.Logging; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Core.BaseRepository; |
| | | using WIDESEA_Core.Const; |
| | | using WIDESEA_DTO.WMS; |
| | | using WIDESEA_IServices; |
| | |
| | | { |
| | | public class MyBackgroundService : IHostedService, IDisposable |
| | | { |
| | | private readonly ILogger<MyBackgroundService> _logger; |
| | | private readonly IDt_PalletStockInfoRepository _palletStockInfoRepository; |
| | | private readonly IDt_AreaInfoRepository _areaInfoRepository; //åºå |
| | | private readonly IDt_TaskRepository _taskRepository; |
| | | private readonly IDt_StationManagerRepository _stationManagerRepository; |
| | | private readonly ISys_ConfigService _configService; |
| | | private readonly ILocationInfoRepository _locationRepository; |
| | | private readonly IVV_StockInfoRepository _VVStockInfoRepository; |
| | | private readonly IUnitOfWorkManage _unitOfWorkManage; |
| | | private readonly IDt_MESLockInfoRepository _MESLockInfoRepository; |
| | | private ILogger<MyBackgroundService> _logger; |
| | | private IDt_PalletStockInfoRepository _palletStockInfoRepository; |
| | | private IDt_AreaInfoRepository _areaInfoRepository; //åºå |
| | | private IDt_TaskRepository _taskRepository; |
| | | private IDt_StationManagerRepository _stationManagerRepository; |
| | | private ISys_ConfigService _configService; |
| | | private ILocationInfoRepository _locationRepository; |
| | | private IVV_StockInfoRepository _VVStockInfoRepository; |
| | | private IUnitOfWorkManage _unitOfWorkManage; |
| | | private IDt_MESLockInfoRepository _MESLockInfoRepository; |
| | | |
| | | private Timer _timer; |
| | | |
| | | public MyBackgroundService(ILogger<MyBackgroundService> logger, ILocationInfoRepository locationRepository, IDt_AreaInfoRepository areaInfoRepository, IDt_TaskRepository taskRepository, IDt_StationManagerRepository stationManagerRepository, ISys_ConfigService configService, IDt_PalletStockInfoRepository palletStockInfoRepository, IVV_StockInfoRepository VV_StockInfoRepository, IUnitOfWorkManage unitOfWorkManage, IDt_MESLockInfoRepository MESLockInfoRepository) |
| | | public MyBackgroundService(/*ILogger<MyBackgroundService> logger, ILocationInfoRepository locationRepository, IDt_AreaInfoRepository areaInfoRepository, IDt_TaskRepository taskRepository, IDt_StationManagerRepository stationManagerRepository, ISys_ConfigService configService, IDt_PalletStockInfoRepository palletStockInfoRepository, IVV_StockInfoRepository VV_StockInfoRepository, IUnitOfWorkManage unitOfWorkManage, IDt_MESLockInfoRepository MESLockInfoRepository*/) |
| | | { |
| | | _logger = logger; |
| | | _locationRepository = locationRepository; |
| | | _areaInfoRepository = areaInfoRepository; |
| | | _taskRepository = taskRepository; |
| | | _stationManagerRepository = stationManagerRepository; |
| | | _configService = configService; |
| | | _palletStockInfoRepository = palletStockInfoRepository; |
| | | _VVStockInfoRepository = VV_StockInfoRepository; |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | _MESLockInfoRepository = MESLockInfoRepository; |
| | | |
| | | } |
| | | |
| | | public Task StartAsync(CancellationToken cancellationToken) |
| | | { |
| | | _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromMinutes(5)); |
| | | //_timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(15)); |
| | | return Task.CompletedTask; |
| | | } |
| | | |
| | |
| | | { |
| | | try |
| | | { |
| | | IServiceScope scope = App.RootServices.CreateScope(); |
| | | _logger = scope.ServiceProvider.GetService<ILogger<MyBackgroundService>>(); |
| | | _locationRepository = scope.ServiceProvider.GetService<ILocationInfoRepository>(); |
| | | _areaInfoRepository = scope.ServiceProvider.GetService<IDt_AreaInfoRepository>(); |
| | | _taskRepository = scope.ServiceProvider.GetService<IDt_TaskRepository>(); |
| | | _stationManagerRepository = scope.ServiceProvider.GetService<IDt_StationManagerRepository>(); |
| | | _configService = scope.ServiceProvider.GetService<ISys_ConfigService>(); |
| | | _palletStockInfoRepository = scope.ServiceProvider.GetService<IDt_PalletStockInfoRepository>(); |
| | | _VVStockInfoRepository = scope.ServiceProvider.GetService<IVV_StockInfoRepository>(); |
| | | _unitOfWorkManage = scope.ServiceProvider.GetService<IUnitOfWorkManage>(); |
| | | _MESLockInfoRepository = scope.ServiceProvider.GetService<IDt_MESLockInfoRepository>(); |
| | | //var area = _areaInfoRepository.QueryFirst(x => x.AreaCode == "GWSC1"); |
| | | |
| | | //if (area == null) { return; } |
| | |
| | | |
| | | |
| | | if (lockInfo.Where(x => x.LockStatue == 1).Count() > 10) return; |
| | | if (lockInfo.Count == 0) return; |
| | | |
| | | var lockCar = lockInfo.Where(x => x.LockStatue == 0).First(); |
| | | |
| | | foreach (var item in lockInfo) |
| | | var lockCar = lockInfo.Where(x => x.LockStatue == 0).FirstOrDefault(); |
| | | if (lockCar == null) return; |
| | | var hasTask = _taskRepository.QueryFirst(x => x.PalletCode == lockCar.CarBodyInfo.PalletCode); |
| | | if (hasTask != null) |
| | | { |
| | | var hasTask = _taskRepository.QueryFirst(x => x.PalletCode == item.CarBodyInfo.PalletCode); |
| | | if (hasTask != null) |
| | | { |
| | | Console.WriteLine("å·²åå¨åºåºä»»å¡"); |
| | | continue; |
| | | } |
| | | |
| | | List<Dt_StationManager> stationLists = null; |
| | | if (item.CarBodyInfo.CarType == 1) |
| | | { |
| | | stationLists = _stationManagerRepository.QueryData(x => x.RoadwayNo == item.TCLine && x.stationType == 2 && x.stationStatus == "1" && x.stationArea == "3"); |
| | | } |
| | | else if (item.CarBodyInfo.CarType == 2) |
| | | { |
| | | stationLists = _stationManagerRepository.QueryData(x => x.RoadwayNo == item.TCLine && x.stationType == 2 && x.stationStatus == "1" && x.stationArea == "4"); |
| | | } |
| | | //else if (item.CarBodyInfo.CarType == 3) |
| | | //{ |
| | | // stationLists = _stationManagerRepository.QueryData(x => x.RoadwayNo == item.TCLine && x.stationType == 7 && x.stationStatus == "1" && x.stationArea == "3"); |
| | | //} |
| | | |
| | | var stock = _VVStockInfoRepository.QueryFirst(x => x.carBodyID == item.carBodyID); |
| | | var lockStock = _palletStockInfoRepository.QueryFirst(x => x.carBodyID == item.carBodyID); |
| | | var location = _locationRepository.QueryFirst(x => x.LocationCode == stock.LocationCode); |
| | | location.LocationStatus = (int)LocationEnum.InStockDisable; |
| | | item.LockStatue = 1; |
| | | lockStock.TaskStatus = 1; |
| | | if (stationLists == null || stationLists.Count == 0) throw new Exception("åºåºç«å°æªé
ç½®ææªå¯ç¨"); |
| | | |
| | | Dt_StationManager Outstation = null; |
| | | |
| | | //if (stationLists.Count > 1) |
| | | //{ |
| | | // var Outtask = BaseDal.QueryData(x => x.Roadway == stationLists.FirstOrDefault().Roadway && x.TaskType == (int)TaskTypeEnum.Outbound).OrderByDescending(x => x.CreateDate).FirstOrDefault(); |
| | | // if (Outtask != null) Outstation = stationLists.Where(x => x.stationChildCode != task.NextAddress && x.stationChildCode != Outtask.CurrentAddress).FirstOrDefault(); |
| | | // else Outstation = stationLists.FirstOrDefault(); |
| | | //} |
| | | //else |
| | | //{ |
| | | Outstation = stationLists.FirstOrDefault(); |
| | | //} |
| | | //var stationInfo = stationInfos.FirstOrDefault(); |
| | | |
| | | // å建并添å ä»»å¡å°æ°æ®åº |
| | | hasTask = new Dt_Task |
| | | { |
| | | Grade = 1, |
| | | Roadway = Outstation.Roadway, |
| | | TargetAddress = "RB043", |
| | | Dispatchertime = DateTime.Now, |
| | | NextAddress = Outstation.stationChildCode, |
| | | OrderNo = null, |
| | | PalletCode = stock.PalletCode, |
| | | PVI = stock.PVI, |
| | | SourceAddress = stock.LocationCode, |
| | | CurrentAddress = stock.LocationCode, |
| | | TaskState = (int)TaskOutStatusEnum.OutNew, |
| | | TaskType = (int)TaskOutboundTypeEnum.Outbound, |
| | | TaskNum = _taskRepository.GetTaskNo().Result, |
| | | Creater = "System", |
| | | CreateDate = DateTime.Now, |
| | | TaskId = 0, |
| | | }; |
| | | |
| | | // å建任å¡ä¼ è¾ç¨çDTO对象 |
| | | var taskDTO = CreateTaskDTO(hasTask); |
| | | |
| | | // è·åWMS IPå°åç¨äºåéä»»å¡è¯·æ± |
| | | var wmsIpAddress = GetWCSIpReceiveTask(); |
| | | if (wmsIpAddress == null) |
| | | { |
| | | throw new InvalidOperationException("WMS IP æªé
ç½®"); |
| | | } |
| | | |
| | | var tasks = new List<WMSTaskDTO>() { taskDTO }; |
| | | // åéä»»å¡è¯·æ±å°WMS |
| | | var result = HttpHelper.PostAsync(wmsIpAddress, tasks.ToJsonString()).Result; |
| | | WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result); |
| | | if (content.Status) |
| | | { |
| | | _unitOfWorkManage.BeginTran(); |
| | | // æ·»å ä»»å¡å°æ°æ®åº |
| | | _taskRepository.AddData(hasTask); |
| | | // æ´æ°åºä½ä½ç½®ç¶æä¸ºä¸å¯ç¨ |
| | | _locationRepository.UpdateData(location); |
| | | _MESLockInfoRepository.UpdateData(item); |
| | | _palletStockInfoRepository.UpdateData(lockStock); |
| | | _unitOfWorkManage.CommitTran(); |
| | | } |
| | | Console.WriteLine("å·²åå¨åºåºä»»å¡"); |
| | | return; |
| | | } |
| | | |
| | | List<Dt_StationManager> stationLists = null; |
| | | if (lockCar.CarBodyInfo.CarType == 1) |
| | | { |
| | | stationLists = _stationManagerRepository.QueryData(x => x.RoadwayNo == lockCar.TCLine && x.stationType == 2 && x.stationStatus == "1" && x.stationArea == "3"); |
| | | } |
| | | else if (lockCar.CarBodyInfo.CarType == 2) |
| | | { |
| | | stationLists = _stationManagerRepository.QueryData(x => x.RoadwayNo == lockCar.TCLine && x.stationType == 2 && x.stationStatus == "1" && x.stationArea == "4"); |
| | | } |
| | | //else if (item.CarBodyInfo.CarType == 3) |
| | | //{ |
| | | // stationLists = _stationManagerRepository.QueryData(x => x.RoadwayNo == item.TCLine && x.stationType == 7 && x.stationStatus == "1" && x.stationArea == "3"); |
| | | //} |
| | | |
| | | var stock = _VVStockInfoRepository.QueryFirst(x => x.carBodyID == lockCar.carBodyID); |
| | | var lockStock = _palletStockInfoRepository.QueryFirst(x => x.carBodyID == lockCar.carBodyID); |
| | | var location = _locationRepository.QueryFirst(x => x.LocationCode == stock.LocationCode); |
| | | location.LocationStatus = (int)LocationEnum.InStockDisable; |
| | | lockCar.LockStatue = 1; |
| | | lockStock.TaskStatus = 1; |
| | | if (stationLists == null || stationLists.Count == 0) throw new Exception("åºåºç«å°æªé
ç½®ææªå¯ç¨"); |
| | | |
| | | Dt_StationManager Outstation = null; |
| | | |
| | | //if (stationLists.Count > 1) |
| | | //{ |
| | | // var Outtask = BaseDal.QueryData(x => x.Roadway == stationLists.FirstOrDefault().Roadway && x.TaskType == (int)TaskTypeEnum.Outbound).OrderByDescending(x => x.CreateDate).FirstOrDefault(); |
| | | // if (Outtask != null) Outstation = stationLists.Where(x => x.stationChildCode != task.NextAddress && x.stationChildCode != Outtask.CurrentAddress).FirstOrDefault(); |
| | | // else Outstation = stationLists.FirstOrDefault(); |
| | | //} |
| | | //else |
| | | //{ |
| | | Outstation = stationLists.FirstOrDefault(); |
| | | //} |
| | | //var stationInfo = stationInfos.FirstOrDefault(); |
| | | |
| | | // å建并添å ä»»å¡å°æ°æ®åº |
| | | hasTask = new Dt_Task |
| | | { |
| | | Grade = 1, |
| | | Roadway = Outstation.Roadway, |
| | | TargetAddress = "RB043", |
| | | Dispatchertime = DateTime.Now, |
| | | NextAddress = Outstation.stationChildCode, |
| | | OrderNo = null, |
| | | PalletCode = stock.PalletCode, |
| | | PVI = stock.PVI, |
| | | SourceAddress = stock.LocationCode, |
| | | CurrentAddress = stock.LocationCode, |
| | | TaskState = (int)TaskOutStatusEnum.OutNew, |
| | | TaskType = (int)TaskOutboundTypeEnum.Outbound, |
| | | TaskNum = _taskRepository.GetTaskNo().Result, |
| | | Creater = "System", |
| | | CreateDate = DateTime.Now, |
| | | TaskId = 0, |
| | | }; |
| | | |
| | | // å建任å¡ä¼ è¾ç¨çDTO对象 |
| | | var taskDTO = CreateTaskDTO(hasTask); |
| | | |
| | | // è·åWMS IPå°åç¨äºåéä»»å¡è¯·æ± |
| | | var wmsIpAddress = GetWCSIpReceiveTask(); |
| | | if (wmsIpAddress == null) |
| | | { |
| | | throw new InvalidOperationException("WMS IP æªé
ç½®"); |
| | | } |
| | | |
| | | var tasks = new List<WMSTaskDTO>() { taskDTO }; |
| | | // åéä»»å¡è¯·æ±å°WMS |
| | | var result = HttpHelper.PostAsync(wmsIpAddress, tasks.ToJsonString()).Result; |
| | | WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result); |
| | | if (content.Status) |
| | | { |
| | | _unitOfWorkManage.BeginTran(); |
| | | // æ·»å ä»»å¡å°æ°æ®åº |
| | | _taskRepository.AddData(hasTask); |
| | | // æ´æ°åºä½ä½ç½®ç¶æä¸ºä¸å¯ç¨ |
| | | _locationRepository.UpdateData(location); |
| | | _MESLockInfoRepository.UpdateData(lockCar); |
| | | _palletStockInfoRepository.UpdateData(lockStock); |
| | | _unitOfWorkManage.CommitTran(); |
| | | } |
| | | |
| | | //foreach (var item in lockInfo) |
| | | //{ |
| | | // var hasTask = _taskRepository.QueryFirst(x => x.PalletCode == item.CarBodyInfo.PalletCode); |
| | | // if (hasTask != null) |
| | | // { |
| | | // Console.WriteLine("å·²åå¨åºåºä»»å¡"); |
| | | // continue; |
| | | // } |
| | | |
| | | // List<Dt_StationManager> stationLists = null; |
| | | // if (item.CarBodyInfo.CarType == 1) |
| | | // { |
| | | // stationLists = _stationManagerRepository.QueryData(x => x.RoadwayNo == item.TCLine && x.stationType == 2 && x.stationStatus == "1" && x.stationArea == "3"); |
| | | // } |
| | | // else if (item.CarBodyInfo.CarType == 2) |
| | | // { |
| | | // stationLists = _stationManagerRepository.QueryData(x => x.RoadwayNo == item.TCLine && x.stationType == 2 && x.stationStatus == "1" && x.stationArea == "4"); |
| | | // } |
| | | // //else if (item.CarBodyInfo.CarType == 3) |
| | | // //{ |
| | | // // stationLists = _stationManagerRepository.QueryData(x => x.RoadwayNo == item.TCLine && x.stationType == 7 && x.stationStatus == "1" && x.stationArea == "3"); |
| | | // //} |
| | | |
| | | // var stock = _VVStockInfoRepository.QueryFirst(x => x.carBodyID == item.carBodyID); |
| | | // var lockStock = _palletStockInfoRepository.QueryFirst(x => x.carBodyID == item.carBodyID); |
| | | // var location = _locationRepository.QueryFirst(x => x.LocationCode == stock.LocationCode); |
| | | // location.LocationStatus = (int)LocationEnum.InStockDisable; |
| | | // item.LockStatue = 1; |
| | | // lockStock.TaskStatus = 1; |
| | | // if (stationLists == null || stationLists.Count == 0) throw new Exception("åºåºç«å°æªé
ç½®ææªå¯ç¨"); |
| | | |
| | | // Dt_StationManager Outstation = null; |
| | | |
| | | // //if (stationLists.Count > 1) |
| | | // //{ |
| | | // // var Outtask = BaseDal.QueryData(x => x.Roadway == stationLists.FirstOrDefault().Roadway && x.TaskType == (int)TaskTypeEnum.Outbound).OrderByDescending(x => x.CreateDate).FirstOrDefault(); |
| | | // // if (Outtask != null) Outstation = stationLists.Where(x => x.stationChildCode != task.NextAddress && x.stationChildCode != Outtask.CurrentAddress).FirstOrDefault(); |
| | | // // else Outstation = stationLists.FirstOrDefault(); |
| | | // //} |
| | | // //else |
| | | // //{ |
| | | // Outstation = stationLists.FirstOrDefault(); |
| | | // //} |
| | | // //var stationInfo = stationInfos.FirstOrDefault(); |
| | | |
| | | // // å建并添å ä»»å¡å°æ°æ®åº |
| | | // hasTask = new Dt_Task |
| | | // { |
| | | // Grade = 1, |
| | | // Roadway = Outstation.Roadway, |
| | | // TargetAddress = "RB043", |
| | | // Dispatchertime = DateTime.Now, |
| | | // NextAddress = Outstation.stationChildCode, |
| | | // OrderNo = null, |
| | | // PalletCode = stock.PalletCode, |
| | | // PVI = stock.PVI, |
| | | // SourceAddress = stock.LocationCode, |
| | | // CurrentAddress = stock.LocationCode, |
| | | // TaskState = (int)TaskOutStatusEnum.OutNew, |
| | | // TaskType = (int)TaskOutboundTypeEnum.Outbound, |
| | | // TaskNum = _taskRepository.GetTaskNo().Result, |
| | | // Creater = "System", |
| | | // CreateDate = DateTime.Now, |
| | | // TaskId = 0, |
| | | // }; |
| | | |
| | | // // å建任å¡ä¼ è¾ç¨çDTO对象 |
| | | // var taskDTO = CreateTaskDTO(hasTask); |
| | | |
| | | // // è·åWMS IPå°åç¨äºåéä»»å¡è¯·æ± |
| | | // var wmsIpAddress = GetWCSIpReceiveTask(); |
| | | // if (wmsIpAddress == null) |
| | | // { |
| | | // throw new InvalidOperationException("WMS IP æªé
ç½®"); |
| | | // } |
| | | |
| | | // var tasks = new List<WMSTaskDTO>() { taskDTO }; |
| | | // // åéä»»å¡è¯·æ±å°WMS |
| | | // var result = HttpHelper.PostAsync(wmsIpAddress, tasks.ToJsonString()).Result; |
| | | // WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result); |
| | | // if (content.Status) |
| | | // { |
| | | // _unitOfWorkManage.BeginTran(); |
| | | // // æ·»å ä»»å¡å°æ°æ®åº |
| | | // _taskRepository.AddData(hasTask); |
| | | // // æ´æ°åºä½ä½ç½®ç¶æä¸ºä¸å¯ç¨ |
| | | // _locationRepository.UpdateData(location); |
| | | // _MESLockInfoRepository.UpdateData(item); |
| | | // _palletStockInfoRepository.UpdateData(lockStock); |
| | | // _unitOfWorkManage.CommitTran(); |
| | | // } |
| | | //} |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | ConsoleHelper.WriteErrorLine($"ï¼é误信æ¯ï¼" + ex.Message); |
| | | ConsoleHelper.WriteErrorLine($"æå¨é车åºè½¦é误信æ¯ï¼" + ex.Message); |
| | | } |
| | | ConsoleHelper.WriteSuccessLine($"ï¼" + DateTime.Now.ToString()); |
| | | ConsoleHelper.WriteSuccessLine($"æå¨é车ï¼" + DateTime.Now.ToString()); |
| | | } |
| | | |
| | | public Task StopAsync(CancellationToken cancellationToken) |