public IActionResult ResetPassword([FromBody] PhonePasswordCodeRequestDto dto)
        {
            var biz = new AccountBiz();

            if (!biz.VerifyCode(dto.Phone, dto.Code))
            {
                return(Failed(ErrorCode.VerificationCode, "手机验证码错误!"));
            }

            var model = biz.GetUserByPhone(dto.Phone).FirstOrDefault();

            if (model == null)
            {
                return(Failed(ErrorCode.Empty, "该手机号未注册"));
            }

            model.LastUpdatedBy = model.UserGuid;
            model.Password      = CryptoHelper.AddSalt(model.UserGuid, dto.Password);
            if (string.IsNullOrEmpty(model.Password))
            {
                return(Failed(ErrorCode.SystemException, "密码加盐失败"));
            }

            return(biz.UpdateUser(model) ? Success() : Failed(ErrorCode.DataBaseError, "密码更新失败!"));
        }
        public IActionResult Register([FromBody] PhonePasswordCodeRequestDto request)
        {
            var accountBiz = new AccountBiz();

            if (!accountBiz.VerifyCode(request.Phone, request.Code))
            {
                return(Failed(ErrorCode.VerificationCode, "手机验证码错误"));
            }

            var userID       = Guid.NewGuid().ToString("N");
            var saltPassword = CryptoHelper.AddSalt(userID, request.Password);

            if (string.IsNullOrEmpty(saltPassword))
            {
                return(Failed(ErrorCode.SystemException, "密码加盐失败"));
            }

            var biz  = new AccountBiz();
            var list = biz.GetUserByPhone(request.Phone);

            if (list.Any())
            {
                return(Failed(ErrorCode.DuplicatePhone, "该手机号已经注册"));
            }
            #region 获取用户是否有推荐关注公众号记录,若有,则将推荐人设为平台账户推荐人
            var recommendUser = TryGetSubscriptionRecommendUser(request.OpenId);
            if (!string.IsNullOrWhiteSpace(recommendUser))
            {
                request.Referrer = recommendUser;
            }
            #endregion
            var userModel = new UserModel
            {
                UserGuid      = userID,
                WechatOpenid  = request.OpenId,
                NickName      = userID.Substring(0, 6),
                UserName      = userID.Substring(0, 6),
                Phone         = request.Phone,
                Password      = saltPassword,
                Birthday      = new DateTime(2000, 1, 1),
                RecommendGuid = request.Referrer,
                CreatedBy     = userID,
                LastUpdatedBy = userID,
                OrgGuid       = "guodan"
            };

            var consumerModel = new ConsumerModel
            {
                ConsumerGuid  = userID,
                CreatedBy     = userID,
                LastUpdatedBy = userID
            };

            var registerModel = new RegisterModel
            {
                PlatformType = request.PlatformType,
                Parameters   = request.Parameters
            };

            var result = biz.Register(userModel, consumerModel, registerModel);

            if (result == null)
            {
                return(Failed(ErrorCode.DuplicatePhone));
            }

            if (result.Value)
            {
                var message = string.Empty;
                if (enableXmpp && !RegisterIM(userModel)) // 启用XMPP的情况下,才执行注册
                {
                    message = $"register im account failed. user id: {userID}, user phone: {request.Phone}";
                    Logger.Error(message);
                }

                var scoreBiz = new ScoreRulesBiz();
                scoreBiz.AddScoreByRules(userID, ActionEnum.Registered, UserType.Consumer);

                if (!string.IsNullOrEmpty(request.Referrer))
                {
                    scoreBiz.AddScoreByRules(request.Referrer, ActionEnum.RecommendRegistered, UserType.Doctor);
                    scoreBiz.AddScoreByRules(request.Referrer, ActionEnum.RecommendRegistered, UserType.Consumer);
                }

                return(Success(userID, message));
            }
            else
            {
                return(Failed(ErrorCode.DataBaseError));
            }
        }