Parcourir la source

Merge remote-tracking branch 'origin/feature/v4.8.91' into feature/v4.8.91

wangkaiyue il y a 1 an
Parent
commit
a048584721

+ 190 - 0
src/jfw/front/recommendationProject.go

@@ -0,0 +1,190 @@
+package front
+
+import (
+	"app.yhyue.com/moapp/jybase/common"
+	elastic "app.yhyue.com/moapp/jybase/es"
+	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
+	"app.yhyue.com/moapp/jybase/redis"
+	"fmt"
+	"github.com/gogf/gf/v2/util/gconv"
+	"jy/src/jfw/config"
+	"math/rand"
+	"strings"
+	"time"
+)
+
+const (
+	NewMustSearch             = `{"query":{"bool":{"must":[%s],"must_not":[{"terms":{"toptype":["采购意向","拟建"]}}]}}%s}`
+	biddingIndex, biddingType = "bidding", "bidding"
+	projectSet                = "projectset"
+	qyxy                      = "qyxy"
+)
+
+var (
+	WinnerRecommend, BuyerRecommend []map[string]interface{}
+)
+
+type RecommendationProject struct {
+	*xweb.Action
+	portraitRecommendation xweb.Mapper `xweb:"/front/bootstrap/specification"` //画像登录右侧推荐
+}
+
+func init() {
+	xweb.AddAction(&RecommendationProject{})
+	InitEnterprises()
+}
+
+func (l *RecommendationProject) PortraitRecommendation() {
+	l.GetString("isWinner")
+	l.ServeJson(map[string]interface{}{
+		"error_code": 0,
+		"error_msg":  nil,
+		"data":       config.Sysconfig["bootstrap_specification"],
+	})
+}
+
+func InitEnterprises() {
+	winnerConfig := strings.Split(common.InterfaceToStr(config.Sysconfig["winner"]), ",")
+	WinnerRecommend = getWinnerSeoIdByNameNew("company_name", false, winnerConfig...)
+	buyerConfig := strings.Split(common.InterfaceToStr(config.Sysconfig["buyer"]), ",")
+	BuyerRecommend = getBuyerSeoIdByNameNew(false, buyerConfig...)
+}
+
+// RelevanceData 关联单位
+func RelevanceData(name string, isWinner bool) (randomMaps []map[string]interface{}) {
+	if name == "" {
+		return nil
+	}
+	redisKey := fmt.Sprintf("portrait_relevance_%v_%s", isWinner, name)
+	getFullArr, fromCache := func() (data []map[string]interface{}, fromCache bool) {
+		gVal := redis.Get(RedisNameNew, redisKey)
+		if gVal != nil {
+			redisData := gVal.([]interface{})
+			randomMaps = common.ObjArrToMapArr(redisData)
+			fromCache = true
+			return
+		}
+		data = []map[string]interface{}{}
+		querySql := `{"query": {"bool": {"must": [%s]}},"_source":["buyer","s_winner","entidlist"],"size": 200}`
+		var mustSql string
+		if isWinner {
+			mustSql = fmt.Sprintf(`{"terms": {"entidlist": ["%s"]}},{"exists": {"field": "buyer"}}`, name)
+		} else {
+			mustSql = fmt.Sprintf(`{"match": {"buyer": "%s"}},{"exists": {"field": "s_winner"}},{"exists": {"field": "entidlist"}}`, name)
+		}
+		getData := elastic.Get(biddingIndex, biddingType, fmt.Sprintf(querySql, mustSql))
+		if getData != nil && len(*getData) > 0 {
+			queryMap := make(map[string]bool)
+			if !isWinner { //采购关联企业 校验正确性
+				var queryArr []string
+				for _, v := range *getData {
+					for _, entId := range gconv.Strings(v["entidlist"]) {
+						if queryMap[entId] {
+							continue
+						}
+						queryArr = append(queryArr, entId)
+						queryMap[entId] = true
+					}
+				}
+				data = getWinnerSeoIdByNameNew("_id", false, queryArr...)
+			} else {
+				var queryArr []string
+				for _, v := range *getData {
+					buyerName := gconv.String(v["buyer"])
+					if queryMap[buyerName] {
+						continue
+					}
+					queryArr = append(queryArr, buyerName)
+					queryMap[buyerName] = true
+				}
+				data = getBuyerSeoIdByNameNew(false, queryArr...)
+			}
+		}
+		return
+	}()
+	if !fromCache {
+		redis.Put(RedisNameNew, redisKey, getFullArr, 60*60*24)
+	}
+	randomMaps = getFullArr
+	if len(getFullArr) > 10 { //大于10 随机取10个
+		rand.Seed(time.Now().UnixNano())
+		start := rand.Intn(len(getFullArr) - 10)
+		randomMaps = getFullArr[start : start+10]
+	}
+	return
+}
+
+// RecommendedData 其他推荐
+// name 名称 province 省份 isWinner 来源是否中标企业画像 false 来源企业画像
+func RecommendedData(name, province string, isWinner bool) (rData []map[string]interface{}) {
+	redisKey := fmt.Sprintf("jyseo_portrait_recommended_%v_%s", isWinner, province)
+	getFullArr, formCache := func() (data []map[string]interface{}, formCache bool) {
+		if name == "" || province == "" || province == "全国" {
+			return
+		}
+		data = []map[string]interface{}{}
+		gVal := redis.Get(RedisNameNew, redisKey)
+		if gVal != nil {
+			redisData := gVal.([]interface{})
+			data = common.ObjArrToMapArr(redisData)
+			formCache = true
+			return
+		}
+
+		sql := fmt.Sprintf(`{"query":{"bool":{"must":[{"term":{"area":"%s"}},%s]}},"sort":[{"lasttime":"desc"}],"_source":["entidlist","buyer"],"from":0,"size":200}`, province, "%s")
+		if isWinner {
+			sql = fmt.Sprintf(sql, `{"exists": {"field": "s_winner"}},{"exists": {"field": "entidlist"}}`)
+		} else {
+			sql = fmt.Sprintf(sql, `{"exists": {"field": "buyer"}}`)
+		}
+
+		getData := elastic.Get(projectSet, projectSet, sql)
+		if getData != nil && len(*getData) > 0 {
+			queryMap := make(map[string]bool)
+			if isWinner { //采购关联企业 校验正确性
+				var queryArr []string
+				for _, v := range *getData {
+					for _, entId := range gconv.Strings(v["entidlist"]) {
+						if queryMap[entId] {
+							continue
+						}
+						queryArr = append(queryArr, entId)
+						queryMap[entId] = true
+					}
+				}
+				data = getWinnerSeoIdByNameNew("_id", false, queryArr...)
+			} else {
+				var queryArr []string
+				for _, v := range *getData {
+					buyerName := gconv.String(v["buyer"])
+					if queryMap[buyerName] {
+						continue
+					}
+					queryArr = append(queryArr, buyerName)
+					queryMap[buyerName] = true
+				}
+				data = getBuyerSeoIdByNameNew(false, queryArr...)
+			}
+		}
+		return
+	}()
+	if !formCache {
+		redis.Put(RedisNameNew, redisKey, getFullArr, 60*60*24)
+	}
+
+	finalArr := getFullArr
+	if len(finalArr) == 0 {
+		if isWinner {
+			finalArr = WinnerRecommend
+		} else {
+			finalArr = BuyerRecommend
+		}
+	}
+
+	if len(finalArr) > 10 {
+		rand.Seed(time.Now().UnixNano())
+		start := rand.Intn(len(finalArr) - 10)
+		return finalArr[start : start+10]
+	}
+	return finalArr
+}

