Explorar o código

Merge branch 'master' into feature/v4.8.29

lianbingjie %!s(int64=2) %!d(string=hai) anos
pai
achega
4105f1bcb7

+ 1 - 1
src/config.json

@@ -348,7 +348,7 @@
     "projectcode": true,
     "budget": true,
     "bidamount": true,
-    "buyer": true,
+    "buyer": false,
     "buyerperson": true,
     "buyertel": true,
     "buyeraddr": true,

+ 16 - 3
src/jfw/front/shorturl.go

@@ -16,6 +16,7 @@ import (
 	"app.yhyue.com/moapp/jypkg/public"
 
 	util "app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/date"
 
 	. "app.yhyue.com/moapp/jybase/mongodb"
 
@@ -212,6 +213,9 @@ func (s *Short) Article(stype, id string) error {
 						obj["entIds"] = winnerIdArr
 					}
 				}
+				if obj["publishtime"] != nil {
+					obj["publishtimeShorDate"] = time.Unix(util.Int64All(obj["publishtime"]), 0).Format(date.Date_Short_Layout)
+				}
 				s.T["url"] = s.Uri()
 				s.T["obj"] = obj
 
@@ -441,6 +445,10 @@ func (s *Short) Article(stype, id string) error {
 				_, _, _, objc := pcVRT(sid, indust, stype, isVip || isMember || isEntniche)
 				node = SeeDetailLimit(objc, userId, sid)
 			}
+
+			if obj["publishtime"] != nil {
+				obj["publishtimeShorDate"] = time.Unix(util.Int64All(obj["publishtime"]), 0).Format(date.Date_Short_Layout)
+			}
 			s.T["canRead"] = node
 			if stype == "advancedProject" {
 				canRead := false
@@ -526,9 +534,10 @@ func (s *Short) Article(stype, id string) error {
 				}
 			} else {
 				obj = map[string]interface{}{
-					"title":   obj["title"],
-					"_id":     obj["_id"],
-					"subtype": obj["subtype"],
+					"title":    obj["title"],
+					"_id":      obj["_id"],
+					"subtype":  obj["subtype"],
+					"stypeadd": obj["stypeadd"],
 				}
 			}
 
@@ -537,6 +546,7 @@ func (s *Short) Article(stype, id string) error {
 			if ssOpenid != nil {
 				obj["ucbsId"] = encrypt.EncodeArticleId2ByCheck("ucbs#" + ssOpenid.(string) + "#" + id)
 			}
+
 			s.T["obj"] = obj
 			s.T["url"] = s.Uri()
 			return s.Render("/pc/biddetail_rec.html", &s.T)
@@ -1008,6 +1018,9 @@ func (s *Short) NologinArticle(stype, id string) error {
 				obj = Filter(obj)
 				obj["description"] = fmt.Sprintf("%s,%s。", obj["title"], baseInfo(obj))
 			}
+			if obj["publishtime"] != nil {
+				obj["publishtimeShorDate"] = time.Unix(util.Int64All(obj["publishtime"]), 0).Format(date.Date_Short_Layout)
+			}
 			s.T["obj"] = obj
 			s.T["url"] = s.Uri()
 			s.T["newBidInfoList"] = tg.GetNewBidInfo()

+ 3 - 3
src/jfw/front/swordfish.go

@@ -375,7 +375,6 @@ func getLastNewsData(searchvalue, area, city, publishtime, subtype, industry, mi
 		}
 	}
 	limitCount := int64(bidsearch.SearchMaxPageCount_PC)
-	log.Println("######%%%", count)
 	if count > limitCount {
 		count = limitCount
 	}
