using DotNetty.Transport.Channels; using Entity.DbModel.Station; using HybirdFrameworkCore.Autofac.Attribute; using HybirdFrameworkCore.Utils; using log4net; using Repository.Station; using Service.Charger.Client; using Service.Charger.Msg.Charger.Req; using Service.Charger.Msg.Host.Resp; using Service.Init; namespace Service.Charger.Handler { /// /// 3.3.11 充放电机上送充电停止帧 /// /// 1,保存日志到log /// 2,监控平台应答停止完成帧 /// /// [Order(8)] [Scope("InstancePerDependency")] public class FinishStopChargingHandler : SimpleChannelInboundHandler, IBaseHandler { public BinInfoRepository BinInfoRepository { get; set; } public ChargeOrderRepository ChargeOrderRepository { get; set; } private static readonly ILog Log = LogManager.GetLogger(typeof(FinishStopChargingHandler)); protected override void ChannelRead0(IChannelHandlerContext ctx, FinishStopCharging msg) { if (ClientMgr.TryGetClient(ctx.Channel, out var sn, out var client)) { Log.Info($"receive {msg} from {sn}"); client.IsCanSendStopCmd = false; int chargeStatus = 0; if (msg.Result == 0) { client.IsStopped = true; client.IsCharged = false; chargeStatus = 4; if (msg.SuspendTheStateOfCharge >= StaticStationInfo.SwapSoc) { ChargeOrder? chargeOrder = ChargeOrderRepository.QueryLatestByBatterySn(client.BatteryNo); if (chargeOrder != null) { List orders = ChargeOrderRepository.QueryBySwapOrderAndBatterySn(chargeOrder.SwapOrderSn, chargeOrder.BatteryNo); if (ObjUtils.IsNotEmpty(orders)) { List list = orders.Select(it => it.Id).ToList(); ChargeOrderRepository.Update(it => it.CanUpload == 1, it => list.Contains(it.Id)); } } } } else { client.IsStopped = false; } int update = BinInfoRepository.Update(t => t.ChargeStatus == chargeStatus, t => t.No == client.BinNo); Log.Info($"update {update} start charge finish status {chargeStatus} for {client.BinNo}"); ChargingStopFsdRes stopFsdRes = new ChargingStopFsdRes(0); ctx.Channel.WriteAndFlushAsync(stopFsdRes); } } } }