语音播报增加

master
zby 4 months ago
parent 75e64d37ce
commit 4c6e79502f

@ -9,50 +9,52 @@ public class InfoEnum
public enum SwapInfo : ushort public enum SwapInfo : ushort
{ {
//01
[Info("欢迎光临换电站!(正在营业)","欢迎光临换电站!,本站正在营业中")]WelcomeInfo=1, [Info("欢迎光临换电站!(正在营业)","欢迎光临换电站!,本站正在营业中")]WelcomeInfo=1,
//02
[Info("标签读写失败", "标签读写失败")] ErrorReadRfid , [Info("标签读写失败", "标签读写失败")] ErrorReadRfid ,
//03
[Info("车辆连接失败", "车辆连接失败,请联系站务人员")] ErrorTBoxConn , [Info("车辆连接失败", "车辆连接失败,请联系站务人员")] ErrorTBoxConn ,
//04
[Info("云端校验失败", "云端校验失败,请联系站务人员")] ErrorCloudCheck , [Info("云端校验失败", "云端校验失败,请联系站务人员")] ErrorCloudCheck ,
[Info("车辆已到位", "车辆已到位")] InfoCarInPosition , [Info("车辆已到位", "车辆已到位")] InfoCarInPosition ,//5
//TODO:: 录音内容已改 //TODO:: 录音内容已改
[Info("请熄火挂空挡拉手刹", "请熄火挂空挡拉手刹")] ErrorCarInPositionTimeout, [Info("请熄火挂空挡拉手刹", "请熄火挂空挡拉手刹")] ErrorCarInPositionTimeout,//6
[Info("云平台下发换电失败", "云平台下发换电超时")] CloudSendSwapError , [Info("云平台下发换电失败", "云平台下发换电超时")] CloudSendSwapError ,//7
[Info("解锁车辆失败", "解锁车辆失败")] ErrUnLockCar , [Info("解锁车辆失败", "解锁车辆失败")] ErrUnLockCar ,//8
[Info("选包失败,请驶离", "选包失败,请驶离")] ErrorSelectPack , [Info("选包失败,请驶离", "选包失败,请驶离")] ErrorSelectPack ,//9
[Info("通道拍照定位失败,请在三分钟内重新调整车辆位置", "通道拍照定位失败,请在三分钟内重新调整车辆位置")]ErrChannelStatus, [Info("通道拍照定位失败,请在三分钟内重新调整车辆位置", "通道拍照定位失败,请在三分钟内重新调整车辆位置")]ErrChannelStatus,//10
[Info("电池拆卸中,请稍后", "电池拆卸中,请稍后")] InfoUnPack , [Info("电池拆卸中,请稍后", "电池拆卸中,请稍后")] InfoUnPack ,//11
[Info("电池安装中,请稍后", "电池安装中,请稍后")] InfoPack , [Info("电池安装中,请稍后", "电池安装中,请稍后")] InfoPack ,//12
[Info("电池包已安装完成", "电池包已安装完成")] InfoPackFinish , [Info("电池包已安装完成", "电池包已安装完成")] InfoPackFinish ,//13
[Info("航车已回归安全位置", "航车已回归安全位置")] InfoToSafePosition , [Info("航车已回归安全位置", "航车已回归安全位置")] InfoToSafePosition ,//14
[Info("换电已完成,请驶离", "换电已完成,请驶离")] InfoCarLeave , [Info("换电已完成,请驶离", "换电已完成,请驶离")] InfoCarLeave ,//15
[Info("换电失败,请驶离", "换电失败,请驶离")] ErrInfoCarLeave , [Info("换电失败,请驶离", "换电失败,请驶离")] ErrInfoCarLeave ,//16
[Info("电池入仓中,请稍后", "电池入仓中,请稍后")] InfoOldBatteryCarryIn , [Info("电池入仓中,请稍后", "电池入仓中,请稍后")] InfoOldBatteryCarryIn ,//17
[Info("电池出仓中,请稍后", "电池出仓中,请稍后")] InfoNewBatteryCarryOut , [Info("电池出仓中,请稍后", "电池出仓中,请稍后")] InfoNewBatteryCarryOut ,//18
[Info("车辆上锁失败", "车辆上锁失败")] ErrLockCar , [Info("车辆上锁失败", "车辆上锁失败")] ErrLockCar ,//19
[Info("通道的电池仓无可用换电电池","通道的电池仓无可用换电电池")] NoBatteryErr, [Info("通道的电池仓无可用换电电池","通道的电池仓无可用换电电池")] NoBatteryErr,//20
[Info("结束充电电池数量不足","通道的电池仓无可用换电电池")] LessOfFinishChargingErr, [Info("结束充电电池数量不足","通道的电池仓无可用换电电池")] LessOfFinishChargingErr,//21
[Info("空仓数量不足","通道的电池仓无可用换电电池")] LessOfEmptyBinErr, [Info("空仓数量不足","通道的电池仓无可用换电电池")] LessOfEmptyBinErr,//22
[Info("符合soc限制数量不足","通道的电池仓无可用换电电池")] LessOfSocErr, [Info("符合soc限制数量不足","通道的电池仓无可用换电电池")] LessOfSocErr,//23
[Info("结束充电大于3分钟的数量不足","通道的电池仓无可用换电电池")] LessOf3MinuteErr, [Info("结束充电大于3分钟的数量不足","通道的电池仓无可用换电电池")] LessOf3MinuteErr,//24
[Info("换电站处于手动模式,不能自动换电","换电站处于手动模式,不能自动换电")] InfoStationModel, [Info("换电站处于手动模式,不能自动换电","换电站处于手动模式,不能自动换电")] InfoStationModel,//25
[Info("换电站处于本地模式,不能远程换电","换电站处于本地模式,不能远程换电")] InfoStationModelRemoteErr, [Info("换电站处于本地模式,不能远程换电","换电站处于本地模式,不能远程换电")] InfoStationModelRemoteErr,//26
[Info("车辆驶入","车辆驶入")] CarInInfo, [Info("车辆驶入","车辆驶入")] CarInInfo,//27
[Info("换电任务启动","换电任务启动")] StartSwapInfo, [Info("换电任务启动","换电任务启动")] StartSwapInfo,//28
[Info("航车拍照中,请稍后","航车拍照中,请稍后")] CarTakePhotoInfo, [Info("航车拍照中,请稍后","航车拍照中,请稍后")] CarTakePhotoInfo,//29
[Info("启动换电失败,请联系站务人员","启动换电失败,请联系站务人员")] ErrStartSwap, [Info("启动换电失败,请联系站务人员","启动换电失败,请联系站务人员")] ErrStartSwap,//30
[Info("即将进行消防移仓,请车辆驶离","即将进行消防移仓,请车辆驶离")] InfoFireRemoveLabel, [Info("即将进行消防移仓,请车辆驶离","即将进行消防移仓,请车辆驶离")] InfoFireRemoveLabel,//31
[Info("电池移仓中","电池移仓中")] InfoBatteryMove, [Info("电池移仓中","电池移仓中")] InfoBatteryMove,//32
[Info("消防移仓中","消防移仓中")] InfoFireRemove, [Info("消防移仓中","消防移仓中")] InfoFireRemove,//33
[Info("拍照失败,请在三分钟内挪车","拍照失败,请在三分钟内挪车")] ErrChannel1020, [Info("拍照失败,请在三分钟内挪车","拍照失败,请在三分钟内挪车")] ErrChannel1020,//34
} }

