/// <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()); }
/// <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(); } }
/// <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); }