using Autofac;
using Entity.Api.Req;
using Entity.Api.Resp;
using Entity.DbModel.Station;
using HybirdFrameworkCore.Autofac;
using HybirdFrameworkCore.Entity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Localization;
using Newtonsoft.Json;
using Service.Charger.Msg.Host.Req;
using Service.Charger.Server;
using Service.Execute.Api;
using Service.RealTime;
using Service.Sound.SoundClient;
using Service.Station;
namespace WebStarter.Controllers;
///
/// 充电大屏
///
[ApiController]
[Route("api/[controller]")]
public class ChargeMonitorController
{
private readonly BinInfoService _binInfoService;
private readonly MonitorService _monitorService;
private readonly IStringLocalizer _localizer;
public ChargeMonitorController(IStringLocalizer localizer, BinInfoService binInfoService,
MonitorService monitorService)
{
_localizer = localizer;
_binInfoService = binInfoService;
_monitorService = monitorService;
}
///
/// 仓位预约
///
/// 仓位
///
///
///
[HttpPost("BinInfoMakeAnAppointment/{binNo}/{amtLock}")]
public async Task> BinInfoMakeAnAppointment(string binNo, int amtLock)
{
BinInfo binInfo = await _binInfoService.QueryByClauseAsync(u => u.No == binNo);
if (binInfo == null)
throw new Exception("充电仓不存在");
binInfo.AmtLock = amtLock;
bool result = await _binInfoService.UpdateAsync(binInfo);
if (result)
return Result.Success(result);
else
return Result.Fail(result);
}
///
/// 修改仓位电池编码
///
///
///
///
///
[HttpPost("UpdateBatteryNo/{binNo}/{batteryNo}")]
public async Task> UpdateBatteryNo(string binNo, string batteryNo)
{
BinInfo binInfo = await _binInfoService.QueryByClauseAsync(u => u.No == binNo);
if (binInfo == null)
throw new Exception("充电仓不存在");
BinInfo binInfoBatteryNo = await _binInfoService.QueryByClauseAsync(u => u.BatteryNo == batteryNo);
if (binInfoBatteryNo != null)
{
throw new Exception("已存在相同电池编码");
}
binInfo.BatteryNo = batteryNo;
bool result = await _binInfoService.UpdateAsync(binInfo);
if (result)
return Result.Success(result);
else
return Result.Fail(result);
}
///
/// 充电仓查询:条件:仓位编号 仓位名称
///
[HttpPost("ChargePositionQuery")]
public async Task>> ChargePositionQuery(
[FromBody] ChargePositionQueryReq chargePositionQueryReq)
{
PageResult respList = await _binInfoService.ChargePositionQuery(chargePositionQueryReq);
if (respList.Rows != null)
{
foreach (var resp in respList.Rows)
{
resp.Name = _localizer[resp.Name];
}
}
return Result>.Success(respList);
}
///
/// 充电仓 0:禁用 1:启用
///
/// 仓位编号
/// 仓位状态:0-禁用、1-启用
///
///
[HttpPost("SetChargingBinStatus/{binNo}/{status}")]
public async Task> ChargingBinDisable(string binNo, int status)
{
BinInfo binInfo = await _binInfoService.QueryByClauseAsync(u => u.No == binNo);
if (binInfo == null)
throw new Exception("充电仓不存在");
binInfo.Status = status;
bool result = await _binInfoService.UpdateAsync(binInfo);
if (result)
return Result.Success(result);
else
return Result.Fail(result);
}
///
/// 电池移仓
///
/// 取仓号
/// 放仓号
///
[HttpGet("BatteryRelocation")]
public async Task> BatteryRelocation(ushort removeBinNo, ushort putBinNo)
{
return _monitorService.BatteryRelocation(removeBinNo, putBinNo);
}
///
/// 移库
///
/// 取仓号
/// 放仓号
///
[HttpGet("Relocation")]
public async Task> Relocation(ushort removeBinNo, ushort putBinNo)
{
return _monitorService.Relocation(removeBinNo, putBinNo, 1);
}
/*///
/// 维修仓-车辆
///
/// 取仓号
/// 放仓号
///
[HttpGet("MaintenanceVehicle")]
public async Task> MaintenanceVehicle(ushort removeBinNo, ushort putBinNo)
{
return _monitorService.Maintenance(removeBinNo, putBinNo, 2);
}*/
///
/// 移仓时下拉项 仓位电池状态
///
[HttpGet("GetChargeBinOption")]
public Result> GetChargeBinOption()
{
Result> respList = _monitorService.GetChargeBinOption();
if (respList.Data != null)
{
foreach (var resp in respList.Data)
{
resp.Name = _localizer[resp.Name];
}
}
return respList;
}
///
/// 增加维修仓 车辆仓
///
[HttpGet("GetMaintenanceBinNo")]
public Result> GetMaintenanceBinNo()
{
Result> respList = _monitorService.GetChargeBinOption();
BinInfoResp weiXiu = new BinInfoResp()
{
No = "9",
Name = "维修仓",
Id = 777,
};
BinInfoResp vehicle = new BinInfoResp()
{
No = "10",
Name = "车辆",
Id = 888,
};
BinInfoResp self = new BinInfoResp()
{
No = "0",
Name = "主体",
Id = 999,
};
respList.Data.Add(weiXiu);
respList.Data.Add(vehicle);
respList.Data.Add(self);
if (respList.Data != null)
{
foreach (var resp in respList.Data)
{
resp.Name = _localizer[resp.Name];
}
}
return respList;
}
///
/// 消防出仓
///
[HttpGet("FireRemoval")]
public Result FireRemoval(int level, string levelStr, string binNo)
{
HubHolder.S2CMsg(JsonConvert.SerializeObject(new RtMsg
{
Cmd = "BatteryAlarm",
Msg = $"电池过温报警,等级:{levelStr},仓位号:{binNo},请人工检查电池是否异常"
})).Wait();
if (level != 3)
{
return Result.Success();
}
//报警提示
var soundClient = AppInfo.Container.Resolve();
//TODO:: 录入播报素材
soundClient.SoundPlay(SoundEnum.music110);
Thread.Sleep(4000);
soundClient.SoundPlay(SoundEnum.music111);
//判断是否在换电中 通道是否有车
return Result.Success();
}
}