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.

367 lines
10 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using Entity.Api.Req;
using Entity.Api.Resp;
using Entity.Constant;
using HybirdFrameworkCore.Attribute;
using HybirdFrameworkCore.Entity;
using Microsoft.AspNetCore.Mvc;
using Service.Execute;
using Service.Execute.Api;
using Service.Execute.Model;
using Service.Execute.Model.Tbox;
using Service.Init;
using Service.Plc.Client;
using Service.Station;
namespace WebStarter.Controllers;
/// <summary>
/// 换电大屏
/// </summary>
[ApiController]
[Route("api/[controller]")]
public class SwapMonitorController : ControllerBase
{
private readonly MonitorService _swapMonitorService;
private readonly BinInfoService _binInfoService;
private readonly ManualOperationRecordService _manualOperationRecordService;
public SwapMonitorController(MonitorService swapMonitorService, BinInfoService binInfoService, ManualOperationRecordService manualOperationRecordService)
{
_swapMonitorService = swapMonitorService;
_binInfoService = binInfoService;
_manualOperationRecordService = manualOperationRecordService;
}
/// <summary>
/// 获取设备连接状态 目前 Tbox 云平台 plc
/// </summary>
/// <returns></returns>
[HttpPost("GetDeviceState")]
public Result<DeviceStateResp> GetDeviceState()
{
return _swapMonitorService.GetDeviceState();
}
/// <summary>
/// 首页换电状态信息
/// </summary>
/// <returns></returns>
[HttpPost("GetSwapMonitorData")]
public async Task<Result<SwapMonitorScreenResp>> GetSwapMonitorData()
{
return _swapMonitorService.GetSwapMonitorData();
}
/// <summary>
/// 获取模式类
/// </summary>
/// <returns></returns>
[HttpPost("GetModel")]
public async Task<Result<SwapModelResp>> GetModel()
{
return _swapMonitorService.GetModel();
}
/// <summary>
/// 车辆手动上锁解锁
/// </summary>
/// <returns></returns>
[HttpPost("LockCar")]
public async Task<Result<bool>> LockCar(string carNo)
{
var success = await TBoxApi.LockCarManyTimes(carNo);
return success ? Result<bool>.Success() : Result<bool>.Fail();
}
/// <summary>
/// 车辆手动解锁
/// </summary>
/// <returns></returns>
[HttpPost("UnLockCar")]
public async Task<Result<bool>> UnLockCar(string carNo)
{
var success = await TBoxApi.UnLockCarManyTimes(carNo);
return success ? Result<bool>.Success() : Result<bool>.Fail();
}
/// <summary>
/// 获取充电监控大屏 充电次数 每五分钟获取一次
/// </summary>
[HttpPost("GetSwapAndChargingCount")]
public async Task<Result<SwapAndChargingCountResp>> SwapAndChargingCount()
{
return _swapMonitorService.SwapAndChargingCount();
}
/// <summary>
/// 设置换电模式1本地换电 2远程换电
/// </summary>
[HttpPost("SetSwapModel/{swapModel}")]
public async Task<Result<bool>> SetSwapModel(int swapModel)
{
StaticStationInfo.StationModel = swapModel;
return Result<bool>.Success();
}
/// <summary>
/// 换电复位
/// </summary>
[HttpPost("SwapReset")]
public async Task<Result<bool>> SwapReset()
{
StationSoftMgr.SwappingStateMachineCancel();
return Result<bool>.Success();
}
/// <summary>
/// 人工操作换电成功标识
/// </summary>
/// <returns></returns>
[HttpGet("SwapPlcSucc")]
public Result<bool> SwapPlcSucc()
{
return Result<bool>.Success(StationSoftMgr.SwappingStateMachine.PlcSwapFlag);
}
/// <summary>
/// 人工操作换电成功还是失败
/// </summary>
/// <returns></returns>
[HttpPost("ManualOperateSwap")]
public Result<bool> ManualOperateSwap([FromBody] OperateModelReq req)
{
StationSoftMgr.SwappingStateMachine.OperateModel = new OperateModel()
{
Type = req.Type,
Operator = req.Operator,
Reason = req.Reason
};
if (req.Type == 1)
{
if (!StationSoftMgr.SwappingStateMachine.PlcSwapFlag)
{
return Result<bool>.Fail("不满足确认换电成功条件");
}
Task.Run(StationSoftMgr.SwappingStateMachineManual);
TBoxApi.SetHeart("1", 1);//车心跳复位
}
else
{
Task.Run(StationSoftMgr.SwappingStateMachineCancel);
}
return Result<bool>.Success();
}
/// <summary>
/// 红绿灯操控
/// 0无颜色
/// 1000绿灯
/// 1010绿灯闪烁
/// 1020红灯
/// 1030红灯闪烁
/// 1040黄灯
/// 1050黄灯闪烁
/// 1100所有灯亮
/// </summary>
/// <param name="lampCmd"></param>
/// <returns></returns>
[HttpPost("OperateOutstationLamp")]
public async Task<Result<bool>> OperateOutstationLamp(byte lampCmd)
{
return PlcMgr.WriteEntranceLamp(lampCmd) ? Result<bool>.Success(true) : Result<bool>.Fail();
}
/// <summary>
/// 灯光控制:全部关闭
/// </summary>
/// <returns></returns>
[HttpPost("AllLightsOff")]
public async Task<Result<bool>> AllLightsOff()
{
return PlcMgr.AllLightsOff() ? Result<bool>.Success(true) : Result<bool>.Fail();
}
/// <summary>
/// 灯光控制:全部打开
/// </summary>
/// <returns></returns>
[HttpPost("AllLightsOn")]
public async Task<Result<bool>> AllLightsOn()
{
return PlcMgr.AllLightsOn() ? Result<bool>.Success(true) : Result<bool>.Fail();
}
/// <summary>
/// 得到现在灯光状态
/// </summary>
/// <returns></returns>
[HttpPost("GetNowLightsOn")]
public async Task<Result<ushort>> GetNowLightsOn()
{
return Result<ushort>.Success(PlcMgr.GetNowLightsOn());
}
/// <summary>
/// 消防移仓
/// </summary>
/// <param name="entrySelect">入仓位选择:移仓仓位号</param>
/// <returns></returns>
[HttpPost("FireProtectionRelocation/{entrySelect}")]
public Result<bool> FireProtectionRelocation(string entrySelect)
{
return _binInfoService.FireProtectionRelocation(entrySelect);
}
/// <summary>
/// 换电大屏 换电成功 按钮 status :1成功 2失败
/// </summary>
/// <param name="swapNo"></param>
/// <returns></returns>
/*[HttpGet("ManualSwapStatus/{swapNo}/{status}")]
public async Task<Result<bool>> ManualChangeSuccess(string swapNo, int status)
{
return Result<bool>.Success();
}*/
/// <summary>
/// 切换成 手动换电
/// </summary>
[HttpPost("ManualSwapping")]
public Result<bool> ManualSwapping()
{
StaticStationInfo.StationWay = (int)StationConstant.StationWay.Manual;
return Result<bool>.Success();
}
/// <summary>
/// 切换成 自动换电
/// </summary>
[HttpPost("AutoSwapping")]
public Result<bool> AutoSwapping()
{
StaticStationInfo.StationWay = (int)StationConstant.StationWay.Auto;
return Result<bool>.Success();
}
/// <summary>
/// 切换成 营业状态
/// 换电站状态: 1营运中 2歇业中 3设备维护状态 4暂停营业
/// </summary>
[HttpPost("HandoverStationStatus/{status}")]
public Result<bool> HandoverStationStatus(int status)
{
StaticStationInfo.StationStatus = status;
return Result<bool>.Success();
}
/// <summary>
/// 获取所有连接车辆
/// </summary>
[HttpGet("GetCarList")]
public async Task<Result<List<TboxCarInfoModel>>> GetCarList()
{
//兼容不能查车辆列表的,就获取当前换电车辆
if (!StaticStationInfo.TboxStateCarList)
{
if (StationSoftMgr.SwappingStateMachine.BoxCarInfoModel == null)
{
return Result<List<TboxCarInfoModel>>.Success(new List<TboxCarInfoModel>());
}
return Result<List<TboxCarInfoModel>>.Success(new()
{
StationSoftMgr.SwappingStateMachine.BoxCarInfoModel
});
}
var carInfoList = await TBoxApi.GetCarInfoList();
if (carInfoList == null || carInfoList.Count <= 0)
{
return Result<List<TboxCarInfoModel>>.Success(new List<TboxCarInfoModel>());
}
return Result<List<TboxCarInfoModel>>.Success(carInfoList.Where(i => i.CarNo.Length >= 17).ToList());
}
/// <summary>
/// 确认上锁成功
/// </summary>
[HttpGet("ConfirmLockSucc")]
public async Task<Result<bool>> ConfirmLockSucc()
{
StationSoftMgr.SwappingStateMachine.ManualConfirmLockCar();
_manualOperationRecordService.AddManualOperationRecord(StationSoftMgr.SwappingStateMachine.SwapOrder.Sn, 3);
return Result<bool>.Success();
}
/// <summary>
/// 确认解锁成功
/// </summary>
[HttpGet("ConfirmUnLockSucc")]
public async Task<Result<bool>> ConfirmUnLockSucc()
{
StationSoftMgr.SwappingStateMachine.ManualConfirmUnLockCar();
_manualOperationRecordService.AddManualOperationRecord(StationSoftMgr.SwappingStateMachine.SwapOrder.Sn, 4);
return Result<bool>.Success();
}
/// <summary>
/// 切换成 自动启动
/// </summary>
[HttpPost("AutoInitiate")]
public Result<bool> AutoInitiate()
{
StaticStationInfo.SwapInitiateMode = (byte)StationConstant.SwapInitiateMode.Auto;
return Result<bool>.Success();
}
/// <summary>
/// 切换成 手动启动
/// </summary>
[HttpPost("ManualInitiate")]
public Result<bool> ManualInitiate()
{
StaticStationInfo.SwapInitiateMode = (byte)StationConstant.SwapInitiateMode.Manual;
return Result<bool>.Success();
}
/// <summary>
/// 卷帘门控制1000请求开启 1010请求关闭
/// </summary>
/// <returns></returns>
[HttpPost("RollerShutter")]
public async Task<Result<bool>> RollerShutter(ushort value)
{
return PlcMgr.WriteRollerShutter(value) ? Result<bool>.Success(true) : Result<bool>.Fail();
}
/// <summary>
/// 卷帘门是否开启
/// </summary>
/// <returns>true开启状态false关闭状态 </returns>
[HttpPost("GetRollerShutter")]
public async Task<Result<bool>> GetRollerShutter()
{
return PlcMgr.RollerShutterRadar() ? Result<bool>.Success(true) : Result<bool>.Fail();
}
}