public ExcutedResult CreateFreeAccount([FromBody] CreateFreeAccountRequest model) { try { if (!ModelState.IsValid) { return(ExcutedResult.FailedResult(BusinessResultCode.ArgumentError, "参数无效")); } var result = _accountLogic.CreateFreeAccount(model); return(result); } catch (BusinessException bex) { return(ExcutedResult.FailedResult(bex.ErrorCode, bex.Message)); } }
/// <summary> /// 创建钱包帐号 /// </summary> /// <param name="request"></param> /// <returns></returns> public ExcutedResult CreateFreeAccount(CreateFreeAccountRequest request) { if (!RegexHelper.CheckAccount(request.Account)) { return(ExcutedResult.FailedResult(BusinessResultCode.AccountNotInRule, "帐号不符合规则")); } if (request.PublicKey.Substring(0, 3) != chain) { throw new BusinessException(BusinessResultCode.PublicKeyError, "公钥格式错误"); } //获取用户创建数 int count = _createAccountRecordRepository.GetFreeCreateNum(chain, request.Uuid); if (int.TryParse(_configDataLogic.GetByKey(ConfigDataKey.RegisterAccountLimit), out var freeNum) && freeNum > 0) { if (count > freeNum) { throw new BusinessException(BusinessResultCode.FreeAccountLimit, "您已无法创建账号,请联系客服人员"); } } var client = _contractFactory.GetService <IAccountClient>(chain); var tx = client.CreateAccount(new NewAccount() { AccountName = request.Account, ActiveKey = request.PublicKey, OwnerKey = request.PublicKey, }); tx.Wait(); var result = tx.Result; if (result.Status != EnumStatus.Success) { if (result.Code != SysResultCode.ServerException) { return(ExcutedResult.FailedResult(result.Code, result.Message)); } return(ExcutedResult.FailedResult(BusinessResultCode.CreateAccountFail, "链创建账号失败")); } //添加帐号及记录 using (var trans = base.GetNewTransaction()) { CreateAccountRecord record = new CreateAccountRecord() { Owner = result.Data.Payer, ChainCode = chain, Account = request.Account, ClientIp = CurrentUser.ClientIP, Uuid = request.Uuid ?? "", Type = (int)EnumAccountType.Free, PublicKey = request.PublicKey, Access = "active", Remark = result.Data.TransactionId }; _createAccountRecordRepository.Add(record); Account entity = new Account { ChainCode = chain, Account1 = request.Account, Type = (int)EnumAccountType.Free, PublicKey = request.PublicKey, Access = "active",//TODO }; Repository.Add(entity); trans.Commit(); } return(ExcutedResult.SuccessResult()); }