/// <summary> /// 检查在非成功状态下的返回值 /// </summary> public void CheckStateResult() { if (_json != null) { return; } switch (State) { case ZeroOperatorStateType.LocalNoReady: case ZeroOperatorStateType.LocalZmqError: _json = ApiResult.NoReadyJson; return; case ZeroOperatorStateType.LocalSendError: case ZeroOperatorStateType.LocalRecvError: _json = ApiResult.NetworkErrorJson; return; case ZeroOperatorStateType.LocalException: _json = ApiResult.LocalExceptionJson; return; case ZeroOperatorStateType.Plan: case ZeroOperatorStateType.Runing: case ZeroOperatorStateType.VoteBye: case ZeroOperatorStateType.Wecome: case ZeroOperatorStateType.VoteSend: case ZeroOperatorStateType.VoteWaiting: case ZeroOperatorStateType.VoteStart: case ZeroOperatorStateType.VoteEnd: _json = JsonConvert.SerializeObject(ApiResult.Error(ErrorCode.Success, State.Text())); return; case ZeroOperatorStateType.Error: _json = ApiResult.InnerErrorJson; return; case ZeroOperatorStateType.Unavailable: _json = ApiResult.UnavailableJson; return; case ZeroOperatorStateType.NotSupport: case ZeroOperatorStateType.NotFind: case ZeroOperatorStateType.NoWorker: //ApiContext.Current.LastError = ErrorCode.NoFind; _json = ApiResult.NoFindJson; return; case ZeroOperatorStateType.ArgumentInvalid: //ApiContext.Current.LastError = ErrorCode.LogicalError; _json = ApiResult.ArgumentErrorJson; return; case ZeroOperatorStateType.TimeOut: _json = ApiResult.TimeOutJson; return; case ZeroOperatorStateType.FrameInvalid: //ApiContext.Current.LastError = ErrorCode.NetworkError; _json = ApiResult.NetworkErrorJson; return; case ZeroOperatorStateType.NetError: //ApiContext.Current.LastError = ErrorCode.NetworkError; _json = ApiResult.NetworkErrorJson; return; case ZeroOperatorStateType.Failed: case ZeroOperatorStateType.Bug: //ApiContext.Current.LastError = ErrorCode.LocalError; _json = ApiResult.LogicalErrorJson; return; case ZeroOperatorStateType.Pause: //ApiContext.Current.LastError = ErrorCode.LocalError; _json = ApiResult.LogicalErrorJson; return; default: _json = ApiResult.PauseJson; return; case ZeroOperatorStateType.Ok: //ApiContext.Current.LastError = ErrorCode.Success; return; } }
/// <summary> /// 执行命令 /// </summary> /// <param name="item"></param> /// <returns></returns> private ZeroOperatorStateType ExecCommand(ApiCallItem item) { //1 查找调用方法 if (!_apiActions.TryGetValue(item.ApiName.Trim(), out var action)) { item.Result = ApiResult.NoFindJson; item.Status = ZeroOperatorStatus.NotFind; return(ZeroOperatorStateType.NotFind); } //2 确定调用方法及对应权限 if (action.NeedLogin && (GlobalContext.Customer == null || GlobalContext.Customer.UserId <= 0)) { item.Result = ApiResult.DenyAccessJson; item.Status = ZeroOperatorStatus.DenyAccess; return(ZeroOperatorStateType.DenyAccess); } //3 参数校验 try { if (!action.RestoreArgument(item.Argument ?? "{}")) { item.Result = ApiResult.ArgumentErrorJson; item.Status = ZeroOperatorStatus.FormalError; return(ZeroOperatorStateType.ArgumentInvalid); } } catch (Exception e) { ZeroTrace.WriteException(StationName, e, item.ApiName, "restory argument", item.Argument); item.Result = ApiResult.LocalExceptionJson; item.Status = ZeroOperatorStatus.FormalError; return(ZeroOperatorStateType.LocalException); } try { if (!action.Validate(out var message)) { item.Result = JsonConvert.SerializeObject(ApiResult.Error(ErrorCode.LogicalError, message)); item.Status = ZeroOperatorStatus.LogicalError; return(ZeroOperatorStateType.ArgumentInvalid); } } catch (Exception e) { ZeroTrace.WriteException(StationName, e, item.ApiName, "invalidate argument", item.Argument); item.Result = ApiResult.LocalExceptionJson; item.Status = ZeroOperatorStatus.LocalException; return(ZeroOperatorStateType.LocalException); } //4 方法执行 try { var result = action.Execute(); if (result != null) { if (result.Status == null) { result.Status = new ApiStatusResult { InnerMessage = item.GlobalId } } ; else { result.Status.InnerMessage = item.GlobalId; } } item.Result = result == null ? ApiResult.SucceesJson : JsonConvert.SerializeObject(result); item.Status = result == null || result.Success ? ZeroOperatorStatus.Success : ZeroOperatorStatus.LogicalError; return(result == null || result.Success ? ZeroOperatorStateType.Ok : ZeroOperatorStateType.Failed); } catch (Exception e) { ZeroTrace.WriteException(StationName, e, item.ApiName, "execute", JsonConvert.SerializeObject(item)); item.Result = ApiResult.LocalExceptionJson; item.Status = ZeroOperatorStatus.LocalException; return(ZeroOperatorStateType.LocalException); } }