@ -1,4 +1,6 @@
 
using HybirdFrameworkCore.Configuration;
namespace Service.Execute namespace Service.Execute
{ {
/// <summary> /// <summary>
@ -9,6 +11,8 @@ namespace Service.Execute
public static readonly SwappingStateMachine SwappingStateMachine = SwappingStateMachine.GetInstance(); public static readonly SwappingStateMachine SwappingStateMachine = SwappingStateMachine.GetInstance();
public static readonly string addr1 = AppSettingsHelper.GetContent("SoundAddr", "Address1");
#region 换电流程 #region 换电流程
/// <summary> /// <summary>

@ -2,6 +2,7 @@
using Entity.Attr; using Entity.Attr;
using Entity.Constant; using Entity.Constant;
using HybirdFrameworkCore.Autofac; using HybirdFrameworkCore.Autofac;
using HybirdFrameworkCore.Configuration;
using log4net; using log4net;
using Service.Execute.Api; using Service.Execute.Api;
using Service.Execute.Model; using Service.Execute.Model;
@ -10,6 +11,7 @@ using Service.Execute.StaticTools;
using Service.Execute.SwapException; using Service.Execute.SwapException;
using Service.Execute.Utils; using Service.Execute.Utils;
using Service.Led; using Service.Led;
using Service.Sound.SoundClient;
using Service.Station; using Service.Station;
namespace Service.Execute.Step; namespace Service.Execute.Step;
@ -18,6 +20,7 @@ public class CarCtrlState : IState
{ {
private readonly ILog _log = LogManager.GetLogger(typeof(CarCtrlState)); private readonly ILog _log = LogManager.GetLogger(typeof(CarCtrlState));
private readonly CommonMgr _CommonMgr = AppInfo.Container.Resolve<CommonMgr>(); private readonly CommonMgr _CommonMgr = AppInfo.Container.Resolve<CommonMgr>();
public static SoundClient? SoundClient { get; set; }
public StateResult Handle(SwappingStateMachine machine) public StateResult Handle(SwappingStateMachine machine)
{ {
@ -74,8 +77,10 @@ public class CarCtrlState : IState
}, () => }, () =>
{ {
// machine.LedTool?.WriteProgramContent(InfoEnum.SwapInfo.ErrUnLockCar.GetLed()); // machine.LedTool?.WriteProgramContent(InfoEnum.SwapInfo.ErrUnLockCar.GetLed());
SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.ErrUnLockCar); // SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.ErrUnLockCar);
LedClient.SendMsgByKey(InfoEnum.SwapInfo.ErrUnLockCar.GetLed()); LedClient.SendMsgByKey(InfoEnum.SwapInfo.ErrUnLockCar.GetLed());
SoundClient = AppInfo.Container.Resolve<SoundClient>();
SoundClient.SoundPlay(AppSettingsHelper.GetContent("SoundAddr", "Address08"));
}, false, () => { machine.ExceptionReason = ExceptionReason.UnLockCarError; } }, false, () => { machine.ExceptionReason = ExceptionReason.UnLockCarError; }
, 10, InvokeStatus.None); , 10, InvokeStatus.None);
} }

