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.

114 lines
3.5 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);
var uploadSwapOrder = CloudApi.UploadSwapOrder(swapOrder, count++, swapOrderBattery, uploadType,value);
if (uploadSwapOrder == 0)
{
swapOrder.CloudReportStatus = 1;
updateDbOrder.Add(swapOrder);
// value.CloudReportStatus = 1000;
value.UploadTime = DateTime.Now;
}
else
{
//当 cloudReportStatus >=100 就不需要上传了
value.CloudReportStatus++;
}
updateDbCloudReport.Add(value);
}
if (updateDbOrder.Count > 0)
{
_swapOrderRepository.Update(updateDbOrder);
}
if (updateDbCloudReport.Count > 0)
{
_reportCloudRepository.Update(updateDbCloudReport);
}
return true;
}
}