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.Init; namespace WebStarter.Controllers; /// /// 站外充电机管理 /// [Produces("application/json")] [ApiController] [Route("api/[controller]")] public class OutChargerController { private ChargeOrderRepository _chargeOrderRepository; public OutChargerController(ChargeOrderRepository chargeOrderRepository) { _chargeOrderRepository = chargeOrderRepository; } /// /// 云平台下发开始充电操作 /// /// /// [HttpPost] [Route("SendStartOutCharger")] public Result SendStartOutCharger([FromBody] PileStartChargeHttpReq httpReq) { string chargerCode = ChargerUtils.GetOutChargerCode(httpReq.pn); byte chargerGunCode = ChargerUtils.GetTheGun(httpReq.pn); ChargerClient? chargerClient = ClientMgr.GetBySn(chargerCode); if (chargerClient == null) { return Result.Fail("充电机未连接"); } string chargeGunOrder = ChargerUtils.GenChargeOrderSn(); if (string.IsNullOrWhiteSpace(httpReq.con)) { httpReq.con = chargeGunOrder; } chargerClient.ChargerPile[chargerGunCode].ct = httpReq.ct; chargerClient.ChargerPile[chargerGunCode].cp = httpReq.cp; chargerClient.ChargerPile[chargerGunCode].st = httpReq.st; chargerClient.ChargerPile[chargerGunCode].con = httpReq.con; chargerClient.ChargerPile[chargerGunCode].cosn = chargeGunOrder; chargerClient.ChargerPile[chargerGunCode].pn = httpReq.pn; byte chargeSoc = StaticStationInfo.ChargeSoc; // 下发充电枪充电 chargerClient.SendStartOutCharger(chargerGunCode, chargeSoc, 360, 1, chargeGunOrder); // 初始化订单 _chargeOrderRepository.SaveChargeGunOrder(chargeGunOrder, httpReq.con, chargerCode, httpReq.pn, chargerGunCode.ToString()); return Result.Success(true); } /// /// 云端下发充电枪停止充电 /// /// /// [HttpPost] [Route("SendStopOutCharger")] public Result SendStopOutCharger([FromBody] PileStopChargeHttpReq httpReq) { string chargerCode = ChargerUtils.GetOutChargerCode(httpReq.pn); byte chargerGunCode = ChargerUtils.GetTheGun(httpReq.pn); ChargerClient? chargerClient = ClientMgr.GetBySn(chargerCode); if (chargerClient == null) { return Result.Fail("充电机未连接"); } // 下发充电枪停止充电 chargerClient.SendStopOutCharger(chargerGunCode, 0); return Result.Success(true); } /// /// 给充电枪发送功率调节指令 /// /// 充电机code /// 1枪 or 2枪 /// 功率 /// [HttpGet] [Route("SendPowerRegulation/{code}/{pn}/{power}")] public Result SendPowerRegulation(string code,byte pn, float power) { if (power <=0 || power > 280) { return Result.Fail("功率值范围1到360"); } if (pn != 1 && pn != 2) { return Result.Fail("请选择1枪或者2枪"); } ChargerClient? chargerClient = ClientMgr.GetBySn(code); if (chargerClient != null) { chargerClient.SendPileAdjustPower(pn,power); return Result.Success(true); } return Result.Fail("充电机未连接"); } /// /// 获取充电桩信息 /// /// [HttpGet] [Route("GetChargerPile")] public Result> GetChargerPile() { var chargerClients = ClientMgr.Dictionary; if (chargerClients.IsEmpty) { return Result>.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>.Success(list); } }