using Autofac;
using Entity.Attr;
using Entity.Constant;
using HybirdFrameworkCore.Autofac;
using HybirdFrameworkCore.Configuration;
using log4net;
using Newtonsoft.Json;
using Service.Execute.Api;
using Service.Execute.Model;
using Service.Execute.Model.Tbox;
using Service.Execute.StaticTools;
using Service.Execute.SwapException;
using Service.Execute.Utils;
using Service.Led;
using Service.Sound.SoundClient;
using Service.Station;
namespace Service.Execute.Step;
///
/// 车辆操作
///
public class CarCtrlState : IState
{
private readonly ILog _log = LogManager.GetLogger(typeof(CarCtrlState));
private readonly CommonMgr _CommonMgr = AppInfo.Container.Resolve();
public static SoundClient? SoundClient { get; set; }
public StateResult Handle(SwappingStateMachine machine)
{
//解锁车辆
InvokeStatus unLockCar = UnLockCar(machine);
if (unLockCar != InvokeStatus.Done)
{
return SwappingStateMachine.ReturnWithInvokeErr(unLockCar, ExceptionReason.None);
}
return new StateResult()
{
SwappingState = SwappingState.DoSwapping
};
}
///
/// 车辆解锁
///
///
public InvokeStatus UnLockCar(SwappingStateMachine machine)
{
return Invoker.Invoke("UnLockCar", 500, 5, machine.IsCanceled,
() => machine.VelUnlockFlag, async () =>
{
Task result = TBoxApi.UnLockCarManyTimes(machine.RfidReadModel.VelVin);
await result;
bool unLock = result.Result;
if (unLock)
{
//查询车辆锁止状态
Task carInfo = TBoxApi.GetCarInfo(machine.RfidReadModel.VelVin);
var resultHeartBeatMsg = carInfo.Result.CarStatus;
if (resultHeartBeatMsg?.LockStatus == 1 || machine.ManualConfirmCarUnlockFlag)
{
machine.ManualConfirmCarUnlockFlag = false;
machine.BoxCarInfoModel = carInfo.Result;
machine.VelUnlockFlag = true;
_CommonMgr.InsertStep(InfoEnum.BusinessSwappingStep.VelUnlockFlag,
machine,param: $"unlock: {unLock} ; heartMsg: {JsonConvert.SerializeObject(resultHeartBeatMsg)}",type:
machine.ManualConfirmCarUnlockFlag? (int)SwapConstant.StepType.MANUAL :
(int)SwapConstant.StepType.AUTO);
SoundClient = AppInfo.Container.Resolve();
SoundClient.SoundPlay(SoundEnum.music93);
Thread.Sleep(6000);
SoundClient.SoundPlay(SoundEnum.music92);
Thread.Sleep(4000);
}
}
}, () =>
{
Task result = TBoxApi.UnLockCarManyTimes(machine.RfidReadModel.VelVin);
Thread.Sleep(1000);
// await result;
bool unLock = result.Result;
if (!unLock )
{
SoundClient = AppInfo.Container.Resolve();
SoundClient.SoundPlay(SoundEnum.music104);
Thread.Sleep(7000);
SoundClient.SoundPlay(SoundEnum.music105);
Thread.Sleep(5000);
}
},
false,
() =>
{
machine.ExceptionReason = ExceptionReason.UnLockCarError;
}
, 5, InvokeStatus.None);
}
}