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.

165 lines
5.0 KiB

using Entity.Dto.Resp;
using HybirdFrameworkCore.Entity;
using Microsoft.AspNetCore.Mvc;
using Repository.Station;
using Service.Charger.Client;
using Service.Charger.Common;
using Service.Charger.Msg.Http.Req;
using Service.Charger.Server;
using Service.Init;
using Service.Station;
namespace WebStarter.Controllers;
/// <summary>
/// 站外充电机管理
/// </summary>
[Produces("application/json")]
[ApiController]
[Route("api/[controller]")]
public class OutChargerController
{
private ChargeOrderRepository _chargeOrderRepository;
private BinInfoService _binInfoService;
private BinGunInfoRepository _binGunInfoRepository;
public OutChargerController(ChargeOrderRepository chargeOrderRepository,BinInfoService binInfoService,BinGunInfoRepository binGunInfoRepository)
{
_chargeOrderRepository = chargeOrderRepository;
_binInfoService = binInfoService;
_binGunInfoRepository = binGunInfoRepository;
}
/// <summary>
/// 云平台下发开始充电操作
/// </summary>
/// <param name="httpReq"></param>
/// <returns></returns>
[HttpPost]
[Route("SendStartOutCharger")]
public Result<bool> SendStartOutCharger([FromBody] PileStartChargeHttpReq httpReq)
{
byte.TryParse(httpReq.pn,out var chargerGunCode );
ChargerClient? chargerClient = ServerMgr.GetBySn(httpReq.ChargeNo);
if (chargerClient == null)
{
return Result<bool>.Fail("充电机未连接");
}
string chargeGunOrder = ChargerUtils.GenChargeOrderSn();
if (string.IsNullOrWhiteSpace(httpReq.con))
{
httpReq.con = chargeGunOrder;
}
ChargerPile chargerPile = new()
{
ct = httpReq.ct,
cp = httpReq.cp,
st = httpReq.st,
con = httpReq.con,
cosn = chargeGunOrder,
pn = httpReq.pn,
};
if (chargerGunCode==1)
chargerClient.ChargerPile1 = chargerPile;
else
chargerClient.ChargerPile2 = chargerPile;
byte chargeSoc = StaticStationInfo.ChargeSoc;
// 下发充电枪充电
chargerClient.SendStartOutCharger(chargerGunCode, chargeSoc, 20, 1, chargeGunOrder);
// 初始化订单
_chargeOrderRepository.SaveChargeGunOrder(chargeGunOrder, httpReq.con,httpReq.ChargeNo , httpReq.pn,
chargerGunCode.ToString());
return Result<bool>.Success(true);
}
/// <summary>
/// 云端下发充电枪停止充电
/// </summary>
/// <param name="httpReq"></param>
/// <returns></returns>
[HttpPost]
[Route("SendStopOutCharger")]
public Result<bool> SendStopOutCharger([FromBody] PileStopChargeHttpReq httpReq)
{
byte.TryParse(httpReq.pn,out var chargerGunCode );
ChargerClient? chargerClient = ServerMgr.GetBySn(httpReq.ChargeNo);
if (chargerClient == null)
{
return Result<bool>.Fail("充电机未连接");
}
// 下发充电枪停止充电
return chargerClient.SendStopOutCharger(chargerGunCode, 0);
}
/// <summary>
/// 给充电枪发送功率调节指令
/// </summary>
/// <param name="code">充电机code</param>
/// <param name="pn">1枪 or 2枪</param>
/// <param name="power">功率</param>
/// <returns></returns>
[HttpGet]
[Route("SendPowerRegulation/{code}/{pn}/{power}")]
public Result<bool> SendPowerRegulation(string code,byte pn, float power)
{
if (power <=0 || power > 280)
{
return Result<bool>.Fail("功率值范围1到360");
}
if (pn != 1 && pn != 2)
{
return Result<bool>.Fail("请选择1枪或者2枪");
}
string _code = _binInfoService.QueryByClause(i => i.Code == code).ChargerNo;
ChargerClient? chargerClient = ServerMgr.GetBySn(_code);
if (chargerClient != null)
{
chargerClient.SendPileAdjustPower(pn,power);
return Result<bool>.Success(true);
}
return Result<bool>.Fail("充电机未连接");
}
/// <summary>
/// 获取充电桩信息
/// </summary>
/// <returns></returns>
[HttpGet]
[Route("GetChargerPile")]
public Result<List<ChargerPileResp>> GetChargerPile()
{
var chargerClients = ServerMgr.Dictionary;
if (chargerClients.IsEmpty)
{
return Result<List<ChargerPileResp>>.Fail("没有充电机连接");
}
var list = chargerClients.Values.Select(client => new ChargerPileResp
{
Sn = client.Sn,
GunChargedOne = client.GunCharged[1],
GunChargedTwo = client.GunCharged[2],
ChargedPileOne = client.ChargedPile[1],
ChargedPileTwo = client.ChargedPile[2],
ChargePilePowerOne = client.ChargePilePower[1],
ChargePilePowerTwo = client.ChargePilePower[2]
}).ToList();
return Result<List<ChargerPileResp>>.Success(list);
}
}