@ -5,6 +5,7 @@ using Entity.Constant;
using Entity.DbModel.Station; using Entity.DbModel.Station;
using Entity.Dto; using Entity.Dto;
using HybirdFrameworkCore.Autofac; using HybirdFrameworkCore.Autofac;
using HybirdFrameworkCore.Configuration;
using log4net; using log4net;
using Repository.Station; using Repository.Station;
using Service.Execute.Api; using Service.Execute.Api;
@ -15,6 +16,7 @@ using Service.Execute.SwapException;
using Service.Execute.Utils; using Service.Execute.Utils;
using Service.Init; using Service.Init;
using Service.Led; using Service.Led;
using Service.Sound.SoundClient;
using Service.Station; using Service.Station;
namespace Service.Execute.Step; namespace Service.Execute.Step;
@ -28,6 +30,10 @@ public class CarPrepareState : IState
private readonly SwapOrderBatteryRepository _swapOrderBatteryRepository = private readonly SwapOrderBatteryRepository _swapOrderBatteryRepository =
AppInfo.Container.Resolve<SwapOrderBatteryRepository>(); AppInfo.Container.Resolve<SwapOrderBatteryRepository>();
public static SoundClient? SoundClient { get; set; }
public StateResult Handle(SwappingStateMachine machine) public StateResult Handle(SwappingStateMachine machine)
{ {
Thread.Sleep(500); Thread.Sleep(500);
@ -147,8 +153,10 @@ public class CarPrepareState : IState
//写入口等 :红灯 //写入口等 :红灯
if (PlcApi.WriteEntranceLamp(1020)) if (PlcApi.WriteEntranceLamp(1020))
{ {
// machine.LedTool?.WriteProgramContent(InfoEnum.SwapInfo.InfoCarInPosition.GetLed()); SoundClient = AppInfo.Container.Resolve<SoundClient>();
SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.InfoCarInPosition); SoundClient.SoundPlay(AppSettingsHelper.GetContent("SoundAddr", "Address05"));
machine.LedTool?.WriteProgramContent(InfoEnum.SwapInfo.InfoCarInPosition.GetLed());
// SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.InfoCarInPosition);
machine.VehiclesInPlaceFlag = true; machine.VehiclesInPlaceFlag = true;
//告知云平台换电准备完成 //告知云平台换电准备完成
machine.BusinessSwappingForCloudState = machine.BusinessSwappingForCloudState =
@ -165,9 +173,11 @@ public class CarPrepareState : IState
} }
}, () => }, () =>
{ {
SoundClient = AppInfo.Container.Resolve<SoundClient>();
SoundClient.SoundPlay(AppSettingsHelper.GetContent("SoundAddr", "Address06"));
machine.ExceptionReason = ExceptionReason.CarInPositionError; machine.ExceptionReason = ExceptionReason.CarInPositionError;
// machine.LedTool?.WriteProgramContent(InfoEnum.SwapInfo.ErrorCarInPositionTimeout.GetLed()); // machine.LedTool?.WriteProgramContent(InfoEnum.SwapInfo.ErrorCarInPositionTimeout.GetLed());
SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.ErrorCarInPositionTimeout); //SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.ErrorCarInPositionTimeout);
}, false, () => { } }, false, () => { }
, 10, InvokeStatus.None); , 10, InvokeStatus.None);
} }
@ -193,11 +203,15 @@ public class CarPrepareState : IState
} }
}, () => }, () =>
{ {
machine.ExceptionReason = ExceptionReason.ConnTBoxError; SoundClient = AppInfo.Container.Resolve<SoundClient>();
SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.ErrorTBoxConn); SoundClient.SoundPlay(AppSettingsHelper.GetContent("SoundAddr", "Address03"));
//machine.ExceptionReason = ExceptionReason.ConnTBoxError;
//SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.ErrorTBoxConn);
}, false, () => }, false, () =>
{ {
machine.ExceptionReason = ExceptionReason.ConnTBoxError; SoundClient = AppInfo.Container.Resolve<SoundClient>();
SoundClient.SoundPlay(AppSettingsHelper.GetContent("SoundAddr", "Address03"));
//machine.ExceptionReason = ExceptionReason.ConnTBoxError;
LedClient.SendMsgByKey(InfoEnum.SwapInfo.ErrorTBoxConn.GetLed()); LedClient.SendMsgByKey(InfoEnum.SwapInfo.ErrorTBoxConn.GetLed());
// machine.LedTool?.WriteProgramContent(InfoEnum.SwapInfo.ErrorTBoxConn.GetLed()); // machine.LedTool?.WriteProgramContent(InfoEnum.SwapInfo.ErrorTBoxConn.GetLed());
@ -233,8 +247,10 @@ public class CarPrepareState : IState
} }
}, () => }, () =>
{ {
machine.ExceptionReason = ExceptionReason.ConnTBoxError; SoundClient = AppInfo.Container.Resolve<SoundClient>();
SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.ErrorTBoxConn); SoundClient.SoundPlay(AppSettingsHelper.GetContent("SoundAddr", "Address03"));
//machine.ExceptionReason = ExceptionReason.ConnTBoxError;
//SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.ErrorTBoxConn);
}, false, () => }, false, () =>
{ {
machine.ExceptionReason = ExceptionReason.ConnTBoxError; machine.ExceptionReason = ExceptionReason.ConnTBoxError;
@ -296,6 +312,8 @@ public class CarPrepareState : IState
// machine.LedTool?.WriteProgramContent("车辆电池数据上报异常,请联系站务人员"); // machine.LedTool?.WriteProgramContent("车辆电池数据上报异常,请联系站务人员");
// SoundApi.PlayOneSound(InfoEnum.SwapInfo.ErrorSelectPack); // SoundApi.PlayOneSound(InfoEnum.SwapInfo.ErrorSelectPack);
LedClient.SendMsgByKey(InfoEnum.SwapInfo.ErrorSelectPack.GetLed()); LedClient.SendMsgByKey(InfoEnum.SwapInfo.ErrorSelectPack.GetLed());
SoundClient = AppInfo.Container.Resolve<SoundClient>();
SoundClient.SoundPlay(AppSettingsHelper.GetContent("SoundAddr", "Address09"));
}, false, () => { machine.ExceptionReason = ExceptionReason.CloudCarDataUploadError; } }, false, () => { machine.ExceptionReason = ExceptionReason.CloudCarDataUploadError; }
, 20, InvokeStatus.None); , 20, InvokeStatus.None);
} }
@ -336,7 +354,8 @@ public class CarPrepareState : IState
// machine.LedTool?.WriteProgramContent(InfoEnum.SwapInfo.ErrorSelectPack.GetLed()); // machine.LedTool?.WriteProgramContent(InfoEnum.SwapInfo.ErrorSelectPack.GetLed());
LedClient.SendMsgByKey(InfoEnum.SwapInfo.ErrorSelectPack.GetLed()); LedClient.SendMsgByKey(InfoEnum.SwapInfo.ErrorSelectPack.GetLed());
SoundClient = AppInfo.Container.Resolve<SoundClient>();
SoundClient.SoundPlay(AppSettingsHelper.GetContent("SoundAddr", "Address09"));
_log.Info($"SelectPack error CanSwap={machine.SwapOrderBatteryInfo.CanSwap}"); _log.Info($"SelectPack error CanSwap={machine.SwapOrderBatteryInfo.CanSwap}");
} }
else else
@ -350,7 +369,9 @@ public class CarPrepareState : IState
}, () => }, () =>
{ {
machine.ExceptionReason = ExceptionReason.SelectPackError; machine.ExceptionReason = ExceptionReason.SelectPackError;
SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.ErrorSelectPack); SoundClient = AppInfo.Container.Resolve<SoundClient>();
SoundClient.SoundPlay(AppSettingsHelper.GetContent("SoundAddr", "Address09"));
// SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.ErrorSelectPack);
} }
, false, () => { }, 10, InvokeStatus.None); , false, () => { }, 10, InvokeStatus.None);
} }

