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.6 KiB

using Entity.DbModel.Station;
using HybirdFrameworkCore.Autofac.Attribute;
using HybirdFrameworkCore.AutoTask;
using log4net;
using Repository.Station;
using Service.Init;
namespace Service.MyTask;
/// <summary>
/// 换电订单算费用
/// </summary>
[Scope]
public class SwapOrderSettleAnAccountTask : ITask
{
private static readonly ILog Log = LogManager.GetLogger(typeof(SwapOrderSettleAnAccountTask));
private volatile bool _stop;
private SwapOrderBatteryRepository SwapOrderBatteryRepository { get; set; }
private SwapOrderRepository SwapOrderRepository { get; set; }
public SwapOrderSettleAnAccountTask(SwapOrderBatteryRepository swapOrderBatteryRepository,
SwapOrderRepository swapOrderRepository)
{
SwapOrderBatteryRepository = swapOrderBatteryRepository;
SwapOrderRepository = swapOrderRepository;
}
public string Name()
{
return "SwapOrderSettleAnAccountTask";
}
public int Interval()
{
return 1000 * 2;
}
public void Handle()
{
Log.Info("Begin SwapOrderSettleAnAccountTask");
List<SwapOrderBattery> listSwapOrderBattery = SwapOrderBatteryRepository.QueryListByClause(i =>
1 month ago
i.DownNominalEnergy >0 && i.UpNominalEnergy >0 && i.SettleAnAccountFlag == null);
if (listSwapOrderBattery.Count > 0)
{
List<string?> list = listSwapOrderBattery.Select(resp => resp.SwapOrderSn).ToList();
List<SwapOrder> swapOrderList = SwapOrderRepository
.Queryable()
.In(swapOrder => swapOrder.Sn, list)
.ToList();
// 电费单价
decimal electricityTotalFee = StaticStationInfo.ElectricityTotalFee;
// 换电服务费用
decimal serviceTotalFee = StaticStationInfo.ServiceTotalFee;
// 附加费用
decimal appendTotalFee = StaticStationInfo.AppendTotalFee;
foreach (var swapOrderBattery in listSwapOrderBattery)
{
// 换上的满电包soc*满电包的电池标量
decimal? upNominalEnergy = swapOrderBattery.UpBatterySoc * swapOrderBattery.UpNominalEnergy;
// 换下的亏电包soc*亏电包的电池标量
decimal? downNominalEnergy = swapOrderBattery.DownBatterySoc * swapOrderBattery.DownNominalEnergy;
// 电量费用
decimal? electricCharge = (upNominalEnergy - downNominalEnergy) * electricityTotalFee;
var matchingOrder = swapOrderList.FirstOrDefault(order => order.Sn == swapOrderBattery.SwapOrderSn);
if (matchingOrder != null)
{
matchingOrder.ServiceTotalFee = serviceTotalFee;
matchingOrder.ElectricityTotalFee = electricCharge;
matchingOrder.AppendTotalFee = appendTotalFee;
matchingOrder.TotalFee = matchingOrder.ServiceTotalFee + matchingOrder.ElectricityTotalFee +
matchingOrder.AppendTotalFee;
// 标记换电订单已经算了订单价钱
swapOrderBattery.SettleAnAccountFlag = 1;
}
}
SwapOrderRepository.Update(swapOrderList);
SwapOrderBatteryRepository.Update(listSwapOrderBattery);
}
}
public bool Stoped()
{
return _stop;
}
public void Stop()
{
_stop = true;
}
public void ResetStop()
{
_stop = false;
}
}