public IActionResult Login([FromBody] LoginRequestDto request)
        {
            var biz   = new AccountBiz();
            var query = biz.GetUserByPhone(request.Phone);

            var model = query.FirstOrDefault(m => string.Equals(m.Password, CryptoHelper.AddSalt(m.UserGuid, request.Password), StringComparison.OrdinalIgnoreCase));

            if (model == null)
            {
                return(Failed(ErrorCode.InvalidIdPassword));
            }

            // 启用XMPP的情况下,就检查用户IM账号是否存在
            if (enableXmpp)
            {
                var status = Client.QueryStatusAsync(model.UserGuid);
                status.Wait();

                // 如果不存在,则注册该用户的IM账号
                if (status.Result == IMStatus.NotExist)
                {
                    RegisterIM(model);
                }
            }

            if (!string.IsNullOrWhiteSpace(request.OpenId) && request.OpenId != model.WechatOpenid)
            {
                model.WechatOpenid    = request.OpenId;
                model.LastUpdatedDate = DateTime.Now;
                var upRes = biz.UpdateUser(model);
                Logger.Debug($"用户登录时,更新用户({model.UserGuid}) openid 结果:请求参数{JsonConvert.SerializeObject(request)}  更新结果-{upRes.ToString()}");
            }

            var scoreBiz = new ScoreRulesBiz();

            scoreBiz.AddScoreByRules(model.UserGuid, ActionEnum.Login, request.UserType);

            var response = new LoginResponseDto
            {
                UserId   = model.UserGuid,
                NickName = model.NickName,
                Token    = CreateToken(model.UserGuid, request.UserType, request.Days > 0 ? request.Days : 999),
                Xmpp     = httpBind,
                Domain   = domain,
                RabbitMQ = rabbitMQws
            };

            return(Success(response));
        }
Exemplo n.º 2
0
        /// <summary>
        /// 评价医生
        /// </summary>
        /// <param name="userId">用户GUID</param>
        /// <param name="doctorGuid">医生GUID</param>
        /// <param name="score">评价分数</param>
        private void GetScoreFromAddCommentForDoctor(string userId, string doctorGuid, int score)
        {
            try
            {
                var scoreRulesBiz = new ScoreRulesBiz();
                var count         = new CommentBiz().CountUserHasCommentTargetOneDayAsync(userId, doctorGuid, DateTime.Now).Result;
                if (count > 1)
                {
                    return;
                }
                switch (score)
                {
                case 5:

                    scoreRulesBiz.AddScoreByRules(doctorGuid, Common.EnumDefine.ActionEnum.Praise5, Common.EnumDefine.UserType.Doctor);
                    break;

                case 4:
                    scoreRulesBiz.AddScoreByRules(doctorGuid, Common.EnumDefine.ActionEnum.Praise4, Common.EnumDefine.UserType.Doctor);
                    break;

                case 3:
                    scoreRulesBiz.AddScoreByRules(doctorGuid, Common.EnumDefine.ActionEnum.Praise3, Common.EnumDefine.UserType.Doctor);
                    break;

                case 2:
                    scoreRulesBiz.AddScoreByRules(doctorGuid, Common.EnumDefine.ActionEnum.Praise2, Common.EnumDefine.UserType.Doctor);
                    break;

                case 1:
                    var sd = scoreRulesBiz.AddScoreByRules(doctorGuid, Common.EnumDefine.ActionEnum.Praise1, Common.EnumDefine.UserType.Doctor);
                    break;

                default:
                    break;
                }
            }
            catch (Exception ex)
            {
                Common.Helper.Logger.Error($"action:{nameof(GetScoreFromAddCommentForDoctor)}  userId:{userId}  doctorGuid:{doctorGuid}  score:{score}  message:{ex.Message}");
            }
        }
        public async Task <IActionResult> EnterpriseWeChatDoctorLogin([FromBody] DoctorLoginRequestDto request)
        {
            string typeSecret = string.Empty;

            if (request.Type == 0)
            {
                typeSecret = PlatformSettings.EnterpriseWeChatMobileSecret;
            }
            else
            {
                typeSecret = PlatformSettings.EnterpriseWeChatPCAgentid;
            }
            DoctorLoginResponseDto response = null;
            var result = await GetEnterpriseWeChatUserInfo(request.Code, typeSecret);

            if (result == null)
            {
                return(Failed(ErrorCode.Empty, "未找到对应用户信息"));
            }
            if (result.extattr == null || result.extattr.attrs == null || result.extattr.attrs.Length == 0)
            {
                return(Failed(ErrorCode.Empty, "未找到对应用户工号信息"));
            }
            var jobNumber = result.extattr.attrs.FirstOrDefault(a => a.name == "工号");

            if (jobNumber == null || string.IsNullOrEmpty(jobNumber.value))
            {
                return(Failed(ErrorCode.Empty, "用户工号信息为空"));
            }
            //根据工号找到对应的医生
            var doctor = await new DoctorBiz().GetByJobNumberDoctor(jobNumber.value);

            if (doctor == null)
            {
                return(Failed(ErrorCode.Empty, "未找到对应工号的医生"));
            }
            var biz   = new AccountBiz();
            var model = biz.GetUserById(doctor.DoctorGuid);

            if (model == null)
            {
                return(Failed(ErrorCode.Empty, "未找到对应的医生"));
            }
            //更新医生表企业微信用户Id
            if (doctor.WechatOpenid != result.userid)
            {
                doctor.WechatOpenid    = result.userid;
                doctor.LastUpdatedBy   = UserID;
                doctor.LastUpdatedDate = DateTime.Now;
                var resultUpdate = await new DoctorBiz().UpdateAsync(doctor);
            }
            // 启用XMPP的情况下,就检查用户IM账号是否存在
            if (enableXmpp)
            {
                var status = Client.QueryStatusAsync(model.UserGuid);
                status.Wait();

                // 如果不存在,则注册该用户的IM账号
                if (status.Result == IMStatus.NotExist)
                {
                    RegisterIM(model);
                }
            }

            var scoreBiz = new ScoreRulesBiz();
            await scoreBiz.AddScoreByRules(model.UserGuid, ActionEnum.Login, request.UserType);

            var resultDoctor = await new ReviewRecordBiz().GetLatestReviewRecordByTargetGuidAsync(doctor.DoctorGuid, Models.Manager.ReviewRecordModel.TypeEnum.Doctors.ToString());

            response = new DoctorLoginResponseDto
            {
                UserId          = model.UserGuid,
                NickName        = model.NickName,
                Token           = CreateToken(model.UserGuid, request.UserType, request.Days > 0 ? request.Days : 999),
                Xmpp            = httpBind,
                Domain          = domain,
                RabbitMQ        = rabbitMQws,
                RegisterState   = doctor?.Status,
                WhetherRegister = true,
                ApprovalMessage = resultDoctor?.RejectReason
            };
            return(Success(response));
        }
        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));
            }
        }