You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

279 lines
9.5 KiB

using Autofac;
using AutoMapper;
using Entity.Attr;
using Entity.Constant;
using Entity.DbModel.Station;
using HybirdFrameworkCore.Autofac;
using HybirdFrameworkCore.Configuration;
using log4net;
using Newtonsoft.Json;
using Repository.Station;
using Service.Charger.Client;
using Service.Execute.Api;
using Service.Execute.Model;
using Service.Execute.Model.Tbox;
using Service.Execute.SwapException;
using Service.Execute.Utils;
using Service.Init;
using Service.Led;
using Service.Padar.Client;
using Service.Sound.SoundClient;
namespace Service.Execute.Step;
public class DoSwappingState : IState
{
private readonly ILog _log = LogManager.GetLogger(typeof(DoSwappingState));
private readonly CommonMgr _CommonMgr = AppInfo.Container.Resolve<CommonMgr>();
public BinInfoRepository _binInfoRepository { get; set; }
public static SoundClient? SoundClient { get; set; }
public StateResult Handle(SwappingStateMachine machine)
{
//上报云平台换电开始
machine.BusinessSwappingStateUpdateTime = DateTime.Now;
//下发启动换电
InvokeStatus startSwapping = StartSwapping(machine);
if (startSwapping != InvokeStatus.Done)
{
return SwappingStateMachine.ReturnWithInvokeErr(startSwapping, ExceptionReason.None);
}
//旧电池拆卸
InvokeStatus unPack = UnPack(machine);
if (unPack != InvokeStatus.Done)
{
return SwappingStateMachine.ReturnWithInvokeErr(unPack, ExceptionReason.None);
}
//安装
InvokeStatus pack = Pack(machine);
if (pack != InvokeStatus.Done)
{
return SwappingStateMachine.ReturnWithInvokeErr(pack, ExceptionReason.None);
}
//安装完成
InvokeStatus packFinish = PackFinish(machine);
if (packFinish != InvokeStatus.Done)
{
return SwappingStateMachine.ReturnWithInvokeErr(packFinish, ExceptionReason.None);
}
return new StateResult()
{
SwappingState = SwappingState.SwapDone
};
}
/// <summary>
/// 控制雷达启停
/// </summary>
/// <param name="machine"></param>
/// <param name="flag"></param>
/// <returns></returns>
public InvokeStatus ControlRadar(SwappingStateMachine machine, byte flag)
{
return Invoker.Invoke("begin Radar", 1000, 20, machine.IsCanceled, () => PadarMgr._PadarClient?.CarState > 0,
() => { PadarMgr._PadarClient?.PadarControl(flag); });
}
//public void leida ()
//{
// switch (PadarMgr._PadarClient?.CarState)
// {
// case 1:
// _log.Info("radar 无车");
// break;
// case 2:
// _log.Info("radar 无电池");
// break;
// case 3:
// _log.Info("radar 角度偏移过大");
// break;
// case 4:
// _log.Info("radar 车辆靠后");
// break;
// case 5:
// _log.Info("radar 车辆靠前");
// break;
// ;
// }
//}
/// <summary>
/// 下发plc启动换电
/// </summary>
/// <returns></returns>
public InvokeStatus StartSwapping(SwappingStateMachine machine)
{
return Invoker.Invoke("StartSwapping", 1000, 5, machine.IsCanceled,
() => machine.StartSwappingFlag, () =>
{
// Task<bool> result = TBoxApi.UnLockCarManyTimes(machine.RfidReadModel.VelVin);
// bool unLock = result.Result;
//if (unLock)
//{
var startSwapping = PlcApi.StartSwapping(machine.SwapOrderBatteryInfo.InBinInfo.No,
machine.SwapOrderBatteryInfo.UpBinInfo.No);
_CommonMgr.InsertStep(InfoEnum.BusinessSwappingStep.DistributeSelectPackFlag,
machine,param: $"InBin:{JsonConvert.SerializeObject(machine.SwapOrderBatteryInfo.InBinInfo)};" +
$"UpBin: {JsonConvert.SerializeObject(machine.SwapOrderBatteryInfo.UpBinInfo)}");
_CommonMgr.InsertStep(InfoEnum.BusinessSwappingStep.StartSwappingFlag,
machine);
for (int i = 0; i < 8; i++)
{
LedClient.SendMsgByKey(InfoEnum.SwapInfo.StartSwap.GetLed());
}
//LedClient.SendMsgByKey(InfoEnum.SwapInfo.StartSwap.GetLed());
//查詢當前任務狀態是否被更改
if (startSwapping)
{
machine.SwapOrder.SwapBeginTime = DateTime.Now;
_CommonMgr.UpdateSwapOrder(machine);
machine.SwapStatus = 0;
machine.StartSwappingFlag = true;
SoundClient = AppInfo.Container.Resolve<SoundClient>();
SoundClient.SoundPlay(SoundEnum.music91);
Thread.Sleep(5000);
SoundClient.SoundPlay(SoundEnum.music90);
}
// }
}, () =>
{
//SoundClient = AppInfo.Container.Resolve<SoundClient>();
//SoundClient.SoundPlay(SoundEnum.music70);
// LedClient.SendMsgByKey(InfoEnum.SwapInfo.ErrStartSwap.GetLed());
},false, () => { },10,InvokeStatus.None);
}
/// <summary>
/// 读取plc任务状态电池拆卸中
/// 读取plc任务状态电池入库搬运中
/// 读取plc任务状态电池出库搬运中
/// 读取plc任务状态电池安装中
/// 读取plc任务状态电池安装完成
/// </summary>
/// <returns></returns>
public InvokeStatus UnPack(SwappingStateMachine machine)
{
int i = 0;
return Invoker.Invoke("plc UnPack", 500, 5, machine.IsCanceled,
() => machine.UnOldBatteryFlag, () =>
{
// LedClient.SendMsgByKey(InfoEnum.SwapInfo.InfoUnPack.GetLed());
SoundClient = AppInfo.Container.Resolve<SoundClient>();
machine.UnOldBatteryFlag = ClientMgr.PlcClient.DisassembleDone;
if (machine.UnOldBatteryFlag)
{
_CommonMgr.InsertStep(InfoEnum.BusinessSwappingStep.UnOldBatteryFlag,
machine);
}
},
() =>
{
if (i==0)
{
SoundClient = AppInfo.Container.Resolve<SoundClient>();
SoundClient.SoundPlay(SoundEnum.music51);
i = 1;
}
}, false, () => { }, 30,
InvokeStatus.None);
}
public InvokeStatus Pack(SwappingStateMachine machine)
{
int f = 0;
return Invoker.Invoke("plc Pack ing", 500, 5, machine.IsCanceled,
() => machine.InstallNewBatteryFlag, () =>
{
// machine.LedTool?.WriteProgramContent(InfoEnum.SwapInfo.InfoPack.GetLed());
// LedClient.SendMsgByKey(InfoEnum.SwapInfo.InfoPack.GetLed());
machine.InstallNewBatteryFlag = ClientMgr.PlcClient.SwapDone;
if (machine.InstallNewBatteryFlag)
{
_CommonMgr.InsertStep(InfoEnum.BusinessSwappingStep.InstallNewBatteryFlag,
machine);
}
}, () =>
{
//SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.InfoPack);
SoundClient = AppInfo.Container.Resolve<SoundClient>();
//SoundClient.SoundPlay(AppSettingsHelper.GetContent("SoundAddr", "Address12"));
if (f==0)
{
SoundClient.SoundPlay(SoundEnum.music52);
// LedClient.SendMsgByKey(InfoEnum.SwapInfo.InfoPack.GetLed());
f = 1;
}
},false, () => { },
30,InvokeStatus.None);
}
public InvokeStatus PackFinish(SwappingStateMachine machine)
{
int b = 0;
return Invoker.Invoke("plc Pack Finish", 500, 5, machine.IsCanceled,
() => machine.FinishNewBatteryFlag, () =>
{
if (ClientMgr.PlcClient.SwapDone)
{
machine.FinishNewBatteryFlag = true;
machine.BusinessSwappingForCloudState =
InfoEnum.BusinessSwappingForCloudState.SwapFinish;
machine.BusinessSwappingStateUpdateTime = DateTime.Now;
SoundClient = AppInfo.Container.Resolve<SoundClient>();
SoundClient.SoundPlay(SoundEnum.music53);
_CommonMgr.InsertStep(InfoEnum.BusinessSwappingStep.FinishNewBatteryFlag,
machine);
machine.ToSafePositionFlag = true;
machine.BusinessSwappingStateUpdateTime = DateTime.Now;
machine.SwapStatus = 1;
}
}, () =>
{
// LedClient.SendMsgByKey(InfoEnum.SwapInfo.InfoPackFinish.GetLed());
},false, () => { },
30,InvokeStatus.None);
}
}