@ -2,6 +2,7 @@
using Entity.Attr; using Entity.Attr;
using Entity.Constant; using Entity.Constant;
using HybirdFrameworkCore.Autofac; using HybirdFrameworkCore.Autofac;
using HybirdFrameworkCore.Configuration;
using log4net; using log4net;
using Service.Charger.Client; using Service.Charger.Client;
using Service.Execute.Api; using Service.Execute.Api;
@ -10,6 +11,7 @@ using Service.Execute.SwapException;
using Service.Execute.Utils; using Service.Execute.Utils;
using Service.Init; using Service.Init;
using Service.Led; using Service.Led;
using Service.Sound.SoundClient;
namespace Service.Execute.Step; namespace Service.Execute.Step;
@ -18,6 +20,11 @@ public class DoSwappingState : IState
private readonly ILog _log = LogManager.GetLogger(typeof(DoSwappingState)); private readonly ILog _log = LogManager.GetLogger(typeof(DoSwappingState));
private readonly CommonMgr _CommonMgr = AppInfo.Container.Resolve<CommonMgr>(); private readonly CommonMgr _CommonMgr = AppInfo.Container.Resolve<CommonMgr>();
public static SoundClient? SoundClient { get; set; }
public StateResult Handle(SwappingStateMachine machine) public StateResult Handle(SwappingStateMachine machine)
{ {
//上报云平台换电开始 //上报云平台换电开始
@ -33,13 +40,12 @@ public class DoSwappingState : IState
InvokeStatus startSwapping = StartSwapping(machine); InvokeStatus startSwapping = StartSwapping(machine);
if (startSwapping != InvokeStatus.Done) if (startSwapping != InvokeStatus.Done)
{ {
return SwappingStateMachine.ReturnWithInvokeErr(startSwapping, ExceptionReason.None); return SwappingStateMachine.ReturnWithInvokeErr(startSwapping, ExceptionReason.None);
} }
//旧电池拆卸 //旧电池拆卸
InvokeStatus unPack = UnPack(machine); InvokeStatus unPack = UnPack(machine);
if (unPack != InvokeStatus.Done) if (unPack != InvokeStatus.Done)
@ -100,7 +106,11 @@ public class DoSwappingState : IState
} }
}, () => }, () =>
{ {
SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.ErrStartSwap); SoundClient = AppInfo.Container.Resolve<SoundClient>();
SoundClient.SoundPlay(AppSettingsHelper.GetContent("SoundAddr", "Address30"));
//SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.ErrStartSwap);
SoundClient = AppInfo.Container.Resolve<SoundClient>();
SoundClient.SoundPlay(AppSettingsHelper.GetContent("SoundAddr", "Address01"));
LedClient.SendMsgByKey(InfoEnum.SwapInfo.ErrStartSwap.GetLed()); LedClient.SendMsgByKey(InfoEnum.SwapInfo.ErrStartSwap.GetLed());
},false, () => { },10,InvokeStatus.None); },false, () => { },10,InvokeStatus.None);
} }
@ -123,7 +133,9 @@ public class DoSwappingState : IState
bool holdOn = PlcApi.HoldOn(); bool holdOn = PlcApi.HoldOn();
if (holdOn) if (holdOn)
{ {
SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.StartSwapInfo); SoundClient = AppInfo.Container.Resolve<SoundClient>();
SoundClient.SoundPlay(AppSettingsHelper.GetContent("SoundAddr", "Address28"));
// SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.StartSwapInfo);
machine.PlcHoldFlag = true; machine.PlcHoldFlag = true;
} }
} }
@ -147,7 +159,8 @@ public class DoSwappingState : IState
// machine.LedTool?.WriteProgramContent(InfoEnum.SwapInfo.InfoUnPack.GetLed()); // machine.LedTool?.WriteProgramContent(InfoEnum.SwapInfo.InfoUnPack.GetLed());
LedClient.SendMsgByKey(InfoEnum.SwapInfo.InfoUnPack.GetLed()); LedClient.SendMsgByKey(InfoEnum.SwapInfo.InfoUnPack.GetLed());
SoundClient = AppInfo.Container.Resolve<SoundClient>();
SoundClient.SoundPlay(AppSettingsHelper.GetContent("SoundAddr", "Address11"));
machine.UnOldBatteryFlag = ClientMgr.PlcClient.DisassembleDone; machine.UnOldBatteryFlag = ClientMgr.PlcClient.DisassembleDone;
if (machine.UnOldBatteryFlag) if (machine.UnOldBatteryFlag)
@ -185,7 +198,9 @@ public class DoSwappingState : IState
} }
}, () => }, () =>
{ {
SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.InfoOldBatteryCarryIn); SoundClient = AppInfo.Container.Resolve<SoundClient>();
SoundClient.SoundPlay(AppSettingsHelper.GetContent("SoundAddr", "Address17"));
// SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.InfoOldBatteryCarryIn);
LedClient.SendMsgByKey(InfoEnum.SwapInfo.InfoOldBatteryCarryIn.GetLed()); LedClient.SendMsgByKey(InfoEnum.SwapInfo.InfoOldBatteryCarryIn.GetLed());
}, false, () => { }, 10, }, false, () => { }, 10,
InvokeStatus.None); InvokeStatus.None);
@ -215,7 +230,9 @@ public class DoSwappingState : IState
} }
}, () => }, () =>
{ {
SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.InfoNewBatteryCarryOut); SoundClient = AppInfo.Container.Resolve<SoundClient>();
SoundClient.SoundPlay(AppSettingsHelper.GetContent("SoundAddr", "Address18"));
//SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.InfoNewBatteryCarryOut);
LedClient.SendMsgByKey(InfoEnum.SwapInfo.InfoNewBatteryCarryOut.GetLed()); LedClient.SendMsgByKey(InfoEnum.SwapInfo.InfoNewBatteryCarryOut.GetLed());
}, false, () => { }, 10, }, false, () => { }, 10,
InvokeStatus.None); InvokeStatus.None);
@ -239,7 +256,9 @@ public class DoSwappingState : IState
} }
}, () => }, () =>
{ {
SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.InfoPack); //SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.InfoPack);
SoundClient = AppInfo.Container.Resolve<SoundClient>();
SoundClient.SoundPlay(AppSettingsHelper.GetContent("SoundAddr", "Address12"));
LedClient.SendMsgByKey(InfoEnum.SwapInfo.InfoPack.GetLed()); LedClient.SendMsgByKey(InfoEnum.SwapInfo.InfoPack.GetLed());
},false, () => { }, },false, () => { },
10,InvokeStatus.None); 10,InvokeStatus.None);
@ -258,7 +277,9 @@ public class DoSwappingState : IState
InfoEnum.BusinessSwappingForCloudState.SwapFinish; InfoEnum.BusinessSwappingForCloudState.SwapFinish;
// CloudApi.SendStateLog(machine.SwapOrder, machine.BusinessSwappingForCloudState); // CloudApi.SendStateLog(machine.SwapOrder, machine.BusinessSwappingForCloudState);
machine.BusinessSwappingStateUpdateTime = DateTime.Now; machine.BusinessSwappingStateUpdateTime = DateTime.Now;
SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.InfoPackFinish); //SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.InfoPackFinish);
SoundClient = AppInfo.Container.Resolve<SoundClient>();
SoundClient.SoundPlay(AppSettingsHelper.GetContent("SoundAddr", "Address13"));
LedClient.SendMsgByKey(InfoEnum.SwapInfo.InfoPackFinish.GetLed()); LedClient.SendMsgByKey(InfoEnum.SwapInfo.InfoPackFinish.GetLed());
_CommonMgr.InsertStep(InfoEnum.BusinessSwappingStep.FinishNewBatteryFlag, _CommonMgr.InsertStep(InfoEnum.BusinessSwappingStep.FinishNewBatteryFlag,
@ -287,7 +308,9 @@ public class DoSwappingState : IState
if (PlcApi.ReadPlcTaskStatus() == 1007) if (PlcApi.ReadPlcTaskStatus() == 1007)
{ {
SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.InfoToSafePosition); SoundClient = AppInfo.Container.Resolve<SoundClient>();
SoundClient.SoundPlay(AppSettingsHelper.GetContent("SoundAddr", "Address14"));
//SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.InfoToSafePosition);
machine.ToSafePositionFlag = true; machine.ToSafePositionFlag = true;
machine.BusinessSwappingStateUpdateTime = DateTime.Now; machine.BusinessSwappingStateUpdateTime = DateTime.Now;
@ -322,7 +345,9 @@ public class DoSwappingState : IState
var channelStatus = PlcApi.ChannelStatus(); var channelStatus = PlcApi.ChannelStatus();
if (count % 10 == 0) if (count % 10 == 0)
{ {
SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.CarTakePhotoInfo); SoundClient = AppInfo.Container.Resolve<SoundClient>();
SoundClient.SoundPlay(AppSettingsHelper.GetContent("SoundAddr", "Address29"));
// SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.CarTakePhotoInfo);
} }
count++; count++;
@ -338,8 +363,10 @@ public class DoSwappingState : IState
var lockCar = TBoxApi.LockCarManyTimes(machine.RfidReadModel.VelVin); var lockCar = TBoxApi.LockCarManyTimes(machine.RfidReadModel.VelVin);
if (lockCar.Result) if (lockCar.Result)
{ {
// machine.LedTool?.WriteProgramContent(InfoEnum.SwapInfo.ErrChannelStatus.GetLed()); machine.LedTool?.WriteProgramContent(InfoEnum.SwapInfo.ErrChannelStatus.GetLed());
SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.ErrChannelStatus); SoundClient = AppInfo.Container.Resolve<SoundClient>();
SoundClient.SoundPlay(AppSettingsHelper.GetContent("SoundAddr", "Address10"));
// SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.ErrChannelStatus);
//等待2分钟 //等待2分钟
Thread.Sleep(3*60 *1000); Thread.Sleep(3*60 *1000);
machine.VehiclesInPlace2Flag = false; machine.VehiclesInPlace2Flag = false;
@ -422,8 +449,10 @@ public class DoSwappingState : IState
}, () => }, () =>
{ {
machine.ExceptionReason = ExceptionReason.CarInPositionError; machine.ExceptionReason = ExceptionReason.CarInPositionError;
// machine.LedTool?.WriteProgramContent(InfoEnum.SwapInfo.ErrorCarInPositionTimeout.GetLed()); machine.LedTool?.WriteProgramContent(InfoEnum.SwapInfo.ErrorCarInPositionTimeout.GetLed());
SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.ErrorCarInPositionTimeout); // SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.ErrorCarInPositionTimeout);
SoundClient = AppInfo.Container.Resolve<SoundClient>();
SoundClient.SoundPlay(AppSettingsHelper.GetContent("SoundAddr", "Address06"));
}, false, () => { } }, false, () => { }
, 20, InvokeStatus.None); , 20, InvokeStatus.None);
} }

