Example #1
0
        /// <summary>
        /// 绑定手机号
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public ApiResult BindMobile(RequestBingdMobileDTO model)
        {
            //并发检查  ,retrycount=0
            if (!$"BindMobile{model.Mobile}".Lock($"BindMobile{model.Mobile}", TimeSpan.FromSeconds(10), 200, 3))
            {
                throw new Exception("并发冲突");
            }

            var userid = GetUserIDByMobile(model.Mobile, EnumUserType.User);

            if (string.IsNullOrEmpty(userid))
            {
                var user = new Entity.User()
                {
                    Mobile   = model.Mobile,
                    UserType = EnumUserType.User
                };
                string reason;
                RegisterUser(user, out reason, model.OpenID, model.AppID);
                userid = user.UserID;
            }
            else
            {
                using (var db = new DBEntities())
                {
                    var map = db.UserWechatMaps.Where(t => t.OpenID == model.OpenID && t.AppID == model.AppID).FirstOrDefault();

                    if (map == null || map.IsDeleted)
                    {
                        if (map == null)
                        {
                            map = new UserWechatMap()
                            {
                                UserID = userid,
                                OpenID = model.OpenID,
                                AppID  = model.AppID,
                            };
                            db.UserWechatMaps.Add(map);
                        }
                        else
                        {
                            map.IsDeleted = false;
                        }
                        db.SaveChanges();

                        UserLoginServerTicketDTO serverTicket = new UserLoginServerTicketDTO()
                        {
                            OpenID = model.OpenID,
                            UserID = userid,
                        };
                        ApiSecurityService.SetUserTicket(serverTicket, model.UserToken);
                    }
                }
            }

            return(userid.ToApiResultForObject());
        }
Example #2
0
        /// <summary>
        /// 绑定OpenId
        /// </summary>
        /// <param name="openId"></param>
        /// <param name="appId"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        public bool BindOpenId(string openId, string appId, string userId)
        {
            var cacheKey = new EntityCacheKey <string>(StringCacheKeyType.User_OpenID, $"{appId}_{openId}");
            var cUserId  = cacheKey.FromCache();

            if (cUserId == userId)
            {
                return(true);
            }
            try
            {
                using (var db = new DBEntities())
                {
                    if (!db.UserWechatMaps.Any(x => x.OpenID == openId && x.AppID == appId && !x.IsDeleted))
                    {
                        var entity = new UserWechatMap()
                        {
                            OpenID          = openId,
                            AppID           = appId,
                            UserID          = userId,
                            CreateTime      = DateTime.Now,
                            CreateUserID    = "",
                            UserWechatMapID = Guid.NewGuid().ToString("N"),
                        };
                        db.UserWechatMaps.Add(entity);
                        db.SaveChanges();
                        return(true);
                    }
                    return(db.UserWechatMaps.Where(x => x.OpenID == openId && x.AppID == appId && !x.IsDeleted && (x.UserID == null || x.UserID == "")).Update(x => new UserWechatMap()
                    {
                        UserID = userId,
                        ModifyTime = DateTime.Now,
                    }) > 0);
                }
            }
            finally
            {
                cacheKey.RemoveCache();
            }
        }
Example #3
0
        /// <summary>
        /// 用户注册(新)
        /// </summary>
        /// <param name="model"></param>
        public bool RegisterUser(XuHos.Entity.User model, out string Reason,
                                 string openid = null, string appid = null)
        {
            Reason = "注册失败";
            var password = model.Password;
            var result   = true;

            try
            {
                #region 检查是否支持此类型的用户注册
                if (model.UserType != EnumUserType.Doctor && model.UserType != EnumUserType.User &&
                    model.UserType != EnumUserType.SysAdmin)
                {
                    Reason = "不支持的用户类型";
                    return(false);
                }
                #endregion


                using (DBEntities db = new DBEntities())
                {
                    #region 用户信息
                    if (string.IsNullOrEmpty(model.UserID))
                    {
                        model.UserID = Guid.NewGuid().ToString("N");
                    }

                    //密码
                    model.Password = StringEncrypt.EncryptWithMD5(model.Password);
                    //用户状态
                    model.UserState = EnumUserState.Disabled;

                    db.Users.Add(model);

                    UserExtend userExtend = new UserExtend();
                    userExtend.UserID   = model.UserID;
                    userExtend.LastTime = DateTime.Now;

                    db.UserExtends.Add(userExtend);

                    if (!string.IsNullOrEmpty(openid))
                    {
                        UserWechatMap userWechatMap = new UserWechatMap();
                        userWechatMap.UserID = model.UserID;
                        userWechatMap.OpenID = openid;
                        userWechatMap.AppID  = appid;
                        db.UserWechatMaps.Add(userWechatMap);
                    }

                    #endregion

                    #region 家庭成员
                    UserMember userMember = null;
                    if (model.UserType == EnumUserType.User)
                    {
                        userMember          = new UserMember();
                        userMember.MemberID = Guid.NewGuid().ToString("N");

                        if (!string.IsNullOrEmpty(model.Mobile))
                        {
                            userMember.Mobile = model.Mobile;
                        }
                        else
                        {
                            userMember.Mobile = "";
                        }

                        userMember.UserID     = model.UserID;
                        userMember.IDType     = EnumUserCardType.IDCard;
                        userMember.Address    = "";
                        userMember.Birthday   = "";
                        userMember.Email      = "";
                        userMember.Gender     = EnumUserGender.Other;
                        userMember.IsDefault  = true;
                        userMember.Marriage   = EnumUserMaritalStatus.Other;
                        userMember.MemberName = model.UserCNName;
                        userMember.PostCode   = "";
                        userMember.Relation   = EnumUserRelation.MySelf;
                        db.UserMembers.Add(userMember);
                    }
                    #endregion

                    #region 用户标识
                    db.ConversationIMUids.Add(new ConversationIMUid()
                    {
                        Identifier = Convert.ToInt32(WaterNoService.GetWaterNo(EnumWaterNoType.Identify)),
                        Enable     = false,
                        IsDeleted  = false,
                        CreateTime = DateTime.Now,
                        UserID     = model.UserID
                    });
                    #endregion

                    if (db.SaveChanges() >= 0)
                    {
                        #region 将注册消息写入队列,队列中发送短信和注册云通信
                        using (XuHos.EventBus.MQChannel mqChannel = new EventBus.MQChannel())
                        {
                            mqChannel.Publish <EventBus.Events.UserRegisteredEvent>(new EventBus.Events.UserRegisteredEvent()
                            {
                                UserAccount  = model.UserAccount,
                                UserID       = model.UserID,
                                UserPassword = password,
                                UserType     = model.UserType,
                                OrgCode      = model.OrgCode,
                                Mobile       = model.Mobile,
                            });
                        }
                        #endregion

                        result = true;
                        Reason = "注册成功";
                    }
                    else
                    {
                        Reason = "注册失败";
                    }
                }
            }
            catch (Exception ex)
            {
                Reason = "系统错误";
                result = false;
                throw ex;
            }
            return(result);
        }