using HybirdFrameworkCore.Utils;
using HybirdFrameworkDriver.Session;
using log4net;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Service.Car.Msg.Car.Req;
using Service.Car.Msg.Host.Req;
using Service.Car.Server;
using WebStarter.Dto.Req;
using WebStarter.Dto.Resp;
namespace WebStarter.Controllers;
///
/// 车辆管理
///
[ApiController]
[Route("[controller]")]
public class CarController : ControllerBase{
private static readonly ILog Log = LogManager.GetLogger(typeof(CarController));
///
/// 获取车辆数据
///
///
[HttpGet("/getCarInfo/{carNo}")]
public CarInfoResp? GetCarInfo(string carNo)
{
IoSession? ioSession = SessionMgr.GetSession(carNo);
CarInfoResp carInfoResp = new CarInfoResp()
{
Connected = CarServerMgr.CarServer != null && ioSession != null,
CarNo = carNo
};
if (ObjUtils.IsNotNull(ioSession))
{
ioSession.BusinessMap.TryGetValue("ElecMsg", out var elecMsg);
if (elecMsg != null)
{
carInfoResp.ElecMsg = (ElecMsg)elecMsg;
}
ioSession.BusinessMap.TryGetValue("HeartBeatMsg", out var heartBeatMsg);
if (heartBeatMsg != null)
{
carInfoResp.HeartBeatMsg = (HeartBeatMsg)heartBeatMsg;
}
}
return carInfoResp;
}
///
/// 获取车辆数据
///
///
[HttpGet("/getCarInfoList")]
public List GetCarInfoList()
{
List result = new List();
List sessionList = 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)
{
carInfoResp.HeartBeatMsg = (HeartBeatMsg)heartBeatMsg;
}
result.Add(carInfoResp);
}
return result;
}
///
/// 加锁
///
/// vin码
///
[HttpGet("/lock/{carNo}")]
public bool Lock(string carNo)
{
Log.Info($"Lock {carNo}");
IoSession? ioSession = 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.Channel.WriteAndFlushAsync(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 = 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.Channel.WriteAndFlushAsync(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 = 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.Channel.WriteAndFlushAsync(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 = 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;
SessionMgr.Broadcast(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 = SessionMgr.GetSession(carNo);
if (session == null)
{
CarServerMgr.CarServer.Clean();
return true;
}
session.Close();
CarServerMgr.CarServer.Clean();
return true;
}
}