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(); } }