@ -3,6 +3,7 @@ using Entity.Attr;
using Entity.Constant; using Entity.Constant;
using Entity.DbModel.Station; using Entity.DbModel.Station;
using HybirdFrameworkCore.Autofac; using HybirdFrameworkCore.Autofac;
using HybirdFrameworkCore.Configuration;
using log4net; using log4net;
using Newtonsoft.Json; using Newtonsoft.Json;
using Service.Execute.Api; using Service.Execute.Api;
@ -12,7 +13,9 @@ using Service.Execute.Utils;
using Service.Init; using Service.Init;
using Service.Led; using Service.Led;
using Service.Padar.Client; using Service.Padar.Client;
using Service.Sound.SoundClient;
using Swapping.Business.Common; using Swapping.Business.Common;
using System.Media;
namespace Service.Execute.Step; namespace Service.Execute.Step;
@ -23,6 +26,8 @@ public class StationReadyState : IState
private readonly CommonMgr _CommonMgr = AppInfo.Container.Resolve<CommonMgr>(); private readonly CommonMgr _CommonMgr = AppInfo.Container.Resolve<CommonMgr>();
public static SoundClient? SoundClient { get; set; }
public static bool CanWelcomeInfo = true; public static bool CanWelcomeInfo = true;
public StateResult Handle(SwappingStateMachine machine) public StateResult Handle(SwappingStateMachine machine)
@ -59,6 +64,7 @@ public class StationReadyState : IState
if (InvokeStatus.Done != beginRfid) if (InvokeStatus.Done != beginRfid)
{ {
return SwappingStateMachine.ReturnWithInvokeErr(beginRfid, ExceptionReason.None); return SwappingStateMachine.ReturnWithInvokeErr(beginRfid, ExceptionReason.None);
} }
@ -103,7 +109,9 @@ public class StationReadyState : IState
}, },
() => () =>
{ {
SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.InfoStationModel) ; SoundClient = AppInfo.Container.Resolve<SoundClient>();
SoundClient.SoundPlay(AppSettingsHelper.GetContent("SoundAddr", "Address25"));
//SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.InfoStationModel) ;
LedClient.SendMsgByKey(InfoEnum.SwapInfo.InfoStationModel.GetLed()); LedClient.SendMsgByKey(InfoEnum.SwapInfo.InfoStationModel.GetLed());
}, true, () => { }, 5, InvokeStatus.None); }, true, () => { }, 5, InvokeStatus.None);
} }
@ -126,15 +134,18 @@ public class StationReadyState : IState
{ {
//LED显示-欢迎光临_换电站点_正在营业 //LED显示-欢迎光临_换电站点_正在营业
string welcomeContent = "欢迎光临换电站!(正在营业)"; string welcomeContent = "欢迎光临换电站!(正在营业)";
SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.WelcomeInfo);
SoundClient.SoundPlay(AppSettingsHelper.GetContent("SoundAddr", "Address01"));
//SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.WelcomeInfo);
LedClient.SendMsgByKey(InfoEnum.SwapInfo.WelcomeInfo.GetLed()); LedClient.SendMsgByKey(InfoEnum.SwapInfo.WelcomeInfo.GetLed());
isRemote = true; isRemote = true;
} }
} }
}, },
() => () =>
{ {SoundClient = AppInfo.Container.Resolve<SoundClient>();
SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.InfoStationModelRemoteErr) SoundClient.SoundPlay(AppSettingsHelper.GetContent("SoundAddr", "Address26"));
// SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.InfoStationModelRemoteErr)
; ;
}, true, () => { }, 5, InvokeStatus.None); }, true, () => { }, 5, InvokeStatus.None);
} }
@ -151,8 +162,12 @@ public class StationReadyState : IState
() => { PadarMgr._PadarClient?.PadarControl(flag); }); () => { PadarMgr._PadarClient?.PadarControl(flag); });
} }
public InvokeStatus AdjustCarByRadar(SwappingStateMachine machine) public InvokeStatus AdjustCarByRadar(SwappingStateMachine machine)
{ {
return Invoker.Invoke("begin Radar", 1000, 20, machine.IsCanceled, () => PadarMgr._PadarClient?.CarState == 6, return Invoker.Invoke("begin Radar", 1000, 20, machine.IsCanceled, () => PadarMgr._PadarClient?.CarState == 6,
() => () =>
{ {
@ -188,7 +203,9 @@ public class StationReadyState : IState
} }
else else
{ {
SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.CarInInfo); SoundClient = AppInfo.Container.Resolve<SoundClient>();
SoundClient.SoundPlay(AppSettingsHelper.GetContent("SoundAddr", "Address27"));
// SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.CarInInfo);
machine.ExceptionReason = ExceptionReason.None; machine.ExceptionReason = ExceptionReason.None;
_log.Info("entrance radar true"); _log.Info("entrance radar true");
machine.RadarInFlag = true; machine.RadarInFlag = true;
@ -215,9 +232,12 @@ public class StationReadyState : IState
} }
}, () => }, () =>
{ {
// machine.LedTool.WriteProgramContent(InfoEnum.SwapInfo.ErrorReadRfid.GetLed()); machine.LedTool.WriteProgramContent(InfoEnum.SwapInfo.ErrorReadRfid.GetLed());
SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.ErrorReadRfid); SoundClient = AppInfo.Container.Resolve<SoundClient>();
LedClient.SendMsgByKey(InfoEnum.SwapInfo.ErrorReadRfid.GetLed()); SoundClient.SoundPlay(AppSettingsHelper.GetContent("SoundAddr", "Address02"));
//SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.ErrorReadRfid);
//LedClient.SendMsgByKey(InfoEnum.SwapInfo.ErrorReadRfid.GetLed());
}, false, () => { machine.ExceptionReason = ExceptionReason.ReadRfidError; } }, false, () => { machine.ExceptionReason = ExceptionReason.ReadRfidError; }
, 3, InvokeStatus.None); , 3, InvokeStatus.None);
} }
@ -288,9 +308,11 @@ public class StationReadyState : IState
} }
}, () => }, () =>
{ {
// machine.LedTool!.WriteProgramContent(InfoEnum.SwapInfo.ErrorReadRfid.GetLed()); machine.LedTool!.WriteProgramContent(InfoEnum.SwapInfo.ErrorReadRfid.GetLed());
SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.ErrorReadRfid); SoundClient = AppInfo.Container.Resolve<SoundClient>();
LedClient.SendMsgByKey(InfoEnum.SwapInfo.ErrorReadRfid.GetLed()); SoundClient.SoundPlay(AppSettingsHelper.GetContent("SoundAddr", "Address02"));
//SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.ErrorReadRfid);
//LedClient.SendMsgByKey(InfoEnum.SwapInfo.ErrorReadRfid.GetLed());
}, false, () => { machine.ExceptionReason = ExceptionReason.ReadRfidError; }, 10, }, false, () => { machine.ExceptionReason = ExceptionReason.ReadRfidError; }, 10,
InvokeStatus.None); InvokeStatus.None);
} }