@@ -971,7 +970,7 @@ func bidDataConvert(id string, datas *[]map[string]interface{}) (array []map[str
 		diff := ""
 		publishtime, _ := v["publishtime"].(float64)
 		if publishtime != 0 {
-			diff = util.TimeDiff(time.Unix(util.Int64All(publishtime), 0))
+			diff = time.Unix(util.Int64All(publishtime), 0).Format(Date_Short_Layout)
 			v["pbtime"] = util.Int64All(publishtime)
 		}
 		v["publishtime"] = diff
@@ -1607,7 +1606,8 @@ func searchresulthtml(list *[]map[string]interface{}) string {
 		}
 		publishtime, _ := listdata["publishtime"].(float64)
 		if publishtime != 0 {
-			diff := util.TimeDiff(time.Unix(util.Int64All(publishtime), 0))
+			// diff := util.TimeDiff(time.Unix(util.Int64All(publishtime), 0))
+			diff := time.Unix(util.Int64All(publishtime), 0).Format(Date_Short_Layout)
 			if diff != "" {
 				listhtml += `<span class="com-time">` + diff + `</span>`
 			}

+ 3 - 0
src/jfw/front/tags.go

@@ -14,6 +14,7 @@ import (
 	"time"
 
 	qu "app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/date"
 	"app.yhyue.com/moapp/jybase/encrypt"
 	elastic "app.yhyue.com/moapp/jybase/es"
 	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
@@ -438,6 +439,7 @@ func (this *Tags) GetNewBidInfo() (list []map[string]interface{}) {
 				delete(v, "s_subscopeclass")
 				tmpdate := v["publishtime"]
 				v["publishtime"] = qu.Int64All(tmpdate.(float64))
+				v["date"] = time.Unix(qu.Int64All(tmpdate.(float64)), 0).Format(date.Date_Short_Layout)
 				if v["budget"] != nil {
 					v["budget"] = ConversionMoeny(v["budget"])
 				} else if v["bidamount"] != nil {
@@ -670,6 +672,7 @@ func (this *Tags) GetBidding(industry, area, city, stype, keyword string, reques
 			if datas != nil && len(*datas) > 0 {
 				for _, v := range *datas {
 					v["_id"] = encrypt.CommonEncodeArticle("content", qu.ObjToString(v["_id"]))
+					v["date"] = time.Unix(qu.Int64All(v["publishtime"]), 0).Format(date.Date_Short_Layout)
 				}
 				if strings.Contains(industry, "_") {
 					industry = strings.Split(industry, "_")[0]

+ 7 - 2
src/jfw/modules/app/src/app/front/shorturl.go

@@ -11,6 +11,7 @@ import (
 	"strings"
 	"time"
 
+	"app.yhyue.com/moapp/jybase/date"
 	"app.yhyue.com/moapp/jybase/encrypt"
 	"app.yhyue.com/moapp/jybase/fsw"
 
@@ -247,6 +248,9 @@ func (s *Short) Article(stype, id string) error {
 				obj = Filter(obj)
 				obj["description"] = fmt.Sprintf("%s,%s。", obj["title"], baseInfo(obj))
 			}
+			if obj["l_publishtime"] != nil {
+				obj["publishtimeShorDate"] = time.Unix(util.Int64All(obj["l_publishtime"]), 0).Format(date.Date_Short_Layout)
+			}
 		} else {
 			obj = map[string]interface{}{
 				"title":   obj["title"],
@@ -322,7 +326,9 @@ func NoLoginArticle(stype, sid string) map[string]interface{} {
 			obj["buyerperson"] = ""
 			obj["buyertel"] = ""
 		}
-
+		if obj["l_publishtime"] != nil {
+			obj["publishtimeShorDate"] = time.Unix(util.Int64All(obj["l_publishtime"]), 0).Format(date.Date_Short_Layout)
+		}
 		obj["winnerTitle"] = obj["winner"]
 		obj["buyerTitle"] = obj["buyer"]
 		obj["projectnameTitle"] = obj["projectname"]
@@ -330,7 +336,6 @@ func NoLoginArticle(stype, sid string) map[string]interface{} {
 		obj = Filter(obj)
 		redis.Put("other", catchKey, obj, 60*60*2)
 	}
-	fmt.Println("11111", obj)
 	return obj
 }
 

+ 1 - 1
src/jfw/modules/app/src/config.json

@@ -175,7 +175,7 @@
     "projectcode":true,
     "budget":true,
     "bidamount":true,
-    "buyer":true,
+    "buyer":false,
     "buyerperson":true,
     "buyertel":true,
     "buyeraddr":true,

+ 5 - 8
src/jfw/modules/app/src/web/templates/weixin/wxinfocontent.html

@@ -466,8 +466,8 @@
                     <div class="time_label">
                       <script>
                           var l_publishtime = {{.T.obj.l_publishtime}};
-                          if(l_publishtime != ""){
-                              var tdf = utils.dateFromNow(Number(l_publishtime+"000"))
+                          if((l_publishtime != "") &&(l_publishtime !=null)){
+                              var tdf = new Date(parseInt(l_publishtime*1000)).pattern('yyyy-MM-dd');
                               if(tdf != null){
                                   // document.write("<div class='timebefore_vip'><i class='glyphicon bofangjilu'></i>"+tdf+"</div>");
                                   document.write("<div class='timebefore_vip'>"+tdf+"</div>");
@@ -576,12 +576,9 @@
                             </div>
                         </div>
                         <script>
-                            var l_publishtime = {{.T.obj.l_publishtime}};
-                            if(l_publishtime != ""){
-                                var tdf = utils.dateFromNow(Number(l_publishtime+"000"))
-                                if(tdf != null){
-                                    document.write("<span class='timebefore'>"+tdf+"</span>");
-                                }
+                            var l_publishtime = {{.T.obj.publishtimeShorDate}};
+                            if(l_publishtime != "" && l_publishtime!=null){
+                                    document.write("<span class='timebefore'>"+l_publishtime+"</span>");
                             }
                         </script>
                     </div>

+ 2 - 2
src/jfw/modules/bigmember/src/entity/marketAnalysis/customizad_distribution.go

@@ -317,7 +317,7 @@ func (mae *MarketAnalysisEntity) MarketTime() (map[string]interface{}, error) {
 	rMap := make(map[string]interface{})
 	rMapData := make(map[string]interface{})
 	thisRow := marketTime{}
-	res, _ := util.GetAggs("projectset", "projectset", finalSql)
+	res := util.GetAggs("projectset", "projectset", finalSql)
 	if res == nil || len(res) == 0 {
 		return nil, fmt.Errorf("未查询到项目")
 	}
@@ -604,7 +604,7 @@ func (mae *MarketAnalysisEntity) BuyerWinnerAnalysis() map[string]interface{} {
 	finalSql := fmt.Sprintf(mae.GetCommonQuerySqlWithAggs(), strings.Join(datas, ","))
 	log.Printf("final PurchasingAnalysiseQuery sql: %s", finalSql)
 	t := time.Now()
-	res, _ := util.GetAggs("projectset", "projectset", finalSql)
+	res := util.GetAggs("projectset", "projectset", finalSql)
 	if res == nil || len(res) == 0 {
 		return nil
 	}

+ 9 - 6
src/jfw/modules/bigmember/src/entity/marketAnalysis/customized_analysis.go

@@ -1,12 +1,13 @@
 package marketAnalysis
 
 import (
-	"encoding/json"
-	"fmt"
 	util "app.yhyue.com/moapp/jybase/common"
 	elastic "app.yhyue.com/moapp/jybase/es"
-	"strings"
+	"encoding/json"
+	"fmt"
 	util2 "jy/src/jfw/modules/bigmember/src/util"
+	"log"
+	"strings"
 )
 
 const (
@@ -15,14 +16,14 @@ const (
 	query_top10                = `,"sort": [{"sortprice": "desc"}],"from": 0,"size": 10`
 	aggs_area_amounttop3       = `"area_amount_top3":{"terms":{"field":"area","exclude":["全国"],"order":[{"area_amount":"desc"}],"size":3},"aggs":{"area_amount":{"sum":{"field":"sortprice"}},"winner_top":{"terms":{"field":"entidlist","exclude": ["-"],"order":[{"area_winner_amount":"desc"}],"size":3},"aggs":{"area_winner_amount":{"sum":{"field":"sortprice"}}}}}}`
 	aggs_area_counttop3        = `"area_count_top3":{"terms":{"field":"area","exclude":["全国"],"order":[{"area_count":"desc"}],"size":3},"aggs":{"area_count":{"filter":{"match_all":{}}},"winner_top":{"terms":{"field":"entidlist","exclude": ["-"],"order":[{"area_winner_count":"desc"}],"size":3},"aggs":{"area_winner_count":{"filter":{"match_all":{}}}}}}}`
-	aggs_buyerclass            = `"buyerclass_scale":{"terms":{"field":"buyerclass","exclude":["其它",""]},"aggs":{"buyerclass_amount":{"sum":{"field":"sortprice"}},"buyerclass_total":{"filter":{"match_all":{}}}}}`
+	aggs_buyerclass            = `"buyerclass_scale":{"terms":{"field":"buyerclass","size":2000,"exclude":["其它",""]},"aggs":{"buyerclass_amount":{"sum":{"field":"sortprice"}},"buyerclass_total":{"filter":{"match_all":{}}}}}`
 	aggs_buyerclass_other      = `"buyerclass_scale_other":{"terms":{"field":"buyerclass","include":["其它",""]},"aggs":{"buyerclass_amount":{"sum":{"field":"sortprice"}},"buyerclass_total":{"filter":{"match_all":{}}}}}`
 	aggs_buyerclass_counttop3  = `"buyerclass_count_top3":{"terms":{"field":"buyerclass","exclude":["其它",""],"order":[{"buyerclass_count":"desc"}],"size":3},"aggs":{"buyerclass_count":{"filter":{"match_all":{}}},"bidcount_top":{"terms":{"field":"entidlist","exclude": ["-"],"order":[{"buyer_winner_count":"desc"}],"size":3},"aggs":{"buyer_winner_count":{"filter":{"match_all":{}}}}}}}`
 	aggs_buyerclass_amounttop3 = `"buyerclass_amount_top3":{"terms":{"field":"buyerclass","exclude":["其它",""],"order":[{"buyerclass_amount":"desc"}],"size":3},"aggs":{"buyerclass_amount":{"sum":{"field":"sortprice"}},"winner_top":{"terms":{"field":"entidlist","exclude": ["-"],"order":[{"buyer_winner_amount":"desc"}],"size":3},"aggs":{"buyer_winner_amount":{"sum":{"field":"sortprice"}}}}}}`
 	sortprice_str              = `{"key":"<10万","from":0.0000000000001,"to":100000},{"key":"10万-50万","from":100000,"to":500000},{"key":"50万-100万","from":500000,"to":1000000},{"key":"100万-500万","from":1000000,"to":5000000},{"key":"500万-1000万","from":5000000,"to":10000000},{"key":"1000万-1亿","from":10000000,"to":100000000},{"key":"≥1亿","from":100000000}`
 	aggs_all_c_m               = `"project_count": {"filter": {"match_all":{}}},"project_count_not0": {"filter": {"range": {"sortprice": {"gt": 0}}}},"project_amount": {"sum": {"field": "sortprice"}}`
 	query_id                   = `{"query": {"bool": {"must": [{"term": {"entidlist": "%s"}}]}},"size": 1}`
-	query_idto                 = `{"query": {"bool": {"must": [{"terms": {"qyxy.id": ["%s"]}}]}},"_source":["_id","company_name"],"size": %d}`
+	query_idto                 = `{"query": {"bool": {"must": [{"terms": {"id": ["%s"]}}]}},"_source":["_id","company_name"],"size": %d}`
 )
 
 type AreaCTop struct {
@@ -185,6 +186,7 @@ func IDToName(ids []string) (iMap map[string]string) {
 	iMap = map[string]string{}
 	d := strings.Join(ids, `","`)
 	finalSql := fmt.Sprintf(query_idto, d, len(ids))
+	log.Println("IDToName sql:", finalSql)
 	hits := elastic.Get("qyxy", "qyxy", finalSql)
 	if hits == nil || len(*hits) == 0 {
 		return
@@ -213,7 +215,8 @@ func (mae *MarketAnalysisEntity) AllData() (rMap map[string]interface{}, err err
 		aggs = append(aggs, aggs_buyerclass, aggs_buyerclass_other, aggs_buyerclass_amounttop3, aggs_buyerclass_counttop3)
 	}
 	finalSql := fmt.Sprintf(mae.GetCommonQuerySqlWithAggs(), strings.Join(aggs, ","))
-	res, _ := util2.GetAggs("projectset", "projectset", finalSql)
+	log.Println("allData sql:", finalSql)
+	res := util2.GetAggs("projectset", "projectset", finalSql)
 	if res == nil || len(res) == 0 {
 		return
 	}

+ 1 - 1
src/jfw/modules/bigmember/src/entity/marketAnalysis/scaleRefineQuery.go

@@ -101,7 +101,7 @@ func (mae *MarketAnalysisEntity) marketScaleRefineQuery() (rMap map[string]inter
 	finalSql := fmt.Sprintf(mae.GetCommonQuerySqlWithAggs(), strings.Join(aggsGroup, ","))
 	//fmt.Println("finalSql-----4", finalSql)
 	rMap = map[string]interface{}{}
-	res, _ := util.GetAggs("projectset", "projectset", finalSql)
+	res := util.GetAggs("projectset", "projectset", finalSql)
 	if res == nil || len(res) == 0 {
 		return
 	}

+ 24 - 25
src/jfw/modules/bigmember/src/entity/portrait.go

@@ -112,8 +112,8 @@ func CreatePortraitManagerForContacts(session *httpsession.Session, entType int6
 	return &Portrait{uid, session}, nil
 }
 
-//CreateSubVipPortraitManager 超级订阅权限校验
-//int -1无权限 1免费权限 2超级订阅次数&采购单位流量包 3使用体验
+// CreateSubVipPortraitManager 超级订阅权限校验
+// int -1无权限 1免费权限 2超级订阅次数&采购单位流量包 3使用体验
 func CreateSubVipPortraitManager(userid string, pageFlag, searchValue string, isWinner bool, session *httpsession.Session) (*Portrait, int, error, bool) {
 	if userid == "" {
 		return nil, -1, errors.New("未登录"), true
@@ -218,7 +218,7 @@ func paseDateToint64(dateStr string) (timeStamp int64) {
 
 //画像接口===============================================================================
 
-//GetEntIdByName 获取企业id
+// GetEntIdByName 获取企业id
 func (this *Portrait) GetEntIdByName(entName string) (string, error) {
 	if entName == "" {
 		return "", errors.New("企业名称异常")
@@ -230,7 +230,7 @@ func (this *Portrait) GetEntIdByName(entName string) (string, error) {
 	return entId, nil
 }
 
-//GetWinnerContactsMsg 企业画像-获取历史项目联系方式
+// GetWinnerContactsMsg 企业画像-获取历史项目联系方式
 func (this *Portrait) GetWinnerContactsMsg(entId string) ([]map[string]interface{}, error) {
 	if entId == "" {
 		return nil, errors.New("企业名称异常")
@@ -238,11 +238,12 @@ func (this *Portrait) GetWinnerContactsMsg(entId string) ([]map[string]interface
 	return GetProjectContactsMsg("", entId), nil
 }
 
-//GetWinnerNewMsg 企业画像-查询最新项目动态
-//增加 match 搜索词
-//	  matchType 搜索范围
-//    area 项目地区
-//    pushTime 发布时间
+// GetWinnerNewMsg 企业画像-查询最新项目动态
+// 增加 match 搜索词
+//
+//		  matchType 搜索范围
+//	   area 项目地区
+//	   pushTime 发布时间
 func (this *Portrait) GetWinnerNewMsg(pwp *PortraitProjectScreen) ([]map[string]interface{}, int64, error) {
 	return pwp.GetWinnerList()
 }
@@ -261,7 +262,7 @@ type dataExportKeywords struct {
 	Keyword string `json:"keyword"` //关键词
 }
 
-//SaveExportRecord 保存数据到出记录
+// SaveExportRecord 保存数据到出记录
 func (this *Portrait) SaveExportRecord(pwp *PortraitProjectScreen, ids []string, ent, flag string) (string, error) {
 	var keyWords []dataExportKeywords
 	for _, k := range pwp.Screen.KeyWordArr {
@@ -292,16 +293,15 @@ func (this *Portrait) SaveExportRecord(pwp *PortraitProjectScreen, ids []string,
 	return "", fmt.Errorf("选择导出异常")
 }
 
-//GetWinnerNewCount 企业画像-查询最新项目数量(前端用于展示是否加载更多)
+// GetWinnerNewCount 企业画像-查询最新项目数量(前端用于展示是否加载更多)
 func (this *Portrait) GetWinnerNewCount(entId string) int64 {
 	if entId == "" {
 		return -1
 	}
-	count := GetWinnerNewProjectCount(entId)
-	return count
+	return GetNewBiddingCount(entId, "")
 }
 
-//WinnerPortraitData 企业画像-查询
+// WinnerPortraitData 企业画像-查询
 func (this *Portrait) WinnerPortraitData(screen *PortraitScreen) (map[string]interface{}, error) {
 	if screen.Ent == "" {
 		return nil, errors.New("企业名称异常")
@@ -329,7 +329,7 @@ func (this *Portrait) WinnerPortraitData(screen *PortraitScreen) (map[string]int
 	return resMap, nil
 }
 
-//WinnerMiniPortraitData 三级页引流
+// WinnerMiniPortraitData 三级页引流
 func (this *Portrait) WinnerMiniPortraitData(entId string) (map[string]interface{}, error) {
 	if entId == "" {
 		return nil, errors.New("企业名称异常")
@@ -342,7 +342,7 @@ func (this *Portrait) WinnerMiniPortraitData(entId string) (map[string]interface
 	return miniReturnMap, nil
 }
 
-//GetBuyerContactsMsg 采购单位联系人
+// GetBuyerContactsMsg 采购单位联系人
 func (this *Portrait) GetBuyerContactsMsg(buyerName string) ([]map[string]interface{}, error) {
 	if buyerName == "" {
 		return nil, errors.New("企业名称异常")
@@ -350,20 +350,19 @@ func (this *Portrait) GetBuyerContactsMsg(buyerName string) ([]map[string]interf
 	return GetProjectContactsMsg(buyerName, ""), nil
 }
 
-//GetBuyerNewCount 采购单位画像-查询最新项目数量(前端用于展示是否加载更多)
+// GetBuyerNewCount 采购单位画像-查询最新项目数量(前端用于展示是否加载更多)
 func (this *Portrait) GetBuyerNewCount(buyer string) int64 {
 	if buyer == "" {
 		return -1
 	}
-	count := GetBuyerNewProjectCount(buyer)
-	return count
+	return GetNewBiddingCount("", buyer)
 }
 
-//BuyerPortraitData 采购单位画像-查询
-//flag 分段请求标识 a年度统计和节支率等 b重点合作企业 c合作企业注册资本、地区、年份分布
-//a段数据=timeRange、city、province、buyerclass、bidamount_count、fail_count、project_count、winner_count、otherProvincesWinnerCount、yearData、monthData、moneyRange、bidtypeData、rate、top12、topAgencyData
-//b段数据=topShow
-//c段数据=withCapitalData、withAreaData、withEstablishData
+// BuyerPortraitData 采购单位画像-查询
+// flag 分段请求标识 a年度统计和节支率等 b重点合作企业 c合作企业注册资本、地区、年份分布
+// a段数据=timeRange、city、province、buyerclass、bidamount_count、fail_count、project_count、winner_count、otherProvincesWinnerCount、yearData、monthData、moneyRange、bidtypeData、rate、top12、topAgencyData
+// b段数据=topShow
+// c段数据=withCapitalData、withAreaData、withEstablishData
 func (this *Portrait) BuyerPortraitData(screen *PortraitScreen, flag string) (map[string]interface{}, error) {
 	if screen.Ent == "" {
 		return nil, errors.New("企业名称异常")
@@ -402,7 +401,7 @@ func (this *Portrait) BuyerPortraitData(screen *PortraitScreen, flag string) (ma
 	return buyerPortraitData, nil
 }
 
-//BuyerMiniPortraitData 采购单位引流接口
+// BuyerMiniPortraitData 采购单位引流接口
 func (this *Portrait) BuyerMiniPortraitData(buyer string) (map[string]interface{}, error) {
 	if buyer == "" {
 		return nil, errors.New("企业名称异常")

+ 54 - 21
src/jfw/modules/bigmember/src/entity/portraitBuyerSearch.go

@@ -16,7 +16,7 @@ import (
 
 const (
 	buyer_query_address    = `{"query":{"bool":{"must":[{"term":{"buyer_name":"%s"}}]}},"size":1,"_source":["city","province","buyerclass"]}`
-	buyerPortraitSearchSql = `{"query":{"bool":{"must":[%s]}},"aggs":{"year_bidamount":{"range":{"field":"jgtime","ranges":[%s]},"aggs":{"count":{"sum":{"field":"bidamount"}}}},"fail_count":{"filter":{"bool":{"must":[{"term":{"bidstatus":"流标"}}]}}},"winner_count":{"cardinality":{"field":"entidlist"}},"bidamount_count":{"sum":{"field":"bidamount"}},"moneyRange":{"filter":{"bool":{"must":{"range":{"project_rate":{"gte":0,"lte":0.6}}}}},"aggs":{"moneyRangeValue":{"range":{"field":"bidamount","ranges":[%s]},"aggs":{"bidamount_count":{"sum":{"field":"bidamount"}},"budget_count":{"sum":{"field":"budget"}}}}}},"bidtypeData":{"filter":{"bool":{"must":{"terms":{"bidtype":["招标","邀标","询价","单一","竞价","竞谈"]}}}},"aggs":{"bidtype_group":{"terms":{"field":"bidtype"},"aggs":{"bidamount_count":{"sum":{"field":"bidamount"}}}},"bidamount_count":{"sum":{"field":"bidamount"}}}},"topScopeclassData":{"terms":{"field":"topscopeclass","size":12,"order":[{"bidamount_count":"desc"}]},"aggs":{"bidamount_count":{"sum":{"field":"bidamount"}},"top_scopeclass_rate_time_avg":` + YearRate + `}},"allScopeclassData":` + YearRate + `,"topAgencyData":{"terms":{"field":"agency","size":10,"order":[{"_count":"desc"},{"last_with_time":"desc"}]},"aggs":{"last_with_time":{"max":{"field":"jgtime"}}}},"topWinner":{"terms":{"field":"entidlist","order":[{"count_bidamount":"desc"},{"_count":"desc"},{"last_with_time":"desc"}]},"aggs":{"last_with_time":{"max":{"field":"jgtime"}},"count_bidamount":{"sum":{"field":"bidamount"}},"avg_data":{"filter":{"bool":{"must":{"range":{"project_rate":{"gte":0,"lte":0.6}}}}},"aggs":{"bidamount_count":{"sum":{"field":"bidamount"}},"budget_count":{"sum":{"field":"budget"}}}}}},"firstWinner":{"terms":{"field":"first_cooperation"}},"allWinnerList":{"terms":{"field":"entidlist","size":4000},"aggs":{"count_bidamount":{"sum":{"field":"bidamount"}},"avg_data":` + BaseRate + `}}},"size":0}`
+	buyerPortraitSearchSql = `{"query":{"bool":{"must":[%s]}},"aggs":{"year_bidamount":{"range":{"field":"jgtime","ranges":[%s]},"aggs":{"count":{"sum":{"field":"bidamount"}}}},"fail_count":{"filter":{"bool":{"must":[{"term":{"bidstatus":"流标"}}]}}},"winner_count":{"cardinality":{"field":"entidlist"}},"bidamount_count":{"sum":{"field":"bidamount"}},"moneyRange":{"filter":{"bool":{"must":{"range":{"project_rate":{"gte":0,"lte":0.6}}}}},"aggs":{"moneyRangeValue":{"range":{"field":"bidamount","ranges":[%s]},"aggs":{"bidamount_count":{"sum":{"field":"bidamount"}},"budget_count":{"sum":{"field":"budget"}}}}}},"bidtypeData":{"filter":{"bool":{"must":{"terms":{"bidtype":["招标","邀标","询价","单一","竞价","竞谈"]}}}},"aggs":{"bidtype_group":{"terms":{"field":"bidtype"},"aggs":{"bidamount_count":{"sum":{"field":"bidamount"}}}},"bidamount_count":{"sum":{"field":"bidamount"}}}},"topScopeclassData":{"terms":{"field":"topscopeclass","size":12,"order":[{"bidamount_count":"desc"}]},"aggs":{"bidamount_count":{"sum":{"field":"bidamount"}},"top_scopeclass_rate_time_avg":` + YearRate + `}},"allScopeclassData":` + YearRate + `,"topAgencyData":{"terms":{"field":"agency","size":10,"order":[{"_count":"desc"},{"last_with_time":"desc"}]},"aggs":{"last_with_time":{"max":{"field":"jgtime"}}}},"topWinner":{"terms":{"field":"entidlist","order":[{"count_bidamount":"desc"},{"_count":"desc"},{"last_with_time":"desc"}]},"aggs":{"last_with_time":{"max":{"field":"jgtime"}},"count_bidamount":{"sum":{"field":"bidamount"}},"avg_data":{"filter":{"bool":{"must":{"range":{"project_rate":{"gte":0,"lte":0.6}}}}},"aggs":{"bidamount_count":{"sum":{"field":"bidamount"}},"budget_count":{"sum":{"field":"budget"}}}}}},"firstWinner":{"terms":{"field":"first_cooperation"}},"allWinnerList":{"terms":{"field":"entidlist","size":10000},"aggs":{"count_bidamount":{"sum":{"field":"bidamount"}},"avg_data":` + BaseRate + `}}},"size":0}`
 	queryTermByIdSql       = `{"terms":{"_id":[%s]}}`
 
 	queryMustSql                = `{"query":{"bool":{"must":[%s]}}}`
@@ -24,12 +24,6 @@ const (
 	buyerWithEntPortraitSqlPage = `{"query":{"bool":{"must":[%s]}},"_source":["_id","company_area","capital","establish_date","tag_business"],"from":%d,"size":%d}`
 )
 
-// GetBuyerNewProjectCount 采购单位最新中标动态数量查询
-func GetBuyerNewProjectCount(buyer string) int64 {
-	defer qutil.Catch()
-	return elastic.Count("projectset", "projectset", fmt.Sprintf(`{"query":{"bool":{"must":[{"term": {"buyer": "%s"}},{"range":{"jgtime":{"gte":%d}}}]}}}`, buyer, time.Now().AddDate(-5, 0, 0).Unix()))
-}
-
 // GetBuyerMsg 获取采购单位基本信息
 func GetBuyerMsg(entName string) (city, province, buyerclass string) {
 	list := elastic.Get("buyer", "buyer", fmt.Sprintf(buyer_query_address, entName))
@@ -52,7 +46,7 @@ func GetBuyerPortraitData(screen *PortraitScreen) (map[string]interface{}, error
 
 	if AllWinner, ok := buyerPortraitData["allWinnerList"]; ok {
 		province := qutil.ObjToString(buyerPortraitData["province"])
-		withPorTraitData, thisProvincesWinnerCount, withErr := GetWithEntPortraitData(AllWinner, province, buyerPortraitData["bidamount_count"])
+		withPorTraitData, thisProvincesWinnerCount, withErr := GetWithEntPortraitData(AllWinner, province, buyerPortraitData["bidamount_count"], buyerPortraitData["project_count"])
 		if withErr != nil {
 			log.Println("GetWithEntPortraitData err", withErr)
 		}
@@ -132,7 +126,7 @@ func BuyerPortraitSearch(screen *PortraitScreen) (map[string]interface{}, error)
 
 	tBegin := time.Now()
 	doSearchSql := fmt.Sprintf(buyerPortraitSearchSql, strings.Join(mustQueryArr, ","), bidamountTimeRange, getMoneyRange(), comminTimeRange, comminTimeRange)
-	res, count := util.GetAggs("projectset", "projectset", doSearchSql)
+	res, count := util.GetAggsWithCount("projectset", "projectset", doSearchSql)
 	//log.Println("buyerSearchSql", doSearchSql)
 	if res == nil {
 		return nil, errors.New(fmt.Sprintf("%s采购单位画像查询异常\n", screen.Ent))
@@ -554,7 +548,7 @@ type AllWinner struct {
 }
 
 // GetWithEntPortraitData 查询采购单位合作企业画像
-func GetWithEntPortraitData(listDataItf interface{}, province string, bidamountObj interface{}) (map[string]interface{}, int, error) {
+func GetWithEntPortraitData(listDataItf interface{}, province string, bidamountObj11, project_count11 interface{}) (map[string]interface{}, int, error) {
 	listData := &[]AllWinner{}
 	if err := InterfaceToStruct(listDataItf, listData); err != nil {
 		return nil, 0, err
@@ -565,10 +559,24 @@ func GetWithEntPortraitData(listDataItf interface{}, province string, bidamountO
 	//根据注册资本聚合
 	var winnerIdList []string
 	allWinnerMap := map[string]AllWinner{}
+
+	capitalAggs := map[int][]string{}     //注册资本
+	areaAggs := map[string][]string{}     //地区
+	establishAggs := map[int][]string{}   //成立日期
+	businessAggs := map[string][]string{} //企业标签
+
+	hasTagTotalBidAmount, hasTagProjectCount := 0.0, 0 //有企业分类中标总金额,其他归为"其他分类"
+	totalBidAmount, totalProjectCount := 0.0, 0
+
 	for _, winner := range *listData {
-		winnerIdList = append(winnerIdList, winner.WinnerId)
-		allWinnerMap[winner.WinnerId] = winner
+		if !(winner.WinnerId == "" || winner.WinnerId == "-") {
+			winnerIdList = append(winnerIdList, winner.WinnerId)
+			allWinnerMap[winner.WinnerId] = winner
+		}
+		totalBidAmount += winner.BidamountCount
+		totalProjectCount += winner.ProjectCount
 	}
+
 	tBegin := time.Now()
 	doSearchSql := fmt.Sprintf(queryTermByIdSql, `"`+strings.Join(winnerIdList, `","`)+`"`)
 	searchNum := elastic.Count("qyxy", "qyxy", fmt.Sprintf(queryMustSql, doSearchSql))
@@ -603,12 +611,7 @@ func GetWithEntPortraitData(listDataItf interface{}, province string, bidamountO
 	if entMsgList == nil || len(entMsgList) == 0 {
 		return nil, 0, errors.New("中标企业查询结果为空")
 	}
-
-	capitalAggs := map[int][]string{}     //注册资本
-	areaAggs := map[string][]string{}     //地区
-	establishAggs := map[int][]string{}   //成立日期
-	businessAggs := map[string][]string{} //企业标签
-
+	var has_TagBusiness []string
 	for _, entMsg := range entMsgList {
 		if len(entMsg) < 2 {
 			continue
@@ -633,8 +636,24 @@ func GetWithEntPortraitData(listDataItf interface{}, province string, bidamountO
 		if businessStr := qutil.ObjToString(entMsg["tag_business"]); businessStr != "" {
 			firstTag := strings.Split(businessStr, ",")[0]
 			businessAggs[firstTag] = append(businessAggs[firstTag], companyId)
+			has_TagBusiness = append(has_TagBusiness, companyId)
 		}
 	}
+	//计算所有有企业标签的企业中标金额总数、及项目数量
+	for _, winner := range *listData {
+		isOther := true
+		for _, _id := range has_TagBusiness {
+			if winner.WinnerId == _id {
+				isOther = false
+				break
+			}
+		}
+		if !isOther {
+			hasTagTotalBidAmount += winner.BidamountCount
+			hasTagProjectCount += winner.ProjectCount
+		}
+	}
+
 	thisProvinceWinnerCount := 0
 	if province != "" {
 		province = excludeAddressReg.ReplaceAllString(province, "") //去掉城市后缀
@@ -715,7 +734,6 @@ func GetWithEntPortraitData(listDataItf interface{}, province string, bidamountO
 	}
 	//核算企业标签
 	if len(businessAggs) > 0 {
-		bidamount := qutil.Float64All(bidamountObj)
 		var businessData []map[string]interface{}
 		for businessName, winnerNames := range businessAggs {
 			mCount, _, pCount, rAvg := mAggsSum(winnerNames, allWinnerMap)
@@ -726,14 +744,29 @@ func GetWithEntPortraitData(listDataItf interface{}, province string, bidamountO
 						if b <= 0 {
 							return nil
 						}
-						return mCount / bidamount
-					}(mCount, bidamount), //采购规模占比
+						return mCount / totalBidAmount
+					}(mCount, totalBidAmount), //采购规模占比
 					"money_count":   mCount, //采购规模
 					"project_count": pCount, //项目数量
 					"rate_avg":      rAvg,   //平均节支率
 				})
 			}
 		}
+		// 根据entid未查到企业信息、项目中entidlist数据不存在、项目中entidlist为[-],统一划分为【其他】类型、以保证占比相加等于1
+		if mCount := totalBidAmount - hasTagTotalBidAmount; mCount > 0 {
+			businessData = append(businessData, map[string]interface{}{
+				"business_name": "其他",
+				"money_prop": func(m, b float64) interface{} {
+					if b <= 0 {
+						return nil
+					}
+					return mCount / totalBidAmount
+				}(mCount, totalBidAmount), //采购规模占比
+				"money_count":   mCount,                                               //采购规模
+				"project_count": qutil.IntAll(totalProjectCount) - hasTagProjectCount, //项目数量
+				"rate_avg":      0,                                                    //平均节支率(因包含未抽取到中标企业,中标企业id为-,无法计算)
+			})
+		}
 		returnData["withBusinessData"] = businessData
 	}
 	go func() {

+ 6 - 6
src/jfw/modules/bigmember/src/entity/portraitWinnerSearch.go

@@ -1,19 +1,19 @@
 package entity
 
 import (
-	"jy/src/jfw/modules/bigmember/src/db"
+	qutil "app.yhyue.com/moapp/jybase/common"
+	elastic "app.yhyue.com/moapp/jybase/es"
+	"app.yhyue.com/moapp/jybase/redis"
 	"encoding/json"
 	"errors"
 	"fmt"
+	"jy/src/jfw/modules/bigmember/src/db"
+	"jy/src/jfw/modules/bigmember/src/util"
 	"log"
-	qutil "app.yhyue.com/moapp/jybase/common"
-	elastic "app.yhyue.com/moapp/jybase/es"
-	"app.yhyue.com/moapp/jybase/redis"
 	"regexp"
 	"sort"
 	"strings"
 	"time"
-	"jy/src/jfw/modules/bigmember/src/util"
 )
 
 const (
@@ -218,7 +218,7 @@ func GetWinnerPortraitSearch(screen *PortraitScreen) (map[string]interface{}, er
 	//开始查询
 	tBegin := time.Now()
 	doSearchSql := fmt.Sprintf(winnerPortraitSearchSql, strings.Join(mustQueryArr, ","), comminTimeRange, comminTimeRange, bidamountTimeRange)
-	res, docCount := util.GetAggs("projectset", "projectset", doSearchSql)
+	res, docCount := util.GetAggsWithCount("projectset", "projectset", doSearchSql)
 	log.Println("winnerPortraitSql", doSearchSql)
 	if res == nil {
 		return nil, errors.New(fmt.Sprintf("%s中标企业画像查询异常\n", screen.Ent))

+ 6 - 6
src/jfw/modules/bigmember/src/entity/portrait_manager.go

@@ -1,10 +1,10 @@
 package entity
 
 import (
-	"jy/src/jfw/modules/bigmember/src/config"
+	"app.yhyue.com/moapp/jybase/redis"
 	"encoding/json"
+	"jy/src/jfw/modules/bigmember/src/config"
 	"log"
-	"app.yhyue.com/moapp/jybase/redis"
 	"sync"
 	"time"
 )
@@ -31,7 +31,7 @@ func init() {
 	DoSearchCheck = NewSearchCheck()
 }
 
-//SearchRepeatCheck 防止重复查询
+// SearchRepeatCheck 防止重复查询
 type SearchRepeatCheck struct {
 	DoSearching map[string]bool //正在查询的
 	Check       sync.RWMutex    //锁
@@ -137,14 +137,14 @@ func Qyhx_search(obj *PortraitSearch) {
 	log.Printf("%s %s 检索完成 耗时%v\n", obj.EntName, obj.DoType, time.Since(start))
 }
 
-//upDataQxhxRedis 客户画像存储
+// upDataQxhxRedis 客户画像存储
 func upDataQxhxRedis(redisKey string, data interface{}) {
 	if data != nil {
 		redis.Put("other", redisKey, data, 60*60*24*config.Config.PortraitCacheDay) //走配置文件缓存时长
 	}
 }
 
-//TryFunc 画像查询,读存缓存
+// TryFunc 画像查询,读存缓存
 func TryFunc(f func(string, string) map[string]interface{}, ent, do string, times int) map[string]interface{} {
 	for i := times; i > 0; i-- {
 		if r := f(ent, do); r != nil {
@@ -155,7 +155,7 @@ func TryFunc(f func(string, string) map[string]interface{}, ent, do string, time
 	return nil
 }
 
-//GetPortraitCache 空筛选读缓存数据
+// GetPortraitCache 空筛选读缓存数据
 func GetPortraitCache(winner, doType string) map[string]interface{} {
 	hxObj := getInitPortraitSearch(winner, doType)
 	if rBytes, err := redis.GetBytes("other", hxObj.RedisKey); err == nil && len(*rBytes) != 0 {

+ 19 - 4
src/jfw/modules/bigmember/src/entity/portrait_screen.go

@@ -135,7 +135,7 @@ func (ps *PortraitScreen) GetProjectSelectItems(isWinner bool) (map[string]inter
 	}
 	doSearchSql := fmt.Sprintf(newBiddingSearchShowSql, entMatch, time.Date(time.Now().Year()-4, 1, 1, 0, 0, 0, 0, time.Local).Unix())
 	//log.Println("GetProjectSelectItems doSearchSql", doSearchSql)
-	res, _ := util.GetAggs(projectIndex, projectType, doSearchSql)
+	res := util.GetAggs(projectIndex, projectType, doSearchSql)
 	if res == nil {
 		return nil, fmt.Errorf("此企业无信息或获取信息列表检索条件出错")
 	}
@@ -309,10 +309,25 @@ func (pwp *PortraitProjectScreen) GetWinnerListIds() (ids []string, err error) {
 	return
 }
 
-// GetWinnerNewProjectCount 企业中标-中标动态数量(近五年)
-func GetWinnerNewProjectCount(entId string) int64 {
+// GetNewBiddingCount 获取标讯数量
+func GetNewBiddingCount(winnerId, buyer string) int64 {
 	defer qutil.Catch()
-	return elastic.Count(biddingIndex, biddingType, fmt.Sprintf(`{"query":{"bool":{"must":[{"term": {"entidlist": "%s"}},{"range":{"publishtime":{"gte":%d}}}]}}}`, entId, time.Now().AddDate(-5, 0, 0).Unix()))
+	if winnerId == "" && buyer == "" {
+		return 0
+	}
+	var mustQuery []string
+
+	ps := new(PortraitScreen)
+	st, et := ps.PareTimeSelect(false)
+	mustQuery = append(mustQuery, fmt.Sprintf(`{"range":{"publishtime":{"gte":%d,"lte":%d}}}`, st.Unix(), et.Unix()))
+
+	if winnerId != "" {
+		mustQuery = append(mustQuery, fmt.Sprintf(`{"term": {"entidlist": "%s"}}`, winnerId))
+	}
+	if buyer != "" {
+		mustQuery = append(mustQuery, fmt.Sprintf(`{"term": {"buyer": "%s"}}`, buyer))
+	}
+	return elastic.Count(biddingIndex, biddingType, fmt.Sprintf(`{"query":{"bool":{"must":[%s]}}}`, strings.Join(mustQuery, ",")))
 }
 
 // GetBuyerListSearch 采购单位中标动态查询

+ 22 - 26
src/jfw/modules/bigmember/src/service/use/use.go

@@ -70,7 +70,7 @@ func (u *Use) SubPageMoveTip() {
 	})
 }
 
-//首次使用加入大会员
+// 首次使用加入大会员
 func (u *Use) Add() {
 	r := func() Result {
 		userid := qu.ObjToString(u.GetSession("userId"))
@@ -201,7 +201,7 @@ func (u *Use) Add() {
 	u.ServeJson(r)
 }
 
-//用户大会员信息
+// 用户大会员信息
 func (u *Use) Info() {
 	r := func() Result {
 		userid := qu.ObjToString(u.GetSession("userId"))
@@ -265,7 +265,7 @@ func (u *Use) Info() {
 	u.ServeJson(r)
 }
 
-//初始化信息
+// 初始化信息
 func (u *Use) Echo() {
 	if !R.CheckReqParam(u.ResponseWriter, u.Request, "entname") {
 		return
@@ -338,7 +338,7 @@ func (u *Use) Echo() {
 				  "size": 0
 				}
 		`
-		res, _ := util.GetAggs(db.DbConf.Elascit_index, db.DbConf.Elascit_type, fmt.Sprintf(query, name))
+		res := util.GetAggs(db.DbConf.Elascit_index, db.DbConf.Elascit_type, fmt.Sprintf(query, name))
 		echo_map["area"] = GetData(res, "group_area")    //地区
 		echo_map["buyer"] = GetData(res, "group_buyer")  //采购单位集合
 		industrys := GetData(res, "group_topscopeclass") //industry行业
@@ -423,7 +423,7 @@ func (u *Use) Echo() {
 		by := `"` + strings.Replace(buyer, `,`, `","`, -1) + `"`
 		industry := StringArrToString(industrys)
 		is := `"` + strings.Replace(industry, `,`, `","`, -1) + `"`
-		res2, _ := util.GetAggs(db.DbConf.Elascit_index, db.DbConf.Elascit_type, fmt.Sprintf(query2, by, is))
+		res2 := util.GetAggs(db.DbConf.Elascit_index, db.DbConf.Elascit_type, fmt.Sprintf(query2, by, is))
 		winners, ids := []string{}, []string{}
 		if winners := GetData(res2, "g_winner"); len(winners) > 0 {
 			winners, ids = gitWinnersIds(winners)
@@ -435,7 +435,7 @@ func (u *Use) Echo() {
 	u.ServeJson(r)
 }
 
-//附件下载
+// 附件下载
 func (u *Use) Attachment() {
 	if !R.CheckReqParam(u.ResponseWriter, u.Request, "infoId") {
 		return
@@ -477,7 +477,7 @@ func (u *Use) Attachment() {
 	u.ServeJson(r)
 }
 
-//邮件附件下载 ios
+// 邮件附件下载 ios
 func (u *Use) Email_attachement() {
 	if !R.CheckReqParam(u.ResponseWriter, u.Request, "email", "downurl") {
 		return
@@ -492,7 +492,7 @@ func (u *Use) Email_attachement() {
 	u.ServeJson(r)
 }
 
-//会员权益
+// 会员权益
 func (u *Use) Equity() {
 	r := func() Result {
 		userid := qu.ObjToString(u.GetSession("userId"))
@@ -573,7 +573,7 @@ func (u *Use) Equity() {
 	u.ServeJson(r)
 }
 
-//大会员权益修改
+// 大会员权益修改
 func (u *Use) Update() {
 	r := func() Result {
 		userid := qu.ObjToString(u.GetSession("userId"))
@@ -665,7 +665,7 @@ type UserInfo struct {
 	VipBefore202209 bool                  `json:"vipBefore202209"` //超级订阅:超前项目权限
 }
 
-//是否使用过首次使用
+// 是否使用过首次使用
 func (u *Use) IsAdd() {
 	r := func() Result {
 		uRefer := u.Refer()
@@ -758,7 +758,6 @@ func (u *Use) IsAdd() {
 	u.ServeJson(r)
 }
 
-//
 func initEntSess(phone string) int {
 	list := db.Mysql.SelectBySql(`select a.id,a.isNew,a.name,b.id as user_id from entniche_info a
 						inner join entniche_user b on (a.status=1 and b.phone=? and b.power=1 and a.id=b.ent_id)
@@ -770,7 +769,6 @@ func initEntSess(phone string) int {
 	return 0
 }
 
-//
 func intStringsJoin(is []int) string {
 	var str = []string{}
 	for _, v := range is {
@@ -779,7 +777,7 @@ func intStringsJoin(is []int) string {
 	return strings.Join(str, ",")
 }
 
-//AI中标预测历史记录
+// AI中标预测历史记录
 func (u *Use) Aiused_history() {
 	r := func() Result {
 		userid := qu.ObjToString(u.GetSession("userId"))
@@ -831,7 +829,7 @@ func (u *Use) Aiused_history() {
 	u.ServeJson(r)
 }
 
-//获取当前登录用户的手机号
+// 获取当前登录用户的手机号
 func Phone(userId string) (string, string) {
 	u, ok := db.Mgo.FindById("user", userId, `{"s_phone":1,"s_m_phone":1}`)
 	if ok && u != nil {
@@ -844,7 +842,7 @@ func Phone(userId string) (string, string) {
 	return "", ""
 }
 
-//获取聚合遍历结果
+// 获取聚合遍历结果
 func GetData(res esV7.Aggregations, field string) []string {
 	arr := []string{}
 	if g, ok := res.Children(field); ok {
@@ -862,7 +860,7 @@ func GetData(res esV7.Aggregations, field string) []string {
 	return arr
 }
 
-//数组转string
+// 数组转string
 func StringArrToString(arr []string) string {
 	s := ""
 	if len(arr) <= 0 {
@@ -878,7 +876,7 @@ func StringArrToString(arr []string) string {
 	return s
 }
 
-//合并
+// 合并
 func Merge(echo_map map[string]interface{}, userid string, session *httpsession.Session) map[string]interface{} {
 	m := map[string]interface{}{}
 	for _, v := range echo_map["area"].([]string) {
@@ -947,12 +945,12 @@ func Merge(echo_map map[string]interface{}, userid string, session *httpsession.
 	return echo_map
 }
 
-//合并数组并去重
+// 合并数组并去重
 func MergeArr(arr1, arr2 []string) []string {
 	return DeleteRepeat(append(arr1, arr2...))
 }
 
-//去重
+// 去重
 func DeleteRepeat(slice []string) []string {
 	m := make(map[string]int)
 	slice_repeat := []string{}
@@ -974,7 +972,7 @@ func DeleteRepeat(slice []string) []string {
  --->   { key:["关1"] },{ key:["关2"] },{ key:["附1"] }
 */
 
-//合并关键词(超级订阅关键词)
+// 合并关键词(超级订阅关键词)
 func MergeKeyWords(kw []map[string]interface{}) []map[string]interface{} {
 	keywords := []map[string]interface{}{}
 	a_key := []map[string]interface{}{}
@@ -1023,7 +1021,7 @@ func MergeKeyWords(kw []map[string]interface{}) []map[string]interface{} {
 	return keywords
 }
 
-//子账号列表
+// 子账号列表
 func SubAccout(userid string) []string {
 	account := []string{}
 	res, ok := db.Mgo.Find("user", map[string]interface{}{
@@ -1041,7 +1039,7 @@ func SubAccout(userid string) []string {
 	return account
 }
 
-//获取AI中标预测次数 (return 剩余次数 已使用次数)
+// 获取AI中标预测次数 (return 剩余次数 已使用次数)
 func GetSurplusCount(userid string) (int, int) {
 	//大会员用户服务详情表
 	data := db.Mysql.SelectBySql(`SELECT a.s_serviceid, a.i_frequency FROM `+jy.BigmemberUserPowerTable+` a WHERE a.s_userid = ? AND a.i_status = 0 AND a.s_serviceid in (6,15)`, userid)
@@ -1059,7 +1057,6 @@ func GetSurplusCount(userid string) (int, int) {
 	return forecastCount, bidfileCount
 }
 
-//
 func addOldent(userid, entname string) {
 	if db.Mgo.Count("jylab_followent", map[string]interface{}{"s_userid": userid, "s_entname": entname}) > 0 {
 		return
@@ -1075,7 +1072,6 @@ func addOldent(userid, entname string) {
 	db.Mgo.Save("jylab_followent", data)
 }
 
-//
 func Combo(userid string, member_status int) (combo_name string) {
 	data := db.Mysql.SelectBySql(`SELECT filter FROM dataexport_order WHERE filter LIKE '%"comboId"%'
 			AND user_id =? AND filter  NOT LIKE  '%"comboId":0%'
@@ -1110,7 +1106,7 @@ func Combo(userid string, member_status int) (combo_name string) {
 	return
 }
 
-//根据企业名称获取企业id
+// 根据企业名称获取企业id
 func gitWinnersIds(winners []string) (names []string, ids []string) {
 	names, ids = []string{}, []string{}
 	queryName := `"` + strings.Join(winners, `","`) + `"`
@@ -1125,7 +1121,7 @@ func gitWinnersIds(winners []string) (names []string, ids []string) {
 	return
 }
 
-//合并大会员关键词
+// 合并大会员关键词
 func MergeMemberKw(old, new []map[string]interface{}) []map[string]interface{} {
 	//判断是否有相同的分类名称
 	sameBl, index := false, -1

+ 10 - 2
src/jfw/modules/bigmember/src/util/aggsSearchUtil.go

@@ -5,8 +5,16 @@ import (
 	esV7 "github.com/olivere/elastic/v7"
 )
 
-//GetAggs 聚合查询
-func GetAggs(index, itype, query string) (esV7.Aggregations, int64) {
+// GetAggs 聚合查询
+func GetAggs(index, itype, query string) esV7.Aggregations {
+	v1, _, _ := elastic.GetAggs(index, itype, query)
+	return v1
+}
+
+func GetAggsWithCount(index, itype, query string) (esV7.Aggregations, int64) {
+	if len(query) > 0 {
+		query = `{"track_total_hits": true,` + query[1:]
+	}
 	v1, v2, _ := elastic.GetAggs(index, itype, query)
 	return v1, v2
 }

+ 1 - 1
src/web/staticres/js/superSearch.js

@@ -320,7 +320,7 @@ function appendDatas(datas,flag,isNew,onlyUpdateTable){
                      + '<div class="list-title-flex  ellipsis"><em class="visited-hd">'+index+'.</em>'
                      + '<a class="visited-hd" onclick="noIn(this)" dataid="'+datas[i]._id+'" dataindustry="'+datas[i].industry+'" target="_blank"> '+title+ '</a></div>'
                      if(typeof(datas[i].publishtime) != "undefined" && datas[i].publishtime != null && datas[i].publishtime != ""){
-                      var diff = utils.dateFromNow(Number(datas[i].publishtime+"000"));
+  					 var diff =new Date(parseInt(datas[i].publishtime*1000)).pattern('yyyy-MM-dd');
                       if(diff != null){
                         listHtml += '<span class="com-time">'+diff+'</span>';
                       }

+ 4 - 3
src/web/staticres/public-pc/js/article-content.js

@@ -1127,7 +1127,7 @@ $(function(){
   $(".otherinfo .com-time").each(function(){
     var thisValue = $(this).attr("data-value");
     if(thisValue != "" && thisValue != "0" && thisValue != 0){
-      var diff = timeDiff(new Date(Number(thisValue+"000")));
+      var diff = new Date(parseInt(thisValue*1000)).pattern('yyyy-MM-dd');
       if(diff != null){
         $(this).text(diff);
       }
@@ -1841,8 +1841,8 @@ if (amount!=""){
   $(".com-statusbar").append('<span class="com-amount"><a>'+conversionMoeny(amount)+'</a></span>');
 }
 //
-if(publishtime != ""){
-  var diff = utils.dateFromNow(Number(publishtime+"000"));
+if(publishtime != "" && typeof(publishtime) != "undefined"){
+  var diff =goTemplateData.params.obj.publishtimeShorDate
   if(diff != null){
     $(".com-statusbar").append('<span class="com-time"><i class="glyphicon bofangjilu"></i>'+diff+'</span>');
   }
@@ -2591,3 +2591,4 @@ function stripscript(s){
 	}
 	return rs;
 }
+

+ 3 - 2
src/web/staticres/tags/js/no-login-detail.js

@@ -766,7 +766,7 @@ $(function(){
   $(".otherinfo .com-time").each(function(){
     var thisValue = $(this).attr("data-value");
     if(thisValue != "" && thisValue != "0" && thisValue != 0){
-      var diff = timeDiff(new Date(Number(thisValue+"000")));
+      var diff = new Date(parseInt(thisValue*1000)).pattern('yyyy-MM-dd');
       if(diff != null){
         $(this).text(diff);
       }
@@ -1467,7 +1467,7 @@ if (amount && amount!="" && amount !== '略'){
 }
 //
 if(publishtime != ""){
-  var diff = utils.dateFromNow(Number(publishtime+"000"));
+  var diff =goTemplateData.params.obj.publishtimeShorDate
   if(diff != null){
     $(".com-statusbar").append('<span class="com-time"><i class="glyphicon bofangjilu"></i>'+diff+'</span>');
   }
@@ -2202,4 +2202,5 @@ $(function() {
       vm.showSuccess = true
     },"", info.infoid)
   })
+
 })

+ 1 - 1
src/web/templates/pc/tags/template/aside-news-cards.html

@@ -9,7 +9,7 @@
                 {{range $k, $v := .T.newBidInfoList}}
                     <a class="tags-card-item" href="/nologin/content/{{$v._id}}.html" title="{{$v.title}}">
                         <div class="tags-card-item-title ellipsis">{{$v.title}}</div>
-                        <div class="tags-card-item-time"><span data-format-time={{$v.publishtime}}></span></div>
+                        <div class="tags-card-item-time">{{$v.date}}</div>
                     </a>
                 {{end}}
             </div>

+ 1 - 1
src/web/templates/pc/tags/template/search-list.html

@@ -33,7 +33,7 @@
                                     {{if $v.industry}}<span class="j-tag list-item-tags">{{$v.industry}}</span>{{end}}
                                     {{if $v.subtype}}<span class="j-tag list-item-tags">{{$v.subtype}}</span>{{end}}
                                     {{if $v.bidamount}}<span class="j-tag list-item-tags" data-format-money={{$v.bidamount}}>{{$v.bidamount}}</span>{{end}}
-                                    {{if $v.publishtime}}<span data-format-time={{$v.publishtime}} class="list-item-times">{{$v.publishtime}}</span>{{end}}
+                                    {{if $v.date}}<span  class="list-item-times">{{$v.date}}</span>{{end}}
                                 </div>
                             </li>
                         {{end}}

+ 2 - 2
src/web/templates/weixin/wxinfocontent_rec.html

@@ -1006,8 +1006,8 @@ body .loading_ p span {
 		<div class="time_label">
 			<script>
 				var l_publishtime = {{.T.obj.l_publishtime}};
-					if(l_publishtime != ""){
-						var tdf = utils.dateFromNow(Number(l_publishtime+"000"))
+					if(l_publishtime != "" && l_publishtime!=null){
+             var tdf = new Date(parseInt(l_publishtime*1000)).pattern('yyyy-MM-dd');
 						if(tdf != null){
 							document.write("<div class='timebefore_vip'>"+tdf+"</div>");
 						}