wangkaiyue 4 年之前
父節點
當前提交
e54a84aee2

+ 46 - 6
src/jfw/modules/bigmember/src/entity/portrait.go

@@ -170,18 +170,37 @@ func (this *Portrait) GetWinnerNewCount(entId string) int64 {
 }
 
 //企业画像-查询
-func (this *Portrait) WinnerPortraitData(entId string) (map[string]interface{}, error) {
+func (this *Portrait) WinnerPortraitData(entId string, hasPower bool) (map[string]interface{}, error) {
 	if entId == "" {
 		return nil, errors.New("企业名称异常")
 	}
 	winnerPortraitData := TryFunc(GetPortraitCache, entId, "winner", 2)
-	//winnerPortraitData, err := GetWinnerPortraitSearch(entId)
-	//if err != nil {
-	//	return nil, err
-	//}
+	if !hasPower && winnerPortraitData != nil { //无权限 仅返回免费字段(市场区域分布字段)
+		freeReturnMap := map[string]interface{}{}
+		for _, key := range []string{"timeRange", "buyer_count", "bidamount_count", "project_count", "area_count"} {
+			freeReturnMap[key] = winnerPortraitData[key]
+		}
+		return freeReturnMap, nil
+	}
 	return winnerPortraitData, nil
 }
 
+//WinnerMiniPortraitData 三级页引流
+func (this *Portrait) WinnerMiniPortraitData(entId string) (map[string]interface{}, error) {
+	if entId == "" {
+		return nil, errors.New("企业名称异常")
+	}
+	winnerPortraitData := TryFunc(GetPortraitCache, entId, "winner", 2)
+	if winnerPortraitData == nil {
+		return nil, nil
+	}
+	miniReturnMap := map[string]interface{}{}
+	for _, key := range []string{"bidamount_count", "project_count"} {
+		miniReturnMap[key] = winnerPortraitData[key]
+	}
+	return miniReturnMap, nil
+}
+
 //采购单位画像-查询最新项目动态
 func (this *Portrait) GetBuyerNewMsg(buyer string, start, limit int, hasPower bool) ([]map[string]interface{}, error) {
 	if buyer == "" {
@@ -227,11 +246,18 @@ func (this *Portrait) BuyerPortraitData(buyer string, flag string, hasPower bool
 		return nil, errors.New("参数异常")
 	}
 	if !hasPower { //免费返回字段
-		if buyerPortraitAllData := TryFunc(GetPortraitCacheByStep, buyer, fmt.Sprintf("buyer"), 2); buyerPortraitAllData != nil {
+		if buyerPortraitAllData := TryFunc(GetPortraitCacheByStep, buyer, fmt.Sprintf("buyer_%s", flag), 2); buyerPortraitAllData != nil {
 			freeReturnMap := map[string]interface{}{}
+			//第一阶段免费数据
 			for _, key := range []string{"timeRange", "city", "province", "buyerclass", "fail_count", "project_count", "winner_count", "otherProvincesWinnerCount"} {
 				freeReturnMap[key] = buyerPortraitAllData[key]
 			}
+			//第三阶段免费字段
+			if flag == "" || flag == "c" {
+				for _, key := range []string{"withCapitalData", "withAreaData", "withEstablishData"} {
+					freeReturnMap[key] = buyerPortraitAllData[key]
+				}
+			}
 			return freeReturnMap, nil
 		}
 		return nil, nil
@@ -249,3 +275,17 @@ func (this *Portrait) BuyerPortraitData(buyer string, flag string, hasPower bool
 	}
 	return buyerPortraitData, nil
 }
+
+func (this *Portrait) BuyerMiniPortraitData(buyer string) (map[string]interface{}, error) {
+	if buyer == "" {
+		return nil, errors.New("企业名称异常")
+	}
+	miniReturnMap := map[string]interface{}{}
+	if buyerPortraitAllData := TryFunc(GetPortraitCacheByStep, buyer, "buyer_a", 2); buyerPortraitAllData != nil {
+		for _, key := range []string{"province", "city", "buyerclass", "bidamount_count", "project_count"} {
+			miniReturnMap[key] = buyerPortraitAllData[key]
+		}
+		return miniReturnMap, nil
+	}
+	return miniReturnMap, nil
+}

+ 120 - 22
src/jfw/modules/bigmember/src/service/portrait/memberPortraitAction.go

@@ -11,21 +11,23 @@ import (
 	"github.com/go-xweb/xweb"
 )
 
-//大会员画像接口
+//EntPortrait 大会员画像接口
 type EntPortrait struct {
 	*xweb.Action
 	//中标企业画像
-	entDetail      xweb.Mapper `xweb:"/portrait/ent/detail"`       //企业基本信息
-	winnerNewMsg   xweb.Mapper `xweb:"/portrait/winner/getNewMsg"` //最新项目动态(需购买项目进度监控)
-	winnerContacts xweb.Mapper `xweb:"/portrait/winner/contacts"`  //历史项目联系方式
-	winnerPortrait xweb.Mapper `xweb:"/portrait/winner/getData"`   //最新项目动态
+	entDetail          xweb.Mapper `xweb:"/portrait/ent/detail"`       //企业基本信息
+	winnerNewMsg       xweb.Mapper `xweb:"/portrait/winner/getNewMsg"` //最新项目动态(需购买项目进度监控)
+	winnerContacts     xweb.Mapper `xweb:"/portrait/winner/contacts"`  //历史项目联系方式
+	winnerPortrait     xweb.Mapper `xweb:"/portrait/winner/getData"`   //最新项目动态
+	winnerMiniPortrait xweb.Mapper `xweb:"/portrait/winner/miniData"`  //三级页展示中标企业基础画像信息
 	//采购单位画像
-	buyerNewMsg   xweb.Mapper `xweb:"/portrait/buyer/getNewMsg"` //最新项目动态
-	buyerContacts xweb.Mapper `xweb:"/portrait/buyer/contacts"`  //采购项目联系方式
-	buyerPortrait xweb.Mapper `xweb:"/portrait/buyer/getData"`   //最新项目动态
+	buyerNewMsg       xweb.Mapper `xweb:"/portrait/buyer/getNewMsg"` //最新项目动态
+	buyerContacts     xweb.Mapper `xweb:"/portrait/buyer/contacts"`  //采购项目联系方式
+	buyerPortrait     xweb.Mapper `xweb:"/portrait/buyer/getData"`   //最新项目动态
+	buyerMiniPortrait xweb.Mapper `xweb:"/portrait/buyer/miniData"`  //三级页展示采购单位基础画像信息
 }
 
-//企业基本信息
+//EntDetail 企业基本信息
 func (this *EntPortrait) EntDetail() {
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	rData, errMsg := func() (interface{}, error) {
@@ -46,6 +48,7 @@ func (this *EntPortrait) EntDetail() {
 	this.ServeJson(NewResult(rData, errMsg))
 }
 
+//WinnerContacts 中标企业历史联系人
 func (this *EntPortrait) WinnerContacts() {
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	rData, errMsg := func() (interface{}, error) {
@@ -53,7 +56,7 @@ func (this *EntPortrait) WinnerContacts() {
 		if err != nil {
 			return nil, err
 		}
-		if false && !hasPower {
+		if !hasPower {
 			return nil, fmt.Errorf("非法请求")
 		}
 		entId := util.DecodeId(this.GetString("entId"))
@@ -71,7 +74,7 @@ func (this *EntPortrait) WinnerContacts() {
 	this.ServeJson(NewResult(rData, errMsg))
 }
 
-//企业画像-最新项目动态
+//WinnerNewMsg 企业画像-最新项目动态
 func (this *EntPortrait) WinnerNewMsg() {
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	rData, errMsg := func() (interface{}, error) {
@@ -123,7 +126,7 @@ func (this *EntPortrait) WinnerNewMsg() {
 	this.ServeJson(NewResult(rData, errMsg))
 }
 
-//企业画像-画像数据查询
+//WinnerPortrait 企业画像-画像数据查询
 func (this *EntPortrait) WinnerPortrait() {
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	rData, errMsg := func() (interface{}, error) {
@@ -131,14 +134,43 @@ func (this *EntPortrait) WinnerPortrait() {
 		if err != nil {
 			return nil, err
 		}
-		if !hasPower {
-			return nil, fmt.Errorf("非法请求")
-		}
 		entId := this.GetString("entId")
-		rData, err := cepm.WinnerPortraitData(util.DecodeId(entId))
+		rData, err := cepm.WinnerPortraitData(util.DecodeId(entId), hasPower)
+		if err != nil {
+			return nil, err
+		}
+		return rData, nil
+	}()
+	if errMsg != nil {
+		log.Printf("%s WinnerPortrait获取企业画像标信息出错:%s\n", userId, errMsg.Error())
+	}
+	this.ServeJson(NewResult(rData, errMsg))
+}
+
+//WinnerMiniPortrait 三级页中标单位引流数据展示(免费)
+func (this *EntPortrait) WinnerMiniPortrait() {
+	userId := qutil.ObjToString(this.GetSession("userId"))
+	rData, errMsg := func() (interface{}, error) {
+		cepm, _, err := entity.CreatePortraitManager(userId, "entPortrait")
 		if err != nil {
 			return nil, err
 		}
+		entId := util.DecodeId(this.GetString("entId"))
+		rData, err := cepm.WinnerMiniPortraitData(entId) //项目个数,项目金额
+		if err != nil {
+			return nil, err
+		}
+		//公司状态
+		if entInfo, err := cepm.GetEntInfo(entId); err == nil {
+			rData["status"] = entInfo["status"]
+			rData["type"] = entInfo["type"]
+		}
+		//项目动态数量
+		rData["biddingCount"] = cepm.GetWinnerNewCount(entId)
+		//历史联系人
+		if contactList, err := cepm.GetWinnerContactsMsg(entId); err == nil {
+			rData["contactList"], rData["contactCount"] = formatContact(contactList)
+		}
 		return rData, nil
 	}()
 	if errMsg != nil {
@@ -147,7 +179,7 @@ func (this *EntPortrait) WinnerPortrait() {
 	this.ServeJson(NewResult(rData, errMsg))
 }
 
-//采购单位画像-最新招标动态
+//BuyerNewMsg 采购单位画像-最新招标动态(免费用户仅可查看3条记录,付费50条)
 func (this *EntPortrait) BuyerNewMsg() {
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	rData, errMsg := func() (interface{}, error) {
@@ -178,7 +210,7 @@ func (this *EntPortrait) BuyerNewMsg() {
 				limit = entity.PortraitNewMegsLimit - start
 			}
 		}
-
+		//免费用户仅可查看三条记录
 		rData, err := cepm.GetBuyerNewMsg(buyer, start, limit, hasPower)
 		if err != nil {
 			return nil, err
@@ -197,7 +229,7 @@ func (this *EntPortrait) BuyerNewMsg() {
 	this.ServeJson(NewResult(rData, errMsg))
 }
 
-//采购单位联系人
+//BuyerContacts 采购单位联系人(必须开通会员)
 func (this *EntPortrait) BuyerContacts() {
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	rData, errMsg := func() (interface{}, error) {
@@ -205,7 +237,7 @@ func (this *EntPortrait) BuyerContacts() {
 		if err != nil {
 			return nil, err
 		}
-		if false && !hasPower {
+		if !hasPower {
 			return nil, fmt.Errorf("非法请求")
 		}
 		buyerName := this.GetString("buyer")
@@ -223,7 +255,7 @@ func (this *EntPortrait) BuyerContacts() {
 	this.ServeJson(NewResult(rData, errMsg))
 }
 
-//采购单位画像-数据
+//BuyerPortrait 采购单位画像-数据(免费用户可查看基本信息、项目统计、合作企业资本、年龄及地区分布)
 func (this *EntPortrait) BuyerPortrait() {
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	rData, errMsg := func() (interface{}, error) {
@@ -240,7 +272,73 @@ func (this *EntPortrait) BuyerPortrait() {
 		return rData, nil
 	}()
 	if errMsg != nil {
-		log.Printf("%s WinnerPortrait获取采购单位画像标信息出错:%s\n", userId, errMsg.Error())
+		log.Printf("%s BuyerPortrait获取采购单位画像标信息出错:%s\n", userId, errMsg.Error())
+	}
+	this.ServeJson(NewResult(rData, errMsg))
+}
+
+//BuyerMiniPortrait 三级页采购单位引流数据展示(免费)
+func (this *EntPortrait) BuyerMiniPortrait() {
+	userId := qutil.ObjToString(this.GetSession("userId"))
+	rData, errMsg := func() (interface{}, error) {
+		cepm, _, err := entity.CreatePortraitManager(userId, "buyerPortrait")
+		if err != nil {
+			return nil, err
+		}
+		entName := this.GetString("buyer")
+		//所在地(省、市)、采购单位类型、采购项目数量、采购规模
+		rData, err := cepm.BuyerMiniPortraitData(entName)
+		if err != nil {
+			return nil, err
+		}
+		//招标动态数量
+		rData["biddingCount"] = cepm.GetBuyerNewCount(entName)
+		//采购联系人数量及历史联系人方式,成交时间(加密展示2条)
+		if contactList, err := cepm.GetBuyerContactsMsg(entName); err == nil {
+			rData["contactList"], rData["contactCount"] = formatContact(contactList)
+		}
+		return rData, nil
+	}()
+	if errMsg != nil {
+		log.Printf("%s BuyerMiniPortrait获取采购单位画像标信息出错:%s\n", userId, errMsg.Error())
 	}
 	this.ServeJson(NewResult(rData, errMsg))
 }
+
+//formatContact 格式化混淆联系人电话
+func formatContact(contactList []map[string]interface{}) (confusing []map[string]interface{}, total int) {
+	total = len(contactList)
+	deConfusingMap := make(map[string]bool) //去重
+	for _, contactMap := range contactList {
+		var thePhone string
+		rowData, _ := contactMap["contacts"].(map[string]string)
+		for phone := range rowData {
+			if !deConfusingMap[phone] && phone != "" {
+				thePhone = phone
+			}
+		}
+		if len(thePhone) < 7 {
+			continue
+		}
+
+		var confusingPhone string
+		if len([]rune(thePhone)) == 11 {
+			confusingPhone = thePhone[:3] + "****" + thePhone[8:]
+		} else if len([]rune(thePhone)) == 7 {
+			confusingPhone = thePhone[:2] + "***" + thePhone[5:]
+		} else {
+			confusingPhone = thePhone[:5] + "***" + thePhone[8:]
+		}
+		deConfusingMap[confusingPhone] = true
+
+		confusing = append(confusing, map[string]interface{}{
+			"contact": confusingPhone,
+			"date":    contactMap["date"],
+		})
+		//仅返回两条
+		if len(confusing) == 2 {
+			break
+		}
+	}
+	return
+}

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

@@ -115,7 +115,7 @@ func (this *SubVipPortrait) SubVipPortrait() {
 		if err = bigMsg.SubVipPortraitTimesCheck(db.Mysql, entId); err != nil {
 			return nil, err
 		}
-		rData, err := cepm.WinnerPortraitData(entId)
+		rData, err := cepm.WinnerPortraitData(entId, true)
 		if err != nil {
 			return nil, err
 		}