@ -2,6 +2,7 @@
using Entity.Attr; using Entity.Attr;
using Entity.Constant; using Entity.Constant;
using HybirdFrameworkCore.Autofac; using HybirdFrameworkCore.Autofac;
using HybirdFrameworkCore.Configuration;
using log4net; using log4net;
using Service.Execute.Api; using Service.Execute.Api;
using Service.Execute.Model.Tbox; using Service.Execute.Model.Tbox;
@ -148,7 +149,9 @@ public class SwapDoneState : IState
}, () => }, () =>
{ {
// machine.LedTool?.WriteProgramContent(InfoEnum.SwapInfo.ErrLockCar.GetLed()); // machine.LedTool?.WriteProgramContent(InfoEnum.SwapInfo.ErrLockCar.GetLed());
SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.ErrLockCar); // SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.ErrLockCar);
SoundClient = AppInfo.Container.Resolve<SoundClient>();
SoundClient.SoundPlay(AppSettingsHelper.GetContent("SoundAddr", "Address19"));
LedClient.SendMsgByKey(InfoEnum.SwapInfo.ErrLockCar.GetLed()); LedClient.SendMsgByKey(InfoEnum.SwapInfo.ErrLockCar.GetLed());
}, false, () => { machine.ExceptionReason = ExceptionReason.LockCarError; } }, false, () => { machine.ExceptionReason = ExceptionReason.LockCarError; }
, 10, InvokeStatus.None); , 10, InvokeStatus.None);

