You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

107 lines
3.2 KiB

using Entity.DbModel.Station;
using HybirdFrameworkCore.Autofac.Attribute;
using Repository.Station;
using Service.Execute.Api;
namespace Service.Mgr;
[Scope()]
public class SwapOrderMgr
{
public SwapOrderReportCloudRepository _reportCloudRepository { get; set; }
public SwapOrderRepository _swapOrderRepository { get; set; }
public SwapOrderBatteryRepository _swapOrderBatteryRepository { get; set; }
public bool UploadCloud(List<SwapOrderReportCloud> list, int uploadType)
{
if (list.Count <= 0)
{
return false;
}
List<int> swapOrderIds = list.Select(i => i.SwapOrderId).ToList();
List<SwapOrder> swapOrders =
_swapOrderRepository.QueryListByClause(i => swapOrderIds.Contains(i.Id) && i.CloudReportStatus == 0);
if (swapOrders.Count <= 0)
{
return false;
}
List<string> swapOrderSn = swapOrders.Select(i => i.Sn).ToList();
List<SwapOrderBattery> batterys =
_swapOrderBatteryRepository.QueryListByClause(i =>
swapOrderSn.Contains(i.SwapOrderSn) && i.DownBatteryNo != null && i.DownBatteryNo != "-1"
&& i.DownBatterySoc != -1 && i.DownBatterySoc != null);
if (batterys.Count <= 0)
{
return false;
}
IDictionary<string, SwapOrderBattery> dictionary = batterys.ToDictionary(i => i.SwapOrderSn);
Dictionary<int, SwapOrderReportCloud> swapOrderReportClouds = list.ToDictionary(i => i.SwapOrderId);
List<SwapOrder> updateDbOrder = new List<SwapOrder>();
List<SwapOrderReportCloud> updateDbCloudReport = new List<SwapOrderReportCloud>();
foreach (var swapOrder in swapOrders)
{
dictionary.TryGetValue(swapOrder.Sn, out SwapOrderBattery swapOrderBattery);
if (null == swapOrderBattery)
{
continue;
}
if (null == swapOrderBattery.DownBatteryNo || "-1".Equals(swapOrderBattery.DownBatteryNo))
{
continue;
}
if (null == swapOrderBattery.DownBatterySoc || -1 == swapOrderBattery.DownBatterySoc)
{
continue;
}
if (string.IsNullOrEmpty(swapOrder.CloudSn))
{
continue;
}
var count = _swapOrderRepository.GetCount(i =>
i.SwapResult == 1 && i.SwapEndTime >= DateTime.Today && i.SwapEndTime < swapOrder.SwapEndTime);
swapOrderReportClouds.TryGetValue(swapOrder.Id, out SwapOrderReportCloud value);
CloudApi.UploadCloudSwapFinish(swapOrder.VehicleNo, swapOrder.CloudSn, swapOrderBattery.DownBatterySoc.ToString(), swapOrderBattery.UpBatterySoc.ToString());
swapOrder.CloudReportStatus = 1;
updateDbOrder.Add(swapOrder);
value.CloudReportStatus = 1;
value.UploadTime = DateTime.Now;
updateDbCloudReport.Add(value);
}
if (updateDbOrder.Count > 0)
{
_swapOrderRepository.Update(updateDbOrder);
}
if (updateDbCloudReport.Count > 0)
{
_reportCloudRepository.Update(updateDbCloudReport);
}
return true;
}
}