浏览代码

wip:身份同步-身份选择提交

wangkaiyue 1 年之前
父节点
当前提交
d6fa49b60b
共有 1 个文件被更改,包括 58 次插入0 次删除
  1. 58 0
      identity/identity.go

+ 58 - 0
identity/identity.go

@@ -1,6 +1,8 @@
 package identity
 
 import (
+	"fmt"
+	"sort"
 	"strconv"
 
 	. "app.yhyue.com/moapp/jybase/common"
@@ -89,6 +91,7 @@ func SwitchToBest(userId int64, sess *httpsession.Session, mgd *Middleground, mg
 	if list == nil || len(list) == 0 {
 		return -1, false
 	}
+	//选择上次用户身份
 	if isSelectLast {
 		if mgoUserId, _ := sess.Get("mgoUserId").(string); mgoUserId != "" {
 			user, ok := mgo.FindById("user", mgoUserId, `{"login_positionid":1}`)
@@ -103,6 +106,12 @@ func SwitchToBest(userId int64, sess *httpsession.Session, mgd *Middleground, mg
 			}
 		}
 	}
+
+	// 切换至最优付费账户
+	if bestIdentity := getBestChoosePosition(sess, mgd, list); bestIdentity != nil {
+		return bestIdentity.PositionId, NewIdentityInfo(bestIdentity).Switch(sess, mgo)
+	}
+
 	reqIds := []int64{}
 	for _, v := range list {
 		if v.PositionType == 1 {
@@ -125,3 +134,52 @@ func SwitchToBest(userId int64, sess *httpsession.Session, mgd *Middleground, mg
 	}
 	return -1, false
 }
+
+// getBestChoosePosition
+// 首次登录身份选择 【p387多个身份都有付费产品权限,则先按照产品优先级进行身份的选择,即大会员>商机管理>超级订阅>省份订阅包,如若多个身份的产品权限一致,则优先选择“服务结束时间”晚的身份。】
+func getBestChoosePosition(sess *httpsession.Session, mgd *Middleground, positionList []*pb.Identity) *pb.Identity {
+	var (
+		appId      = "10000"
+		mgoUserId  = ObjToString(sess.Get("mgoUserId"))
+		baseUserId = Int64All(sess.Get("base_user_id"))
+
+		scorePositionMap = map[string]*pb.Identity{}
+		scoreArr         []string
+	)
+
+	for _, v := range positionList {
+		var (
+			endTime  int64
+			flag     int64
+			weight   string
+			powerRes = mgd.PowerCheckCenter.Check(appId, mgoUserId, baseUserId, v.AccountId, v.EntId, v.PositionType, v.PositionId)
+		)
+
+		if powerRes.Member.Status > 0 {
+			flag, endTime = 9, powerRes.Member.GetEndTime()
+		} else if powerRes.Entniche.Status > 0 {
+			flag, endTime = 8, powerRes.Entniche.GetEndTime()
+		} else if powerRes.Vip.Status > 0 {
+			flag, endTime = 7, powerRes.Vip.GetEndTime()
+		} else if powerRes.Free.PpStatus > 0 {
+			flag, endTime = 6, powerRes.Free.GetPpEndTime()
+		}
+		if flag > 0 {
+			weight = fmt.Sprintf("%d%d", flag, endTime)
+			scoreArr = append(scoreArr, weight)
+			scorePositionMap[weight] = v
+		}
+	}
+
+	var (
+		sLen = len(scoreArr)
+		pos  = sLen - 1
+	)
+	if sLen > 0 {
+		if sLen > 1 { // 当有多个付费身份时;根据权重字符串排序
+			sort.Strings(scoreArr)
+		}
+		return scorePositionMap[scoreArr[pos]]
+	}
+	return nil
+}