using AutoMapper; using DotNetty.Transport.Channels; using Entity.Api.Resp; using Entity.DbModel.Station; using HybirdFrameworkCore.Autofac.Attribute; using log4net; using Repository.Station; using Service.Charger.Client; using Service.Charger.Msg.Charger.Req; namespace Service.Charger.Handler; /// /// 电池状态上报 处理器 /// [Order(8)] [Scope("InstancePerDependency")] public class BatteryStatusReportedReqHandler : SimpleChannelInboundHandler, IBaseHandler { private readonly BinInfoRepository _binInfoRepository; public BatteryStatusReportedReqHandler(BinInfoRepository binInfoRepository) { _binInfoRepository = binInfoRepository; } private static readonly ILog Log =LogManager.GetLogger(typeof(BatteryStatusReportedReqHandler)); public BinInfoRepository BinInfoRepository { get; set; } /// /// /// protected override void ChannelRead0(IChannelHandlerContext ctx, BatteryStatusReportedReq msg) { List binInfos = _binInfoRepository.Query(); var configuration = new MapperConfiguration(cfg => cfg.CreateMap()); var mapper = configuration.CreateMapper(); List binInfoList = mapper.Map>(binInfos); byte[] granaries = new byte[8]; for (int i = 0; i < binInfoList.Count && i < granaries.Length; i++) { granaries[i] = (binInfoList[i].ChargeStatus == 0 || binInfoList[i].ChargeStatus.Value == 2 || binInfoList[i].ChargeStatus.Value == 4) ? (byte)0 : (byte)1; } ctx.Channel.WriteAndFlushAsync(message: new Msg.Host.Resp.WhetherChargedResq(granaries[0], granaries[1], granaries[2], granaries[3], granaries[4], granaries[5], granaries[6], granaries[7])); UpdateBinInfo(msg.granary01, "1"); ClientMgr.PlcClient!.Is9Exist = msg.granary09==1; // ctx.Channel.WriteAndFlushAsync(message: new Msg.Host.Req.WhetherChargedReq()); UpdateBinInfo(msg.granary01, "1"); UpdateBinInfo(msg.granary02, "2"); UpdateBinInfo(msg.granary03, "3"); UpdateBinInfo(msg.granary04, "4"); UpdateBinInfo(msg.granary05, "5"); UpdateBinInfo(msg.granary06, "6"); UpdateBinInfo(msg.granary07, "7"); UpdateBinInfo(msg.granary08, "8"); // UpdateBinInfo(msg.granary09, "9"); } private void UpdateBinInfo(int exists, string binNo) { if (exists == 0) BinInfoRepository.Update( it => new BinInfo(){ Exists = 0, ChargeStatus=2, BatteryNo = "-1", Soc = (decimal)-1, Soe = (decimal)-1, Soh = (decimal)-1, }, it => it.No == binNo); else BinInfoRepository.Update(it => new BinInfo { Exists = 1 }, it => it.No == binNo); } }