+ 6 - 6
src/web/staticres/pccss/pc-detail.css

@@ -1072,10 +1072,10 @@ a{
   position: relative;
   margin: 0 auto;
 }
-.main-content.in-iframe-style .biddetail-content-container {
+.in-iframe-style .biddetail-content-container {
   width: 980px;
 }
-.main-content.in-iframe-style .exposure-content-right--group {
+.in-iframe-style .exposure-content-right--group {
   width: 200px;
 }
 
@@ -1086,17 +1086,17 @@ a{
 
 /* old-banner在工作桌面外显示 */
 
-.main-content.in-outside-style .banner-right-container.old-banner {
+.in-outside-style .banner-right-container.old-banner {
   display: none;
 }
-.main-content.in-outside-style .banner-right-container.seo-banner {
+.in-outside-style .banner-right-container.seo-banner {
   display: block;
 }
 /* seo-banner在工作桌面下隐藏 */
-.main-content.in-iframe-style .banner-right-container.old-banner {
+.in-iframe-style .banner-right-container.old-banner {
   display: block;
 }
-.main-content.in-iframe-style .banner-right-container.seo-banner {
+.in-iframe-style .banner-right-container.seo-banner {
   display: none;
 }
 

+ 6 - 2
src/web/staticres/public-pc/js/article-content.js

@@ -1049,10 +1049,14 @@ function jumpTab(n){
 }
 $(function(){
   if (goTemplateData.inIframe) {
-    $('.main-content').addClass('in-iframe-style')
+    $('.page-detail').addClass('in-iframe-style')
+    $('.in-iframe-dom-show').show()
+    $('.in-iframe-dom-hide').hide()
     $('.recoveryfat').css({ width: $('.biddetail-content').width() })
   } else {
-    $('.main-content').addClass('in-outside-style')
+    $('.in-outside-dom-show').show()
+    $('.in-outside-dom-hide').hide()
+    $('.page-detail').addClass('in-outside-style')
   }
   if ($("#trwidth").find(".preb-exam").length>0){
     $("#exaapprove").show();

+ 4 - 4
src/web/templates/pc/biddetail_rec.html

@@ -358,7 +358,7 @@
     <!-- 用户留资 -->
     <div id="vue-collect-user-info"></div>
     <div id="vue-collect-bid-info"></div>
-    <section class="w breadcrumb-nav">
+    <section class="w breadcrumb-nav in-outside-dom-show" style="display: none;">
       <span><a style="color: #686868;" href="/">剑鱼标讯</a></span><span> > </span><span><a style="color: #686868;" {{if eq  .T.obj.stypeadd "NJXM"}} href="javascript:volid(0);" {{else if eq  .T.obj.stypeadd "ZBCGYX" }} href="javascript:volid(0);" {{else}} href="/list/stype/{{.T.obj.stypeadd}}.html" {{end}}>{{if .T.obj.subtype}}{{.T.obj.subtype}}{{else}}{{.T.obj.toptype}}{{end}}项目</a></span><span> > </span><span class="active">{{.T.obj.title}}</span>
     </section>
     <div class="main-content" style="width: 1200px; position: relative; margin: 0 auto">
@@ -846,7 +846,7 @@
             </div> -->
             <div class="cutline"></div>
             <div class="com-prebuilt hidden" style="position:relative;">
-                <div class="mask-zz hidden" style="position:absolute; top:0;width: 900px;padding:0;height: 408px;background-color:white;z-index: 1;">
+                <div class="mask-zz hidden" style="position:absolute; top:0;padding:0;height: 408px;background-color:white;z-index: 1;">
                     <img style="width: 100%;height: 100%" src="/images/pc/pc_mh.png">
                     <div class="mask-zz" style="position:absolute; left: 50%; top: 50%; margin-top: -110px;margin-left: -250px;width: 500px;height: 220px;background-color: white;z-index: 100;border-radius: 10px">
                         <div style="position: relative">
@@ -860,7 +860,7 @@
                         </div>
                     </div>
                 </div>
-                <div class="mask-zzz hidden" style="position:absolute; top:0;width: 900px;padding:0;height: 408px;background-color:white;z-index: 1;">
+                <div class="mask-zzz hidden" style="position:absolute; top:0;padding:0;height: 408px;background-color:white;z-index: 1;">
                     <img style="width: 100%;height: 100%" src="/images/pc/pc_mh.png">
                     <div class="mask-zzz" style="position:absolute; left: 50%; top: 50%; transform: translate3d(-50%, -50%, 0);width: 500px;background-color: white;z-index: 100;border-radius: 10px">
                         <div style="position: relative">
@@ -874,7 +874,7 @@
                         </div>
                     </div>
                 </div>
-                <div class="mask-zzz hidden free-equity-mask" style="position:absolute; top:0;width: 900px;padding:0;height: 587px;background-color:white;z-index: 1;">
+                <div class="mask-zzz hidden free-equity-mask" style="position:absolute; top:0;padding:0;height: 587px;background-color:white;z-index: 1;">
                     <img style="width: 100%;height: 100%" src="/images/pc/pc_mh.png">
                     <div class="mask-zzz" style="position:absolute; left: 50%; top: 50%; transform: translate3d(-50%, -50%, 0);width: 632px;background-color: white;z-index: 100;border-radius: 10px">
                         <div style="position: relative">