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.

230 lines
9.2 KiB

using System.Collections.Concurrent;
using Entity.DbModel.Station;
using Entity.Dto.Resp;
using HybirdFrameworkCore.Autofac.Attribute;
using HybirdFrameworkCore.Entity;
using Repository.Station;
using Service.Charger.Client;
using Service.Charger.Msg.Host.Req;
using Service.Init;
using Service.WaterCool.Client;
using SqlSugar;
namespace Service.Charger;
/// <summary>
/// 充电机服务
/// </summary>
[Scope]
public class ChargerService
{
public BinInfoRepository BinInfoRepository { get; set; }
public EquipInfoRepository EquipInfoRepository { get; set; }
public ElecPriceModelVersionDetailRepository ElecPriceModelVersionDetailRepository { get; set; }
/// <summary>
/// 启动充电
/// </summary>
/// <param name="binNo"></param>
/// <returns></returns>
public Result<bool> StartChargeByBinNo(string binNo)
{
BinInfo? binInfo = BinInfoRepository.QueryByBinNo(binNo);
if (binInfo == null)
{
return Result<bool>.Fail(@"充电仓不存在");
}
if (string.IsNullOrWhiteSpace(binInfo.ChargerNo))
{
return Result<bool>.Fail(@"充电仓未配置充电机编号");
}
ChargerClient? chargerClient = ClientMgr.GetBySn(binInfo.ChargerNo);
if (chargerClient == null || !chargerClient.Connected)
{
return Result<bool>.Fail(@"充电机未连接");
}
byte chargeSoc = StaticStationInfo.ChargeSoc;
float? chargePower = EquipInfoRepository.QueryPowerByCode(binInfo.ChargerNo);
float? power = chargePower == null ? StaticStationInfo.ChargePower : chargePower;
return chargerClient.StartCharge(chargeSoc, (float)power, 1);
}
/// <summary>
/// 停止充电
/// </summary>
/// <param name="binNo"></param>
/// <returns></returns>
public Result<bool> StopChargeByBinNo(string binNo)
{
BinInfo? binInfo = BinInfoRepository.QueryByBinNo(binNo);
if (binInfo == null)
{
return Result<bool>.Fail(@"充电仓不存在");
}
if (string.IsNullOrWhiteSpace(binInfo.ChargerNo))
{
return Result<bool>.Fail(@"充电仓未配置充电机编号");
}
ChargerClient? chargerClient = ClientMgr.GetBySn(binInfo.ChargerNo);
if (chargerClient == null || !chargerClient.Connected)
{
return Result<bool>.Fail(@"充电机未连接");
}
//
WaterCoolClientMgr.Dictionary.TryGetValue(StaticStationInfo.RelationMap[chargerClient.Sn].WaterCoolerCode,
out WaterCoolClient client);
if (client == null)
{
return Result<bool>.Fail("未初始化液冷");
}
if (!client.HeartManageStop())
{
return Result<bool>.Fail("液冷系统断开失败");
}
client.StopFlag = true;
chargerClient.SendRemoteStopCharging();
return Result<bool>.Success(true, "发送停止命令成功");
}
/// <summary>
/// 下发尖峰平谷
/// </summary>
/// <param name="binNo"></param>
/// <returns></returns>
public Result<bool> DistributeElecPriceForCharge(int version)
{
ConcurrentDictionary<string, ChargerClient> chargerClients = ClientMgr.Dictionary;
if (chargerClients.Values.Count <= 0)
{
return Result<bool>.Fail();
}
foreach (var chargerClientsValue in chargerClients.Values)
{
if (chargerClientsValue.Connected)
{
chargerClientsValue.SendSetPeakValleyTime(BulidSetPeakValleyTimeObj(version));
}
}
return Result<bool>.Success();
}
public SetPeakValleyTime BulidSetPeakValleyTimeObj(int version)
{
List<ElecPriceModelVersionDetail> elecPriceModelVersionDetails =
ElecPriceModelVersionDetailRepository.QueryListByClause(u => u.Version == version, u => u.StartHour,
OrderByType.Asc);
SetPeakValleyTime setPeakValleyTime = new SetPeakValleyTime()
{
NumberTime = Convert.ToByte(elecPriceModelVersionDetails.Count),
StartHH1 = (byte)(elecPriceModelVersionDetails.Count > 0
? Convert.ToByte(elecPriceModelVersionDetails[0].StartHour)
: 0),
StartHH2 = (byte)(elecPriceModelVersionDetails.Count > 1
? Convert.ToByte(elecPriceModelVersionDetails[1].StartHour)
: 0),
StartHH3 = (byte)(elecPriceModelVersionDetails.Count > 2
? Convert.ToByte(elecPriceModelVersionDetails[2].StartHour)
: 0),
StartHH4 = (byte)(elecPriceModelVersionDetails.Count > 3
? Convert.ToByte(elecPriceModelVersionDetails[3].StartHour)
: 0),
StartHH5 = (byte)(elecPriceModelVersionDetails.Count > 4
? Convert.ToByte(elecPriceModelVersionDetails[4].StartHour)
: 0),
StartHH6 = (byte)(elecPriceModelVersionDetails.Count > 5
? Convert.ToByte(elecPriceModelVersionDetails[5].StartHour)
: 0),
StartHH7 = (byte)(elecPriceModelVersionDetails.Count > 6
? Convert.ToByte(elecPriceModelVersionDetails[6].StartHour)
: 0),
StartHH8 = (byte)(elecPriceModelVersionDetails.Count > 7
? Convert.ToByte(elecPriceModelVersionDetails[7].StartHour)
: 0),
StartMM1 = (byte)(elecPriceModelVersionDetails.Count > 0
? Convert.ToByte(elecPriceModelVersionDetails[0].StartMinute)
: 0),
StartMM2 = (byte)(elecPriceModelVersionDetails.Count > 1
? Convert.ToByte(elecPriceModelVersionDetails[1].StartMinute)
: 0),
StartMM3 = (byte)(elecPriceModelVersionDetails.Count > 2
? Convert.ToByte(elecPriceModelVersionDetails[2].StartMinute)
: 0),
StartMM4 = (byte)(elecPriceModelVersionDetails.Count > 3
? Convert.ToByte(elecPriceModelVersionDetails[3].StartMinute)
: 0),
StartMM5 = (byte)(elecPriceModelVersionDetails.Count > 4
? Convert.ToByte(elecPriceModelVersionDetails[4].StartMinute)
: 0),
StartMM6 = (byte)(elecPriceModelVersionDetails.Count > 5
? Convert.ToByte(elecPriceModelVersionDetails[5].StartMinute)
: 0),
StartMM7 = (byte)(elecPriceModelVersionDetails.Count > 6
? Convert.ToByte(elecPriceModelVersionDetails[6].StartMinute)
: 0),
StartMM8 = (byte)(elecPriceModelVersionDetails.Count > 7
? Convert.ToByte(elecPriceModelVersionDetails[7].StartMinute)
: 0),
TimePeak1 = (byte)(elecPriceModelVersionDetails.Count > 0
? Convert.ToByte(elecPriceModelVersionDetails[0].Type)
: 0),
TimePeak2 = (byte)(elecPriceModelVersionDetails.Count > 1
? Convert.ToByte(elecPriceModelVersionDetails[1].Type)
: 0),
TimePeak3 = (byte)(elecPriceModelVersionDetails.Count > 2
? Convert.ToByte(elecPriceModelVersionDetails[2].Type)
: 0),
TimePeak4 = (byte)(elecPriceModelVersionDetails.Count > 3
? Convert.ToByte(elecPriceModelVersionDetails[3].Type)
: 0),
TimePeak5 = (byte)(elecPriceModelVersionDetails.Count > 4
? Convert.ToByte(elecPriceModelVersionDetails[4].Type)
: 0),
TimePeak6 = (byte)(elecPriceModelVersionDetails.Count > 5
? Convert.ToByte(elecPriceModelVersionDetails[5].Type)
: 0),
TimePeak7 = (byte)(elecPriceModelVersionDetails.Count > 6
? Convert.ToByte(elecPriceModelVersionDetails[6].Type)
: 0),
TimePeak8 = (byte)(elecPriceModelVersionDetails.Count > 7
? Convert.ToByte(elecPriceModelVersionDetails[7].Type)
: 0)
};
return setPeakValleyTime;
}
/// <summary>
/// 电池状态信息:电池总数 满电数量、充电中、故障电池、维护中电池
/// </summary>
/// <returns></returns>
public Result<BatteryStatusInfoResp> BatteryStatusInfo()
{
BatteryStatusInfoResp batteryStatusInfoResp = new BatteryStatusInfoResp();
List<BinInfo> binInfos = BinInfoRepository.QueryListByClause(i => i.Exists == 1 && i.Status == 1);
if (binInfos.Count > 0)
batteryStatusInfoResp.btyTotalCount = binInfos.Count();
List<BinInfo> canSwapCounts = BinInfoRepository.QueryListByClause(i =>
i.Exists == 1 && i.Status == 1 && i.Soc >= Convert.ToDecimal(StaticStationInfo.SwapSoc) &&
i.ChargeStatus != 1);
if (canSwapCounts.Count > 0)
batteryStatusInfoResp.canSwapCount = canSwapCounts.Count();
List<BinInfo> chargingCounts =
BinInfoRepository.QueryListByClause(i => i.Exists == 1 && i.Status == 1 && i.ChargeStatus == 1);
if (chargingCounts.Count > 0)
batteryStatusInfoResp.chargingCount = chargingCounts.Count();
return Result<BatteryStatusInfoResp>.Success(batteryStatusInfoResp);
}
}