Пример #1
0
        /// <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;
            }
        }
Пример #2
0
        /// <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);
            }
        }