using HybirdFrameworkDriver.Session;
using log4net;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Service.Api.Resp;
using Service.Car.Msg.Car.Req;
using Service.Car.Msg.Host.Req;
using Service.Car.Server;
using Service.TBox.Service;
using WebStarter.Dto.Req;
namespace WebStarter.Controllers;
///
/// 车辆管理
///
[ApiController]
[Route("[controller]")]
public class CarController : ControllerBase
{
private static readonly ILog Log = LogManager.GetLogger(typeof(CarController));
///
/// 设置心跳返回信息
///
///
/// 1 换电站待机
/// 2 开始换电
/// 3 换电进行中
/// 4 换电完成
/// 5 换电站故障
///
[HttpGet("Vin/{VIN}/SetStatus/{status}")]
public bool SetStatus(string VIN,byte status)
{
if (CarServerMgr.CarServer != null)
{
CarServerMgr.CarServer.VIN = VIN;
CarServerMgr.CarServer.StationStatus = status;
return true;
}
return false;
}
///
/// 获取车辆数据
///
///
[HttpGet("getCarInfo/{carNo}")]
public CarInfoResp? GetCarInfo(string carNo)
{
return TBoxService.GetHnCZCarInfo(carNo);
}
///
/// 获取车辆数据
///
///
[HttpGet("getCarInfoList")]
public List GetCarInfoList()
{
List result = new List();
List sessionList = CarServerMgr.CarServer?.SessionMgr.GetSessionList();
foreach (var ioSession in sessionList)
{
CarInfoResp carInfoResp = new CarInfoResp()
{
Connected = true,
CarNo = ioSession.Key,
};
ioSession.BusinessMap.TryGetValue("ElecMsg", out var elecMsg);
if (elecMsg != null)
{
carInfoResp.ElecMsg = (ElecMsg)elecMsg;
}
ioSession.BusinessMap.TryGetValue("HeartBeatMsg", out var heartBeatMsg);
if (heartBeatMsg != null)
{
var beatMsg = (HeartBeatMsg)heartBeatMsg;
CarStatus carStatus = new CarStatus();
carStatus.LockStatus = beatMsg.LockStatus;
carStatus.Keys = beatMsg.KeyStatus;
carInfoResp.CarStatus = carStatus;
carInfoResp.HeartBeatMsg = beatMsg;
}
result.Add(carInfoResp);
}
return result;
}
///
/// 加锁
///
/// vin码
///
[HttpGet("lock/{carNo}")]
public bool Lock(string carNo)
{
Log.Info($"Lock {carNo}");
IoSession? ioSession = CarServerMgr.CarServer?.SessionMgr.GetSession(carNo);
if (CarServerMgr.CarServer == null || ioSession?.Channel == null)
{
Log.Info("ioSession is null return false");
return false;
}
var lockMsg = new LockMsg()
{
CarNo = carNo
};
CarServerMgr.CarServer.LockMsgPair.Req = lockMsg;
ioSession.Send(lockMsg);
return CarServerMgr.CarServer.LockMsgPair.GetResp(TimeSpan.FromSeconds(5))?.Result == 0;
}
///
/// 解锁
///
/// vin码
///
[HttpGet("unLock/{carNo}")]
public bool UnLock(string carNo)
{
Log.Info($"UnLock {carNo} ");
IoSession? ioSession = CarServerMgr.CarServer?.SessionMgr.GetSession(carNo);
if (CarServerMgr.CarServer == null || ioSession?.Channel == null)
{
Log.Info("ioSession is null return false");
return false;
}
UnLockMsg unLockMsg = new UnLockMsg()
{
CarNo = carNo
};
CarServerMgr.CarServer.UnLockMsgPair.Req = unLockMsg;
ioSession.Send(unLockMsg);
return CarServerMgr.CarServer.UnLockMsgPair.GetResp(TimeSpan.FromSeconds(5))?.Result == 0;
}
///
/// 结算
///
/// vin码
///
[HttpGet("SettleConfirm/{carNo}")]
public bool SettleConfirm(string carNo)
{
Log.Info($"SettleConfirm {carNo}");
IoSession? ioSession = CarServerMgr.CarServer?.SessionMgr.GetSession(carNo);
if (CarServerMgr.CarServer == null || ioSession?.Channel == null)
{
Log.Info("ioSession is null return false");
return false;
}
var settleConfirmMsg = new SettleConfirmMsg() { CarNo = carNo };
CarServerMgr.CarServer.SettleConfirmMsgPair.Req = settleConfirmMsg;
ioSession.Send(settleConfirmMsg);
return CarServerMgr.CarServer.SettleConfirmMsgPair.GetResp(TimeSpan.FromSeconds(5))?.Result == 0;
}
///
/// 设置参数
///
///
[HttpPost("setParam")]
public bool SetParam(SetParam setParam)
{
Log.Info($"SetParam {JsonConvert.SerializeObject(setParam)}");
IoSession? ioSession = CarServerMgr.CarServer?.SessionMgr.GetSession(setParam.CarNo);
if (CarServerMgr.CarServer == null || ioSession?.Channel == null)
{
Log.Info("ioSession is null return false");
return false;
}
SetParamMsg setParamMsg = new SetParamMsg()
{
AccDischargeCount = setParam.AccDischargeCount,
AccFallbackCount = setParam.AccFallbackCount,
AccChargeCount = setParam.AccChargeCount,
AccKgce = setParam.AccKgce,
ThisTimeRealDischarge = setParam.ThisTimeRealDischarge,
LastTimeBalanceDischarge = setParam.LastTimeBalanceDischarge,
ThisTimeRealFeedbackPower = setParam.ThisTimeRealFeedbackPower,
LastTimeBalanceFeedbackPower = setParam.LastTimeBalanceFeedbackPower,
ThisTimeRealChargeCount = setParam.ThisTimeRealChargeCount,
LastTimeBalanceChargeCount = setParam.LastTimeBalanceChargeCount,
ThisTimeRealKgce = setParam.ThisTimeRealKgce,
LastTimeBalanceKgce = setParam.LastTimeBalanceKgce,
ElectricityToBeSettled = setParam.ElectricityToBeSettled,
};
CarServerMgr.CarServer.SetParamMsgPair.Req = setParamMsg;
ioSession.Send(setParamMsg);
return CarServerMgr.CarServer.SetParamMsgPair.GetResp(TimeSpan.FromSeconds(5))?.Result == 0;
}
///
/// 清空数据
///
///
[HttpGet("clear/{carNo}")]
public bool Clear(string carNo)
{
if (CarServerMgr.CarServer == null)
{
CarServerMgr.CarServer.Clean();
return true;
}
IoSession? session = CarServerMgr.CarServer?.SessionMgr.GetSession(carNo);
if (session == null)
{
CarServerMgr.CarServer.Clean();
return true;
}
session.Close();
CarServerMgr.CarServer.Clean();
return true;
}
///
/// 货箱降下并且就绪
///
///
///
[HttpGet("BoxDown/{carNo}")]
public bool BoxDown(string carNo)
{
Log.Info($"BoxDown {carNo} ");
var carInfo = TBoxService.GetHnCZCarInfo(carNo);
if (carInfo != null)
{
if (carInfo.HeartBeatMsg != null)
{
return carInfo.HeartBeatMsg.CrateBrimStatus == 3 && carInfo.HeartBeatMsg.SwapStatus == 2;
}
}
return false;
}
}