Przeglądaj źródła

提交超级订阅画像查看记录

wangkaiyue 4 lat temu
rodzic
commit
44c32e207d

+ 1 - 1
src/jfw/front/frontRouter.go

@@ -171,7 +171,7 @@ func (this *CommonRouter) doPcBigPage(pageSign string) error {
 		}
 		if !bigVipFreePageReg.MatchString(pageSign) {
 			bigBaseMsg := jy.GetBigVipUserBaseMsg(userid, public.Mysql, public.MQFW)
-			if bigBaseMsg.Status <= 0 && !bigBaseMsg.Viper {
+			if bigBaseMsg.Status <= 0 && bigBaseMsg.Vip_BuySet.Upgrade != 1 {
 				return this.Redirect("/big/page/index")
 			}
 			//大会员页面权限判断

+ 27 - 7
src/jfw/modules/bigmember/src/entity/portrait.go

@@ -12,30 +12,50 @@ import (
 
 type Portrait struct {
 	UserId string //用户id
-	//ShowEntChange bool
 }
 
 const PortraitNewMegsLimit = 50 //画像最新信息限制50跳
 
-//企业画像
-func CreatePortraitManager(userid string, pageFlag ...string) (*Portrait, error) {
+//大会员
+func CreatePortraitManager(userid string, pageFlag string) (*Portrait, error) {
 	if userid == "" {
 		return nil, errors.New("未登录")
 	}
 	bigMsg := jy.GetBigVipUserBaseMsg(userid, db.Mysql, db.Mgo)
 
-	if len(pageFlag) == 0 {
+	if pageFlag == "" {
 		return nil, errors.New("未知请求")
 	}
-
-	isBuy := bigMsg.CheckBigVipBackPower(pageFlag[0])
-	if !isBuy {
+	isBuy := bigMsg.CheckBigVipBackPower(pageFlag)
+	if bigMsg.Status <= 0 || !isBuy {
 		return nil, errors.New("非法请求")
 	}
 	uid := qutil.If(bigMsg.Pid == "", userid, bigMsg.Pid).(string) //若为子账号则显示主账号行业信息
 	return &Portrait{uid}, nil
 }
 
+//超级订阅
+func CreateSubVipPortraitManager(userid string, pageFlag string) (*Portrait, *jy.BigVipBaseMsg, error) {
+	if userid == "" {
+		return nil, nil, errors.New("未登录")
+	}
+	if pageFlag == "" {
+		return nil, nil, errors.New("未知请求")
+	}
+	bigMsg := jy.GetBigVipUserBaseMsg(userid, db.Mysql, db.Mgo)
+	if pageFlag != "entPortrait" { //接口开放企业基础信息
+		if bigMsg.VipStatus <= 0 || bigMsg.Vip_BuySet.Upgrade != 1 {
+			return nil, nil, errors.New("非法请求")
+		}
+		//超级订阅仅有企业画像、企业中标动态权限;并且限制次数
+		if !(pageFlag == "entDetail" || pageFlag == "entNewMsg") {
+			return nil, nil, errors.New("非法请求")
+		}
+	}
+	uid := qutil.If(bigMsg.Pid == "", userid, bigMsg.Pid).(string) //若为子账号则显示主账号行业信息
+	return &Portrait{uid}, bigMsg, nil
+}
+
 //获取企业基本信息
 func (this *Portrait) GetEntInfo(entId string) (map[string]interface{}, error) {
 	if entId == "" {

+ 1 - 0
src/jfw/modules/bigmember/src/service/init.go

@@ -25,6 +25,7 @@ func init() {
 	xweb.AddAction(&follow.FollowEnt{})
 	xweb.AddAction(&follow.FollowProject{})
 	xweb.AddAction(&portrait.EntPortrait{})
+	xweb.AddAction(&portrait.SubVipPortrait{})
 	xweb.AddAction(&subscribe.Subscribe{})
 	xweb.AddAction(&report.Report{})
 	xweb.AddAction(&trial.Trial{})

+ 0 - 70
src/jfw/modules/bigmember/src/service/portrait/entPortraitAction.go

@@ -1,70 +0,0 @@
-package portrait
-
-import (
-	. "api"
-	"entity"
-	"github.com/go-xweb/xweb"
-	"log"
-	qutil "qfw/util"
-	"util"
-)
-
-//企业画像接口
-type EntPortrait struct {
-	*xweb.Action
-	entDetail       xweb.Mapper `xweb:"/portrait/ent/detail"`               //企业基本信息
-	subVipEntDetail xweb.Mapper `xweb:"/portrait/subVipPortrait/entDetail"` //企业基本信息
-	//新画像接口
-	winnerContacts     xweb.Mapper `xweb:"/portrait/winner/contacts"`             //历史项目联系方式 dev4.0pc端新增接口
-	winnerNewMsg       xweb.Mapper `xweb:"/portrait/winner/getNewMsg"`            //最新项目动态(需购买项目进度监控)
-	winnerPortrait     xweb.Mapper `xweb:"/portrait/winner/getData"`              //最新项目动态
-	subVipPortrait     xweb.Mapper `xweb:"/portrait/subVipPortrait/winner"`       //升级版超级订阅查看画像
-	subVipWinnerNewMsg xweb.Mapper `xweb:"/portrait/subVipPortrait/winnerNewMsg"` //升级版超级订阅查看最新项目动态
-
-	//新采购单位画像
-	buyerNewMsg   xweb.Mapper `xweb:"/portrait/buyer/getNewMsg"` //最新项目动态
-	buyerPortrait xweb.Mapper `xweb:"/portrait/buyer/getData"`   //最新项目动态
-}
-
-//企业基本信息
-func (this *EntPortrait) EntDetail() {
-	userId := qutil.ObjToString(this.GetSession("userId"))
-	rData, errMsg := func() (interface{}, error) {
-		cepm, err := entity.CreatePortraitManager(userId, "entDetail")
-		if err != nil {
-			return nil, err
-		}
-		entId := this.GetString("entId")
-		entInfo, err := cepm.GetEntInfo(util.DecodeId(entId))
-		if err != nil {
-			return nil, err
-		}
-		//entInfo["showEntChange"] = jy.GetBigVipUserBaseMsg(userid, db.Mysql, db.Mgo)//xxxxxxx
-		return entInfo, nil
-	}()
-	if errMsg != nil {
-		log.Printf("%s 企业画像-查询企业基本信息:%s\n", userId, errMsg.Error())
-	}
-	this.ServeJson(NewResult(rData, errMsg))
-}
-
-//升级版超级订阅查询基本信息
-func (this *EntPortrait) SubVipEntDetail() {
-	userId := qutil.ObjToString(this.GetSession("userId"))
-	rData, errMsg := func() (interface{}, error) {
-		cepm, err := entity.CreatePortraitManager(userId, "entDetail")
-		if err != nil {
-			return nil, err
-		}
-		entId := this.GetString("entId")
-		entInfo, err := cepm.GetEntInfo(util.DecodeId(entId))
-		if err != nil {
-			return nil, err
-		}
-		return entInfo, nil
-	}()
-	if errMsg != nil {
-		log.Printf("%s 企业画像-查询企业基本信息:%s\n", userId, errMsg.Error())
-	}
-	this.ServeJson(NewResult(rData, errMsg))
-}

+ 36 - 70
src/jfw/modules/bigmember/src/service/portrait/portraitActionNew.go → src/jfw/modules/bigmember/src/service/portrait/memberPortraitAction.go

@@ -3,11 +3,47 @@ package portrait
 import (
 	. "api"
 	"entity"
+	"github.com/go-xweb/xweb"
 	"log"
 	qutil "qfw/util"
 	"util"
 )
 
+//大会员画像接口
+type EntPortrait struct {
+	*xweb.Action
+	entDetail xweb.Mapper `xweb:"/portrait/ent/detail"` //企业基本信息
+	//新画像接口
+	winnerContacts xweb.Mapper `xweb:"/portrait/winner/contacts"`  //历史项目联系方式 dev4.0pc端新增接口
+	winnerNewMsg   xweb.Mapper `xweb:"/portrait/winner/getNewMsg"` //最新项目动态(需购买项目进度监控)
+	winnerPortrait xweb.Mapper `xweb:"/portrait/winner/getData"`   //最新项目动态
+	//新采购单位画像
+	buyerNewMsg   xweb.Mapper `xweb:"/portrait/buyer/getNewMsg"` //最新项目动态
+	buyerPortrait xweb.Mapper `xweb:"/portrait/buyer/getData"`   //最新项目动态
+}
+
+//企业基本信息
+func (this *EntPortrait) EntDetail() {
+	userId := qutil.ObjToString(this.GetSession("userId"))
+	rData, errMsg := func() (interface{}, error) {
+		cepm, err := entity.CreatePortraitManager(userId, "entDetail")
+		if err != nil {
+			return nil, err
+		}
+		entId := this.GetString("entId")
+		entInfo, err := cepm.GetEntInfo(util.DecodeId(entId))
+		if err != nil {
+			return nil, err
+		}
+		//entInfo["showEntChange"] = jy.GetBigVipUserBaseMsg(userid, db.Mysql, db.Mgo)//xxxxxxx
+		return entInfo, nil
+	}()
+	if errMsg != nil {
+		log.Printf("%s 企业画像-查询企业基本信息:%s\n", userId, errMsg.Error())
+	}
+	this.ServeJson(NewResult(rData, errMsg))
+}
+
 func (this *EntPortrait) WinnerContacts() {
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	rData, errMsg := func() (interface{}, error) {
@@ -110,76 +146,6 @@ func (this *EntPortrait) WinnerPortrait() {
 	this.ServeJson(NewResult(rData, errMsg))
 }
 
-//超级订阅升级版查看最新中标动态
-func (this *EntPortrait) SubVipWinnerNewMsg() {
-	userId := qutil.ObjToString(this.GetSession("userId"))
-	rData, errMsg := func() (interface{}, error) {
-		cepm, err := entity.CreatePortraitManager(userId, "entNewMsg")
-		if err != nil {
-			return nil, err
-		}
-		entId := util.DecodeId(this.GetString("entId"))
-		count, _ := this.GetInt("count")
-
-		pageNum, _ := this.GetInteger("pageNum")
-		limit, _ := this.GetInteger("pageSize")
-		if limit == 0 {
-			limit = 3
-		}
-		var start = 0
-		if pageNum > 0 {
-			start = (pageNum - 1) * limit
-		}
-
-		if pageSign := this.GetString("pageSign"); pageSign != "" { //more:4-23条;max:24-50条(移动端)
-			if pageSign == "more" {
-				start = 3
-				limit = 20
-			} else if pageSign == "max" {
-				start = 20 + 3
-				limit = entity.PortraitNewMegsLimit - start
-			}
-		}
-
-		rData, err := cepm.GetWinnerNewMsg(entId, start, limit)
-		if err != nil {
-			return nil, err
-		}
-		if count == 0 {
-			count = cepm.GetWinnerNewCount(entId)
-		}
-		return map[string]interface{}{
-			"list":  rData,
-			"count": count,
-		}, nil
-	}()
-	if errMsg != nil {
-		log.Printf("%s SubVipWinnerNewMsg获取企业最新中标信息出错:%s\n", userId, errMsg.Error())
-	}
-	this.ServeJson(NewResult(rData, errMsg))
-}
-
-//超级订阅升级版查看企业画像
-func (this *EntPortrait) SubVipPortrait() {
-	userId := qutil.ObjToString(this.GetSession("userId"))
-	rData, errMsg := func() (interface{}, error) {
-		cepm, err := entity.CreatePortraitManager(userId, "entPortrait")
-		if err != nil {
-			return nil, err
-		}
-		entId := this.GetString("entId")
-		rData, err := cepm.WinnerPortraitData(util.DecodeId(entId))
-		if err != nil {
-			return nil, err
-		}
-		return rData, nil
-	}()
-	if errMsg != nil {
-		log.Printf("%s SubVipPortrait获取企业画像标信息出错:%s\n", userId, errMsg.Error())
-	}
-	this.ServeJson(NewResult(rData, errMsg))
-}
-
 //采购单位画像-最新招标动态
 func (this *EntPortrait) BuyerNewMsg() {
 	userId := qutil.ObjToString(this.GetSession("userId"))

+ 237 - 0
src/jfw/modules/bigmember/src/service/portrait/subvipPortraitAction.go

@@ -0,0 +1,237 @@
+package portrait
+
+import (
+	. "api"
+	"db"
+	"entity"
+	"fmt"
+	"github.com/go-xweb/xweb"
+	"log"
+	qutil "qfw/util"
+	"qfw/util/elastic"
+	"qfw/util/jy"
+	"strings"
+	"util"
+)
+
+//超级订阅升级版画像接口
+type SubVipPortrait struct {
+	*xweb.Action
+	subVipEntDetail    xweb.Mapper `xweb:"/portrait/subVipPortrait/entDetail"`    //企业基本信息
+	subVipPortrait     xweb.Mapper `xweb:"/portrait/subVipPortrait/winner"`       //超级订阅升级版查看画像
+	subVipWinnerNewMsg xweb.Mapper `xweb:"/portrait/subVipPortrait/winnerNewMsg"` //超级订阅升级版查看最新项目动态
+	portraitUsage      xweb.Mapper `xweb:"/portrait/subVipPortrait/usage"`        //超级订阅升级版画像浏览详情
+	portraitRecord     xweb.Mapper `xweb:"/portrait/subVipPortrait/record"`       //超级订阅升级版画像浏览记录
+}
+
+//超级订阅升级版查询基本信息
+func (this *SubVipPortrait) SubVipEntDetail() {
+	userId := qutil.ObjToString(this.GetSession("userId"))
+	rData, errMsg := func() (interface{}, error) {
+		cepm, _, err := entity.CreateSubVipPortraitManager(userId, "entDetail")
+		if err != nil {
+			return nil, err
+		}
+		entId := this.GetString("entId")
+		entInfo, err := cepm.GetEntInfo(util.DecodeId(entId))
+		if err != nil {
+			return nil, err
+		}
+		return entInfo, nil
+	}()
+	if errMsg != nil {
+		log.Printf("%s 企业画像-查询企业基本信息:%s\n", userId, errMsg.Error())
+	}
+	this.ServeJson(NewResult(rData, errMsg))
+}
+
+//超级订阅升级版查看最新中标动态
+func (this *SubVipPortrait) SubVipWinnerNewMsg() {
+	userId := qutil.ObjToString(this.GetSession("userId"))
+	rData, errMsg := func() (interface{}, error) {
+		cepm, bigMsg, err := entity.CreateSubVipPortraitManager(userId, "entNewMsg")
+		if err != nil {
+			return nil, err
+		}
+		entId := util.DecodeId(this.GetString("entId"))
+		if entId == "" {
+			return nil, fmt.Errorf("参数异常")
+		}
+		//校验超级订阅画像浏览次数
+		if err = bigMsg.SubVipPortraitTimesCheck(db.Mysql, entId); err != nil {
+			return nil, err
+		}
+		count, _ := this.GetInt("count")
+		pageNum, _ := this.GetInteger("pageNum")
+		limit, _ := this.GetInteger("pageSize")
+		if limit == 0 {
+			limit = 3
+		}
+		var start = 0
+		if pageNum > 0 {
+			start = (pageNum - 1) * limit
+		}
+
+		if pageSign := this.GetString("pageSign"); pageSign != "" { //more:4-23条;max:24-50条(移动端)
+			if pageSign == "more" {
+				start = 3
+				limit = 20
+			} else if pageSign == "max" {
+				start = 20 + 3
+				limit = entity.PortraitNewMegsLimit - start
+			}
+		}
+		rData, err := cepm.GetWinnerNewMsg(entId, start, limit)
+		if err != nil {
+			return nil, err
+		}
+		if count == 0 {
+			count = cepm.GetWinnerNewCount(entId)
+		}
+		return map[string]interface{}{
+			"list":  rData,
+			"count": count,
+		}, nil
+	}()
+	if errMsg != nil {
+		log.Printf("%s SubVipPortrait-SubVipWinnerNewMsg 获取企业最新中标信息出错:%s\n", userId, errMsg.Error())
+	}
+	this.ServeJson(NewResult(rData, errMsg))
+}
+
+//超级订阅升级版查看企业画像
+func (this *SubVipPortrait) SubVipPortrait() {
+	userId := qutil.ObjToString(this.GetSession("userId"))
+	rData, errMsg := func() (interface{}, error) {
+		cepm, bigMsg, err := entity.CreateSubVipPortraitManager(userId, "entPortrait")
+		if err != nil {
+			return nil, err
+		}
+		entId := util.DecodeId(this.GetString("entId"))
+		if entId == "" {
+			return nil, fmt.Errorf("参数异常")
+		}
+		//校验超级订阅画像浏览次数
+		if err = bigMsg.SubVipPortraitTimesCheck(db.Mysql, entId); err != nil {
+			return nil, err
+		}
+		rData, err := cepm.WinnerPortraitData(entId)
+		if err != nil {
+			return nil, err
+		}
+		return rData, nil
+	}()
+	if errMsg != nil {
+		log.Printf("%s SubVipPortrait 获取企业画像标信息出错:%s\n", userId, errMsg.Error())
+	}
+	this.ServeJson(NewResult(rData, errMsg))
+}
+
+//超级订阅升级版画像浏览量查询
+func (this *SubVipPortrait) PortraitUsage() {
+	userId := qutil.ObjToString(this.GetSession("userId"))
+	rData, errMsg := func() (interface{}, error) {
+		bigMsg := jy.GetBigVipUserBaseMsg(userId, db.Mysql, db.Mgo)
+		if bigMsg.VipStatus <= 0 && bigMsg.Vip_BuySet.Upgrade != 1 {
+			return nil, fmt.Errorf("非法请求")
+		}
+		total, usage := bigMsg.SubVipPortraitUsage()
+		return map[string]interface{}{
+			"total": total,
+			"usage": usage,
+		}, nil
+	}()
+	if errMsg != nil {
+		log.Printf("%s SubVipPortrait-portraitUsage 企业画像浏览量查询出错:%s\n", userId, errMsg.Error())
+	}
+	this.ServeJson(NewResult(rData, errMsg))
+}
+
+//超级订阅升级版画像查看记录
+func (this *SubVipPortrait) PortraitRecord() {
+	userId := qutil.ObjToString(this.GetSession("userId"))
+	rData, errMsg := func() (interface{}, error) {
+		year, _ := this.GetInteger("year")
+		month, _ := this.GetInteger("month")
+		pageNum, _ := this.GetInteger("pageNum")
+		pageSize, _ := this.GetInteger("pageSize")
+		if year == 0 || month == 0 || pageSize <= 0 || pageSize > 100 {
+			return nil, fmt.Errorf("请求参数异常")
+		}
+		bigMsg := jy.GetBigVipUserBaseMsg(userId, db.Mysql, db.Mgo)
+		if bigMsg.VipStatus <= 0 && bigMsg.Vip_BuySet.Upgrade != 1 {
+			return nil, fmt.Errorf("非法请求")
+		}
+		//获取画像企业id
+		recordList, total := bigMsg.GetPortraitRecord(db.Mysql, year, month, pageNum, pageSize, pageNum == 0)
+		//followCheckMap, entDetailMap := func() (follcheck map[string]bool, entMsg map[string]map[string]interface{}) {
+		//	var swg sync.WaitGroup
+		//	swg.Add(2)
+		//	//补全关注状态
+		//	go func() {
+		//		follcheck = getEntListFollow(userId, recordList)
+		//		swg.Done()
+		//	}()
+		//	//补全企业信息
+		//	go func() {
+		//		entMsg = gitEntListMsg(recordList)
+		//		swg.Done()
+		//	}()
+		//	swg.Wait()
+		//	return
+		//}()
+		entDetailMap := gitEntListMsg(recordList)
+		var infoList []map[string]interface{}
+		for _, eid := range recordList {
+			if entDetail, ok := entDetailMap[eid]; ok && entDetail != nil {
+				entDetail["id"] = util.EncodeId(eid)
+				//entDetail["followed"] = followCheckMap[eid]
+				infoList = append(infoList, entDetail)
+			}
+		}
+		returnMap := map[string]interface{}{
+			"list": infoList,
+		}
+		if total != -1 {
+			returnMap["total"] = total
+		}
+		return returnMap, nil
+	}()
+	if errMsg != nil {
+		log.Printf("%s SubVipPortrait-PortraitRecord 企业画像浏览记录查询出错:%s\n", userId, errMsg.Error())
+	}
+	this.ServeJson(NewResult(rData, errMsg))
+}
+
+func getEntListFollow(userId string, ids []string) (followMap map[string]bool) {
+	followMap = make(map[string]bool)
+	followed, _ := db.Mgo.Find("follow_entinfo_bigvip", map[string]interface{}{
+		"s_userid": userId,
+		"s_id":     map[string]interface{}{"$in": ids},
+	}, nil, `{"s_id":1}`, false, -1, -1)
+	if followed == nil || len(*followed) == 0 {
+		return
+	}
+
+	for _, row := range *followed {
+		if entId, _ := row["id"].(string); entId != "" {
+			followMap[entId] = true
+		}
+	}
+	return
+}
+
+func gitEntListMsg(ids []string) (detail map[string]map[string]interface{}) {
+	detail = make(map[string]map[string]interface{})
+	ids_str := `"` + strings.Join(ids, `","`) + `"`
+	rData := elastic.Get("qyxy", "qyxy", fmt.Sprintf(`{"query":{"bool":{"must":[{"terms":{"id":[%s]}}]}},"_source":["_id","company_name","company_status","legal_person","capital","company_address","company_shortname","company_phone","establish_date"],"size":%d}`, ids_str, len(ids)))
+	if rData == nil || len(*rData) == 0 {
+		return
+	}
+	for _, data := range *rData {
+		if id, ok := data["_id"].(string); ok && id != "" {
+			detail[id] = data
+		}
+	}
+	return
+}

+ 1 - 1
src/jfw/modules/bigmember/src/service/use/use.go

@@ -539,7 +539,7 @@ func (u *Use) IsAdd() {
 		d["power"] = power
 		d["isUsed"] = bigPower.Used
 		d["memberStatus"] = bigPower.Status
-		d["viper"] = bigPower.Viper
+		d["viper"] = bigPower.Vip_BuySet.Upgrade == 1
 		d["isSubCount"] = bigPower.Pid != ""
 		d["is_member_trial"] = bigPower.HasTrial
 		uid := userid

+ 24 - 18
src/jfw/modules/common/src/qfw/util/jy/bigVipPower.go

@@ -13,17 +13,25 @@ import (
 
 //大会员状态redis缓存
 type BigVipBaseMsg struct {
-	Status    int          `json:"status"`     //大会员状态
-	VipStatus int          `json:"vip_status"` //超级订阅状态
-	Viper     bool         `json:"viper"`      //超级订阅状态
-	Used      bool         `json:"used"`       //是否首次使用大会员
-	PowerMap  map[int]bool `json:"p_map"`      //权限列表
-	ProNum    int          `json:"p_num"`      //可关注项目数量
-	EntNum    int          `json:"e_num"`      //可关注企业数量(取企业情报监控和企业中标动态中最大的值)
-	DailyNum  int          `json:"d_num"`      //数据包导出数量
-	Pid       string       `json:"pid"`        //若为子账号此处为父节点userid
-	Uid       string       `json:"uid"`        //用户id
-	HasTrial  bool         `json:"has_trial"`  //是否试用过
+	Status   int          `json:"status"`    //大会员状态
+	Used     bool         `json:"used"`      //是否首次使用大会员
+	PowerMap map[int]bool `json:"p_map"`     //权限列表
+	ProNum   int          `json:"p_num"`     //可关注项目数量
+	EntNum   int          `json:"e_num"`     //可关注企业数量(取企业情报监控和企业中标动态中最大的值)
+	DailyNum int          `json:"d_num"`     //数据包导出数量
+	Pid      string       `json:"pid"`       //若为子账号此处为父节点userid
+	Uid      string       `json:"uid"`       //用户id
+	HasTrial bool         `json:"has_trial"` //是否试用过
+
+	VipStatus  int    `json:"vip_status"` //超级订阅状态
+	Vip_BuySet BuySet `json:"vip_buyset"` //超级订阅套餐内容
+}
+
+//超级订阅购买内容
+type BuySet struct {
+	Upgrade         int `json:"upgrade"`         //是否是升级版;1是 其他不是
+	AreaCount       int `json:"areacount"`       //省份数量
+	BuyerclassCount int `json:"buyerclasscount"` //行业数
 }
 
 var FrontService, BackService map[string][]int
@@ -106,12 +114,13 @@ func GetBigVipUserBaseMsg(userId string, mysql *mysql.Mysql, mg MongodbSim) *Big
 			userPower.VipStatus = vipStatus
 			if o_vipjy := qutil.ObjToMap((*data)["o_vipjy"]); o_vipjy != nil {
 				if o_buyset := qutil.ObjToMap((*o_vipjy)["o_buyset"]); o_buyset != nil {
-					if qutil.IntAll((*o_buyset)["upgrade"]) == 1 {
-						userPower.Viper = true
+					userPower.Vip_BuySet = BuySet{
+						Upgrade:         qutil.IntAll((*o_buyset)["upgrade"]),
+						AreaCount:       qutil.IntAll((*o_buyset)["areacount"]),
+						BuyerclassCount: qutil.IntAll((*o_buyset)["buyerclasscount"]),
 					}
 				}
 			}
-
 		}
 	}
 
@@ -154,7 +163,7 @@ func (this *BigVipBaseMsg) CheckBigVipFrontPower(reqFlag string) (pass bool) {
 	if reqFlag == "ent_portrait" { //画像页面无权限控制
 		return true
 	}
-	if this.Viper {
+	if this.Vip_BuySet.Upgrade == 1 {
 		if reqFlag == "ent_portrait" || reqFlag == "svip" {
 			return true
 		}
@@ -166,9 +175,6 @@ func (this *BigVipBaseMsg) CheckBigVipBackPower(reqFlag string) (pass bool) {
 	if reqFlag == "entDetail" { //企业基本信息接口 无权限控制
 		return true
 	}
-	if this.Viper && (reqFlag == "entPortrait" || reqFlag == "entDetail" || reqFlag == "entNewMsg") {
-		return true
-	}
 	return this.checkPower(reqFlag, BackService)
 }
 

+ 94 - 0
src/jfw/modules/common/src/qfw/util/jy/subvipPortrait.go

@@ -0,0 +1,94 @@
+package jy
+
+import (
+	"fmt"
+	"qfw/util/mysql"
+	"qfw/util/redis"
+	"time"
+)
+
+//超级订阅画像使用次数
+const (
+	OneAreaTimes        = 50
+	PortraitRecordTimes = "subVipPortraitRecordTimes_%s_%d"
+	UsePortraitVisited  = "subVipPortraitVisited_%s_%d_%s"
+	PortraitRecordTable = "portrait_record"
+)
+
+func (this *BigVipBaseMsg) SubVipPortraitUsage() (fullCount, usage int) {
+	if this.VipStatus <= 0 {
+		return
+	}
+	if this.Vip_BuySet.AreaCount == -1 {
+		fullCount = 16 * OneAreaTimes //全国全国行业
+	} else {
+		fullCount = this.Vip_BuySet.AreaCount * OneAreaTimes
+	}
+	usage = redis.GetInt(PowerCacheDb, fmt.Sprintf(PortraitRecordTimes, this.Uid, int(time.Now().Month())))
+	return
+}
+
+func (this *BigVipBaseMsg) SubVipPortraitTimesCheck(mysql *mysql.Mysql, entId string) error {
+	if this.VipStatus <= 0 || entId == "" {
+		return fmt.Errorf("非法请求")
+	}
+	fullCount, now := 0, time.Now()
+	if this.Vip_BuySet.AreaCount == -1 {
+		fullCount = 16 * OneAreaTimes //全国全国行业
+	} else {
+		fullCount = this.Vip_BuySet.AreaCount * OneAreaTimes
+	}
+	//浏览缓存
+	visitedCache := fmt.Sprintf(UsePortraitVisited, this.Uid, int(now.Month()), entId)
+	//本月有浏览记录
+	if exists, err := redis.Exists(PowerCacheDb, visitedCache); err == nil && exists {
+		return nil
+	}
+
+	if mysql.CountBySql(fmt.Sprintf("select count(id) from %s where user_id =? and ent_id =? and year(create_time)=? and month(create_time)=?",
+		PortraitRecordTable), this.Uid, entId, now.Year(), int(now.Month())) == 0 {
+		//校验本月次数是否使用完
+		useKey := fmt.Sprintf(PortraitRecordTimes, this.Uid, int(now.Month()))
+
+		useCount := redis.GetInt(PowerCacheDb, useKey)
+		if useCount >= fullCount {
+			return fmt.Errorf("本月次数已使用完")
+		}
+
+		//新增使用记录
+		if mysql.Insert(PortraitRecordTable, map[string]interface{}{
+			"user_id":     this.Uid,
+			"ent_id":      entId,
+			"create_time": now.Format("2006-01-02 15:04:05"),
+		}) == 0 {
+			return fmt.Errorf("数据记录异常")
+		}
+		if redis.Incr(PowerCacheDb, useKey) == 1 {
+			_ = redis.SetExpire(PowerCacheDb, useKey, 24*60*60*31) //次数缓存一个月
+		}
+	}
+	redis.Put(PowerCacheDb, fmt.Sprintf(UsePortraitVisited, this.Uid, int(now.Month()), entId), 1, 60*60*5)
+	return nil
+}
+
+func (this *BigVipBaseMsg) GetPortraitRecord(mysql *mysql.Mysql, year, month, pageNum, pageSize int, needCount bool) (ids []string, total int64) {
+	total = -1
+	if needCount { //查询数量
+		total = mysql.CountBySql(fmt.Sprintf("select count(id) from %s where user_id =? and year(create_time)=? and month(create_time)=? ",
+			PortraitRecordTable), this.Uid, year, month)
+		if total == 0 {
+			return
+		}
+	}
+	res := mysql.Query(fmt.Sprintf("select ent_id from %s where user_id =? and year(create_time)=? and month(create_time)=? order by create_time limit ?,?",
+		PortraitRecordTable), this.Uid, year, month, pageNum*pageSize, pageSize)
+	if res == nil {
+		return
+	}
+	for _, d := range *res {
+		if id, ok := d["ent_id"].(string); ok && id != "" {
+			ids = append(ids, id)
+		}
+	}
+	return
+}