wangshan 9 месяцев назад
Родитель
Сommit
d7a8058fb6
5 измененных файлов с 151 добавлено и 95 удалено
  1. 2 0
      entity/entity.go
  2. 138 90
      entity/user.go
  3. 4 4
      entity/workDesktop.go
  4. 2 1
      rpc/etc/usercenter.yaml
  5. 5 0
      rpc/internal/config/config.go

+ 2 - 0
entity/entity.go

@@ -36,6 +36,7 @@ type RpcConfig struct {
 	WorkTableInside      string                //内网菜单表名
 	RpcPort              string                //
 	MenuCacheKey         string                //多套环境 配置不同key,同一个用户对应不用菜单缓存
+	PopupIds             []int                 //弹出提示 特殊处理id集合
 }
 
 type MongoStruct struct {
@@ -67,4 +68,5 @@ type mysqlDb struct {
 
 var (
 	ConfigJson RpcConfig
+	PopupIdMap = map[int]bool{}
 )

+ 138 - 90
entity/user.go

@@ -19,6 +19,7 @@ const (
 	RedisMenuKey      = "jy_workdesktopmenu_%s_%s_%s_%s"
 	UserPowerRedisKey = "jy_userpowerredis_%s_%d_%s"
 	UserRegisterTime  = "jy_userregistertime_%s"
+	UserPowerEndTime  = "jy_user_power_end_time_%s"
 )
 
 type UserInfo struct {
@@ -64,6 +65,7 @@ func (m *WorkDesktopMenu) AutoUserPowerInfo() map[string]int {
 	//数据库查询 、资源中台获取、权益中台获取 查询用户信息
 	var (
 		registerTime int64
+		powerEndTime int64
 	)
 	//以上获取不到的信息 再自主查库
 	userInfoRpc := UserInfoRpc{
@@ -107,6 +109,7 @@ func (m *WorkDesktopMenu) AutoUserPowerInfo() map[string]int {
 				} else if entInfo.EntRoleId == 2 {
 					UserPowerMap["59"] = 1 // 部门管理员
 				}
+				powerEndTime = member.EndTime
 			}
 			//大会员用户购买的服务 也有可能是非大会员用户 购买这些服务
 			if member.MemberPowerList != nil && len(member.MemberPowerList) > 0 {
@@ -116,8 +119,9 @@ func (m *WorkDesktopMenu) AutoUserPowerInfo() map[string]int {
 			}
 		}
 		if vip.Status > 0 {
-			if registerTime < vip.EndTime {
-				registerTime = vip.EndTime
+			//
+			if powerEndTime < vip.EndTime {
+				powerEndTime = vip.EndTime
 			}
 			UserPowerMap["200"] = int(vip.Status)
 			UserPowerMap["201"] = int(vip.Upgrade)
@@ -237,9 +241,11 @@ func (m *WorkDesktopMenu) AutoUserPowerInfo() map[string]int {
 		//1:是否是大会员或者超级订阅用户 否:提示购买到超级订阅购买页; 是>-2
 		//2:判断用户是否留资  否:提示用去留资;是:>-3
 		//3:资源中台获取用户权限码判断是否有权限 否:提示用户去联系客服
+		userRegisterTimeKey := fmt.Sprintf(UserRegisterTime, m.UserId)
+		redis.Put(RedisCode, userRegisterTimeKey, strconv.Itoa(int(registerTime)), int(registerTime))
 		if member.Status > 0 || vip.Status > 0 {
-			userRegisterTimeKey := fmt.Sprintf(UserRegisterTime, m.UserId)
-			redis.Put(RedisCode, userRegisterTimeKey, strconv.Itoa(int(registerTime)), int(registerTime))
+			userPowerEndTimeKey := fmt.Sprintf(UserPowerEndTime, m.UserId)
+			redis.Put(RedisCode, userPowerEndTimeKey, strconv.Itoa(int(powerEndTime)), int(powerEndTime))
 			UserPowerMap["500"] = 1
 		}
 	}
@@ -302,16 +308,22 @@ func UserRolePowerInit(strs []string) {
 }
 
 /*
-1、不符合可以留资申请开通权限的用户
-	1、免费用户
-	2、超级订阅用户、大会员用户到期时间是否超过3个月
-	(1、2:弹窗-医械通上线啦)
-2、符合可以留资申请开通的用户
-	1、未留资
-	(1:弹窗-完善基本信息)
-	2、已留资未开通
-	3、已留资且开通
-	(2、3:弹窗-恭喜留资成功)
+菜单弹窗逻辑
+如果需要留资
+默认:
+	1、先判断是否已留资
+	2、再判断是否有权限
+医械通:
+	1、不符合可以留资申请开通权限的用户
+		1、免费用户
+		2、超级订阅用户、大会员用户到期时间是否超过3个月
+		(1、2:弹窗-医械通上线啦)
+	2、符合可以留资申请开通的用户
+		1、未留资
+		(1:弹窗-完善基本信息)
+		2、已留资未开通
+		3、已留资且开通
+		(2、3:弹窗-恭喜留资成功)
 */
 /*
 1、判断是否满足超级订阅用户或大会员用户 且到期时间超过90天(配置);
@@ -327,7 +339,19 @@ func UserRolePowerInit(strs []string) {
 // CheckCapitalResources  是否需要留资 且权限验证--弹窗处理
 // b 一级权限(超级订阅、大会员等)
 // p 二级权限(请求资源中台:医械通等)
-func CheckCapitalResources(menu *JYMenu, wd *WorkDesktopMenu, b, p bool) (title, content, confirmUrl, confirmText, appType, openType string, isShowCancel, usable bool) {
+func CheckCapitalResources(menu *JYMenu, wd *WorkDesktopMenu, b, p bool, pUrl string) (title, content, confirmUrl, confirmText, appType, openType string, isShowCancel, usable bool) {
+	//菜单在当前平台没有权限
+	if menu.Url == "" && pUrl == "" {
+		title = ConfigJson.DefaultPopup[wd.Platform].Title
+		content = ConfigJson.DefaultPopup[wd.Platform].Content
+		confirmUrlArr := strings.Split(ConfigJson.DefaultPopup[wd.Platform].ConfirmUrl, "__")
+		confirmUrl = MC.InterfaceToStr(MC.If(wd.Platform == "PC", confirmUrlArr[1], confirmUrlArr[0]))
+		confirmText = ConfigJson.DefaultPopup[wd.Platform].ConfirmText
+		isShowCancel = ConfigJson.DefaultPopup[wd.Platform].IsShowCancel
+		appType = ConfigJson.DefaultPopup[wd.Platform].AppType
+		openType = ConfigJson.DefaultPopup[wd.Platform].OpenType
+		return
+	}
 	OverallLock.Lock()
 	userInfo := UserInfoMap[wd.NewUserId]
 	if userInfo == nil {
@@ -341,96 +365,83 @@ func CheckCapitalResources(menu *JYMenu, wd *WorkDesktopMenu, b, p bool) (title,
 	userInfo.Lock.Lock()
 	defer userInfo.Lock.Unlock()
 	var (
-		capitalBool    = true //是否留资
-		permissionBool = true //是否有功能权限
-		//customPopup    = true  //自定义弹窗
 		defaultPopup = false //默认弹窗
-	)
-	//大会员超级订阅用户 才有权限去验证是否有医疗权限
-	//用户是否需要留资
-	if menu.CapitalCode != "" {
-		capitalBool = false
-		for _, cv := range strings.Split(menu.CapitalCode, ",") {
-			if userInfo.Capitals[cv] == 0 {
-				if c := BaseMysql.CountBySql(`SELECT COUNT(id) FROM `+CapitalRetention+` WHERE  source = ? AND position_id = ? AND appid = ?`, cv, wd.PositionId, wd.AppId); c > 0 {
-					userInfo.Capitals[cv] = 1
-				} else {
-					userInfo.Capitals[cv] = -1
-				}
-			}
-			if userInfo.Capitals[cv] < 0 {
-				//customPopup = false
-				//留资弹窗信息
-				title = menu.CapitalInfo.Title
-				content = menu.CapitalInfo.Content
-				confirmUrl = menu.CapitalInfo.ConfirmUrl
-				confirmText = menu.CapitalInfo.ConfirmText
-				isShowCancel = menu.CapitalInfo.IsShowCancel
-				appType = menu.CapitalInfo.AppType
-				openType = menu.CapitalInfo.OpenType
-			} else {
-				capitalBool = true
-				//无权限(有权限未留资|留资了未开通权限) --》 没有配置弹窗信息  --》自定义弹窗
-				title = menu.AdditionalInfo[wd.Platform].Title
-				content = menu.AdditionalInfo[wd.Platform].Content
-				confirmUrl = menu.AdditionalInfo[wd.Platform].ConfirmUrl
-				confirmText = menu.AdditionalInfo[wd.Platform].ConfirmText
-				isShowCancel = menu.AdditionalInfo[wd.Platform].IsShowCancel
-				appType = menu.AdditionalInfo[wd.Platform].AppType
-				openType = menu.AdditionalInfo[wd.Platform].OpenType
-				break
-			}
-		}
-	}
-	//无权限(医械通-:1:免费用户;2:超级订阅、大会员到期时间不在规定范围内)
-	if b {
-		//资源中台--- 无权限弹窗信息为默认信息(先留资)
-		if menu.PermissionCode != "" {
-			permissionBool = false
-			if (menu.CapitalCode != "" && capitalBool) || menu.CapitalCode == "" {
-				if p {
-					title = ""
-					permissionBool = true
-					//customPopup = false
-				}
-			}
-		}
-		//有剑鱼用户权限 查看资源中台功能权限
-		//医械通---用户没有资源中台功能权限 也没有留资 查看
-		if !permissionBool {
-			switch menu.PowerIds {
-			case "500":
-				userRegisterTime, _ := strconv.ParseInt(redis.GetStr(RedisCode, fmt.Sprintf(UserRegisterTime, wd.UserId)), 10, 64)
-				//超级订阅 大会员到期时间 是否 大于 90天
-				if userRegisterTime-time.Now().Unix() < ConfigJson.MedicalFieldTimespan {
-					//即使是超级订阅或大会员 也没有权限
-					defaultPopup = true
+		capitalBool  = func() bool {
+			//用户是否需要留资
+			if menu.CapitalCode != "" {
+				capitalBool := false
+				for _, cv := range strings.Split(menu.CapitalCode, ",") {
+					if userInfo.Capitals[cv] <= 0 {
+						if c := BaseMysql.CountBySql(`SELECT COUNT(id) FROM `+CapitalRetention+` WHERE  source = ? AND position_id = ? AND appid = ?`, cv, wd.PositionId, wd.AppId); c > 0 {
+							userInfo.Capitals[cv] = 1
+						} else {
+							userInfo.Capitals[cv] = -1
+						}
+					}
+					if userInfo.Capitals[cv] > 0 {
+						capitalBool = true
+						break
+					}
 				}
+				return capitalBool
 			}
-		}
-	}
+			return true
+		}()
+	)
 	//
 	usable = func() bool {
 		switch menu.Authority {
 		case 0:
-			return b && permissionBool && capitalBool
+			return b && p && capitalBool
 		case 1:
-			return b || permissionBool || capitalBool
+			return b || p || capitalBool
 		case 2:
-			return b || permissionBool && capitalBool
+			return b || p && capitalBool
 		case 3:
-			return b && permissionBool || capitalBool
+			return b && p || capitalBool
 		case 4:
-			return b && capitalBool || permissionBool
+			return b && capitalBool || p
 		default:
 			return false
 		}
 	}()
-	//无权限--免费用户||不符合条件的付费用户
-	if !b || defaultPopup {
-		//配置弹窗信息
-		if ConfigJson.DefaultPopup[menu.PowerIds].Title != "" {
-			//customPopup = false
+	//P630人脉管理
+	// 有权限 不再判断 弹窗提示信息
+	if usable {
+		return
+	}
+	// 需要特殊处理的菜单 弹窗提示信息
+	/*
+		菜单弹窗逻辑
+		如果需要留资
+		默认:
+			1、先判断是否已留资
+			2、再判断是否有权限
+		医械通:
+			1、不符合可以留资申请开通权限的用户
+				1、免费用户
+				2、超级订阅用户、大会员用户到期时间是否超过3个月
+				(1、2:弹窗-医械通上线啦)
+			2、符合可以留资申请开通的用户
+				1、未留资
+				(1:弹窗-完善基本信息)
+				2、已留资未开通
+				3、已留资且开通
+				(2、3:弹窗-恭喜留资成功)
+	*/
+	if PopupIdMap[menu.Id] || PopupIdMap[menu.ParentId] {
+		// 超级订阅 or 大会员
+		if b {
+			userPowerEndTimeKey := fmt.Sprintf(UserPowerEndTime, wd.UserId)
+			powerEndTime, _ := strconv.ParseInt(redis.GetStr(RedisCode, userPowerEndTimeKey), 10, 64)
+			//超级订阅 大会员到期时间 是否 大于 90天
+			if powerEndTime == 0 || powerEndTime-time.Now().Unix() < ConfigJson.MedicalFieldTimespan {
+				//即使是超级订阅或大会员 也没有权限
+				defaultPopup = true
+			}
+		}
+		// 免费用户 或者 不满足条件的超级订阅or大会员用户
+		if (!b || defaultPopup) && ConfigJson.DefaultPopup[menu.PowerIds].Title != "" {
 			title = ConfigJson.DefaultPopup[menu.PowerIds].Title
 			content = ConfigJson.DefaultPopup[menu.PowerIds].Content
 			confirmUrlArr := strings.Split(ConfigJson.DefaultPopup[menu.PowerIds].ConfirmUrl, "__")
@@ -439,6 +450,43 @@ func CheckCapitalResources(menu *JYMenu, wd *WorkDesktopMenu, b, p bool) (title,
 			isShowCancel = ConfigJson.DefaultPopup[menu.PowerIds].IsShowCancel
 			appType = ConfigJson.DefaultPopup[menu.PowerIds].AppType
 			openType = ConfigJson.DefaultPopup[menu.PowerIds].OpenType
+		} else if capitalBool { //已留资的用户
+			//留资弹窗信息
+			title = menu.CapitalInfo.Title
+			content = menu.CapitalInfo.Content
+			confirmUrl = menu.CapitalInfo.ConfirmUrl
+			confirmText = menu.CapitalInfo.ConfirmText
+			isShowCancel = menu.CapitalInfo.IsShowCancel
+			appType = menu.CapitalInfo.AppType
+			openType = menu.CapitalInfo.OpenType
+		} else {
+			title = menu.AdditionalInfo[wd.Platform].Title
+			content = menu.AdditionalInfo[wd.Platform].Content
+			confirmUrl = menu.AdditionalInfo[wd.Platform].ConfirmUrl
+			confirmText = menu.AdditionalInfo[wd.Platform].ConfirmText
+			isShowCancel = menu.AdditionalInfo[wd.Platform].IsShowCancel
+			appType = menu.AdditionalInfo[wd.Platform].AppType
+			openType = menu.AdditionalInfo[wd.Platform].OpenType
+		}
+	} else { //默认
+		// 留资
+		if !capitalBool {
+			//留资弹窗信息
+			title = menu.CapitalInfo.Title
+			content = menu.CapitalInfo.Content
+			confirmUrl = menu.CapitalInfo.ConfirmUrl
+			confirmText = menu.CapitalInfo.ConfirmText
+			isShowCancel = menu.CapitalInfo.IsShowCancel
+			appType = menu.CapitalInfo.AppType
+			openType = menu.CapitalInfo.OpenType
+		} else {
+			title = menu.AdditionalInfo[wd.Platform].Title
+			content = menu.AdditionalInfo[wd.Platform].Content
+			confirmUrl = menu.AdditionalInfo[wd.Platform].ConfirmUrl
+			confirmText = menu.AdditionalInfo[wd.Platform].ConfirmText
+			isShowCancel = menu.AdditionalInfo[wd.Platform].IsShowCancel
+			appType = menu.AdditionalInfo[wd.Platform].AppType
+			openType = menu.AdditionalInfo[wd.Platform].OpenType
 		}
 	}
 	return

+ 4 - 4
entity/workDesktop.go

@@ -272,7 +272,7 @@ func (m *WorkDesktopMenu) WorkMenuFormat() ([]*pb.MenuList, error) {
 							//用户是否需要留资
 							//资源中台获取用户权限--没有权限:title等置空
 							//ResourceLib.PowerHandle()
-							title, content, confirmUrl, confirmText, appType, openType, isShowCancel, feasibility = CheckCapitalResources(tv, m, pBool.HasBool, m.VerifyPermissions(tv.PermissionCode, "").HasBool)
+							title, content, confirmUrl, confirmText, appType, openType, isShowCancel, feasibility = CheckCapitalResources(tv, m, pBool.HasBool, m.VerifyPermissions(tv.PermissionCode, "").HasBool, sv.Url)
 						}
 						//弹框地址处理
 						threeLevel := &pb.ThreeLevelMenu{
@@ -305,7 +305,7 @@ func (m *WorkDesktopMenu) WorkMenuFormat() ([]*pb.MenuList, error) {
 									//资源中台获取用户权限--没有权限:title等置空
 									//ResourceLib.PowerHandle()
 									//判断资源中台权限
-									title, content, confirmUrl, confirmText, appType, openType, isShowCancel, feasibility = CheckCapitalResources(fv, m, pBool.HasBool, m.VerifyPermissions(fv.PermissionCode, "").HasBool)
+									title, content, confirmUrl, confirmText, appType, openType, isShowCancel, feasibility = CheckCapitalResources(fv, m, pBool.HasBool, m.VerifyPermissions(fv.PermissionCode, "").HasBool, tv.Url)
 								}
 								threeLevel.Url = MC.If(fv.Url != "", fv.Url, tv.Url).(string)
 								threeLevel.Icon = MC.If(fv.Icon != "", fv.Icon, tv.Icon).(string)
@@ -499,7 +499,7 @@ func (m *WorkDesktopMenu) CommonlyFormat(childMenus map[int][]*JYMenu) ([]*pb.Th
 		feasibility := pBool.HasBool
 		//三级菜单------
 		if len(childMenus[mv.Id]) == 0 && (mv.CapitalCode != "" || mv.PermissionCode != "") {
-			_, _, _, _, _, _, _, feasibility = CheckCapitalResources(mv, m, pBool.HasBool, m.VerifyPermissions(mv.PermissionCode, "").HasBool)
+			_, _, _, _, _, _, _, feasibility = CheckCapitalResources(mv, m, pBool.HasBool, m.VerifyPermissions(mv.PermissionCode, "").HasBool, "")
 		}
 		saveIds = append(saveIds, encrypt.SE.EncodeString(strconv.Itoa(mv.Id)))
 		subLevel[mv.Id] = true
@@ -535,7 +535,7 @@ func (m *WorkDesktopMenu) CommonlyFormat(childMenus map[int][]*JYMenu) ([]*pb.Th
 					continue
 				}
 				if cv.CapitalCode != "" || cv.PermissionCode != "" {
-					_, _, _, _, _, _, _, feasibility = CheckCapitalResources(cv, m, pBool.HasBool, m.VerifyPermissions(cv.PermissionCode, "").HasBool)
+					_, _, _, _, _, _, _, feasibility = CheckCapitalResources(cv, m, pBool.HasBool, m.VerifyPermissions(cv.PermissionCode, "").HasBool, mv.Url)
 				}
 				oneLevel.Url = MC.If(cv.Url != "", cv.Url, mv.Url).(string)
 				oneLevel.Icon = MC.If(cv.Icon != "", cv.Icon, mv.Icon).(string)

+ 2 - 1
rpc/etc/usercenter.yaml

@@ -90,4 +90,5 @@ WorkTableOut: work_menu_new
 WorkTableInside: work_menu_new
 RpcPort: "8081"
 MenuCacheKey: menu1
-NotLoginCommonlyIds: 47,51,63,524,163,165,55,515,167,59,57 #默认常用功能
+NotLoginCommonlyIds: 47,51,63,524,163,165,55,515,167,59,57 #默认常用功能
+PopupIds: [468,469,470,471,472,473,474,518,519,521,522]

+ 5 - 0
rpc/internal/config/config.go

@@ -35,4 +35,9 @@ func init() {
 	if entity.ConfigJson.WorkTableInside == "" {
 		entity.ConfigJson.WorkTableInside = "work_menu"
 	}
+	if len(entity.ConfigJson.PopupIds) > 0 {
+		for _, id := range entity.ConfigJson.PopupIds {
+			entity.PopupIdMap[id] = true
+		}
+	}
 }