using MailKit.Search; using Masuit.Tools; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using SixLabors.Fonts; using SqlSugar; using System; using System.Net; using System.Net.Mail; using System.Text; using WIDESEA_Cache; using WIDESEA_Core.Const; using WIDESEA_DTO.WMS; using WIDESEA_IOrderRepository; using WIDESEA_IServices; using WIDESEA_Model.Models.ERP; using WIDESEA_Model.Models.Order; using WIDESEA_OrderRepository; using WIDESEAWCS_BasicInfoRepository; namespace WIDESEA_StorageTaskServices { public class MyBackgroundService : IHostedService, IDisposable { private readonly ILogger _logger; private readonly IStockInfoRepository _stockInfoRepository; 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 IDt_InboundOrderRepository _inboundOrderRepository; private Timer _timer; public MyBackgroundService(ILogger logger, ILocationInfoRepository locationRepository, IStockInfoRepository stockInfoRepository, IDt_AreaInfoRepository areaInfoRepository, IDt_TaskRepository taskRepository, IDt_StationManagerRepository stationManagerRepository, ISys_ConfigService configService,IDt_InboundOrderRepository inboundOrderRepository) { _logger = logger; _locationRepository = locationRepository; _stockInfoRepository = stockInfoRepository; _areaInfoRepository = areaInfoRepository; _taskRepository = taskRepository; _stationManagerRepository = stationManagerRepository; _configService = configService; _inboundOrderRepository = inboundOrderRepository; } public Task StartAsync(CancellationToken cancellationToken) { _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromMinutes(1)); return Task.CompletedTask; } private void DoWork(object state) { try { List ERPPrintChecklist =SqlSugarHelper.DBERP.Queryable().Where(x => true).ToList(); var printCheckList = _inboundOrderRepository.QueryData(x => true); List inboundOrderAdd = new List(); List inboundOrderUpdate = new List(); if (ERPPrintChecklist != null) return; foreach (var item in ERPPrintChecklist) { var x = printCheckList.Where(x => x.MaterialNo == item.料号 && x.OrderNo == item.单号 && x.WarehouseName == item.入库仓库名称).FirstOrDefault(); if (x == null) { Dt_InboundOrder Print = new Dt_InboundOrder() { PrintCode = GetOrderPintCode(), OrderNo = item.单号, DemandClassification = item.需求分类, OrderType = item.单据类型, WarehouseName = item.入库仓库名称, Datetime = item.日期.ToString(), LineNumber = item.行号, ProductDrawingNumber = item.产品图号, MaterialNo = item.料号, MaterialName = item.品名, Weight = item.单重, Specs = item.规格, Unit = item.单位, Texture = item.用友材质, Quantity = item.入库数量, OrderStatus = item.单据状态 }; inboundOrderAdd.Add(Print); } else { if (x.PrintCode == null || x.PrintCode == "") { x.PrintCode = GetOrderPintCode(); x.OrderNo = item.单号; x.DemandClassification = item.需求分类; x.OrderType = item.单据类型; x.WarehouseName = item.入库仓库名称; x.Datetime = item.日期.ToString(); x.LineNumber = item.行号; x.ProductDrawingNumber = item.产品图号; x.MaterialNo = item.料号; x.MaterialName = item.品名; x.Weight = item.单重; x.Specs = item.规格; x.Unit = item.单位; x.Texture = item.用友材质; x.Quantity = item.入库数量; x.OrderStatus = item.单据状态; inboundOrderUpdate.Add(x); } } } if (inboundOrderAdd.Count > 0) { _inboundOrderRepository.AddData(inboundOrderAdd); } if (inboundOrderUpdate.Count > 0) { _inboundOrderRepository.UpdateData(inboundOrderUpdate); } } catch (Exception ex) { ConsoleHelper.WriteErrorLine($"错误信息:" + ex.Message); } } public string GetOrderPintCode() { string PrintCode = ""; var PrintSetting = SqlSugarHelper.DbWMS.Queryable().Where(x => x.PrintCode == "OrderNo").ToList().FirstOrDefault(); if (PrintSetting.Spare1 == DateTime.Now.ToString("yyyyMMdd")) { PrintCode = PrintSetting.Spare1 + PrintSetting.PrintNo.ToString().PadLeft(PrintSetting.Spare2, '0'); PrintSetting.PrintNo = PrintSetting.PrintNo + 1; } else { PrintSetting.Spare1 = DateTime.Now.ToString("yyyyMMdd"); PrintSetting.PrintNo = 2; PrintCode = PrintSetting.PrintCode + PrintSetting.Spare1 + 1.ToString().PadLeft(PrintSetting.Spare2, '0'); } SqlSugarHelper.DbWMS.Updateable(PrintSetting).ExecuteCommand(); return PrintCode; } public Task StopAsync(CancellationToken cancellationToken) { _logger.LogInformation("MyBackgroundService is stopping."); _timer?.Change(Timeout.Infinite, 0); return Task.CompletedTask; } public void Dispose() { _timer?.Dispose(); } } }