using AutoMapper; using Entity.Api.Resp; using Entity.Constant; using Entity.DbModel.Station; using HybirdFrameworkCore.Autofac.Attribute; using HybirdFrameworkCore.Entity; using Repository.Station; using Service.Cloud.Client; using Service.Execute; using Service.Execute.Api; using Service.Execute.Model; using Service.Init; using Service.Plc.Client; namespace Service.Station; [Scope("SingleInstance")] public class SwapMonitorService { public BinInfoRepository BinInfoRepository { get; set; } public Result GetSwapMonitorData() { var configBinInfo = new MapperConfiguration(cfg => cfg.CreateMap().ReverseMap()); IMapper mapperBinInfo = configBinInfo.CreateMapper(); /*List stateInfoList = mapperBinInfo.Map>(StationSoftMgr.SwappingStateMachine.StepModel);*/ //TODO::假数据 List stateInfoList = new List(); Array enumValues = Enum.GetValues(typeof(InfoEnum.BusinessSwappingStep)); foreach (InfoEnum.BusinessSwappingStep info in enumValues) { SwappingStateInfoResp resp = new() { StepName = BaseEnumExtensions.GetDescription(info), StepNo = (int)info, StartTime = DateTime.Now }; stateInfoList.Add(resp); } Task carInfo = TBoxApi.GetCarInfo(); List binInfos = BinInfoRepository.QueryListByClause(i => i.Exists == 1 && i.Status == 1); SwapMonitorScreenResp monitorScreenResp = new() { PlcSwapModel = new PlcSwapModelResp() { ModelState = PlcMgr.PlcToHostData.ModeControl.Value, StationInLampSts = PlcMgr.PlcToHostData.LightIn.Value, ControlModel = PlcMgr.PlcToHostData.RemoteLocalControlState.Value, }, StateInfo = stateInfoList, VehicleInfo = new SwapVehicleResp() { OrderNo = StationSoftMgr.SwappingStateMachine.SwapOrder != null ? StationSoftMgr.SwappingStateMachine.SwapOrder.Sn : null, VelMac = StationSoftMgr.SwappingStateMachine.RfidReadModel != null ? StationSoftMgr.SwappingStateMachine.RfidReadModel.VelMac : null, LockStatus = carInfo.Result != null ? carInfo.Result.HeartBeatMsg.LockStatus : null, KeyStatus = carInfo.Result != null ? carInfo.Result.HeartBeatMsg.KeyStatus : null, VelNo = StationSoftMgr.SwappingStateMachine.RfidReadModel != null ? StationSoftMgr.SwappingStateMachine.RfidReadModel.VelNo : null, VelVin = StationSoftMgr.SwappingStateMachine.RfidReadModel != null ? StationSoftMgr.SwappingStateMachine.RfidReadModel.VelVin : null, }, BatteryInfo = new() { BatteryTotalCount = binInfos.Count, UsingSwapBatteryCount = binInfos.Select(i => i.ChargeStatus == 2 && i.AmtLock == (int)InfoEnum.AmtBatLockStatus.UnLock && i.Soc > int.Parse(StaticStationInfo.SwapSoc) && new TimeSpan(DateTime.Now.Ticks - i.LastChargeFinishTime.ToDateTime().Ticks) .TotalMinutes > int.Parse(StaticStationInfo.SwapFinishChargeTime)).Count() } }; return Result.Success(monitorScreenResp); } /// /// 模式類 /// /// public Result GetModel() { SwapModelResp resp = new() { StationStatus = StaticStationInfo.StationStatus, StationWay = StaticStationInfo.StationWay, StationModel = StaticStationInfo.StationModel }; return Result.Success(resp); } /// /// 连接状态类 /// /// public Result GetDeviceState() { var isConnected = TBoxApi.IsConnected(); DeviceStateResp resp = new() { BoxConnectFlag = isConnected.Result != null ? isConnected.Result : false, CloudConnectFlag = CloudClientMgr.CloudClient.Connected, PlcConnectFlag = PlcMgr.PlcClient.Connected }; return Result.Success(resp); } public Result SwapAndChargingCount() { return Result.Success(null); } }