@ -15,7 +15,7 @@ public class PadarService
{ {
if (PadarMgr._PadarClient == null || !PadarMgr._PadarClient.Connected) if (PadarMgr._PadarClient == null || !PadarMgr._PadarClient.Connected)
{ {
Result<bool>.Fail(@"充电机未连接"); Result<bool>.Fail(@"雷达未连接");
// return; // return;
} }

@ -4,7 +4,7 @@ using HybirdFrameworkCore.Autofac;
using HybirdFrameworkCore.Autofac.Attribute; using HybirdFrameworkCore.Autofac.Attribute;
using log4net; using log4net;
using Service.Charger.Server; using Service.Charger.Server;
using Service.Sound.SoundClient;
namespace Service.Charger.Client; namespace Service.Charger.Client;
/// <summary> /// <summary>
@ -37,7 +37,9 @@ public static class ClientMgr
DestAddr = "132,208,208,224" DestAddr = "132,208,208,224"
}; };
Log.Info($"begin to connect {netInfo.Code} {netInfo.NetAddr}:{netInfo.NetPort}"); Log.Info($"begin to connect {netInfo.Code} {netInfo.NetAddr}:{netInfo.NetPort}");
PlcClient = AppInfo.Container.Resolve<PlcClient>(); PlcClient = AppInfo.Container.Resolve<PlcClient>();
PlcClient.AutoReconnect = true; PlcClient.AutoReconnect = true;
PlcClient.Sn = PlcConst.ChargeEqpCode; PlcClient.Sn = PlcConst.ChargeEqpCode;
PlcClient.ConnectedEventHandler += (sender, b) => PlcClient.ConnectedEventHandler += (sender, b) =>

@ -1,9 +1,13 @@
using Autofac;
using DotNetty.Transport.Channels; using DotNetty.Transport.Channels;
using HybirdFrameworkCore.Autofac;
using HybirdFrameworkCore.Autofac.Attribute; using HybirdFrameworkCore.Autofac.Attribute;
using HybirdFrameworkCore.Configuration;
using log4net; using log4net;
using Service.Charger.Client; using Service.Charger.Client;
using Service.Charger.Msg.Charger.Req; using Service.Charger.Msg.Charger.Req;
using Service.Charger.Msg.Host.Resp; using Service.Charger.Msg.Host.Resp;
using Service.Sound.SoundClient;
namespace Service.Charger.Handler; namespace Service.Charger.Handler;
@ -21,6 +25,8 @@ public class BatteryPackDisassembledReqHandler : SimpleChannelInboundHandler<Bat
private static readonly ILog Log = LogManager.GetLogger(typeof(BatteryPackDisassembledReqHandler)); private static readonly ILog Log = LogManager.GetLogger(typeof(BatteryPackDisassembledReqHandler));
public static readonly string addr1 = AppSettingsHelper.GetContent("SoundAddr", "Address27");
public static SoundClient? SoundClient { get; set; }
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
@ -28,6 +34,7 @@ public class BatteryPackDisassembledReqHandler : SimpleChannelInboundHandler<Bat
{ {
Log.Info("swap finish"); Log.Info("swap finish");
ctx.Channel.WriteAndFlushAsync(message: new BatteryPackDisassembledResq()); ctx.Channel.WriteAndFlushAsync(message: new BatteryPackDisassembledResq());
ClientMgr.PlcClient.DisassembleDone = true; ClientMgr.PlcClient.DisassembleDone = true;
} }

