|
|
|
|
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;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 车辆管理
|
|
|
|
|
/// </summary>
|
|
|
|
|
[ApiController]
|
|
|
|
|
[Route("[controller]")]
|
|
|
|
|
public class CarController : ControllerBase{
|
|
|
|
|
private static readonly ILog Log = LogManager.GetLogger(typeof(CarController));
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取车辆数据
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取车辆数据
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[HttpGet("/getCarInfoList")]
|
|
|
|
|
public List<CarInfoResp> GetCarInfoList()
|
|
|
|
|
{
|
|
|
|
|
List<CarInfoResp> result = new List<CarInfoResp>();
|
|
|
|
|
List<IoSession> 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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 加锁
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="carNo">vin码</param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 解锁
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="carNo">vin码</param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 结算
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="carNo">vin码</param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 设置参数
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 清空数据
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[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;
|
|
|
|
|
}
|
|
|
|
|
}
|