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.

333 lines
11 KiB

using Entity.Constant;
using Entity.DbModel.Station;
using log4net;
using Newtonsoft.Json;
using Service.Cloud.Client;
using Service.Cloud.Msg.Cloud.Req;
using Service.Cloud.Msg.Cloud.Resp;
using Service.Cloud.Msg.Host.Req;
6 months ago
using Service.Cloud.Msg.Host.Req.OutCharger;
using Service.Execute.Model;
using Service.Execute.Model.Tbox;
using Service.Init;
namespace Service.Execute.Api;
public abstract class CloudApi
{
private const int TimeSpan = 10;
private static readonly ILog Log = LogManager.GetLogger("CloudApi");
/// <summary>
/// 云平台车辆认证
/// </summary>
/// <param name="rfidReadModel"></param>
/// <returns></returns>
public static CarAuthRes? VehicleCheck(RfidReadModel rfidReadModel, SwapOrder swapOrder)
{
CarAuth carAuth = new()
{
ty = 2,
rfid = rfidReadModel.VelVin,
cn = rfidReadModel.VelNo,
vi = rfidReadModel.VelVin,
// mac = rfidReadModel.VelMac,
en = 0,
dt = swapOrder.VehicleEnterTime,
mode = 0,
};
Log.Info(
$" CloudApi VehicleCheck SendVehicleCertification param={JsonConvert.SerializeObject(carAuth)}");
CarAuthRes? sendVehicleCertification =
CloudClientMgr.CloudClient?.SendVehicleCertification(carAuth,
global::System.TimeSpan.FromSeconds(TimeSpan));
Log.Info(
$" CloudApi VehicleCheck SendVehicleCertification resp={JsonConvert.SerializeObject(sendVehicleCertification)}");
7 months ago
return sendVehicleCertification;
}
/// <summary>
/// 上报换电订单
/// </summary>
/// <param name="rfidReadModel"></param>
/// <param name="swapOrder"></param>
/// <returns></returns>
public static int UploadSwapOrder(SwapOrder swapOrder, int seq, SwapOrderBattery swapOrderBattery, int uploadType
,SwapOrderReportCloud orderReportCloud)
{
StaSwapRecord staSwapRecord = new()
{
rfid = swapOrder.VehicleVin,
sn = StaticStationInfo.StationNo,
son = swapOrder.CloudSn,
cn = swapOrder.VehicleNo,
so = seq,
ct = swapOrder.VehicleEnterTime,
st = swapOrder.SwapBeginTime,
dbid = swapOrderBattery.UpBatteryNo,
deno = swapOrderBattery.UpBatteryBinNo,
dsoc = swapOrderBattery.UpBatterySoc.ToInt(),
//dsoe = swapOrderBattery.UpBatterySoe.ToInt(),
et = swapOrder.SwapEndTime,
od = 0,
ot = swapOrder.VehicleLeaveTime,
rs = 0,
sflx = 0,
sfs = uploadType,
ubid = swapOrderBattery.DownBatteryNo,
ueno = swapOrderBattery.DownBatteryBinNo,
usoc = swapOrderBattery.DownBatterySoc.ToInt(),
// usoe = swapOrderBattery.DownBatterySoe.ToInt(),
vin = swapOrder.VehicleVin,
wt = new TimeSpan((swapOrder.SwapEndTime.ToDateTime().Ticks - swapOrder.SwapBeginTime.ToDateTime().Ticks))
.TotalSeconds.ToInt(),
vtm=orderReportCloud.Vtm,
};
Log.Info(
$" CloudApi UploadSwapOrder seq={seq} SendUploadPowerChangeOrder param={JsonConvert.SerializeObject(staSwapRecord)}");
StaSwapRecordRes? sendUploadPowerChangeOrder = CloudClientMgr.CloudClient?.SendUploadPowerChangeOrder(
staSwapRecord,
global::System.TimeSpan.FromSeconds(TimeSpan));
Log.Info(
$" CloudApi UploadSwapOrder seq={seq} SendUploadPowerChangeOrder resp={JsonConvert.SerializeObject(sendUploadPowerChangeOrder)}");
if (sendUploadPowerChangeOrder == null)
{
return -1;
}
return sendUploadPowerChangeOrder.re;
}
5 months ago
public static InfoEnum.BusinessSwappingForCloudState BusinessSwappingForCloudState =
InfoEnum.BusinessSwappingForCloudState.Idle;
/// <summary>
/// 上报换电步序到云端
/// </summary>
/// <param name="state"></param>
5 months ago
/// <param name="daad">是否空闲</param>
public static void SendStateLog( int state)
{
5 months ago
if (BusinessSwappingForCloudState!= StationSoftMgr.SwappingStateMachine.BusinessSwappingForCloudState)
{
5 months ago
StationChnRunStatus stationChnRunStatus = null;
5 months ago
if (state == 1)
{
stationChnRunStatus = new()
{
ec = 0,
ws = StationSoftMgr.SwappingStateMachine.SwapStatus == 0 ? 2 : 3,
cs = (int)StationSoftMgr.SwappingStateMachine.BusinessSwappingForCloudState,
iv = StationSoftMgr.SwappingStateMachine.RadarInFlag == true ? 1 : 2,
ls = StationSoftMgr.SwappingStateMachine.VelUnlockFlag == true ? 2 : 1,
fl = 0,
ut = DateTime.Now,
};
}
else
{
stationChnRunStatus = new()
{
ec = 0,
ws = 1,
cs = 1,
iv = 2,
ls = 0,
fl = 0,
ut = DateTime.Now,
};
}
CloudClientMgr.CloudClient?.SendChannelStatusReporting(stationChnRunStatus,
global::System.TimeSpan.FromSeconds(TimeSpan));
for (int i = 0; i < 3; i++)
{
}
}
BusinessSwappingForCloudState = StationSoftMgr.SwappingStateMachine.BusinessSwappingForCloudState;
return;
}
/// <summary>
/// 上报车辆数据
/// </summary>
public static void UploadTBoxCarInfo(SwapOrder swapOrder, TboxCarInfoModel model)
{
return;
}
/// <summary>
/// 云平台下发换电指令
/// </summary>
/// <returns></returns>
public static CarCanStart CarCanStart()
{
Log.Info(
$" CloudApi CarCanStart ");
var cloudClientCarCanStart = CloudClientMgr.CloudClient.CarCanStart;
Log.Info(
7 months ago
$" CloudApi CarCanStart resp= {JsonConvert.SerializeObject(cloudClientCarCanStart)}");
return cloudClientCarCanStart;
}
/// <summary>
/// 清除下发的换电指令
/// </summary>
/// <returns></returns>
public static bool ClearCarCanStartInfo()
{
CloudClientMgr.CloudClient.CarCanStart = null;
return true;
}
6 months ago
/// <summary>
/// 9.2.1.3 站控上报充电枪充电结束事件
/// </summary>
/// <param name="req"></param>
public static void SendPileEndCharge(PileEndCharge req)
{
CloudClientMgr.CloudClient?.SendPileEndCharge(req,
global::System.TimeSpan.FromSeconds(TimeSpan));
}
/// <summary>
/// 9.2.1.7 站控上报充电枪充电遥测数据
/// </summary>
/// <param name="req"></param>
public static void SendPileChargeRealtime(PileChargeRealtime req)
{
CloudClientMgr.CloudClient?.SendPileChargeRealtime(req,
global::System.TimeSpan.FromSeconds(TimeSpan));
}
6 months ago
/// <summary>
/// 9.2.1.5 站控上报充电枪实时数据上报
/// </summary>
/// <param name="req"></param>
public static void SendPileRealtime(PileRealtime req)
{
CloudClientMgr.CloudClient?.SendPileRealtime(req,
global::System.TimeSpan.FromSeconds(TimeSpan));
}
5 months ago
/// <summary>
/// 换电站状态上报
/// </summary>
/// <param name="req"></param>
public static void SendHostStatusReported(StationRunStatus req)
{
CloudClientMgr.CloudClient?.SendHostStatusReported(req,
global::System.TimeSpan.FromSeconds(TimeSpan));
}
/// <summary>
/// 空调信息
/// </summary>
/// <param name="req"></param>
public static void SendAirConditioningData(AcDataInfo req)
{
CloudClientMgr.CloudClient?.SendAirConditioningData(req,
global::System.TimeSpan.FromSeconds(TimeSpan));
}
/// <summary>
/// 换电站温湿度数据信息
/// </summary>
/// <param name="req"></param>
public static void SendEvmDataInfo(EvmDataInfo req)
{
CloudClientMgr.CloudClient?.SendEvmDataInfo(req,
global::System.TimeSpan.FromSeconds(TimeSpan));
}
/// <summary>
/// 电能表累计值信息
/// </summary>
/// <param name="req"></param>
public static void SendPowerTotal(PowerTotal req)
{
CloudClientMgr.CloudClient?.SendPowerTotal(req,
global::System.TimeSpan.FromSeconds(TimeSpan));
}
/// <summary>
/// 换电站电能表变化值信息
/// </summary>
/// <param name="req"></param>
public static void SendStaChargingTotal(StaChargingTotal req)
{
CloudClientMgr.CloudClient?.SendStaChargingTotal(req,
global::System.TimeSpan.FromSeconds(TimeSpan));
}
/// <summary>
/// 换电站分时用电统计信息
/// </summary>
/// <param name="req"></param>
public static void SendStaHourEnergyVal(StaHourEnergyVal req)
{
CloudClientMgr.CloudClient?.SendStaHourEnergyVal(req,
global::System.TimeSpan.FromSeconds(TimeSpan));
}
/// <summary>
/// 电能表小时能耗值信息
/// </summary>
/// <param name="req"></param>
public static void SendMeterEnergyKwh(MeterEnergyKwh req)
{
CloudClientMgr.CloudClient?.SendMeterEnergyKwh(req,
global::System.TimeSpan.FromSeconds(TimeSpan));
}
/// <summary>
/// 电能表每天能耗值信息
/// </summary>
/// <param name="req"></param>
public static void SendMeterDayEnergyVal(MeterDayEnergyVal req)
{
CloudClientMgr.CloudClient?.SendMeterDayEnergyVal(req,
global::System.TimeSpan.FromSeconds(TimeSpan));
}
/// <summary>
/// 换电站每天用电统计信息
/// </summary>
/// <param name="req"></param>
public static void SendStaDayEnergyVal(StaDayEnergyVal req)
{
CloudClientMgr.CloudClient?.SendStaDayEnergyVal(req,
global::System.TimeSpan.FromSeconds(TimeSpan));
}
/// <summary>
/// 换电站日运行统计结果信息
/// </summary>
/// <param name="req"></param>
public static void SendStaDayOpeEnergyVal(StaDayOpeEnergyVal req)
{
CloudClientMgr.CloudClient?.SendStaDayOpeEnergyVal(req,
global::System.TimeSpan.FromSeconds(TimeSpan));
}
/// <summary>
/// 换电站分时用电计费信息
/// </summary>
/// <param name="req"></param>
public static void SendStaHourAmountVal(StaHourAmountVal req)
{
CloudClientMgr.CloudClient?.SendStaHourAmountVal(req,
global::System.TimeSpan.FromSeconds(TimeSpan));
}
}