@ -1,11 +1,15 @@
using Autofac;
using DotNetty.Transport.Channels; using DotNetty.Transport.Channels;
using HybirdFrameworkCore.Autofac;
using HybirdFrameworkCore.Autofac.Attribute; using HybirdFrameworkCore.Autofac.Attribute;
using HybirdFrameworkCore.Configuration;
using HybirdFrameworkCore.Utils; using HybirdFrameworkCore.Utils;
using log4net; using log4net;
using Newtonsoft.Json; using Newtonsoft.Json;
using Service.Charger.Client; using Service.Charger.Client;
using Service.Charger.Msg.Charger.Req; using Service.Charger.Msg.Charger.Req;
using Service.Charger.Msg.Charger.Resp; using Service.Charger.Msg.Charger.Resp;
using Service.Sound.SoundClient;
namespace Service.Charger.Handler; namespace Service.Charger.Handler;
@ -24,14 +28,15 @@ public class StartBatterySwapResqHandler : SimpleChannelInboundHandler<StartBatt
private static readonly ILog Log = LogManager.GetLogger(typeof(StartBatterySwapResqHandler)); private static readonly ILog Log = LogManager.GetLogger(typeof(StartBatterySwapResqHandler));
public static SoundClient? SoundClient { get; set; }
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
protected override void ChannelRead0(IChannelHandlerContext ctx, StartBatterySwapResq msg) protected override void ChannelRead0(IChannelHandlerContext ctx, StartBatterySwapResq msg)
{ {
Log.Info($"receive msg={msg}"); Log.Info($"receive msg={msg}");
// //开始换电语音播报
if (msg.AnswerResult == 0) if (msg.AnswerResult == 0)
{ {
ClientMgr.PlcClient.SwapStart = true; ClientMgr.PlcClient.SwapStart = true;

@ -1,9 +1,13 @@
using Autofac;
using DotNetty.Transport.Channels; using DotNetty.Transport.Channels;
using HybirdFrameworkCore.Autofac;
using HybirdFrameworkCore.Autofac.Attribute; using HybirdFrameworkCore.Autofac.Attribute;
using HybirdFrameworkCore.Configuration;
using log4net; using log4net;
using Service.Charger.Client; using Service.Charger.Client;
using Service.Charger.Msg.Charger.Req; using Service.Charger.Msg.Charger.Req;
using Service.Charger.Msg.Host.Resp; using Service.Charger.Msg.Host.Resp;
using Service.Sound.SoundClient;
namespace Service.Charger.Handler; namespace Service.Charger.Handler;
@ -18,11 +22,14 @@ public class SwapBatteryFinishReqHandler : SimpleChannelInboundHandler<SwapBatte
private static readonly ILog Log = LogManager.GetLogger(typeof(SwapBatteryFinishReqHandler)); private static readonly ILog Log = LogManager.GetLogger(typeof(SwapBatteryFinishReqHandler));
public static readonly string addr1 = AppSettingsHelper.GetContent("SoundAddr", "Address34");
public static SoundClient? SoundClient { get; set; }
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
protected override void ChannelRead0(IChannelHandlerContext ctx, SwapBatteryFinishReq msg) protected override void ChannelRead0(IChannelHandlerContext ctx, SwapBatteryFinishReq msg)
{ {
Log.Info("swap finish"); Log.Info("swap finish");
ctx.Channel.WriteAndFlushAsync(new SwapBatteryFinishResq()); ctx.Channel.WriteAndFlushAsync(new SwapBatteryFinishResq());
ClientMgr.PlcClient.SwapDone = true; ClientMgr.PlcClient.SwapDone = true;

@ -4,6 +4,38 @@
"DbType": "MySql", "DbType": "MySql",
"SqlConnection": "server=192.168.2.2;Port=3306;Database=eaxing_dev;Uid=root;Pwd=Rszn123;Charset=utf8;" "SqlConnection": "server=192.168.2.2;Port=3306;Database=eaxing_dev;Uid=root;Pwd=Rszn123;Charset=utf8;"
}, },
"SoundAddr": {
"Address01": "D:\\Voice\\01.mp4",
"Address02": "D:\\Voice\\02.mp4",
"Address03": "D:\\Voice\\03.mp4",
"Address04": "D:\\Voice\\04.mp4",
"Address05": "D:\\Voice\\05.mp4",
"Address06": "D:\\Voice\\06.mp4",
"Address07": "D:\\Voice\\07.mp4",
"Address08": "D:\\Voice\\08.mp4",
"Address09": "D:\\Voice\\09.mp4",
"Address10": "D:\\Voice\\10.mp4",
"Address11": "D:\\Voice\\11.mp4",
"Address12": "D:\\Voice\\12.mp4",
"Address13": "D:\\Voice\\13.mp4",
"Address14": "D:\\Voice\\14.mp4",
"Address15": "D:\\Voice\\15.mp4",
"Address16": "D:\\Voice\\16.mp4",
"Address17": "D:\\Voice\\17.mp4",
"Address18": "D:\\Voice\\18.mp4",
"Address19": "D:\\Voice\\19.mp4",
"Address20": "D:\\Voice\\20.mp4",
"Address21": "D:\\Voice\\21.mp4",
"Address22": "D:\\Voice\\22.mp4",
"Address23": "D:\\Voice\\23.mp4",
"Address24": "D:\\Voice\\24.mp4",
"Address25": "D:\\Voice\\25.mp4",
"Address26": "D:\\Voice\\26.mp4",
"Address27": "D:\\Voice\\27.mp4",
"Address28": "D:\\Voice\\28.mp4",
"Address29": "D:\\Voice\\29.mp4",
},
"Update": { "Update": {
"AutoUpdate": "false", "AutoUpdate": "false",
"Version": "1.1.0.1", "Version": "1.1.0.1",
@ -132,6 +164,6 @@
"Src": "D:\\RiderProjects\\hn_back_charger\\WebStarter\\bin\\Debug\\net6.0\\logs", "Src": "D:\\RiderProjects\\hn_back_charger\\WebStarter\\bin\\Debug\\net6.0\\logs",
"Dest": "D:\\zip", "Dest": "D:\\zip",
"Days": 7 "Days": 7
}, }
} }

@ -5,4 +5,5 @@
"Microsoft.AspNetCore": "Warning" "Microsoft.AspNetCore": "Warning"
} }
} }
} }

Loading…
Cancel
Save