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, }; 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; } }