using Autofac; using Entity.Constant; using Entity.DbModel.Station; using HybirdFrameworkCore.Autofac; using log4net; using Repository.Station; using Service.Execute; using Service.Execute.Api; using Service.Execute.Model; namespace Service.BusinessTask.MyTask; /// /// 充电结束上报云平台task /// public class SwapOrderReportCloudTask : AbstractTaskHandler { private static readonly ILog Log = LogManager.GetLogger(typeof(SwapOrderReportCloudTask)); private readonly SwapOrderReportCloudRepository _reportCloudRepository = AppInfo.Container.Resolve(); private readonly SwapOrderRepository _swapOrderRepository = AppInfo.Container.Resolve(); private readonly SwapOrderBatteryRepository _swapOrderBatteryRepository = AppInfo.Container.Resolve(); private readonly BinInfoRepository _binInfoRepository = AppInfo.Container.Resolve(); protected override int Interval() { return 20 * 1000; } protected override void Handle() { List list = _reportCloudRepository.QueryListByClause(i => i.CloudReportStatus == 0); if (list.Count <= 0) { return; } List swapOrderIds = list.Select(i => i.SwapOrderId).ToList(); List swapOrders = _swapOrderRepository.QueryListByClause(i => swapOrderIds.Contains(i.Id) && i.CloudReportStatus == 0); if (swapOrders.Count <= 0) { return; } List swapOrderSn = swapOrders.Select(i => i.Sn).ToList(); List batterys = _swapOrderBatteryRepository.QueryListByClause(i => swapOrderSn.Contains(i.SwapOrderSn)); if (batterys.Count <= 0) { return; } IDictionary dictionary = batterys.ToDictionary(i => i.SwapOrderSn); List downBatteryBinNos = batterys.Select(i => i.DownBatteryBinNo.ToString()).ToList(); Dictionary binInfosMap = _binInfoRepository .QueryListByClause(i => downBatteryBinNos.Contains(i.No)).ToDictionary(i => i.No); List updateDbBattery = new List(); List updateDbOrder = new List(); List updateDbCloudReport = new List(); Dictionary swapOrderReportClouds = list.ToDictionary(i => i.SwapOrderId); foreach (var swapOrder in swapOrders) { dictionary.TryGetValue(swapOrder.Sn, out SwapOrderBattery swapOrderBattery); if (null == swapOrderBattery) { continue; } if (null == swapOrderBattery.DownBatteryNo) { //更新换下电池包 binInfosMap.TryGetValue(swapOrderBattery.DownBatteryBinNo.ToString(), out BinInfo info); if (info.BatteryNo == null || info.BatteryNo == "") { continue; } swapOrderBattery.DownBatteryNo = info.BatteryNo; swapOrderBattery.DownBatterySoc = info.Soc; swapOrderBattery.DownBatterySoe = info.Soe; updateDbBattery.Add(swapOrderBattery); } //TODO::获取本日第几次换电 var count = _swapOrderRepository.GetCount(i => i.SwapResult == 1 && i.SwapEndTime >= DateTime.Today && i.SwapEndTime < swapOrder.SwapEndTime); var uploadSwapOrder = CloudApi.UploadSwapOrder(swapOrder, count++, swapOrderBattery, 1); if (uploadSwapOrder == 0) { swapOrder.CloudReportStatus = 1; updateDbOrder.Add(swapOrder); swapOrderReportClouds.TryGetValue(swapOrder.Id, out SwapOrderReportCloud value); value.CloudReportStatus = 1; updateDbCloudReport.Add(value); } } if (updateDbBattery.Count > 0) { _swapOrderBatteryRepository.Update(updateDbBattery); } if (updateDbOrder.Count > 0) { _swapOrderRepository.Update(updateDbOrder); } if (updateDbCloudReport.Count > 0) { _reportCloudRepository.Update(updateDbCloudReport); } } protected override string Name() { return "SwapOrderReportCloudTask"; } }