Explorar o código

Merge branch 'feature/v4.8.70' into dev/v4.8.70_tsz

tsz hai 1 ano
pai
achega
2d037f5c44
Modificáronse 100 ficheiros con 2601 adicións e 1164 borrados
  1. 2 2
      src/go.mod
  2. 4 4
      src/go.sum
  3. 28 0
      src/jfw/filter/cookie.go
  4. 1 0
      src/jfw/filter/filter.go
  5. 115 13
      src/jfw/front/classificationTag.go
  6. 12 0
      src/jfw/front/entsearch.go
  7. 43 25
      src/jfw/front/front.go
  8. 51 0
      src/jfw/front/frontRouter.go
  9. 47 12
      src/jfw/front/login.go
  10. 20 0
      src/jfw/front/org_structure.go
  11. 20 8
      src/jfw/front/pcIndex.go
  12. 6 0
      src/jfw/front/supsearch.go
  13. 10 11
      src/jfw/front/websocket.go
  14. 3 3
      src/jfw/front/ws_dataExport.go
  15. 28 0
      src/jfw/modules/app/src/app/filter/cookie.go
  16. 1 0
      src/jfw/modules/app/src/app/filter/filter.go
  17. 52 0
      src/jfw/modules/app/src/app/front/bigMember.go
  18. 9 0
      src/jfw/modules/app/src/app/front/front.go
  19. 154 30
      src/jfw/modules/app/src/app/front/login.go
  20. 52 3
      src/jfw/modules/app/src/app/front/shorturl.go
  21. 3 3
      src/jfw/modules/app/src/app/front/ws_dataExport.go
  22. 1 1
      src/jfw/modules/app/src/go.mod
  23. 2 2
      src/jfw/modules/app/src/go.sum
  24. 16 0
      src/jfw/modules/app/src/web/staticres/jyapp/big-member/css/ent_portrait.css
  25. 16 0
      src/jfw/modules/app/src/web/staticres/jyapp/big-member/css/unit_portrayal.css
  26. 65 2
      src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/ent_portrait.js
  27. 51 6
      src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/unit_portrayal.js
  28. 7 0
      src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/utils.js
  29. 0 27
      src/jfw/modules/app/src/web/staticres/jyapp/js/historypush.js
  30. 44 10
      src/jfw/modules/app/src/web/staticres/jyapp/me/js/mail_bind.js
  31. 10 1
      src/jfw/modules/app/src/web/staticres/jyapp/me/js/phone_bind.js
  32. 14 0
      src/jfw/modules/app/src/web/staticres/jyapp/tags/js/index.js
  33. 27 2
      src/jfw/modules/app/src/web/staticres/jyapp/wxtsguide/main.js
  34. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_client_buyer_project_news.html
  35. 12 2
      src/jfw/modules/app/src/web/templates/big-member/page_client_portrayal.html
  36. 29 8
      src/jfw/modules/app/src/web/templates/big-member/page_ent_portrait.html
  37. 99 0
      src/jfw/modules/app/src/web/templates/big-member/page_free_buyer_loading.html
  38. 10 1
      src/jfw/modules/app/src/web/templates/big-member/page_free_buyer_project_news.html
  39. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_free_ent_project_news.html
  40. 25 7
      src/jfw/modules/app/src/web/templates/big-member/page_unit_portrayal.html
  41. 55 17
      src/jfw/modules/app/src/web/templates/dataExport/dataExport.html
  42. 1 1
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_buyerEdit.html
  43. 1 1
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_buyerInput.html
  44. 1 1
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_winnerEdit.html
  45. 1 1
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_winnerInput.html
  46. 0 51
      src/jfw/modules/app/src/web/templates/followent/list.html
  47. 97 1
      src/jfw/modules/app/src/web/templates/frontRouter/fileRecord/sess/index.html
  48. 11 4
      src/jfw/modules/app/src/web/templates/frontRouter/userMerge/free/confirm.html
  49. 10 10
      src/jfw/modules/app/src/web/templates/me/account.html
  50. 1 0
      src/jfw/modules/app/src/web/templates/tags/class.html
  51. 1 0
      src/jfw/modules/app/src/web/templates/tags/details.html
  52. 1 0
      src/jfw/modules/app/src/web/templates/tags/strategy.html
  53. 1 1
      src/jfw/modules/app/src/web/templates/tags/template/tag-area-nav.html
  54. 1 1
      src/jfw/modules/app/src/web/templates/tags/template/tag-breadcrumb-navigation.html
  55. 13 0
      src/jfw/modules/app/src/web/templates/tags/template/tag-footer-concat.html
  56. 1 1
      src/jfw/modules/app/src/web/templates/tags/template/tag-footer.html
  57. 1 0
      src/jfw/modules/app/src/web/templates/tags/template/tag-header.html
  58. 0 44
      src/jfw/modules/app/src/web/templates/weixin/search/mainSearch.html
  59. 254 108
      src/jfw/modules/app/src/web/templates/weixin/wxinfocontent.html
  60. 5 1
      src/jfw/modules/bigmember/src/config.json
  61. 9 5
      src/jfw/modules/bigmember/src/config/config.go
  62. 2 2
      src/jfw/modules/bigmember/src/entity/followProject.go
  63. 2 2
      src/jfw/modules/bigmember/src/entity/portrait.go
  64. 77 21
      src/jfw/modules/bigmember/src/entity/portrait_screen.go
  65. 4 4
      src/jfw/modules/bigmember/src/go.mod
  66. 8 8
      src/jfw/modules/bigmember/src/go.sum
  67. 13 2
      src/jfw/modules/bigmember/src/service/follow/enterprise.go
  68. 17 3
      src/jfw/modules/bigmember/src/service/follow/project.go
  69. 21 24
      src/jfw/modules/bigmember/src/service/portrait/memberPortraitAction.go
  70. 18 30
      src/jfw/modules/bigmember/src/service/portrait/subvipPortraitAction.go
  71. 2 92
      src/jfw/modules/followent/src/web/templates/weixin/list.html
  72. 4 4
      src/jfw/modules/publicapply/src/bidcollection/entity/entity.go
  73. 1 0
      src/jfw/modules/publicapply/src/channel/entity/entity.go
  74. 10 0
      src/jfw/modules/publicapply/src/channel/init.go
  75. 8 0
      src/jfw/modules/publicapply/src/channel/service/action.go
  76. 59 0
      src/jfw/modules/publicapply/src/channel/service/service.go
  77. 2 1
      src/jfw/modules/publicapply/src/config.json
  78. 1 0
      src/jfw/modules/publicapply/src/config/config.go
  79. 29 0
      src/jfw/modules/publicapply/src/filter/cookie.go
  80. 1 0
      src/jfw/modules/publicapply/src/filter/filter.go
  81. 1 1
      src/jfw/modules/publicapply/src/filter/sessionfilter.go
  82. 62 60
      src/jfw/modules/publicapply/src/go.mod
  83. 140 127
      src/jfw/modules/publicapply/src/go.sum
  84. 4 0
      src/jfw/modules/publicapply/src/identity/service/action.go
  85. 106 0
      src/jfw/modules/publicapply/src/identity/service/service.go
  86. 1 0
      src/jfw/modules/publicapply/src/main.go
  87. 62 19
      src/jfw/modules/publicapply/src/oneclick/entity/entity.go
  88. 1 0
      src/jfw/modules/publicapply/src/oneclick/service/service.go
  89. 25 1
      src/jfw/modules/publicapply/src/subscribePush/entity/keyWords.go
  90. 30 1
      src/jfw/modules/publicapply/src/transfer/transfer.go
  91. 216 216
      src/jfw/modules/publicapply/src/util/util.go
  92. 7 7
      src/jfw/modules/subscribepay/src/baseApi.json
  93. 11 10
      src/jfw/modules/subscribepay/src/config.json
  94. 1 1
      src/jfw/modules/subscribepay/src/config.yaml
  95. 4 3
      src/jfw/modules/subscribepay/src/config/config.go
  96. 1 1
      src/jfw/modules/subscribepay/src/dataexport.json
  97. 69 71
      src/jfw/modules/subscribepay/src/entity/basePack.go
  98. 23 18
      src/jfw/modules/subscribepay/src/entity/commonApi.go
  99. 1 1
      src/jfw/modules/subscribepay/src/entity/dataExportPackStruct.go
  100. 1 1
      src/jfw/modules/subscribepay/src/entity/dataexport.go

+ 2 - 2
src/go.mod

@@ -4,9 +4,9 @@ go 1.19
 
 require (
 	app.yhyue.com/moapp/jyMarketing v0.0.2-0.20230308011651-df591d32df88
-	app.yhyue.com/moapp/jybase v0.0.0-20230901064756-2fc66b18db40
+	app.yhyue.com/moapp/jybase v0.0.0-20231026082242-8eb41c7bdda6
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v1.0.3-0.20231031031244-d8df2b391b72
+	app.yhyue.com/moapp/jypkg v1.0.4-0.20231109032304-2da6db20132a
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.14
 	github.com/ClickHouse/clickhouse-go v1.5.4
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67

+ 4 - 4
src/go.sum

@@ -5,12 +5,12 @@ app.yhyue.com/moapp/jyMarketing v0.0.2-0.20230308011651-df591d32df88/go.mod h1:J
 app.yhyue.com/moapp/jyPoints v1.1.1/go.mod h1:SvP8p5L3jGrejHiH2LXfgCg/NPlFiKBC5Yd0gsI12FU=
 app.yhyue.com/moapp/jybase v0.0.0-20220427020729-974c1a148186/go.mod h1:qNRA0sHuYqcLoYoP8irpaWnW9YsXixe6obBIkwaXpD0=
 app.yhyue.com/moapp/jybase v0.0.0-20230117032034-ad7c00ffe11a/go.mod h1:zB47XTeJvpcbtBRYgkQuxOICWNexiZfbUO+7aUf6mNs=
-app.yhyue.com/moapp/jybase v0.0.0-20230901064756-2fc66b18db40 h1:/FcBvpf/KW8g6GBfTkypVW1pGbNs+iNhDrUGUi+KNjc=
-app.yhyue.com/moapp/jybase v0.0.0-20230901064756-2fc66b18db40/go.mod h1:Hv9U/7oHRucqH315Tr1+d03NCvS9mOKPfk8pwwlOIwQ=
+app.yhyue.com/moapp/jybase v0.0.0-20231026082242-8eb41c7bdda6 h1:uyaBp5Iuc/Il4+O2n92CyU9LPvHetFzQVC8iS9iLFOc=
+app.yhyue.com/moapp/jybase v0.0.0-20231026082242-8eb41c7bdda6/go.mod h1:Hv9U/7oHRucqH315Tr1+d03NCvS9mOKPfk8pwwlOIwQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
-app.yhyue.com/moapp/jypkg v1.0.3-0.20231031031244-d8df2b391b72 h1:irUuaH36GK/6tz4UWDjxSseKX8GJnfy5J6F+e9fFAZY=
-app.yhyue.com/moapp/jypkg v1.0.3-0.20231031031244-d8df2b391b72/go.mod h1:76Kz6+MuxcRJRyFad9W8R4AByiQlVGzuGFzklY+2m38=
+app.yhyue.com/moapp/jypkg v1.0.4-0.20231109032304-2da6db20132a h1:mUqyzXj24uoi9gE9P+EVoiMi/deUHH2+0jbTnwLhOZ0=
+app.yhyue.com/moapp/jypkg v1.0.4-0.20231109032304-2da6db20132a/go.mod h1:76Kz6+MuxcRJRyFad9W8R4AByiQlVGzuGFzklY+2m38=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae h1:6rDDaz6yxvE8viTSzEBwKYOFWq14TMfuBivSazUZMz4=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae/go.mod h1:b0zZHev3gmJao1Fo+2Z2KPVjsuLOJVvVxf+kCnu9WkA=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e h1:h+VEI3o1qC0jeCzkFGTrLI4f27cfa/W/y+0sXokWMgE=

+ 28 - 0
src/jfw/filter/cookie.go

@@ -0,0 +1,28 @@
+package filter
+
+import (
+	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
+	"log"
+	"net/http"
+	"strings"
+)
+
+// CookieInfo 信息
+type CookieInfo struct {
+	W http.ResponseWriter
+	R *http.Request
+}
+
+// Do 继承过滤器方法
+func (ci *CookieInfo) Do() {
+	log.Println(ci.R.Referer(), "----------------------", ci.R.RequestURI)
+	if crr := ci.R.Referer(); crr != "" {
+		if strings.Contains(crr, "cooperate") {
+			match := strings.Split(crr, "cooperate/")
+			if len(match) > 1 {
+				jy.SetCookieValue(ci.W, jy.ChannelCookieName, match[1], 172800) //两天
+			}
+			log.Println("---------------pc-------------", match)
+		}
+	}
+}

+ 1 - 0
src/jfw/filter/filter.go

@@ -55,6 +55,7 @@ func (f *Filter) Do(w http.ResponseWriter, r *http.Request) bool {
 		identity.SwitchToBest(util.Int64All(getSession["base_user_id"]), session, Middleground, &public.MQFW, false)
 	}
 	(&AnonymousAuth{w, r, session, getSession, make(map[string]interface{})}).Do()
+	(&CookieInfo{w, r}).Do()
 
 	if !(&logFilter{w, r, session, getSession, make(map[string]interface{})}).Do() {
 		return false

+ 115 - 13
src/jfw/front/classificationTag.go

@@ -3,14 +3,17 @@ package front
 import (
 	qu "app.yhyue.com/moapp/jybase/common"
 	"app.yhyue.com/moapp/jybase/encrypt"
+	elastic "app.yhyue.com/moapp/jybase/es"
 	"app.yhyue.com/moapp/jybase/redis"
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/bidsearch"
 	"app.yhyue.com/moapp/jypkg/public"
 	"encoding/json"
 	"fmt"
+	"github.com/gogf/gf/v2/util/gconv"
 	"jy/src/jfw/config"
 	"log"
 	"strconv"
+	"strings"
 	"sync"
 	"time"
 
@@ -60,17 +63,16 @@ func GetWinnerInfo() (data []*BuyerList) {
 		return cache
 	}
 	// 没取到缓存查数据
-	rs := getEntBaseInfo(IdentityTypeWinner, config.HotWinnerConfig.Limit)
+	rs := GetHotWinnerBuyer(IdentityTypeWinner, config.HotWinnerConfig.Limit)
 	//关联中标企业
-	if rs == nil || len(*rs) == 0 {
+	if rs == nil || len(rs) == 0 {
 		return
 	}
 
-	for _, v := range *rs {
+	for _, v := range rs {
 		var vs BuyerList
-		id := encrypt.EncodeArticleId2ByCheck(qu.InterfaceToStr(v["id"]))
 		vs.Name = qu.InterfaceToStr(v["name"])
-		vs.Url = fmt.Sprintf("/swordfish/page_big_pc/ent_portrait/%s", id)
+		vs.Url = qu.InterfaceToStr(v["url"])
 		data = append(data, &vs)
 	}
 	// 存缓存
@@ -114,6 +116,105 @@ func getEntBaseInfo(identityType, limit int) *[]map[string]interface{} {
 
 }
 
+func GetHotWinnerBuyer(identityType, limit int) []map[string]interface{} {
+	isWinner := identityType == 1
+	queryTotal := gconv.Int(gconv.Float64(limit) * 1.5)
+	var querySql string
+	if isWinner {
+		querySql = fmt.Sprintf(`{"query": {"bool": {"must": [{"exists": {"field": "s_winner"}},{"exists": {"field": "entidlist"}}],"must_not":[{"term":{"entidlist":"-"}}]}},"_source":["buyer","s_winner","entidlist"],"sort":[{"lasttime": "desc"}],"size": %d}`, queryTotal)
+	} else {
+		querySql = fmt.Sprintf(`{"query": {"bool": {"must": [{"exists": {"field": "buyer"}}]}},"_source":["buyer","s_winner","entidlist"],"sort":[{"lasttime": "desc"}],"size": %d}`, queryTotal)
+	}
+	getData := elastic.GetNoLimit("projectset", "projectset", querySql)
+	var finalList []map[string]interface{}
+	if getData != nil && len(*getData) > 0 {
+		queryMap := make(map[string]bool)
+		if isWinner { //采购关联企业 校验正确性
+			var queryArr []string
+			for _, v := range *getData {
+				if len(queryArr) < queryTotal {
+					for _, name := range gconv.Strings(v["entidlist"]) {
+						if name == "" || name == "-" {
+							continue
+						}
+						if queryMap[name] {
+							continue
+						}
+						queryArr = append(queryArr, name)
+						queryMap[name] = true
+
+						if len(queryArr) == queryTotal {
+							break
+						}
+					}
+				}
+			}
+			finalList = getWinnerSeoIdByName(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
+			}
+			finalList = getBuyerSeoIdByName(queryArr...)
+		}
+	}
+	if len(finalList) > limit {
+		finalList = finalList[:limit]
+	}
+	return finalList
+}
+
+// 根据企业名称获取seoid
+// query: company_name 根据名字匹配
+// query: _id 根据entid匹配
+func getWinnerSeoIdByName(winners ...string) (res []map[string]interface{}) {
+	if len(winners) == 0 {
+		return
+	}
+	winnerRes := elastic.Get("qyxy", "qyxy", fmt.Sprintf(`{"query":{"terms":{"_id":["%s"]}},"_source":[%s],"size":%d}`, strings.Join(winners, `","`), `"nseo_id","company_name"`, len(winners)))
+	if winnerRes != nil && len(*winnerRes) > 0 {
+		for _, m := range *winnerRes {
+			name := gconv.String(m["company_name"])
+			sid := gconv.String(m["nseo_id"])
+			if name != "" && sid != "" {
+				res = append(res, map[string]interface{}{
+					"name":  name,
+					"seoId": sid,
+					"url":   fmt.Sprintf("/qy/%s.html", sid),
+				})
+			}
+		}
+	}
+	return
+}
+
+// 根据采购单位名字获取seoid
+func getBuyerSeoIdByName(buyer ...string) (res []map[string]interface{}) {
+	if len(buyer) == 0 {
+		return
+	}
+	buyerRes := elastic.GetNoLimit("buyer", "buyer", fmt.Sprintf(`{"query":{"terms":{"buyer_name":["%s"]}},"_source":[%s],"size":%d}`, strings.Join(buyer, `","`), `"seo_id","name"`, len(buyer)))
+	if buyerRes != nil && len(*buyerRes) > 0 {
+		for _, m := range *buyerRes {
+			name := gconv.String(m["name"])
+			sid := gconv.String(m["seo_id"])
+			if name != "" && sid != "" {
+				res = append(res, map[string]interface{}{
+					"name":  name,
+					"seoId": sid,
+					"url":   fmt.Sprintf("/dw/%s.html", sid),
+				})
+			}
+		}
+	}
+	return
+}
+
 // ContentRecommendation 实用内容推荐
 func ContentRecommendation() []KeyType {
 	if bytes, err := redis.GetBytes(RedisNameNew, "contentRecommendation"); err == nil && bytes != nil {
@@ -251,26 +352,27 @@ type BuyerList struct {
 }
 
 // 热门采购单位
-func HotBuyerList(entIsNew bool) []*BuyerList {
+func HotBuyerList() []*BuyerList {
 	// 取缓存
 	cache, err := GetHotCache(config.HotBuyerConfig.CacheKey)
 	if err == nil && cache != nil && len(cache) > 0 {
 		return cache
 	}
 	// 查数据
-	data := getEntBaseInfo(IdentityTypeBuyer, config.HotBuyerConfig.Limit)
-	if data == nil || len(*data) == 0 {
+	//data := getEntBaseInfo(IdentityTypeBuyer, config.HotBuyerConfig.Limit)
+	data := GetHotWinnerBuyer(IdentityTypeBuyer, config.HotBuyerConfig.Limit)
+	if data == nil || len(data) == 0 {
 		return nil
 	}
 	var buyerList []*BuyerList
-	for _, b := range *data {
+	for _, b := range data {
 		name := qu.ObjToString(b["name"])
-		buyerId := qu.ObjToString(b["name_id"])
-		if name != "" && buyerId != "" {
-			idEncode := encrypt.EncodeArticleId2ByCheck(buyerId)
+		url := qu.InterfaceToStr(b["url"])
+		if name != "" && url != "" {
+			//idEncode := encrypt.EncodeArticleId2ByCheck(buyerId)
 			buyerList = append(buyerList, &BuyerList{
 				Name: name,
-				Url:  qu.If(entIsNew, fmt.Sprintf("/entpc/unit_portrayal_id/%s", idEncode), fmt.Sprintf("/swordfish/page_big_pc/unit_portrayal_id/%s", idEncode)).(string),
+				Url:  url,
 			})
 		}
 	}

+ 12 - 0
src/jfw/front/entsearch.go

@@ -38,6 +38,7 @@ func (e *Entsearch) EntSearchIndex() error {
 		shareid = "10"
 	}
 	e.T["isLogin"] = 0
+	cooperateCode := ""
 	if userId, _ := e.GetSession("userId").(string); userId != "" {
 		userInfo := jy.GetVipState(e.Session(), *config.Middleground, userId)
 		e.T["isVip"] = userInfo.VipState > 0
@@ -46,7 +47,12 @@ func (e *Entsearch) EntSearchIndex() error {
 		e.T["isEntnicheNew"] = userInfo.IsNewEnt
 		e.T["isEntService"] = userInfo.EntService
 		e.T["isLogin"] = 1
+	} else { //P414
+		if cc, err := e.GetCookie(jy.ChannelCookieName); err == nil {
+			cooperateCode = cc.Value
+		}
 	}
+	e.T["cooperateCode"] = cooperateCode
 	e.T["shareid"] = se.EncodeString(shareid)
 	e.T["searchvalue"] = e.GetString("searchvalue")
 	e.T["logid"] = config.Seoconfig["jyzbqyss"].(string)
@@ -60,6 +66,7 @@ func (e *Entsearch) PushSearchIndex() error {
 	}
 	getsession := e.Session().GetMultiple()
 	e.T["isLogin"] = 0
+	cooperateCode := ""
 	if userId, _ := getsession["userId"].(string); userId != "" {
 		userInfo := jy.GetVipState(e.Session(), *config.Middleground, userId)
 		e.T["isVip"] = userInfo.VipState > 0
@@ -68,7 +75,12 @@ func (e *Entsearch) PushSearchIndex() error {
 		e.T["isEntnicheNew"] = userInfo.IsNewEnt
 		e.T["isEntService"] = userInfo.EntService
 		e.T["isLogin"] = 1
+	} else { //P414
+		if cc, err := e.GetCookie(jy.ChannelCookieName); err == nil {
+			cooperateCode = cc.Value
+		}
 	}
+	e.T["cooperateCode"] = cooperateCode
 	e.T["login"] = getsession["user"]
 	e.T["shareid"] = se.EncodeString(shareid)
 	e.T["searchvalue"] = e.GetString("searchvalue")

+ 43 - 25
src/jfw/front/front.go

@@ -25,11 +25,10 @@ import (
 	"app.yhyue.com/moapp/jypkg/public"
 
 	elastic "app.yhyue.com/moapp/jybase/es"
-	"app.yhyue.com/moapp/jybase/redis"
-
 	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
 	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
 	mgdb "app.yhyue.com/moapp/jybase/mongodb"
+	"app.yhyue.com/moapp/jybase/redis"
 	. "app.yhyue.com/moapp/jypkg/identity"
 	"github.com/SKatiyar/qr"
 	"go.mongodb.org/mongo-driver/bson"
@@ -882,35 +881,39 @@ func (m *Front) Sess(ostr string) error {
 	if len(str) == 4 {
 		userFlag := str[0]
 		ok := false
-		var identity *pb.Identity
-		if str[1] == "userId" || str[1] == "entUserId" || str[1] == "positionId" {
-			if str[1] == "userId" {
-				identity = config.Middleground.UserCenter.IdentityByUserId(util.Int64All(userFlag))
-			} else if str[1] == "entUserId" {
-				identity = config.Middleground.UserCenter.IdentityByEntUserId(util.Int64All(userFlag))
-			} else if str[1] == "positionId" {
-				identity = config.Middleground.UserCenter.IdentityByPositionId(util.Int64All(userFlag))
-			}
-			if identity != nil {
-				ok, _, _ = FindUserAndCreateSessByBaseUserId(identity.UserId, m.Session(), false, false)
-			}
+		if str[2] == "identityKeep" && m.GetSession("positionId") != nil {
+			ok = true
 		} else {
-			hasIdentity := false
-			if str[1] == "_id" {
-				ok, _, _ = FindUserAndCreateSessById(mgdb.StringTOBsonId(userFlag), m.Session(), false, !hasIdentity)
+			var identity *pb.Identity
+			if str[1] == "userId" || str[1] == "entUserId" || str[1] == "positionId" {
+				if str[1] == "userId" {
+					identity = config.Middleground.UserCenter.IdentityByUserId(util.Int64All(userFlag))
+				} else if str[1] == "entUserId" {
+					identity = config.Middleground.UserCenter.IdentityByEntUserId(util.Int64All(userFlag))
+				} else if str[1] == "positionId" {
+					identity = config.Middleground.UserCenter.IdentityByPositionId(util.Int64All(userFlag))
+				}
+				if identity != nil {
+					ok, _, _ = FindUserAndCreateSessByBaseUserId(identity.UserId, m.Session(), false, false)
+				}
 			} else {
-				if m.GetSession("positionId") != nil {
-					hasIdentity = true
+				hasIdentity := false
+				if str[1] == "_id" {
+					ok, _, _ = FindUserAndCreateSessById(mgdb.StringTOBsonId(userFlag), m.Session(), false, !hasIdentity)
+				} else {
+					if m.GetSession("positionId") != nil {
+						hasIdentity = true
+					}
+					ok, _, _ = FindUserAndCreateSess(userFlag, m.Session(), "wx", false, !hasIdentity)
+				}
+				if !hasIdentity {
+					identity = config.Middleground.UserCenter.IdentityByUserId(util.Int64All(m.GetSession("base_user_id")))
 				}
-				ok, _, _ = FindUserAndCreateSess(userFlag, m.Session(), "wx", false, !hasIdentity)
 			}
-			if !hasIdentity {
-				identity = config.Middleground.UserCenter.IdentityByUserId(util.Int64All(m.GetSession("base_user_id")))
+			if identity != nil {
+				ok = ok && NewIdentityInfo(identity).Switch(m.Session(), &public.MQFW)
 			}
 		}
-		if identity != nil {
-			ok = ok && NewIdentityInfo(identity).Switch(m.Session(), &public.MQFW)
-		}
 		if ok {
 			actionurl := ""
 			if str[3] == "" {
@@ -973,6 +976,12 @@ func (m *Front) Sess(ostr string) error {
 						}
 					}
 				}
+
+				//工作桌面内嵌 塞斯 PC
+				if !mobileReg.MatchString(m.UserAgent()) && !strings.Contains(actionurl, "page_workDesktop") && strings.Contains(actionurl, "/succbi/crm_system/") {
+					return m.Redirect(fmt.Sprintf("%s%s%s", strings.ReplaceAll(config.Sysconfig["workDesktopUrl"].(string), "aside=0&", ""), config.Sysconfig["webdomain"].(string), url.QueryEscape(actionurl)))
+				}
+
 				m.Redirect(actionurl)
 			} else {
 				log.Println("解析结果:", str, ",actionurl为空")
@@ -1138,6 +1147,15 @@ func (f *Front) TSGuide() error {
 					"i_ts_guide":        2,
 					"o_jy.i_newfree":    1,
 				}
+				nsqPath, _ := config.Sysconfig["nsq"].(string)
+				nsq_topic, _ := config.Sysconfig["nsq_topic"].(string)
+				jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, "task", util.ObjToString(f.GetSession("mgoUserId")), jy.Jywx_node1, map[string]interface{}{
+					"code":       1015, //首次订阅
+					"types":      "subscribeKeyWords",
+					"num":        50,
+					"baseUserId": f.GetSession("base_user_id"),
+					"positionId": f.GetSession("positionId"),
+				})
 				result["flag"] = jyutil.Compatible.Update(userid, bson.M{"$set": saveData})
 			}
 		} else if reqType == "over" {

+ 51 - 0
src/jfw/front/frontRouter.go

@@ -1,6 +1,10 @@
 package front
 
 import (
+	"app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/encrypt"
+	elastic "app.yhyue.com/moapp/jybase/es"
+	"app.yhyue.com/moapp/jybase/redis"
 	"app.yhyue.com/moapp/jypkg/public"
 	"fmt"
 	"jy/src/jfw/config"
@@ -217,9 +221,56 @@ func (this *CommonRouter) doPcBigPage(pageSign, types string) error {
 	if !strings.Contains(pageSign, "unit_portrayal") && !strings.Contains(pageSign, "ent_portrait") && !strings.Contains(pageSign, "ent_ser_portrait") && userid == "" {
 		return this.Redirect("/notin/page")
 	}
+	if userid == "" {
+		if strings.Contains(pageSign, "ent_ser_portrait") || strings.Contains(pageSign, "ent_portrait") {
+			urlArr := strings.Split(pageSign, "_portrait/")
+			entId := encrypt.DecodeArticleId2ByCheck(urlArr[len(urlArr)-1])[0]
+			if seoId := esSeoId(true, entId); seoId != "" {
+				return this.Redirect(fmt.Sprintf("/qy/%s.html", seoId))
+			}
+		} else if strings.Contains(pageSign, "unit_portrayal") {
+			urlArr := strings.Split(pageSign, "unit_portrayal/")
+			//buyerName := urlArr[len(urlArr)-1]
+			// 解码 URL 编码的字符串
+			buyer, _ := url.QueryUnescape(urlArr[len(urlArr)-1])
+			//buyer := this.GetString("buyer")
+			if seoId := esSeoId(false, buyer); seoId != "" {
+				return this.Redirect(fmt.Sprintf("/dw/%s.html", seoId))
+			}
+		}
+	}
 	return this.Render(fmt.Sprintf("/frontRouter/pc/page_big_pc/sess/index.html"))
 }
 
+func esSeoId(isWinner bool, idName string) string {
+	if idName == "" {
+		return idName
+	}
+	var seoId string
+	redisKey := fmt.Sprintf("getSeoId_%v_%s", isWinner, idName)
+	seoId = redis.GetStr("newother", redisKey)
+	if seoId != "" {
+		return seoId
+	}
+
+	if isWinner {
+		winnerSeo := elastic.GetById("qyxy", "qyxy", idName)
+		if winnerSeo != nil && len(*winnerSeo) > 0 {
+			seoId = common.InterfaceToStr((*winnerSeo)[0]["nseo_id"])
+		}
+	} else {
+		q := fmt.Sprintf(`{"query": {"bool": {"must": [{"match": {"buyer_name": "%s"}}]}},"from": 0,"size": 1,"_source":["seo_id"]}`, idName)
+		winnerSeo := elastic.Get("buyer", "buyer", q)
+		if winnerSeo != nil && len(*winnerSeo) > 0 {
+			seoId = common.InterfaceToStr((*winnerSeo)[0]["seo_id"])
+		}
+	}
+	if seoId != "" {
+		redis.Put("newother", redisKey, seoId, -1)
+	}
+	return seoId
+}
+
 // 卡卷
 func (this *CommonRouter) CouponIndex() error {
 	return this.doCouponPage()

+ 47 - 12
src/jfw/front/login.go

@@ -1,8 +1,18 @@
 package front
 
 import (
+	"app.yhyue.com/moapp/jybase/date"
+	"fmt"
+	"jy/src/jfw/config"
+	jutil "jy/src/jfw/jyutil"
+	"log"
+	"regexp"
+	"strings"
+	"time"
+
 	qutil "app.yhyue.com/moapp/jybase/common"
 	"app.yhyue.com/moapp/jybase/dchest/captcha"
+	"app.yhyue.com/moapp/jybase/encrypt"
 	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
 	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
 	. "app.yhyue.com/moapp/jybase/mongodb"
@@ -10,14 +20,7 @@ import (
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 	"app.yhyue.com/moapp/jypkg/public"
 	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
-	"fmt"
 	"go.mongodb.org/mongo-driver/bson/primitive"
-	"jy/src/jfw/config"
-	jutil "jy/src/jfw/jyutil"
-	"log"
-	"regexp"
-	"strings"
-	"time"
 )
 
 type Login struct {
@@ -77,7 +80,12 @@ func (l *Login) Login() error {
 		result           = map[string]interface{}{}
 		reqType          = l.GetString("reqType")
 		isAutoLogin, err = l.GetBool("isAutoLogin") //用户是否选择自动登录
+		channelCode      = "jy_pc_phone"
 	)
+	cc, ckErr := l.Request.Cookie(jy.ChannelCookieName)
+	if ckErr == nil {
+		channelCode = cc.Value
+	}
 	status, isLogin := func() (int, bool) {
 		if reqType == "phoneLogin" { //手机号登录
 			phone := l.GetString("phone")
@@ -161,6 +169,7 @@ func (l *Login) Login() error {
 						},
 						"s_regsource": "pc",
 						"s_platform":  "pc",
+						"s_sourceid":  channelCode,
 					}
 					//注册邮箱
 					email := l.GetString("email")
@@ -177,10 +186,11 @@ func (l *Login) Login() error {
 						data["s_tracksource"] = source
 					}
 					//获取base_user_id
-					if resp := config.Middleground.UserCenter.UserAdd(pb.UserAddReq{
+					resp := config.Middleground.UserCenter.UserAdd(pb.UserAddReq{
 						Appid: "10000",
 						Phone: phone,
-					}); resp != nil && resp.Data.Id > 0 {
+					})
+					if resp != nil && resp.Data.Id > 0 {
 						data["base_user_id"] = resp.Data.Id
 					} else {
 						log.Println(phone, "调用usercenter失败")
@@ -200,7 +210,14 @@ func (l *Login) Login() error {
 						if ok {
 							result["userInfo"] = userInfo
 							go anonymousLogin(l.Session(), l.Cookie("JYTrustedId"))
-							return 1, true
+							jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, "task", _id, jy.Jyweb_node2, map[string]interface{}{
+								"code":       1007, //绑定手机号任务
+								"types":      "bindPhone",
+								"num":        50,
+								"baseUserId": resp.Data.Id,
+								"positionId": l.GetSession("positionId"),
+							})
+							return 2, true
 						}
 					}
 				} else {
@@ -229,14 +246,31 @@ func (l *Login) Login() error {
 					if ok {
 						result["userInfo"] = userInfo
 						go anonymousLogin(l.Session(), l.Cookie("JYTrustedId"))
-						return 1, true
+						return 3, true
 					}
 				}
 			}
 		}
 		return 0, false
 	}()
-	if status == 1 && isLogin {
+	if status >= 1 && isLogin {
+		//登录source 更新 p414
+		mgoUserId := qutil.ObjToString(l.GetSession("mgoUserId"))
+		us := jy.UserSource{
+			UserId:           mgoUserId,
+			PositionId:       qutil.Int64All(l.GetSession("positionId")),
+			Phone:            qutil.ObjToString(l.GetSession("phone")),
+			State:            qutil.If(status == 2, status, 1).(int), //注册/登录标志 1:登录;2:注册
+			ChannelCode:      channelCode,
+			EncryptionUserId: encrypt.SE.EncodeString(mgoUserId),
+			CreateTime:       time.Now().Format(date.Date_Full_Layout),
+			LoginWay:         qutil.If(status == 1, status, 2).(int), //登录方式;1:手机号密码;2:手机号验证码;3:微信;4:手机号一键登录
+			Platform:         1,
+			Ip:               qutil.GetIp(l.Request),
+		}
+		go func(us jy.UserSource) {
+			jy.SaveUserSource(public.BaseMysql, jy.ChannelTableName, qutil.StructToMapMore(us))
+		}(us)
 		//当前用户登录选择 下次自动登录
 		if isAutoLogin && err == nil {
 			baseUserId := qutil.Int64All(l.GetSession("base_user_id"))
@@ -245,6 +279,7 @@ func (l *Login) Login() error {
 				jutil.SetCookieValueForAutoLogin(l.ResponseWriter, baseUserId)
 			}
 		}
+		status = 1
 	}
 	result["status"] = status
 	l.ServeJson(result)

+ 20 - 0
src/jfw/front/org_structure.go

@@ -21,6 +21,7 @@ import (
 	"app.yhyue.com/moapp/jypkg/public"
 
 	util "app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
 
 	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
@@ -194,6 +195,25 @@ func (this *OrgStructure) AutoLogon() error {
 			}); resp != nil && resp.Data.Id > 0 {
 				data["base_user_id"] = resp.Data.Id
 				if id := mongodb.Save("user", data); id != "" {
+
+					nsqPath, _ := config.Sysconfig["nsq"].(string)
+					nsq_topic, _ := config.Sysconfig["nsq_topic"].(string)
+					jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, "task", id, jy.Jyweb_node2, map[string]interface{}{
+						"code":       1007,
+						"types":      "bindPhone",
+						"num":        50,
+						"baseUserId": resp.Data.Id,
+						"positionId": this.GetSession("positionId"),
+					})
+					if mail != "" {
+						jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, "task", id, jy.Jyweb_node2, map[string]interface{}{
+							"code":       1009,
+							"types":      "bindMail",
+							"num":        50,
+							"baseUserId": resp.Data.Id,
+							"positionId": this.GetSession("positionId"),
+						})
+					}
 					rb = true
 				}
 			} else {

+ 20 - 8
src/jfw/front/pcIndex.go

@@ -159,11 +159,11 @@ func (m *PcIndex) NewSordfish(flag string) error {
 		} else if flag == "tmp" {
 			return m.Render("/pc/index_tmp.html", &m.T)
 		} else {
-			var entIsNew bool
-			if userId != "" {
-				bigBaseMsg := jy.GetBigVipUserBaseMsg(m.Session(), *config.Middleground)
-				entIsNew = bigBaseMsg.EntIsNew
-			}
+			//var entIsNew bool
+			//if userId != "" {
+			//	bigBaseMsg := jy.GetBigVipUserBaseMsg(m.Session(), *config.Middleground)
+			//	entIsNew = bigBaseMsg.EntIsNew
+			//}
 			//按地区、信息类型、热门招标
 			for k, v := range RegionAndInformationAndTender() {
 				m.T[k] = v
@@ -201,8 +201,6 @@ func (m *PcIndex) NewSordfish(flag string) error {
 			m.T["jycmsLink"] = GetJycmsAreaLink()
 			//推荐标讯专区
 			m.T["recommendBeacon"] = RecommendationBeacon()
-			//热门采购单位
-			m.T["hotBuyers"] = HotBuyerList(entIsNew)
 			//招投标攻略
 			var strategyList []map[string]interface{}
 			for _, item := range jySchool.GuidelineColumn().SeedData {
@@ -217,6 +215,8 @@ func (m *PcIndex) NewSordfish(flag string) error {
 			m.T["strategyList"] = strategyList
 			m.T["hasLogin"] = userId != ""
 			m.T["includedInfo"] = GetIncludedInfo()
+			//热门采购单位
+			m.T["hotBuyers"] = HotBuyerList()
 			m.T["hotWinner"] = GetWinnerInfo()
 			m.T["newbids"] = NewIndexbids(m.Session(), m.Request)
 			m.T["hotkey"] = hotKeyArrLoginEd
@@ -227,6 +227,17 @@ func (m *PcIndex) NewSordfish(flag string) error {
 	}
 }
 
+var secSeoWebConfig *SecSeoWebdomainConfig
+
+func init() {
+	gconv.Struct(config.Seoconfig["secSeoWebConfig"], &secSeoWebConfig)
+}
+
+type SecSeoWebdomainConfig struct {
+	AreaCodeMap    map[string]string `json:"areaCodeMap"`
+	AreaHrefFormat string            `json:"area_href_format"`
+}
+
 // GetJycmsAreaLink 获取资讯站地区首页地址
 func GetJycmsAreaLink() []map[string]interface{} {
 	redisKey := "IndexJycmsAreaLink"
@@ -247,8 +258,9 @@ func GetJycmsAreaLink() []map[string]interface{} {
 	var ha, nmg int
 	for i, m := range *res {
 		alias, name := util.ObjToString(m["alias"]), util.ObjToString(m["area"])
+		//config.Sysconfig["webdomain"].(string)
 		tmp := map[string]interface{}{
-			"url":  fmt.Sprintf("/jycms/a_%s.html", alias),
+			"url":  fmt.Sprintf(secSeoWebConfig.AreaHrefFormat, secSeoWebConfig.AreaCodeMap[name]),
 			"name": fmt.Sprintf("%s招标网", name),
 		}
 		if alias == "ha" {

+ 6 - 0
src/jfw/front/supsearch.go

@@ -571,10 +571,16 @@ func (p *Pcsearch) PcSearchIndex(module string) error {
 	p.T["isEntService"] = userInfo.EntService
 	p.T["vipBefore202209"] = userInfo.VipState > 0 && userInfo.VipStartData < util.Int64All(config.Sysconfig["contextOldVipLimit"]) //超级订阅 超强项目
 	//
+	cooperateCode := ""
 	if userId != "" {
 		//企业画像 权限
 		p.T["portraitpower"] = jylabutil.IsAuthorized(userId, "i_portraitpower")
+	} else {
+		if cc, err := p.GetCookie(jy.ChannelCookieName); err == nil {
+			cooperateCode = cc.Value
+		}
 	}
+	p.T["cooperateCode"] = cooperateCode
 	p.T["isLimit"] = isLimit
 	if module == "supsearch" {
 		p.T["simpleTemplateData"] = map[string]interface{}{

+ 10 - 11
src/jfw/front/websocket.go

@@ -20,7 +20,7 @@ import (
 	"time"
 )
 
-//socket对象放在内存中,待rpc回调使用
+// socket对象放在内存中,待rpc回调使用
 type Wss struct {
 	Conn    *websocket.Conn
 	session *httpsession.Session
@@ -47,7 +47,7 @@ func (m *MapSocket) GC() {
 var MSPOOL = 20
 var MapSocketArr = make([]*MapSocket, MSPOOL)
 
-//初始化
+// 初始化
 func init() {
 	for i := 0; i < MSPOOL; i++ {
 		ms := &MapSocket{Map: map[string]*Wss{}}
@@ -57,7 +57,6 @@ func init() {
 	redis.InitRedisLogin(public.DbConf.Redis.Login.Address)
 }
 
-//
 func GetRedisPoolVal() {
 	redis.GetLoginVal("loginCode", GetWsByCode)
 	//	var res string
@@ -71,7 +70,7 @@ func GetRedisPoolVal() {
 	//	}
 }
 
-//根据代码和ws做映射
+// 根据代码和ws做映射
 func PutWsByCode(src string, ws *websocket.Conn, session *httpsession.Session) {
 	defer qutil.Catch()
 	n := HashVal(src) % MSPOOL
@@ -92,7 +91,7 @@ func PutWsByCode(src string, ws *websocket.Conn, session *httpsession.Session) {
 	ms.Lock.Unlock()
 }
 
-//计算代码的hash值
+// 计算代码的hash值
 func HashVal(src string) int {
 	check := 0
 	for i := len(src) / 2; i < len(src); i++ {
@@ -101,7 +100,7 @@ func HashVal(src string) int {
 	return check
 }
 
-//rpc回调,写到前台
+// rpc回调,写到前台
 func GetWsByCode(param []string) bool {
 	if len(param) < 2 {
 		return false
@@ -145,7 +144,7 @@ func GetWsByCode(param []string) bool {
 				if ok := redis.Del("newother", fmt.Sprintf(jyutil.KeepLoginTimeKey, src)) && redis.Del("newother", fmt.Sprintf(jyutil.KeepLoginTimeKey, erStr)); !ok {
 					log.Println(fmt.Sprintf("%d 清除用户登录延期标识 异常", baseUserId))
 				}
-				//
+				//登录source 更新
 				//收到webSocket消息后,您无法设置cookie.一旦建立了webSocket连接,它就是一个开放的TCP套接字,协议不再是http,因此没有内置的方式来交换cookie.
 				//jyutil.SetCookieValueForAutoLogin(wss.Conn.W, baseUserId)  不可用
 				//您可以将自己的webSocket消息发送回客户端,告知它设置cookie,然后在客户端中侦听该消息,当它收到该消息时,它可以在浏览器中设置cookie.
@@ -167,7 +166,7 @@ func GetWsByCode(param []string) bool {
 	}
 }
 
-//用户登录信息
+// 用户登录信息
 func LoginInfo(shareid, openid string, Sess interface{}) map[string]interface{} {
 	if Sess == nil {
 		return nil
@@ -216,7 +215,7 @@ func ServeWss(conn *websocket.Conn) {
 
 }
 
-//实验室
+// 实验室
 func QrToLabWss(conn *websocket.Conn) {
 	defer qutil.Catch()
 	var receive, userId string
@@ -286,7 +285,7 @@ func QrToLabWss(conn *websocket.Conn) {
 	}
 }
 
-//电脑端强制分享,扫码分享到朋友圈
+// 电脑端强制分享,扫码分享到朋友圈
 func QrToShareTimeline(conn *websocket.Conn) {
 	defer qutil.Catch()
 	var receive string
@@ -341,7 +340,7 @@ func QrToShareTimeline(conn *websocket.Conn) {
 	}
 }
 
-//pc弹框 最新一条消息
+// pc弹框 最新一条消息
 func GetBuoyMsg(conn *websocket.Conn) {
 	defer qutil.Catch()
 	sess := xweb.RootApp().SessionManager.Session(conn.R, conn.W)

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

@@ -208,9 +208,9 @@ func (w *WsDataExport) GetPreview() error {
 	//格式化字段
 	res_screen := dataexport.ScreenData(res, dataType, 20, kws)
 	list := dataexport.FormatExportData(public.Mgo_Ent, &res_screen, config.Sysconfig["webdomain"].(string), dataType, true)
-	if msgCount > 20000 {
-		msgCount = 20000
-	}
+	//if msgCount > 20000 {
+	//	msgCount = 20000
+	//}
 	_res["data"] = subUrl(list, dataType)
 	_res["dataType"] = dataType
 	_res["total"] = msgCount

+ 28 - 0
src/jfw/modules/app/src/app/filter/cookie.go

@@ -0,0 +1,28 @@
+package filter
+
+import (
+	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
+	"log"
+	"net/http"
+	"strings"
+)
+
+// CookieInfo 信息
+type CookieInfo struct {
+	W http.ResponseWriter
+	R *http.Request
+}
+
+// Do 继承过滤器方法
+func (ci *CookieInfo) Do() {
+	log.Println(ci.R.Referer(), "----------------------", ci.R.RequestURI)
+	if crr := ci.R.Referer(); crr != "" {
+		if strings.Contains(crr, "cooperate") {
+			match := strings.Split(crr, "cooperate/")
+			if len(match) > 1 {
+				jy.SetCookieValue(ci.W, jy.ChannelCookieName, match[1], 172800) //两天
+			}
+			log.Println("---------------app-------------", match)
+		}
+	}
+}

+ 1 - 0
src/jfw/modules/app/src/app/filter/filter.go

@@ -45,6 +45,7 @@ func (f *Filter) Do(w http.ResponseWriter, r *http.Request) bool {
 	if getSession["base_user_id"] != nil && getSession["positionId"] == nil {
 		identity.SwitchToBest(util.Int64All(getSession["base_user_id"]), session, Middleground, &public.MQFW, false)
 	}
+	(&CookieInfo{w, r}).Do()
 	if !(&logFilter{w, r, getSession}).Do() {
 		return false
 	}

+ 52 - 0
src/jfw/modules/app/src/app/front/bigMember.go

@@ -2,12 +2,17 @@ package front
 
 import (
 	qutil "app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/encrypt"
+	elastic "app.yhyue.com/moapp/jybase/es"
 	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
+	"app.yhyue.com/moapp/jybase/redis"
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 	"app.yhyue.com/moapp/jypkg/public"
 	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
+	"fmt"
 	"jy/src/jfw/modules/app/src/jfw/config"
 	"regexp"
+	"strings"
 )
 
 type NewBigMemberAction struct {
@@ -37,6 +42,7 @@ func (s *NewBigMemberAction) PowerClear() {
 }
 
 func (s *NewBigMemberAction) VipPageManager(htmlName string) error {
+	userid, _ := s.GetSession("userId").(string)
 	if !freePageReg.MatchString(htmlName) {
 		bigBaseMsg := jy.GetBigVipUserBaseMsg(s.Session(), *config.Middleground)
 		//大会员页面权限判断
@@ -51,5 +57,51 @@ func (s *NewBigMemberAction) VipPageManager(htmlName string) error {
 		//	return s.Redirect("/jyapp/big/page/init") //跳转至首次初始化页面
 		//}
 	}
+	if userid == "" {
+		if strings.Contains(htmlName, "ent_ser_portrait") || strings.Contains(htmlName, "ent_portrait") {
+			//urlArr := strings.Split(htmlName, "/")
+			entId := encrypt.DecodeArticleId2ByCheck(s.GetString("eId"))[0]
+			if seoId := esSeoId(true, entId); seoId != "" {
+				return s.Redirect(fmt.Sprintf("/qy/%s.html", seoId))
+			}
+		} else if strings.Contains(htmlName, "unit_portrayal") {
+			//urlArr := strings.Split(htmlName, "/")
+			//buyerName := urlArr[len(urlArr)-1]
+			// 解码 URL 编码的字符串
+			buyer := s.GetString("entName")
+			//buyer := this.GetString("buyer")
+			if seoId := esSeoId(false, buyer); seoId != "" {
+				return s.Redirect(fmt.Sprintf("/dw/%s.html", seoId))
+			}
+		}
+	}
 	return s.Render("/big-member/page_" + htmlName + ".html")
 }
+
+func esSeoId(isWinner bool, idName string) string {
+	if idName == "" {
+		return idName
+	}
+	var seoId string
+	redisKey := fmt.Sprintf("getSeoId_%v_%s", isWinner, idName)
+	seoId = redis.GetStr("newother", redisKey)
+	if seoId != "" {
+		return seoId
+	}
+	if isWinner {
+		winnerSeo := elastic.GetById("qyxy", "qyxy", idName)
+		if winnerSeo != nil && len(*winnerSeo) > 0 {
+			seoId = qutil.InterfaceToStr((*winnerSeo)[0]["nseo_id"])
+		}
+	} else {
+		q := fmt.Sprintf(`{"query": {"bool": {"must": [{"match": {"buyer_name": "%s"}}]}},"from": 0,"size": 1,"_source":["seo_id"]}`, idName)
+		winnerSeo := elastic.Get("buyer", "buyer", q)
+		if winnerSeo != nil && len(*winnerSeo) > 0 {
+			seoId = qutil.InterfaceToStr((*winnerSeo)[0]["seo_id"])
+		}
+	}
+	if seoId != "" {
+		redis.Put("newother", redisKey, seoId, -1)
+	}
+	return seoId
+}

+ 9 - 0
src/jfw/modules/app/src/app/front/front.go

@@ -340,6 +340,15 @@ func (f *Front) TSGuide() error {
 					"i_ts_guide":        2,
 					"o_jy.i_newfree":    1,
 				}
+				nsqPath, _ := config.Sysconfig["nsq"].(string)
+				nsq_topic, _ := config.Sysconfig["nsq_topic"].(string)
+				jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, "task", util.ObjToString(f.GetSession("mgoUserId")), jy.Jywx_node1, map[string]interface{}{
+					"code":       1015, //首次订阅
+					"types":      "subscribeKeyWords",
+					"num":        50,
+					"baseUserId": f.GetSession("base_user_id"),
+					"positionId": f.GetSession("positionId"),
+				})
 				result["flag"] = utils.Compatible.Update(userid, map[string]interface{}{"$set": saveData})
 			}
 		} else if reqType == "over" {

+ 154 - 30
src/jfw/modules/app/src/app/front/login.go

@@ -1,6 +1,8 @@
 package front
 
 import (
+	"app.yhyue.com/moapp/jybase/date"
+	"app.yhyue.com/moapp/jybase/encrypt"
 	"encoding/json"
 	"fmt"
 	"jy/src/jfw/modules/app/src/jfw/config"
@@ -103,15 +105,24 @@ func (l *Login) Login() error {
 			}
 		}
 	}
-	returnSign := ""
-	userInfo := map[string]interface{}{}
-	status := func() int {
+	var (
+		returnSign  = ""
+		userInfo    = map[string]interface{}{}
+		channelCode = qutil.If(strings.Contains(l.Request.Host, "h5"), "jy_h5_phone", "jy_app_phone").(string)
+	)
+	cc, ckErr := l.Request.Cookie(jy.ChannelCookieName)
+	if ckErr == nil {
+		channelCode = cc.Value
+	}
+	status, state := func() (int, int) {
+		nsqPath, _ := config.Sysconfig["nsq"].(string)
+		nsq_topic, _ := config.Sysconfig["nsq_topic"].(string)
 		reqType := l.GetString("reqType")
 		if reqType == "phoneLogin" {
 			phone := l.GetString("phone")
 			password := l.GetString("password")
 			if strings.TrimSpace(phone) == "" || strings.TrimSpace(password) == "" {
-				return -1
+				return -1, -1
 			}
 			query := map[string]interface{}{
 				"i_appid": 2,
@@ -131,9 +142,16 @@ func (l *Login) Login() error {
 				deviceId := l.GetString("deviceId")
 				phoneType := l.GetString("phoneType")
 				returnSign = afterLogin((*user)[0], l.Session(), rid, oid, phoneType, channel, deviceId, false, l.ResponseWriter)
-				return 1
+				jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, "task", BsonIdToSId((*user)[0]["_id"]), jy.Jyapp_node1, map[string]interface{}{
+					"code":       1014, //下载app任务
+					"types":      "downloadApp",
+					"num":        50,
+					"baseUserId": l.GetSession("base_user_id"),
+					"positionId": l.GetSession("positionId"),
+				})
+				return 1, 1
 			}
-			return -1 //用户名或密码不正确
+			return -1, -1 //用户名或密码不正确
 		} else if reqType == "signLogin" {
 			returnStatus := 0
 			if l.GetSession("mgoUserId") != nil {
@@ -146,7 +164,7 @@ func (l *Login) Login() error {
 			(userInfo)["s_phone"] = l.GetSession("s_phone")
 			(userInfo)["userid"] = l.GetSession("mgoUserId")
 			(userInfo)["app_name"] = l.GetSession("app_name")
-			return returnStatus
+			return returnStatus, 2
 		} else if reqType == "sendIdentCode" {
 			phone := jy.CheckSendMsg(l.GetString("token"))
 			if phone == "" {
@@ -154,18 +172,18 @@ func (l *Login) Login() error {
 			}
 			//手机号验证不通过
 			if phone == "" {
-				return -2
+				return -2, -1
 			} else if !phoneReg.MatchString(phone) {
-				return -1
+				return -1, -1
 			} else if jy.SendPhoneIdentCode(qutil.ObjToString(config.Sysconfig["smsServiceRpc"]), phone, l.Session()) {
-				return 1
+				return 1, -1
 			}
-			return 0
+			return 0, -1
 		} else if reqType == "identCodeLogin" {
 			disWord := l.GetString("disWord")
 			phone, _ := l.GetSession("identCodeKey").(string)
 			if phone == "" || l.GetSession("identCodeValue") == nil || l.GetString("identCode") != l.GetSession("identCodeValue") { //验证码不正确
-				return -1
+				return -1, -1
 			} else {
 				RegLock.Lock()
 				reg := RegMap[phone]
@@ -182,7 +200,7 @@ func (l *Login) Login() error {
 				ok, user := getPhoneUser(phone)
 				//登录成功
 				if !ok {
-					return 0
+					return 0, -1
 				}
 				//用户不存在
 				rid := l.GetString("rid")
@@ -210,6 +228,7 @@ func (l *Login) Login() error {
 							"l_modifydate": time.Now().Unix(),
 						},
 						"s_platform": "app",
+						"s_sourceid": channelCode,
 					}
 					// 新用户注册 记录活动来源
 					activity := l.GetString("activity")
@@ -230,7 +249,7 @@ func (l *Login) Login() error {
 						data["base_user_id"] = resp.Data.Id
 					} else {
 						log.Println(phone, "调用usercenter失败")
-						return -4
+						return -4, -1
 					}
 					_id := mongodb.Save("user", data)
 					if _id != "" {
@@ -238,29 +257,34 @@ func (l *Login) Login() error {
 
 						jy.ClearPhoneIdentSession(l.Session())
 						returnSign = afterLogin(data, l.Session(), rid, oid, phoneType, channel, deviceId, true, l.ResponseWriter)
-						addr, _ := config.Sysconfig["nsq"].(string)
-						nsq_topic, _ := config.Sysconfig["nsq_topic"].(string)
 						if disWord != "" {
 							redisDis := redis.GetStr("other", "DIS_"+disWord[1:])
 							//邀请新用户 调用队列
 							if redisDisArr := strings.Split(redisDis, "##"); len(redisDisArr) > 1 {
 								fromUserId := redisDisArr[1]
-								err := jy.Publish(public.Mgo_Log, addr, nsq_topic, jy.Jywx_subscribe_invite, fromUserId, jy.Jyapp_node1, nil)
+								err := jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, jy.Jywx_subscribe_invite, fromUserId, jy.Jyapp_node1, nil)
 								if err != nil {
 									log.Println("nsq队列写入失败-->", err, jy.Jywx_subscribe_invite, fromUserId)
 								}
-								err = jy.Publish(public.Mgo_Log, addr, nsq_topic, jy.Jywx_subscribe_invited, _id, jy.Jyapp_node1, nil)
+								err = jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, jy.Jywx_subscribe_invited, _id, jy.Jyapp_node1, nil)
 								if err != nil {
 									log.Println("nsq队列写入失败-->", err, jy.Jywx_subscribe_invited, _id)
 								}
 							}
 						} else {
-							err := jy.Publish(public.Mgo_Log, addr, nsq_topic, jy.Jyapp_phone_register, _id, jy.Jyapp_node1, nil)
+							err := jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, jy.Jyapp_phone_register, _id, jy.Jyapp_node1, nil)
 							if err != nil {
 								log.Println("nsq队列写入失败-->", err, jy.Jyapp_phone_register, _id)
 							}
 						}
-						return 1
+						jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, "task", _id, jy.Jyapp_node1, map[string]interface{}{
+							"code":       1014, //下载app任务
+							"types":      "downloadApp",
+							"num":        50,
+							"baseUserId": l.GetSession("base_user_id"),
+							"positionId": l.GetSession("positionId"),
+						})
+						return 1, 3
 					}
 				} else {
 					//以s_m_phone登录的 需要把s_m_phone转化为s_phone
@@ -281,12 +305,36 @@ func (l *Login) Login() error {
 					}
 					jy.ClearPhoneIdentSession(l.Session())
 					returnSign = afterLogin(user, l.Session(), rid, oid, phoneType, channel, deviceId, false, l.ResponseWriter)
-					return 1
+					jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, "task", BsonIdToSId(user["_id"]), jy.Jyapp_node1, map[string]interface{}{
+						"code":       1014, //下载app任务
+						"types":      "downloadApp",
+						"num":        50,
+						"baseUserId": l.GetSession("base_user_id"),
+						"positionId": l.GetSession("positionId"),
+					})
+					return 1, 4
 				}
 			}
 		}
-		return 0
+		return 0, -1
 	}()
+	//登录source 更新 p414
+	mgoUserId := qutil.ObjToString(l.GetSession("mgoUserId"))
+	us := jy.UserSource{
+		UserId:           mgoUserId,
+		PositionId:       qutil.Int64All(l.GetSession("positionId")),
+		Phone:            qutil.ObjToString(l.GetSession("phone")),
+		State:            qutil.If(state == 3, 2, 1).(int), //注册/登录标志 1:登录;2:注册
+		ChannelCode:      channelCode,
+		EncryptionUserId: encrypt.SE.EncodeString(mgoUserId),
+		CreateTime:       time.Now().Format(date.Date_Full_Layout),
+		LoginWay:         qutil.If(state == 1, state, 2).(int),                         //登录方式;1:手机号密码;2:手机号验证码;3:微信;4:手机号一键登录
+		Platform:         qutil.If(strings.Contains(l.Request.Host, "h5"), 4, 3).(int), //登录端;1:PC;2:WX;3:APP;4:H5
+		Ip:               qutil.GetIp(l.Request),
+	}
+	go func(us jy.UserSource) {
+		jy.SaveUserSource(public.BaseMysql, jy.ChannelTableName, qutil.StructToMapMore(us))
+	}(us)
 	result := map[string]interface{}{
 		"status": status,
 		"userId": l.GetSession("mgoUserId"),
@@ -462,7 +510,16 @@ func (l *Login) Register() error {
 		}
 		return l.Render("/me/register.html", &l.T)
 	}
-	var returnSign string
+	var (
+		returnSign   string
+		nsqPath, _   = config.Sysconfig["nsq"].(string)
+		nsq_topic, _ = config.Sysconfig["nsq_topic"].(string)
+		channelCode  = qutil.If(strings.Contains(l.Request.Host, "h5"), "jy_h5_phone", "jy_app_phone").(string)
+		cc, ckErr    = l.Request.Cookie(jy.ChannelCookieName)
+	)
+	if ckErr == nil {
+		channelCode = cc.Value
+	}
 	status := func() string {
 		reqType := l.GetString("reqType")
 		if reqType == "sendIdentCode" { //发短信
@@ -514,30 +571,29 @@ func (l *Login) Register() error {
 					"s_opushid":     oid,
 					"s_appponetype": phoneType,
 					"s_company":     s_entname,
+					"s_sourceid":    channelCode,
 				}
 				email := l.GetString("email")
 				registerclient := jy.NewRegister(jyutil.Compatible.Mgo, jyutil.Compatible.BaseService, jyutil.Compatible.MainMysql, jyutil.Compatible.Middleground)
 				_, errStr = registerclient.PublicRegister(phone, email, isAndroidOrIOS(l.Header("User-Agent")), data, func(saveid string) {
 
-					addr := config.Sysconfig["nsq"].(string)
-					topic := config.Sysconfig["nsq_topic"].(string)
 					go func() {
 						if disWord != "" {
 							redisDis := redis.GetStr("other", "DIS_"+disWord[1:])
 							//邀请新用户 调用队列
 							if redisDisArr := strings.Split(redisDis, "##"); len(redisDisArr) > 1 {
 								fromUserId := redisDisArr[1]
-								err := jy.Publish(public.Mgo_Log, addr, topic, jy.Jywx_subscribe_invite, fromUserId, jy.Jyapp_node1, nil)
+								err := jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, jy.Jywx_subscribe_invite, fromUserId, jy.Jyapp_node1, nil)
 								if err != nil {
 									log.Println("nsq队列写入失败-->", err, jy.Jywx_subscribe_invite, fromUserId)
 								}
-								err = jy.Publish(public.Mgo_Log, addr, topic, jy.Jywx_subscribe_invited, saveid, jy.Jyapp_node1, nil)
+								err = jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, jy.Jywx_subscribe_invited, saveid, jy.Jyapp_node1, nil)
 								if err != nil {
 									log.Println("nsq队列写入失败-->", err, jy.Jywx_subscribe_invited, saveid)
 								}
 							}
 						} else {
-							err := jy.Publish(public.Mgo_Log, addr, topic, jy.Jyapp_phone_register, saveid, jy.Jyapp_node1, nil)
+							err := jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, jy.Jyapp_phone_register, saveid, jy.Jyapp_node1, nil)
 							if err != nil {
 								log.Println("nsq队列写入失败-->", err, jy.Jyapp_phone_register, saveid)
 							}
@@ -545,9 +601,42 @@ func (l *Login) Register() error {
 					}()
 					l.DelSession("registerStep")
 					jy.ClearPhoneIdentSession(l.Session())
+					//剑鱼币
+					jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, "task", qutil.ObjToString(l.GetSession("mgoUserId")), jy.Jyapp_node1, map[string]interface{}{
+						"code":       1014, //下载app任务
+						"types":      "downloadApp",
+						"num":        50,
+						"baseUserId": l.GetSession("base_user_id"),
+						"positionId": l.GetSession("positionId"),
+					})
 				})
 				if errStr == "y" {
 					returnSign = afterLogin(data, l.Session(), rid, oid, phoneType, channel, deviceId, true, l.ResponseWriter)
+					//剑鱼币
+					jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, "task", qutil.ObjToString(l.GetSession("mgoUserId")), jy.Jyapp_node1, map[string]interface{}{
+						"code":       1014, //下载app任务
+						"types":      "downloadApp",
+						"num":        50,
+						"baseUserId": l.GetSession("base_user_id"),
+						"positionId": l.GetSession("positionId"),
+					})
+					//登录source 更新 p414
+					mgoUserId := qutil.ObjToString(l.GetSession("mgoUserId"))
+					us := jy.UserSource{
+						UserId:           mgoUserId,
+						PositionId:       qutil.Int64All(l.GetSession("positionId")),
+						Phone:            qutil.ObjToString(l.GetSession("phone")),
+						State:            2, //注册/登录标志 1:登录;2:注册
+						ChannelCode:      channelCode,
+						EncryptionUserId: encrypt.SE.EncodeString(mgoUserId),
+						CreateTime:       time.Now().Format(date.Date_Full_Layout),
+						LoginWay:         1,                                                            //登录方式;1:手机号密码;2:手机号验证码;3:微信;4:手机号一键登录
+						Platform:         qutil.If(strings.Contains(l.Request.Host, "h5"), 4, 3).(int), //登录端;1:PC;2:WX;3:APP;4:H5
+						Ip:               qutil.GetIp(l.Request),
+					}
+					go func(us jy.UserSource) {
+						jy.SaveUserSource(public.BaseMysql, jy.ChannelTableName, qutil.StructToMapMore(us))
+					}(us)
 				}
 				return errStr
 			}()
@@ -575,6 +664,11 @@ func (l *Login) WxLogin() {
 	disWord := l.GetString("disWord")
 	defer qutil.Catch()
 	returnSign := ""
+	channelCode := "jy_app_wx"
+	cc, ckErr := l.Request.Cookie(jy.ChannelCookieName)
+	if ckErr == nil {
+		channelCode = cc.Value
+	}
 	status := func() int {
 		u, err := jy.GetMsgFromWxSign(l.GetString("param"))
 		if err != nil {
@@ -676,6 +770,7 @@ func (l *Login) WxLogin() {
 				},
 				"s_platform": "app",                                                               //用户注册平台 app 微信 pc
 				"s_jyname":   jy.GetUserName("newother", config.Sysconfig["namePrefix"].(string)), //剑鱼昵称
+				"s_sourceid": channelCode,
 			}
 			//注册邮箱
 			email := l.GetString("email")
@@ -718,14 +813,43 @@ func (l *Login) WxLogin() {
 						log.Println("nsq队列写入失败-->", jy.Jyapp_wx_register, _id)
 					}
 				}
-				return 1
+				return 2
 			}
 		}
 		return 0
 	}()
+
+	nsqPath, _ := config.Sysconfig["nsq"].(string)
+	nsq_topic, _ := config.Sysconfig["nsq_topic"].(string)
+	jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, "task", qutil.ObjToString(l.GetSession("mgoUserId")), jy.Jyapp_node1, map[string]interface{}{
+		"code":       1014, //下载app任务
+		"types":      "downloadApp",
+		"num":        50,
+		"baseUserId": l.GetSession("base_user_id"),
+		"positionId": l.GetSession("positionId"),
+	})
+	if status > 0 {
+		//登录source 更新 p414
+		mgoUserId := qutil.ObjToString(l.GetSession("mgoUserId"))
+		us := jy.UserSource{
+			UserId:           mgoUserId,
+			PositionId:       qutil.Int64All(l.GetSession("positionId")),
+			Phone:            qutil.ObjToString(l.GetSession("phone")),
+			State:            status, //注册/登录标志 1:登录;2:注册
+			ChannelCode:      channelCode,
+			EncryptionUserId: encrypt.SE.EncodeString(mgoUserId),
+			CreateTime:       time.Now().Format(date.Date_Full_Layout),
+			LoginWay:         3,                                                            //登录方式;1:手机号密码;2:手机号验证码;3:微信;4:手机号一键登录
+			Platform:         qutil.If(strings.Contains(l.Request.Host, "h5"), 4, 3).(int), //登录端;1:PC;2:WX;3:APP;4:H5
+			Ip:               qutil.GetIp(l.Request),
+		}
+		go func(us jy.UserSource) {
+			jy.SaveUserSource(public.BaseMysql, jy.ChannelTableName, qutil.StructToMapMore(us))
+		}(us)
+	}
 	//返回
 	result := map[string]interface{}{
-		"status": status,
+		"status": qutil.If(status > 0, 1, status).(int),
 		"userId": l.GetSession("mgoUserId"),
 	}
 	if returnSign != "" {

+ 52 - 3
src/jfw/modules/app/src/app/front/shorturl.go

@@ -39,6 +39,9 @@ type Short struct {
 
 func init() {
 	xweb.AddAction(&Short{})
+	if config.Seoconfig["hotArea"] != nil {
+		utils.HotArea = config.Seoconfig["hotArea"].(string)
+	}
 }
 
 var DateFullLayout = "2006-01-02 15:04:05"
@@ -194,6 +197,11 @@ func (s *Short) Article(contentType, stype, id string) error {
 					}
 				}
 			}
+		} else {
+			//未登录顶部导航
+			s.T["hotArea"] = utils.HotAreas
+			s.T["areaList"] = utils.AreaInfo
+			s.T["infoTypeList"], _ = utils.GetInfoType()
 		}
 		//超前项目推送处理
 		s.T["canRead"] = canRead
@@ -310,9 +318,10 @@ func (s *Short) Article(contentType, 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"],
+				"hasSession": false,
 			}
 		}
 		if userId == "" && ipTrue {
@@ -320,6 +329,7 @@ func (s *Short) Article(contentType, stype, id string) error {
 		}
 		if userId != "" {
 			s.T["userId"] = se.Encode2Hex(userId) //加密用户userid
+			obj["hasSession"] = true
 		}
 		s.T["forceShareFlag"] = public.CheckUserNeedForceShare(userId, public.ShareType_detail, config.Sysconfig)
 		s.T["rewardText"], s.T["advertText"] = getRewardText()
@@ -329,6 +339,21 @@ func (s *Short) Article(contentType, stype, id string) error {
 		obj["industry"] = industry
 		obj["keywords"] = KeyWordHandle(obj)
 		obj["description"] = DescriptionHandle(stype, obj)
+
+		if userId == "" {
+			var currentLocation []Navigation
+			if typeVal := util.ObjToString(obj["toptype"]); typeVal != "" {
+				if val := getSeoLocation(typeVal); val != nil {
+					currentLocation = append(currentLocation, *val)
+				}
+			}
+			if title := util.ObjToString(obj["title"]); title != "" {
+				currentLocation = append(currentLocation, Navigation{
+					Name: title,
+				})
+			}
+			s.T["currentLocation"] = currentLocation
+		}
 		s.T["obj"] = obj
 		s.T["isIosExam"], s.T["isIosExamPhone"], _, _ = IosExamInfo(s.Action, false, false)
 		content, err := s.Render4Cache("/weixin/wxinfocontent.html", &s.T)
@@ -343,6 +368,30 @@ func (s *Short) Article(contentType, stype, id string) error {
 	return s.Redirect("/jyapp/free/mob/err")
 }
 
+var typeUrlMap = map[string]string{
+	"预告": "/list/stype/ZBYG.html",
+	"招标": "/list/stype/ZBGG.html",
+	"结果": "/list/stype/ZBJG.html",
+	"其它": "/list/stype/ZBXYXX.html",
+}
+
+func getSeoLocation(name string) *Navigation {
+	var url string
+
+	if url = typeUrlMap[name]; url != "" {
+		return &Navigation{
+			Name: name,
+			Url:  url,
+		}
+	}
+
+	switch name {
+
+	}
+
+	return nil
+}
+
 // 未登录用户进行数据过滤
 func Filter(obj map[string]interface{}) map[string]interface{} {
 	detail := fmt.Sprint(obj["detail"])

+ 3 - 3
src/jfw/modules/app/src/app/front/ws_dataExport.go

@@ -83,9 +83,9 @@ func (w *WsDataExport) GetPreview() error {
 		}
 	}
 	list := dataexport.FormatExportData(public.Mgo_Ent, &res_screen, config.Sysconfig["webdomain"].(string), dataType, true)
-	if msgCount > 20000 {
-		msgCount = 20000
-	}
+	//if msgCount > 20000 {
+	//	msgCount = 20000
+	//}
 	_res["data"] = subUrl(list, dataType)
 	_res["dataType"] = dataType
 	_res["total"] = msgCount

+ 1 - 1
src/jfw/modules/app/src/go.mod

@@ -5,7 +5,7 @@ go 1.18
 require (
 	app.yhyue.com/moapp/jybase v0.0.0-20230901064756-2fc66b18db40
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v1.0.3-0.20231031031244-d8df2b391b72
+	app.yhyue.com/moapp/jypkg v1.0.4-0.20231109032304-2da6db20132a
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.14
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
 	github.com/gogf/gf/v2 v2.3.1

+ 2 - 2
src/jfw/modules/app/src/go.sum

@@ -9,8 +9,8 @@ app.yhyue.com/moapp/jybase v0.0.0-20230901064756-2fc66b18db40 h1:/FcBvpf/KW8g6GB
 app.yhyue.com/moapp/jybase v0.0.0-20230901064756-2fc66b18db40/go.mod h1:Hv9U/7oHRucqH315Tr1+d03NCvS9mOKPfk8pwwlOIwQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
-app.yhyue.com/moapp/jypkg v1.0.3-0.20231031031244-d8df2b391b72 h1:irUuaH36GK/6tz4UWDjxSseKX8GJnfy5J6F+e9fFAZY=
-app.yhyue.com/moapp/jypkg v1.0.3-0.20231031031244-d8df2b391b72/go.mod h1:76Kz6+MuxcRJRyFad9W8R4AByiQlVGzuGFzklY+2m38=
+app.yhyue.com/moapp/jypkg v1.0.4-0.20231109032304-2da6db20132a h1:mUqyzXj24uoi9gE9P+EVoiMi/deUHH2+0jbTnwLhOZ0=
+app.yhyue.com/moapp/jypkg v1.0.4-0.20231109032304-2da6db20132a/go.mod h1:76Kz6+MuxcRJRyFad9W8R4AByiQlVGzuGFzklY+2m38=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae h1:6rDDaz6yxvE8viTSzEBwKYOFWq14TMfuBivSazUZMz4=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae/go.mod h1:b0zZHev3gmJao1Fo+2Z2KPVjsuLOJVvVxf+kCnu9WkA=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e h1:h+VEI3o1qC0jeCzkFGTrLI4f27cfa/W/y+0sXokWMgE=

+ 16 - 0
src/jfw/modules/app/src/web/staticres/jyapp/big-member/css/ent_portrait.css

@@ -640,3 +640,19 @@
     font-size: .26rem;
     color: #2abed1;
 }
+.dt-text-tips{
+  padding: .24rem .32rem .48rem;
+  font-size: .24rem;
+  line-height: .36rem;
+  color: rgba(29, 29, 29, 1);
+  text-align: center;
+}
+.dt-text-tips > .highlight-text{
+  text-decoration: underline;
+  font-size: inherit;
+}
+.dt-text-tips.light-bg{
+  margin: .24rem .32rem;
+  background: linear-gradient(rgba(234, 248, 250, 1), rgba(234, 248, 250, 0));
+  border-radius: 8px;
+}

+ 16 - 0
src/jfw/modules/app/src/web/staticres/jyapp/big-member/css/unit_portrayal.css

@@ -695,3 +695,19 @@
 .zb-analysis-module {
     margin-bottom: .08rem;
 }
+.dt-text-tips{
+  padding: .24rem .32rem .48rem;
+  font-size: .24rem;
+  line-height: .36rem;
+  color: rgba(29, 29, 29, 1);
+  text-align: center;
+}
+.dt-text-tips > .highlight-text{
+  text-decoration: underline;
+  font-size: inherit;
+}
+.dt-text-tips.light-bg{
+  margin: .24rem .32rem;
+  background: linear-gradient(rgba(234, 248, 250, 1), rgba(234, 248, 250, 0));
+  border-radius: 8px;
+}

+ 65 - 2
src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/ent_portrait.js

@@ -95,7 +95,9 @@ var vNode = {
         count: 1, // 总共多少条数据
         pageSize: 5,
         loaded: false,
-        showGetNextButton: true
+        showGetNextButton: true,
+        total: 0,
+        updateTime: 0
       },
       entPortraitInfo: {
         project_count: 0
@@ -306,6 +308,32 @@ var vNode = {
     },
     isFreeOrNotLogin () {
       return !this.isLogin || this.isFree
+    },
+    // 升级超级订阅文案:老版超级订阅用户、新版超级订阅(购买非全国)用户余额为0
+    updateVipStatus () {
+      var info = this.powerInfo
+      var isNoMember = info.memberStatus <= 0
+      var isOldVip = info.vipStatus > 0 && !info.viper
+      var isNewVip = info.vipStatus > 0 && info.viper && !this.surplus
+      var isNotAll = this.entvisit.provin !== -1
+      return (isOldVip || (isNewVip && isNotAll)) && isNoMember
+    },
+    // 联系客服文案:新版超级订阅(购买全国)用户余额为0、大会员自定义用户、商机管理用户
+    customerServiceStatus: function () {
+      var info = this.powerInfo
+      var memberCustom = this.conf.arr.indexOf(13) === -1 && info.memberStatus > 0
+      var isNewVip = info.vipStatus > 0 && info.viper && !this.surplus && this.entvisit.provin === -1
+      // 纯商机管理用户
+      var entniche = info.vipStatus <= 0 && info.memberStatus <= 0 && info.entniche
+      return memberCustom || isNewVip || entniche
+    },
+    phoneUnlockTip () {
+      var info = this.powerInfo
+      var phone = this.entBaseInfo.phone
+      return info.isFree && phone && phone.indexOf('*') !== -1
+    },
+    noShowTip: function () {
+      return (!this.isFree && !this.updateVipStatus && !this.customerServiceStatus) || (this.isFree && this.canFreeTrial)
     }
   },
   methods: {
@@ -354,7 +382,7 @@ var vNode = {
         }
         // 获取企业中标动态-13
         if (_this.conf._13) {
-          _this.getProjectNews()
+          // _this.getProjectNews()
           _this.gotTab2 = true
           console.log('获取企业中标动态...')
         }
@@ -366,6 +394,8 @@ var vNode = {
           // }
         }
         _this.gotTab2 = true
+        // P396:所有用户均可获取企业中标动态
+        _this.getProjectNews()
 
       });
     },
@@ -650,6 +680,8 @@ var vNode = {
           if (res.error_code == 0) {
             _this.loading.clear()
             _this.topProject.count = res.data.count
+            _this.topProject.total = res.data.count
+            _this.topProject.updateTime = new Date(Number(res.data.updateTime + '000')).pattern('yyyy-MM-dd')
             if (!res.data.list || res.data.list.length == 0) {
               // 新加变量 判断中标动态有无数据 用于展示缺省页组件
               _this.show.dt = false
@@ -942,6 +974,9 @@ var vNode = {
             if (res.data && res.data == 'success') {
               _this.entInfo.follow = !_this.entInfo.follow
             }
+            if(_this.entInfo.follow) {
+              _this.pointsTaskSuccessTip()
+            }
 
             if (!_this.entInfo.follow) {
               history.back()
@@ -956,6 +991,19 @@ var vNode = {
         }
       })
     },
+    // 赚剑鱼币任务完成提示
+    pointsTaskSuccessTip: function() {
+      // 获取剑鱼币任务信息
+      const from =  utils.getParam('from')
+      var point = utils.getParam('point') || 0
+      if(from && from === 'task'){
+        this.$toast({
+          message: `关注企业成功,获得${point}剑鱼币。`,
+          duration: 1500
+        })
+        utils.delUrlParam('from')
+      }
+    },
     // 初始化图标数据
     initChartsData: function () {
       var dataSet = this.entPortraitInfo
@@ -1521,6 +1569,10 @@ var vNode = {
       //   }).then(function () {})
       // }
     },
+    goToUnlock: function () {
+      // this.savePageState()
+      location.href = '/jyapp/frontPage/bigmember/free/perfect_info?source=ent_portrait_contacts'
+    },
     //免费赠送企业全景分析体验 去解锁
     goGiveAnalysis: function () {
       location.href = '/jyapp/frontPage/bigmember/free/perfect_info?source=ent_portrait_freeuser';
@@ -1543,6 +1595,17 @@ var vNode = {
     goLogin: function () {
       window.location.href = "/jyapp/free/login?to=back";
     },
+    onDtTextClick: function(type) {
+      if (type === 'customer') {
+        location.href = '/jyapp/free/customer'
+      } else if (type === 'update') {
+        //跳转清除旧套餐缓存,防止计算价格出错
+        sessionStorage.removeItem('vipSub_oldBuySet')
+        location.href = '/jy_mobile/common/order/create/svip?type=upgrade'
+      } else if (type === 'buy') {
+        location.href = '/jy_mobile/common/order/create/svip?type=buy'
+      }
+    }
   }
 }
 var vueComponent = new Vue(vNode)

+ 51 - 6
src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/unit_portrayal.js

@@ -83,7 +83,9 @@ var vNode = {
         list: [],
         isMore: '',
         pageCount: '',
-        isNext: true
+        isNext: true,
+        total: 0,
+        updateTime: 0
       },
       regCapSettings: {
         showLine: ['累计采购规模'],
@@ -253,6 +255,24 @@ var vNode = {
     // 留完资的用户(保含已体验和未体验的)
     getfreeBuyerOpen: function () {
       return this.userInfo.isFree && this.userInfo.freeBuyerPort != 0;
+    },
+    // 联系客服文案:新版超级订阅(购买全国)用户余额为0、大会员自定义用户、商机管理用户
+    customerServiceStatus: function () {
+      var info = this.userInfo
+      var memberCustom = this.power.indexOf(5) === -1 && info.memberStatus > 0
+      var isNewVip = info.vipStatus > 0 && info.viper && this.usageInfo.surplus <= 0 && this.usageInfo.provin === -1
+      // 纯商机管理用户
+      var entniche = info.vipStatus <= 0 && info.memberStatus <= 0 && info.entniche
+      return memberCustom || isNewVip || entniche
+    },
+    // 升级超级订阅文案:老版超级订阅用户、新版超级订阅(购买非全国)用户余额为0
+    updateVipStatus: function () {
+      var info = this.userInfo
+      var isNoMember = info.memberStatus <= 0
+      var isOldVip = info.vipStatus > 0 && !info.viper
+      var isNewVip = info.vipStatus > 0 && info.viper && this.usageInfo.surplus <= 0
+      var isNotAll = this.usageInfo.provin !== -1
+      return (isOldVip || (isNewVip && isNotAll)) && isNoMember
     }
   },
   watch: {
@@ -692,8 +712,10 @@ var vNode = {
         timeout: 8000,
         success: function (res) {
           if (res.error_code == 0) {
+            that.dt.updateTime = new Date(Number(res.data.updateTime + '000')).pattern('yyyy-MM-dd')
             if (res.data.list && res.data.list.length && res.data.list.length > 0) {
               that.dt.pageCount = res.data.count
+              that.dt.total = res.data.count
               if (res.data.list && $.isArray(res.data.list)) {
                 that.isShow.showDynamic = true;
                 res.data.list.forEach(function (v, i) {
@@ -715,9 +737,9 @@ var vNode = {
                   })
                 } catch (error) { }
                 res.data.list.forEach((item) => {
-                  if (that.dt.list.length < 5) {
+                  // if (that.dt.list.length < 5) {
                     that.dt.list.push(item)
-                  }
+                  // }
                 })
                 // that.dt.list = res.data.list
                 that.colList = res.data.list
@@ -782,7 +804,7 @@ var vNode = {
         timeout: 10000,
         success: function (res) {
           if (res.error_code == 0) {
-            that.reqCount++
+            that.reqCount++;
             if (res.data && Object.keys(res.data).length > 0) {
               that.chartLoading = false;
               // 免费用户是否浏览过当前画像 true:浏览过 不返该字段:没浏览过
@@ -1024,7 +1046,13 @@ var vNode = {
         } else {
           that.isShow.showScaleFb = true;
           that.$nextTick(function () {
-            that.getHotChartData(res);
+            var timer = setInterval(function () {
+              // 判断页面所有资源已加载完毕
+              if (document.readyState === "complete") {
+                that.getHotChartData(res);//执行方法
+                window.clearInterval(timer);
+              }
+            }, 800)
           })
         }
       }
@@ -1114,7 +1142,13 @@ var vNode = {
       if (data && data.length > 0) {
         that.isShow.showScaleRate = true
         that.$nextTick(function () {
-          that.getPieCharData(data)
+          var timer = setInterval(function () {
+            // 判断页面所有资源已加载完毕
+            if (document.readyState === "complete") {
+              that.getPieCharData(data);//执行方法
+              window.clearInterval(timer);
+            }
+          }, 800)
         })
       }
     },
@@ -1897,6 +1931,17 @@ var vNode = {
           }
         })
       }
+    },
+    onDtTextClick: function(type) {
+      if (type === 'customer') {
+        location.href = '/jyapp/free/customer'
+      } else if (type === 'update') {
+        //跳转清除旧套餐缓存,防止计算价格出错
+        sessionStorage.removeItem('vipSub_oldBuySet')
+        location.href = '/jy_mobile/common/order/create/svip?type=upgrade'
+      } else if (type === 'buy') {
+        location.href = '/jy_mobile/common/order/create/svip?type=buy'
+      }
     }
   }
 }

+ 7 - 0
src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/utils.js

@@ -115,6 +115,13 @@ var utils = {
         r = null;
         return context == null || context == '' || context == 'undefined' ? '' : context;
     },
+    // 移除url参数,但是不刷新页面
+    delUrlParam: function (name){
+      var href = window.location.href;
+      const e = eval(`/&?${name}=[^&#]*/g`);
+      href = href.replace(e, '');
+      history.replaceState('','',href);// replaceState方法不会触发页面刷新,只是导致history对象发生变化,地址栏
+    },
     // 取[m, n]随机数
     getRandomNumber: function (min, max) {
         return Math.floor(Math.random() * (max - min + 1) + min);

+ 0 - 27
src/jfw/modules/app/src/web/staticres/jyapp/js/historypush.js

@@ -628,19 +628,6 @@ var vm = new Vue({
           // 从页面移植来的
           if(!res.data.entniche && !res.data.member && res.data.vip <= 0) {
             sessionStorage.removeItem('switch-product')
-            setTimeout(function() {
-                (window.slotbydup = window.slotbydup || []).push({
-                    id: "u6603902",
-                    container: "_36y1d8lbx9n",
-                    async: true
-                });
-                (window.slotbydup = window.slotbydup || []).push({
-                    id: "u6603902",
-                    container: "_061vbh43quq3",
-                    async: true
-                });
-            },1000)
-            _this.getAjaxAdv()
           }
         }
       })
@@ -923,20 +910,6 @@ var vm = new Vue({
       this.$refs.industryItem.toggle(false)
       this.$refs.moreDropdownItems.toggle(false)
     },
-    getAjaxAdv: function () {
-      $.ajax({
-        type: 'POST',
-        url: '/publicapply/adLeague/exposure',
-        data: {
-            client: 'APP',
-            id: 'ad6',
-            position: '订阅推送列表页'
-        },
-        success: function(res) {
-            // console.log(res)
-        }
-      })
-    },
     // 选择附件
     selectFileFn: function(item) {
       if (!this.screenShow) return

+ 44 - 10
src/jfw/modules/app/src/web/staticres/jyapp/me/js/mail_bind.js

@@ -48,9 +48,25 @@ var vm = new Vue({
         }
     },
     created: function () {
-        this.getType()
+      this.getType()
+      this.getUserInfo()
     },
     methods: {
+        getUserInfo: function () {
+          var _this = this
+          this.getUserInfoLoaded = false
+          $.ajax({
+            type: 'GET',
+            url: '/jypay/user/getAccountInfo?t=' + Date.now(),
+            success: function (res) {
+              if (res.error_code == 0 && res.data) {
+                if(res.data.otherMail) {
+                  _this.info.mail = res.data.otherMail
+                }
+              }
+            }
+          })
+        },
         getType: function () {
             if (location.pathname.indexOf('bind') !== -1) {
                 this.type = 'bind'
@@ -137,19 +153,37 @@ var vm = new Vue({
                 success: function (res) {
                     loading.clear()
                     if (res.error_code == 0 && res.data.state == 1) {
-                        _this.$toast({
-                            message: _this.someText.text + '成功',
-                            duration: 1500,
-                            forbidClick: true,
-                            onClose: function () {
-                                history.back()
-                            }
-                        })
+                      _this.pointsTaskSuccessTip()
                     } else {
                         _this.showToast(res.error_msg)
                     }
                 }
             })
         },
+        // 赚剑鱼币任务完成提示
+        pointsTaskSuccessTip: function() {
+          // 获取剑鱼币任务信息
+          const from =  utils.getParam('from')
+          var point = utils.getParam('point') || 0
+          if(from && from === 'task'){
+            this.$toast({
+              message: `绑定邮箱成功,获得${point}剑鱼币。`,
+              duration: 1500,
+              forbidClick: true,
+              onClose: function () {
+                history.back()
+              }
+            })
+          } else {
+            this.$toast({
+              message: this.someText.text + '成功',
+              duration: 1500,
+              forbidClick: true,
+              onClose: function () {
+                history.back()
+              }
+            })
+          }
+        }
     }
-})
+})

+ 10 - 1
src/jfw/modules/app/src/web/staticres/jyapp/me/js/phone_bind.js

@@ -5,7 +5,7 @@ var vm = new Vue({
         type: 'bind',
         act: '',  // 是否要做某些操作
         mode: '',  // 是否跳转强制绑定
-        from: '',  // 是否通过iframe进入
+        from: '',  // 是否通过iframe进入(form=task则是来自剑鱼币做任务)
         token: '',  // 账号合并需要的token
         fastButton: false, // 一键绑定按钮是否展示
         userInfo: {
@@ -418,6 +418,7 @@ var vm = new Vue({
         bindPhoneSuccess: function (state) {
             var _this = this
             if (state == 1) {
+                this.pointsTaskSuccessTip()
                 // 绑定手机号完成后,如果已经填写过公司。则不发送提交公司的请求
                 // 可以直接判断计算属性showEntItem,来判断需不需要填写公司
                 if (_this.showEntItem) {
@@ -467,6 +468,14 @@ var vm = new Vue({
                 // location.replace('/jyapp/free/login?back=index&flag=quit')
                 // location.replace('/jyapp/jylab/mainSearch')
             })
+        },
+        // 赚剑鱼币任务完成提示
+        pointsTaskSuccessTip: function() {
+          // 获取剑鱼币任务信息
+          if(this.from === 'task' && this.type === 'bind'){
+            var point = utils.getParam('point') || 0
+            this.showToast(`绑定手机号成功,获得${point}剑鱼币。`)
+          }
         }
     }
 })

+ 14 - 0
src/jfw/modules/app/src/web/staticres/jyapp/tags/js/index.js

@@ -14,6 +14,15 @@ var page = {
   initEvents: function () {
     this.initFooterPhoneCall()
     // this.showAppFooterNavs()
+    this.initBack()
+    this.topSearchEvent()
+  },
+  topSearchEvent: function () {
+    $('.search-container').on('click', function (e) {
+      e.preventDefault()
+      localStorage.removeItem('JY-MOBILE-home-top-search')
+      location.href = '/jy_mobile/search/middle/bidding'
+    })
   },
   showAppFooterNavs: function () {
     var isInHomePage = location.pathname === '/jyapp/jylab/mainSearch'
@@ -49,6 +58,11 @@ var page = {
     if (f) {
       $('.tag-info-type-nav-list, .tag-area-nav-container').addClass('dark-mode')
     }
+  },
+  initBack: function () {
+    $('.j-icon.base-icon.icon-back-white').on('click', function() {
+      window.history.back()
+    })
   }
 }
 

+ 27 - 2
src/jfw/modules/app/src/web/staticres/jyapp/wxtsguide/main.js

@@ -188,6 +188,7 @@ var Guide = {
 			$("body").removeClass("step-3-body");
 		}else if(index == 4){
 			this.saveLSkeywords(true);
+      Guide.pointsTaskSuccessTip()
 			$(".step-3").hide();
 			$(".com-top-two-b").show();
 			$("body").removeClass("step-3-body");
@@ -214,6 +215,15 @@ var Guide = {
 			localStorage.tsGuide_step = index-1;
 		}
 	},
+  // 赚剑鱼币任务完成提示
+  pointsTaskSuccessTip: function () {
+    // 获取剑鱼币任务信息
+    var from = getUrlParam('from')
+    var point = getUrlParam('point') || 0
+    if(from && from === 'task'){
+      JYAlert("关注企业成功,获得" + point + "剑鱼币。")
+    }
+  },
 	appendHaskeywords: function(text){
 		text = $.trim(text);
 		if(this.checkIsMax(true) || text == ""){
@@ -468,9 +478,23 @@ var wantToUrl = getParam('url')
 if (wantToUrl) {
   Guide.params.url = decodeURIComponent(wantToUrl)
 }
-
+// 传入你要获取的参数的名字
+function getUrlParam (name) {
+  var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
+  if(Guide.params.url && Guide.params.url.split('?').length > 0) {
+    var par = Guide.params.url.split('?')[1]
+    var r = par.match(reg); //获取url中'?'符后的字符串并正则匹配
+    var context = '';
+    if (r != null) context = r[2];
+    // 释放变量
+    reg = null;
+    r = null;
+    return context == null || context == '' || context == 'undefined' ? '' : context;
+  } else {
+    return ''
+  }
+}
 Guide.clearHistoryPushDataCache()
-
 //
 var RecomKWs = function() {
 	this.count = 20;
@@ -854,6 +878,7 @@ var JYAlert = function(T,comStartFlag){
 		$("#jydialog").css({"left":"50%","margin-top":"-50px","margin-left":"-140px"});
 		$("#myModal").modal("show");
 	}
+  	$(".jyhead_mask").html(T)
 }
 // 获取已经设置过的关键词
 function getHadKeywords(step, callback){

+ 1 - 1
src/jfw/modules/app/src/web/templates/big-member/page_client_buyer_project_news.html

@@ -267,7 +267,7 @@
                     <div class="empty-container" v-show="listState.list.length === 0 && listState.loaded && !listState.loading">
                         <div class="empty-content-position">
                             <div class="image">
-                                <img src="/jyapp/big-member/image/img-empty.png">
+                                <img src="/common-module/public/image/jy-back.png">
                             </div>
                             <div class="empty-main tip-text">暂无数据</div>
                         </div>

+ 12 - 2
src/jfw/modules/app/src/web/templates/big-member/page_client_portrayal.html

@@ -174,7 +174,7 @@
               <div class="module-title-container bg-white project-news-module">
                 <div class="module-title project-news-title">
                   <span>招标动态</span>
-                  <!-- <span class="module-title-num">10</span> -->
+                  <span class="module-title-num">${dt.total}</span>
                 </div>
                 <div class="action-group">
                   <div class="action-button export" @click="onExport" v-if="dt.list.length">
@@ -204,11 +204,16 @@
                           <p class="i_time">${item.publishtime}</p>
                       </div>
                   </div>
-                  <div v-show="dt.isNext">
+                  <div v-show="dt.isNext && !noAuth">
                       <div class="more">
                           <span @click.stop="goProjectPage">查看更多</span>
                       </div>
                   </div>
+                  <div v-if="noAuth" class="dt-text-tips light-bg">
+                    免费用户支持查看最近30条招标动态,数据更新频率为每周1次,最近更新时间为${dt.updateTime},您可
+                    <!-- 新版超级订阅(购买全国)用户余额为0、大会员自定义用户、商机管理用户 -->
+                    <span class="highlight-text" @click="onDtTextClick('customer')">联系客服升级套餐实时查看更多数据</span>。
+                  </div>
                 </div>
                 <div class="empty-container bg-white" v-show="dt.list.length === 0 && dt.loaded">
                   <div class="empty-content-position">
@@ -223,6 +228,11 @@
                         <template v-else>暂无数据</template>
                       </div>
                   </div>
+                  <div v-if="noAuth" class="dt-text-tips">
+                    免费用户支持查看最近30条招标动态,数据更新频率为每周1次,最近更新时间为${dt.updateTime},您可
+                    <!-- 新版超级订阅(购买全国)用户余额为0、大会员自定义用户、商机管理用户 -->
+                    <span class="highlight-text"  @click="onDtTextClick('customer')">联系客服升级套餐实时查看更多数据</span>。
+                  </div>
                 </div>
               </div>
             </div>

+ 29 - 8
src/jfw/modules/app/src/web/templates/big-member/page_ent_portrait.html

@@ -164,7 +164,10 @@
                 </div>
                 <div class="card-column organization-code">
                   <div class="ent-info-label">联系方式</div>
-                  <div class="ent-info-text">${entBaseInfo.phone ? entBaseInfo.phone : '-'}</div>
+                  <div class="ent-info-text">
+                    <p>${entBaseInfo.phone ? entBaseInfo.phone : '-'}</p>
+                    <p class="highlight-text" v-show="phoneUnlockTip" @click="goToUnlock">解锁查看</p>
+                  </div>
                 </div>
               </div>
               <div class="card-row">
@@ -291,21 +294,21 @@
             <div class="module-title-container bg-white project-news-module">
               <div class="module-title project-news-title">
                 <span>中标动态</span>
-                <!-- <span class="module-title-num">10</span> -->
+                <span class="module-title-num">${topProject.total}</span>
               </div>
-              <div class="action-group" v-if="conf._13" key="action-group">
+              <div class="action-group" key="action-group">
                 <div class="action-button export" @click="onExport" v-if="topProject.list.length">
                     <i class="j-icon base-icon icon-download"></i>
                     <em class="action-button-text">数据导出</em>
                 </div>
-                <div class="action-button filters-button" @click="goHighSet" v-if="!hideDt">
+                <div class="action-button filters-button" @click="goHighSet" v-if="conf._13 && !hideDt">
                   <i class="j-icon base-icon icon-3hengxian"></i>
                   <em class="action-button-text">筛选条件</em>
                 </div>
               </div>
             </div>
             <div class="module-notice-tip">注:1个项目如同时发布了中标、成交、合同等结果类公告,则有多条数据</div>
-            <div class="tab-card-content vip_component" v-if="hideDt"
+            <div class="tab-card-content vip_component" v-if="!isLogin"
               style="height:9.16rem;background:url('/common-module/collection/image/bg/vip_bg_1.png?v={{Msg "seo" "version"}}') no-repeat;background-size:100% 100%"
               key="dt">
               <vip-component @tabactive="tabActive" :power="conf" type="item_1" :can-free-exp="canFreeExp"
@@ -314,7 +317,7 @@
               </vip-component>
             </div>
             <div class="tab-card-content" key="dt" v-else>
-              <ul class="project-info-list" v-show="topProject.list.length !== 0">
+              <ul class="project-info-list" v-if="topProject.list.length !== 0">
                 <li class="project-info-item border-line-b clickable" :class="{ visited: item.visited }" v-for="(item,index) in topProject.list"
                     @click="toProjectDetail(item)">
                   <div class="head-group">
@@ -333,11 +336,20 @@
                   </div>
                 </li>
                 <li class="show-more clickable"
-                    v-if="topProject.showGetNextButton && (isMemberAndSvip || canFreeTrial) && topProject.count > 3"
+                    v-if="topProject.showGetNextButton && (isMemberAndSvip || canFreeTrial) && topProject.count > 3 && noShowTip"
                     @click="goToFilterProjectNews">查看更多
                 </li>
+                <li v-if="(isFree && !canFreeTrial) || updateVipStatus || customerServiceStatus" class="dt-text-tips light-bg">
+                  免费用户支持查看最近30条招标动态,数据更新频率为每周1次,最近更新时间为${topProject.updateTime},您可
+                  <!-- 免费用户 -->
+                  <span class="highlight-text" v-if="(isFree && !canFreeTrial)" @click="onDtTextClick('buy')">开通超级订阅实时查看更多数据</span>
+                  <!-- 老版超级订阅用户、新版超级订阅(购买非全国)用户余额为0 -->
+                  <span class="highlight-text" v-if="updateVipStatus" @click="onDtTextClick('update')">升级超级订阅实时查看更多数据</span>
+                  <!-- 新版超级订阅(购买全国)用户余额为0、大会员自定义用户、商机管理用户 -->
+                  <span class="highlight-text" v-if="customerServiceStatus" @click="onDtTextClick('customer')">联系客服升级套餐实时查看更多数据</span>。
+                </li>
               </ul>
-              <div class="empty-container bg-white" v-show="topProject.list.length === 0 && topProject.loaded">
+              <div class="empty-container bg-white" v-else>
                 <div class="empty-content-position">
                     <div class="image">
                         <img src="/common-module/public/image/jy-back.png">
@@ -350,6 +362,15 @@
                       <template v-else>暂无数据</template>
                     </div>
                 </div>
+                <div v-if="(isFree && !canFreeTrial) || updateVipStatus || customerServiceStatus" class="dt-text-tips">
+                  免费用户支持查看最近30条招标动态,数据更新频率为每周1次,最近更新时间为${topProject.updateTime},您可
+                  <!-- 免费用户 -->
+                  <span class="highlight-text" v-if="(isFree && !canFreeTrial)" @click="onDtTextClick('buy')">开通超级订阅实时查看更多数据</span>
+                  <!-- 老版超级订阅用户、新版超级订阅(购买非全国)用户余额为0 -->
+                  <span class="highlight-text" v-if="updateVipStatus" @click="onDtTextClick('update')">升级超级订阅实时查看更多数据</span>
+                  <!-- 新版超级订阅(购买全国)用户余额为0、大会员自定义用户、商机管理用户 -->
+                  <span class="highlight-text" v-if="customerServiceStatus" @click="onDtTextClick('customer')">联系客服升级套餐实时查看更多数据</span>。
+                </div>
               </div>
             </div>
           </div>

+ 99 - 0
src/jfw/modules/app/src/web/templates/big-member/page_free_buyer_loading.html

@@ -0,0 +1,99 @@
+<!DOCTYPE html>
+<html lang="zh-CN" style="font-size: 50px;">
+
+<head>
+  <title>采购单位画像</title>
+
+  <!--引入公共资源头部-->
+  {{include "/big-member/meta.html"}}
+
+  <!--S-当前页必定需要预加载的资源-->
+  <link rel="preload" as="style" href=//cdn-common.jianyu360.com/cdn/lib/reset-css/5.0.1/reset.min.css />
+
+  <!--E-当前页必定需要预加载的资源-->
+
+  <!--S-当前页面的css资源-->
+  <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/index.css />
+  <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/reset-css/5.0.1/reset.min.css />
+  <link rel="stylesheet"
+    href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/mainSearch/css/j-icons.css?v={{Msg "seo" "version"}}' />
+  <!--E-当前页面的css资源-->
+  <style>
+    .skeleton {
+      height: 100%;
+      display: flex;
+      flex-direction: column;
+      justify-content: center;
+      align-content: center;
+      background-color: #fff;
+    }
+
+    .working {
+      width: 4rem;
+      height: 4rem;
+      margin: -0.4rem auto 0;
+    }
+    
+  </style>
+</head>
+
+<body>
+  <div class="j-container">
+    {{include "/big-member/header.html"}}
+    <div id="portrayal_loading" ref="container" class="j-main" v-cloak>
+      <div class="skeleton">
+        <img class="working" src="/jyapp/big-member/image/working.gif" alt="">
+      </div>
+    </div>
+  </div>
+
+  <!--S-必定需要预加载的资源-->
+  <link rel="preload" as="script" href=//cdn-common.jianyu360.com/cdn/lib/vue/2.6.11/vue.min.js />
+  <link rel="preload" as="script" href=//cdn-common.jianyu360.com/cdn/lib/zepto/1.2.0/zepto.min.js />
+  <!--E-必定需要预加载的资源-->
+
+  <!--S-当前页面的资源-->
+  <script src=//cdn-common.jianyu360.com/cdn/lib/vue/2.6.11/vue.min.js> </script>
+  <script src=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/vant.min.js></script>
+  <script src=//cdn-common.jianyu360.com/cdn/lib/zepto/1.2.0/zepto.min.js></script>
+  {{include "/big-member/commonjs.html"}}
+  <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/public/js/setTdk.js?v={{Msg "seo" "version"}}'></script>
+  <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/js/common.js?v={{Msg "seo" "version"}}'></script>
+  <script>
+    var vNode = {
+      delimiters: ['${', '}'],
+      el: '#portrayal_loading',
+      data: {},
+      created() {
+        this.getPowerInfo()
+      },
+      mounted() {},
+      methods: {
+        getPowerInfo: function () {
+          var _this = this
+          $.ajax({
+            type: 'GET',
+            url: '/bigmember/use/isAdd',
+            success: function (res) {
+              if (res.error_code == 0) {
+                if (res.data.entIsNew) {
+                  location.replace("/jyapp/big/page/client_portrayal?entName=" + utils.getParam('entName') + '&from=client')
+                } else {
+                  location.replace("/jyapp/big/page/unit_portrayal?entName=" + utils.getParam('entName'))
+                }
+              } else {
+                _this.$toast(res.error_msg)
+              }
+            },
+            error: function (error) {
+                console.log(error)
+            }
+          })
+        }
+      }
+    }
+    new Vue(vNode)
+  </script>
+</body>
+
+</html>

+ 10 - 1
src/jfw/modules/app/src/web/templates/big-member/page_free_buyer_project_news.html

@@ -268,7 +268,7 @@
                     <div class="empty-container" v-show="listState.list.length === 0 && listState.loaded && !listState.loading">
                         <div class="empty-content-position">
                             <div class="image">
-                                <img src="/jyapp/big-member/image/img-empty.png">
+                                <img src="/common-module/public/image/jy-back.png">
                             </div>
                             <div class="empty-main tip-text">暂无数据</div>
                         </div>
@@ -348,6 +348,15 @@
                     <span @click.stop="onExport">查看更多</span>
                   </div>
                 </div>
+                <div class="dt-text-tips">
+                  免费用户支持查看最近30条招标动态,数据更新频率为每周1次,最近更新时间为${dt.updateTime},您可
+                   <!-- 免费用户 -->
+                   <!-- <span class="highlight-text" v-if="userInfo.isFree" @click="onDtTextClick('buy')">开通超级订阅实时查看更多数据</span> -->
+                   <!-- 老版超级订阅用户、新版超级订阅(购买非全国)用户余额为0 -->
+                   <!-- <span class="highlight-text" v-if="updateVipStatus" @click="onDtTextClick('update')">升级超级订阅实时查看更多数据</span> -->
+                   <!-- 新版超级订阅(购买全国)用户余额为0、大会员自定义用户、商机管理用户 -->
+                   <span class="highlight-text" >联系客服升级套餐实时查看更多数据</span>。
+                </div>
             </div>
         </div>
     </div>

+ 1 - 1
src/jfw/modules/app/src/web/templates/big-member/page_free_ent_project_news.html

@@ -137,7 +137,7 @@
                     <div class="empty-container" v-show="listState.list.length === 0 && listState.loaded && !listState.loading">
                         <div class="empty-content-position">
                             <div class="image">
-                                <img src="/jyapp/big-member/image/img-empty.png">
+                                <img src="/common-module/public/image/jy-back.png">
                             </div>
                             <div class="empty-main tip-text">暂无数据</div>
                         </div>

+ 25 - 7
src/jfw/modules/app/src/web/templates/big-member/page_unit_portrayal.html

@@ -217,24 +217,24 @@
                 <div class="module-title-container bg-white project-news-module">
                   <div class="module-title project-news-title">
                     <span>招标动态</span>
-                    <!-- <span class="module-title-num">10</span> -->
+                    <span class="module-title-num">${dt.total}</span>
                   </div>
-                  <div class="action-group" v-if="!getStatus">
+                  <div class="action-group">
                     <div class="action-button export" @click="onExport" v-if="dt.list.length">
                         <i class="j-icon base-icon icon-download"></i>
                         <em id="mainSearch-selLable-dataExport" class="action-button-text">数据导出</em>
                     </div>
-                    <div class="action-button filters-button" @click="goHighSet">
+                    <div class="action-button filters-button" @click="goHighSet" v-if="!getStatus">
                       <i class="j-icon base-icon icon-3hengxian"></i>
                       <em class="action-button-text">筛选条件</em>
                     </div>
                   </div>
                 </div>
                 <div class="module-notice-tip">注:1个项目如同时发布了预告、招标、中标等多条公告,则有多条数据</div>
-                <div v-if="getStatus" class="tab-card-content vip_component" style="height:8.8rem;background:#fff url('/common-module/collection/image/buyer/cg-zbdt-bg.jpg?v={{Msg "seo" "version"}}') no-repeat center 50px;background-size:100% 100%;position:relative;">
+                <!-- <div v-if="getStatus" class="tab-card-content vip_component" style="height:8.8rem;background:#fff url('/common-module/collection/image/buyer/cg-zbdt-bg.jpg?v={{Msg "seo" "version"}}') no-repeat center 50px;background-size:100% 100%;position:relative;">
                   <buyer-example :useage="usageInfo" :userinfo="userInfo" :status="bigStatus" @open-page="onExampleOpenPage" :power="power" type="item_14" imgurl='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/image/buyer/cg-zbdt.png?v={{Msg "seo" "version"}}'></buyer-example>
-                </div>
-                <div class="tab-card-content" v-else>
+                </div> -->
+                <div class="tab-card-content">
                   <div class=" d_content" v-if="dt.list.length">
                     <div class="d_list" :class="{ visited: item.visited }" v-for="(item,index) in dt.list"
                       @click="goDetail(item)">
@@ -252,11 +252,20 @@
                         <p class="i_time">${item.publishtime}</p>
                       </div>
                     </div>
-                    <div v-show="dt.isNext">
+                    <div v-show="dt.isNext && !getStatus">
                       <div class="more">
                         <span @click.stop="goProjectPage">查看更多</span>
                       </div>
                     </div>
+                    <div v-if="getStatus" class="dt-text-tips light-bg">
+                      免费用户支持查看最近30条招标动态,数据更新频率为每周1次,最近更新时间为${dt.updateTime},您可
+                      <!-- 免费用户 -->
+                      <span class="highlight-text" v-if="userInfo.isFree" @click="onDtTextClick('buy')">开通超级订阅实时查看更多数据</span>
+                      <!-- 老版超级订阅用户、新版超级订阅(购买非全国)用户余额为0 -->
+                      <span class="highlight-text" v-if="updateVipStatus" @click="onDtTextClick('update')">升级超级订阅实时查看更多数据</span>
+                      <!-- 新版超级订阅(购买全国)用户余额为0、大会员自定义用户、商机管理用户 -->
+                      <span class="highlight-text" v-if="customerServiceStatus" @click="onDtTextClick('customer')">联系客服升级套餐实时查看更多数据</span>。
+                    </div>
                   </div>
                   <div class="empty-container bg-white" v-show="dt.list.length === 0 && dt.loaded">
                     <div class="empty-content-position">
@@ -271,6 +280,15 @@
                           <template v-else>暂无数据</template>
                         </div>
                     </div>
+                    <div v-if="getStatus" class="dt-text-tips">
+                      免费用户支持查看最近30条招标动态,数据更新频率为每周1次,最近更新时间为${dt.updateTime},您可
+                       <!-- 免费用户 -->
+                       <span class="highlight-text" v-if="userInfo.isFree" @click="onDtTextClick('buy')">开通超级订阅实时查看更多数据</span>
+                       <!-- 老版超级订阅用户、新版超级订阅(购买非全国)用户余额为0 -->
+                       <span class="highlight-text" v-if="updateVipStatus" @click="onDtTextClick('update')">升级超级订阅实时查看更多数据</span>
+                       <!-- 新版超级订阅(购买全国)用户余额为0、大会员自定义用户、商机管理用户 -->
+                       <span class="highlight-text" v-if="customerServiceStatus" @click="onDtTextClick('customer')">联系客服升级套餐实时查看更多数据</span>。
+                    </div>
                   </div>
                 </div>
                 <!--                <div v-if="isActive ==1" class="d_content">-->

+ 55 - 17
src/jfw/modules/app/src/web/templates/dataExport/dataExport.html

@@ -237,8 +237,10 @@
     <div class="page" style="background-color:#F5F6F7;">
         <div class='main'>
             <div class="screeningCondition">
-                <div class="sc-btn"><span class="sc-text">已存筛选&nbsp;</span><span class="sc-num">0</span></div>
-                <span class="sc-icon"></span>
+                <div  class="sc-btnContent">
+                    <span class="sc-icon"></span>
+                    <div class="sc-btn"><span class="sc-text">已存筛选&nbsp;</span><span class="sc-num">0</span></div>
+                </div>
             </div>
             <div class="progressBox">
                 <div class="progress" style="margin-top: -4px">
@@ -521,15 +523,17 @@
                 window.location.reload();
             }
         });
+        
             //接口回显逻辑
+            try{
             $.ajax({
         type: 'get',
         url: '/subscribepay/dataExportPack/screenList',
-        async:false,
+        async:sessionStorage.getItem('goScreen') != '1'?false:true,
         success: function (res) { 
           if(res.data && res.data.length > 0){
             $('.sc-num').text(res.data.length)
-            if(sessionStorage.getItem('goScreen') == '2'){
+            if(sessionStorage.getItem('goScreen') != '1'){ // 非设置筛选条件相关的页面回来使用接口数据回显
                 localStorage.removeItem('date') 
             localStorage.removeItem('areaHtml') 
             localStorage.removeItem('city') 
@@ -544,6 +548,7 @@
             localStorage.removeItem('subTypes')   
             localStorage.removeItem('buyer') 
             localStorage.removeItem('winner')
+            localStorage.setItem('index','-1') 
             let val =res.data[0]
             if(val.publishtime){
         localStorage.setItem('date',val.publishtime) 
@@ -576,11 +581,31 @@
             cityarr = cityarr.concat(getCitiesFromJSONMap(e))     
           })
           allcity = cityarr.toString()
-          localStorage.setItem('province',val.area) 
-          localStorage.setItem('city',allcity +','+ str) 
-          let area = allcity +','+ val.region
-          area = area.replace(/,/g, " ")
-          localStorage.setItem('area',area) 
+          localStorage.setItem('province', val.area)
+        if (str) {
+          localStorage.setItem('city', allcity + ',' + str)
+        } else {
+          localStorage.setItem('city', allcity)
+        }
+        let area;
+        if (allcity) {
+          area = allcity + ',' + val.region
+        } else {
+          area = val.region
+        }
+        let areaList = area.split(',') || []
+        areaList.forEach((e, index) => {
+          if(e === '上海' || e === '北京' || e === '天津' || e === '重庆'){
+            areaList[index] = e + '市'
+          }
+          if( e === '台湾'){
+            areaList[index]  = e + '省'
+          }
+        })
+        let areaStr = areaList.join(',')
+        if(areaStr){
+          localStorage.setItem('area', areaStr.replace(/,/g, " "))
+        }
         }
         if(!val.area && !val.city){
           localStorage.setItem('area','全国') 
@@ -588,7 +613,8 @@
         }
          console.log(val.industry)
         if(val.industry){
-          localStorage.setItem('industry',val.industry)    
+          let str = val.industry.replace(/,/g, " ")
+          localStorage.setItem('industry',str)    
         }else{
           localStorage.setItem('industry','全部')   
         }
@@ -597,11 +623,21 @@
         }else{
           localStorage.setItem('buyclass','[]')   
         }
-        if(val.keyWord && val.keyWord.length > 0){
-          localStorage.setItem('keyWord',JSON.stringify(val.keyWord))      
-        }else{
-          localStorage.setItem('keyWord','[]')  
+        if (val.keywords && val.keywords.length > 0) {
+        let keyjson
+        try{
+          keyjson = JSON.parse(val.keywords)
+        }catch(e){
+          keyjson = val.keywords
         }
+       // keyWord储存本地处理为驼峰式 自助导出页面使用本地回显存取的为驼峰式
+        keyjson.forEach((item) =>{
+          item.keyWord = item.keyword 
+          })
+        localStorage.setItem('keyWord', JSON.stringify(keyjson))
+       } else {
+        localStorage.setItem('keyWord', '[]')
+       }
         if(val.selectType){
           localStorage.setItem('export_selectType',selectType_dispose(val.selectType))  
         }
@@ -626,15 +662,16 @@
           localStorage.setItem('winner',val.winner)
         }      
         }
-
-          }
+      }
           sessionStorage.setItem('goScreen','2');
          },
          error: function (error) {
          }
          })
+        }catch(e){
+            
+        }
    
-        localStorage.setItem('index','-1') 
         //
         var scrollTop = 0;
         //
@@ -1394,6 +1431,7 @@
                     } else {
                       if (data._id !== "") {
                         // window.location.href = "/jyapp/front/dataExport/toCreateOrderPage?id=" + data._id + "&source=d&payway=" + pay_way + "&dataspec=" + data_spec;
+                        sessionStorage.setItem('goScreen','1'); // 储存参数 返回页面不使用接口回显使用已存本地存储
                         window.location.href = "/jy_mobile/dataexport/limitpreview/" + data._id + '?type=senior';
                       }
                     }

+ 1 - 1
src/jfw/modules/app/src/web/templates/dataExport/dataExport_buyerEdit.html

@@ -52,7 +52,7 @@
 				<section class="content">
 				<div class="enter addkeyWord">
 					<input type="text" class="enterOne" placeholder="采购单位名称" />
-					<div class="btn">
+					<div class="btn fixed-bottom">
 						<button disabled class="save-btn">确认</button>
 						<button class="close">取消</button>
 					</div>

+ 1 - 1
src/jfw/modules/app/src/web/templates/dataExport/dataExport_buyerInput.html

@@ -47,7 +47,7 @@
         <section class="content">
         <div class="enter addkeyWord">
         <input type="text" class="enterOne" placeholder="采购单位名称" />
-        <div class="btn">
+        <div class="btn fixed-bottom">
         <button disabled class="save-btn">确认</button>
         <button class="close">取消</button>
         </div>

+ 1 - 1
src/jfw/modules/app/src/web/templates/dataExport/dataExport_winnerEdit.html

@@ -49,7 +49,7 @@
 				<div class="keyWord">
 						<div class="enter addkeyWord">
 						<input type="text" class="enterOne" placeholder="中标单位名称" />
-						<div class="btn">
+						<div class="btn fixed-bottom">
 						<button class="save-btn" disabled>确认</button>
 						<button class="close">取消</button>
 				</div>

+ 1 - 1
src/jfw/modules/app/src/web/templates/dataExport/dataExport_winnerInput.html

@@ -46,7 +46,7 @@
         <section class="content">
         <div class="enter addkeyWord">
         <input type="text" class="enterOne" placeholder="中标单位名称" />
-        <div class="btn">
+        <div class="btn fixed-bottom">
         <button class="save-btn" disabled>确认</button>
         <button class="close">取消</button>
     </div>

+ 0 - 51
src/jfw/modules/app/src/web/templates/followent/list.html

@@ -37,56 +37,6 @@
 				return;
 			}
 			var data = res.list;
-			// $.ajax({
-			// 		type: 'POST',
-			// 		url: '/publicapply/bidcoll/power',
-			// 		success: function(res) {
-			// 				console.log(res)
-			// 				if(res.error_code == 0) {
-			// 					if(!res.data.entniche && !res.data.member && res.data.vip <= 0){
-			// 							(window.slotbydup = window.slotbydup || []).push({
-			// 									id: "u6603901",
-			// 									container: "_yzpxro2x1n",
-			// 									async: true
-			// 							});
-			// 							getAjaxAdv()
-			// 					}
-			// 				}
-			// 		},
-			// 		error: function(err) {
-			// 				console.log(err)
-			// 		}
-			// })
-			// function getAjaxAdv () {
-			// 		$.ajax({
-			// 			type: 'POST',
-			// 			url: '/publicapply/adLeague/exposure',
-			// 			data: {
-			// 					client: 'APP',
-			// 					id: 'ad8',
-			// 					position: '关注的企业列表页底部'
-			// 			},
-			// 			success: function(res) {
-			// 					console.log(res)
-			// 			}
-			// 		})
-			// }
-			// addEventListener('focus', function() {
-			// 		if(document.activeElement = document.getElementById('iframeu6603901_0')) {
-			// 				$.ajax({
-			// 						type: 'POST',
-			// 						url: '/publicapply/adLeague/click',
-			// 						data: {
-			// 							client: 'APP',
-			// 							id: 'ad8',
-			// 							position: '关注的企业列表页底部'
-			// 						},
-			// 						success: function(res) {
-			// 								console.log(res)
-			// 						}
-			// 				})
-			// 		}
-			// });
 			var allHtml = "";
 			var jyno = 0;
 			var fronthtml = "";
@@ -268,7 +218,6 @@ function receivePushMessageHandle(type,url){
             </div>
             <div class="jylistbottom" style="display: none;">
 								<img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/followent/images/wx/jydustbin.png?v={{Msg "seo" "version"}}"/>批量移除30天无更新企业
-								<div class="_j07axdxi26i"></div>
 						</div>
 						<!-- <div class="_yzpxro2x1n" id="pro_footer"></div> -->
             <div class="easypopup" id="easypopup">

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 97 - 1
src/jfw/modules/app/src/web/templates/frontRouter/fileRecord/sess/index.html


+ 11 - 4
src/jfw/modules/app/src/web/templates/frontRouter/userMerge/free/confirm.html

@@ -98,6 +98,7 @@
                 checkedColor: '#2CB7CA',
                 // from默认为'', 值为bindPhone时表示从手机号绑定页面/jyapp/account/phone/bind?mode=mergeBind过来的
                 from: '',
+                direct: '',
                 token: '',
                 userName:{
                     wx:'',
@@ -120,10 +121,14 @@
             },
             created () {
                 this.token = utils.getParam('token')
-                var from = utils.getParam('from')
-                if (from) {
-                    this.from = from
-                }
+              var from = utils.getParam('from')
+              if (from) {
+                this.from = from
+              }
+              var direct = utils.getParam('toDirect')
+              if (direct) {
+                this.direct = direct
+              }
                 this.getInfo()
             },
             methods: {
@@ -252,6 +257,8 @@
                         JyObj.refreshAppointTab('subscribe', 1)
                         JyObj.refreshAppointTab('box', 1)
                         JyObj.refreshAppointTab('me', 1)
+                    }else if (this.direct !==""){
+                        window.location.replace(this.direct)
                     } else {
                         history.go(-2)
                     }

+ 10 - 10
src/jfw/modules/app/src/web/templates/me/account.html

@@ -50,16 +50,16 @@
                         </div>
                         <i class="van-icon van-icon-arrow van-cell__right-icon phone-icon"></i>
                     </div>
-                    <div role="button" class="van-cell van-cell--clickable van-cell--center companyClick" >
-                        <div class="van-cell__title">
-                            <span>公司</span>
-                        </div>
-                        <div class="van-cell__value">
-                            <span class="company-value" style="display:none"></span>
-                            <span class="bind-company"></span>
-                        </div>
-                        <i class="van-icon van-icon-arrow van-cell__right-icon phone-icon"></i>
-                    </div>
+<!--                    <div role="button" class="van-cell van-cell&#45;&#45;clickable van-cell&#45;&#45;center companyClick" >-->
+<!--                        <div class="van-cell__title">-->
+<!--                            <span>公司</span>-->
+<!--                        </div>-->
+<!--                        <div class="van-cell__value">-->
+<!--                            <span class="company-value" style="display:none"></span>-->
+<!--                            <span class="bind-company"></span>-->
+<!--                        </div>-->
+<!--                        <i class="van-icon van-icon-arrow van-cell__right-icon phone-icon"></i>-->
+<!--                    </div>-->
                 </div>
                 <div class="bindinfo">
                     <div class="van-cell-group__title">绑定信息</div>

+ 1 - 0
src/jfw/modules/app/src/web/templates/tags/class.html

@@ -29,6 +29,7 @@
     <div class="loading-icon"></div>
   </div>
   {{include "/tags/template/tag-footer-common-assets.html"}}
+  {{include "/tags/template/tag-footer-concat.html"}}
   <script>
     var templateData = {
       homeLink: {{.T.HomeOrigin}},

+ 1 - 0
src/jfw/modules/app/src/web/templates/tags/details.html

@@ -38,6 +38,7 @@
             {{include "/tags/template/tag-breadcrumb-navigation.html"}}
         {{end}}
         {{include "/tags/template/tag-footer.html"}}
+        {{include "/tags/template/tag-footer-concat.html"}}
       </div>
     </main>
   </section>

+ 1 - 0
src/jfw/modules/app/src/web/templates/tags/strategy.html

@@ -27,6 +27,7 @@
             {{include "/tags/template/tag-breadcrumb-navigation.html"}}
         {{end}}
         {{include "/tags/template/tag-footer.html"}}
+        {{include "/tags/template/tag-footer-concat.html"}}
       </div>
     </main>
   </section>

+ 1 - 1
src/jfw/modules/app/src/web/templates/tags/template/tag-area-nav.html

@@ -1,6 +1,6 @@
 <section class="tag-area-nav-container">
   <div class="tag-area-nav-list-container simple-area">
-    <p class="tag-area-nav-list-title">分站</p>
+    <div class="tag-area-nav-list-title">分站</div>
     <ul class="tag-area-nav-list">
       {{range $val:=.T.hotArea}}
       <li class="tag-area-nav-item">

+ 1 - 1
src/jfw/modules/app/src/web/templates/tags/template/tag-breadcrumb-navigation.html

@@ -1,6 +1,6 @@
 <section class="tag-breadcrumb-navigation ellipsis">
   <span>当前位置:</span>
-  <a href="{{.T.Home}}">剑鱼标讯首页</a>
+  <a href="/">剑鱼标讯首页</a>
   {{range $l:=.T.currentLocation}}
   {{if $l.Url}}
   &gt; <a href="{{$l.Url}}">{{$l.Name}}</a>

+ 13 - 0
src/jfw/modules/app/src/web/templates/tags/template/tag-footer-concat.html

@@ -0,0 +1,13 @@
+<section class="tag-footer-container fixed">
+  <div class="footer-button-group">
+    <a class="seo-button theme-main radius phone-concat-customer" data-tel="400-108-6670" href="tel:400-108-6670">
+      <span class="j-icon base-icon icon-phone-white-solid"></span>
+      <p>电话咨询</p>
+    </a>
+    <a class="seo-button theme-main radius" href="/jyapp/free/login?url=/jyapp/jylab/mainSearch">
+      <span class="j-icon base-icon icon-person-white-solid"></span>
+      <p>登录/注册</p>
+    </a>
+  </div>
+</section>
+

+ 1 - 1
src/jfw/modules/app/src/web/templates/tags/template/tag-footer.html

@@ -5,7 +5,7 @@
       <a class="tel-link" data-tel="400-108-6670" href="tel:400-108-6670">400-108-6670</a>
     </div>
     <div class="footer-card-line bottom-navs">
-      <a class="bottom-nav-link" href="{{.T.Home}}">首页</a>
+      <a class="bottom-nav-link" href="/">首页</a>
       <a class="bottom-nav-link" href="/jyapp/free/swordfish/about">关于剑鱼标讯</a>
     </div>
     <div class="footer-divider"></div>

+ 1 - 0
src/jfw/modules/app/src/web/templates/tags/template/tag-header.html

@@ -1,4 +1,5 @@
 <div class="tag-header-container j-header jy-app-header">
+    <i class="j-icon base-icon icon-back-white" style="display: block;flex-shrink: 0;margin-right: 0.16rem;"></i>
     <a class="search-container bg-white" href="/jy_mobile/search/middle/bidding">
         <i class="search-icon j-icon base-icon icon-search"></i>
         <div class="search-input">请输入您要搜索的内容</div>

+ 0 - 44
src/jfw/modules/app/src/web/templates/weixin/search/mainSearch.html

@@ -841,51 +841,7 @@
     }
   })
 
-  function advHtml() {
-    (window.slotbydup = window.slotbydup || []).push({
-      id: "u6603898",
-      container: "_ouq34ajmfig",
-      async: true
-    });
-    (window.slotbydup = window.slotbydup || []).push({
-      id: "u6603898",
-      container: "_nxko9k32d8d",
-      async: true
-    });
-    getAjaxAdv()
-  }
 
-  function getAjaxAdv() {
-    $.ajax({
-      type: 'POST',
-      url: '/publicapply/adLeague/exposure',
-      data: {
-        client: 'APP',
-        id: 'ad5',
-        position: '搜索列表页'
-      },
-      success: function (res) {
-        console.log(res)
-      }
-    })
-  }
-
-  addEventListener('focus', function () {
-    if (document.activeElement = document.getElementById('iframeu6603898_0')) {
-      $.ajax({
-        type: 'POST',
-        url: '/publicapply/adLeague/click',
-        data: {
-          client: 'APP',
-          id: 'ad5',
-          position: '搜索列表页'
-        },
-        success: function (res) {
-          console.log(res)
-        }
-      })
-    }
-  });
 </script>
 <script type="text/javascript">
   var adv_url = "/datareport/page/introduce";

+ 254 - 108
src/jfw/modules/app/src/web/templates/weixin/wxinfocontent.html

@@ -28,9 +28,12 @@
     <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/bootstrap.min.js"></script>
     <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/js/share.js?v={{Msg "seo" "version"}}"></script>
     <script src="//cdn-common.jianyu360.com/cdn/lib/html2canvas/1.3.3/dist/html2canvas.min.js"></script>
+    <link href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/tags/css/tags-module-common.css?v={{Msg "seo" "version"}}' rel="stylesheet" />
+
 
     {{include "/common/js.html"}}
     <style>
+      p{margin: 0;}
       html > body {
         background: #fff;
       }
@@ -344,6 +347,7 @@
             </ul>
         </div>
     </div>
+    {{if .T.obj.hasSession}}
     <div class="app-layout-header jy-app-header">
         <span class="app-back jyapp-icon jyapp-icon-zuojiantou share-back"></span>
         <span class="header-title">公告信息</span>
@@ -399,61 +403,18 @@
             <!-- 分享 end -->
 	    </span>
     </div>
+    {{else}}
+    {{include "tags/template/tag-header.html" .}}
+    {{end}}
+
     <div class="app-layout-content-b">
+        {{if not .T.obj.hasSession}}
+        {{include "tags/template/tag-register-login-group.html" .}}
+        {{include "tags/template/tag-info-type-nav.html" .}}
+        {{include "tags/template/tag-area-nav.html" .}}
+        {{end}}
         <div class="mask"></div>
         <div class="info">
-            <!-- <div class="_c2l0w7g3cjf"></div> -->
-            <script type="text/javascript">
-            $.ajax({
-                type: 'POST',
-                url: '/publicapply/bidcoll/power',
-                success: function(res) {
-                    if(res.error_code == 0) {
-                        if(!res.data.entniche && !res.data.member && res.data.vip <= 0) {
-                            (window.slotbydup = window.slotbydup || []).push({
-                                id: "u6603899",
-                                container: "_c2l0w7g3cjf",
-                                async: true
-                            });
-                            getAjaxAdv()
-                        }
-                    }
-                },
-                error: function(err) {
-                        console.log(err)
-                }
-			})
-                function getAjaxAdv () {
-                    $.ajax({
-                    type: 'POST',
-                    url: '/publicapply/adLeague/exposure',
-                    data: {
-                        client: 'APP',
-                        id: 'ad7',
-                        position: '公告详情页顶部'
-                    },
-                    success: function(res) {
-                        // console.log(res)
-                    }
-                    })
-                }
-                addEventListener('focus', function() {
-                    if(document.activeElement = document.getElementById('iframeu6603899_0')) {
-                        $.ajax({
-                            type: 'POST',
-                            url: '/publicapply/adLeague/click',
-                            data: {
-                                client: 'APP',
-                                id: 'ad7',
-                                position: '公告详情页顶部'
-                            },
-                            success: function(res) {
-                                // console.log(res)
-                            }
-                        })
-                    }
-                });
-            </script>
 <!--            <div v-if="item.site === '剑鱼信息发布平台' || item.spidercode === 'a_jyxxfbpt_gg'" class="yhfb">用户发布</div>-->
             {{if .T.obj.site}}
             {{if eq .T.obj.site "剑鱼信息发布平台"}}
@@ -967,7 +928,8 @@
                             <span class="concat-kf">联系客服</span>
 							<span class="go-buy-file-pack" style="display: none">立即充值</span>
                             <span class="free-open-tip" style="display: none;">
-                              <span class="down-more-text">下载更多附件</span>
+                              <span class="free-has-num down-more-text" style="display:none;">本月剩余:<em class="file-count"></em>个</span>
+                              <span class="free-no-num down-more-text" style="display: none;">下载更多附件</span>
                               <span class="open-vip-btn">开通超级订阅</span>
                             </span>
                         </div>
@@ -1132,6 +1094,10 @@
         {{end}}
         {{end}}
         {{end}}
+        {{if not .T.obj.hasSession}}
+        {{include "tags/template/tag-breadcrumb-navigation.html" .}}
+        {{include "tags/template/tag-footer.html" .}}
+        {{end}}
     </div>
 </div>
 <!-- 三方认证弹窗 -->
@@ -1146,6 +1112,7 @@
 <script src='/common-module/nps-common/js/nps.js?v={{Msg "seo" "version"}}'></script>
 <script src='/common-module/forward-share/js/forward.js?v={{Msg "seo" "version"}}'></script>
 <script src='/common-module/bidstatus-update/js/bid-status-update.js?v={{Msg "seo" "version"}}'></script>
+
 <!-- <script src="https://cdn.bootcss.com/vConsole/3.3.4/vconsole.min.js"></script>
 <script> new VConsole(); </script> -->
 <script>
@@ -1155,7 +1122,6 @@
       $(this).wrap('<div class="scroll-tab-container" style="max-width: 100%;overflow-x: scroll;"></div>')
     })
   });
-
     var canRead = {{.T.canRead}} //免费用户当天查看是否查看三次公告
     var	shareimgflag = true;
     var area = {{.T.obj.area}}
@@ -1419,7 +1385,8 @@
                 window.vipStatus = res.data.vipStatus // 是否是超级订阅用户
                 window.viper = res.data.viper // 是否是超级订阅老用户 false:老用户 true: 新用户
                 window.entniche = res.data.entniche // 商机管理用户
-                window.fileNum = res.data.fileNum // 超级订阅用户可下载附件次数
+                // window.fileNum = res.data.fileNum // 超级订阅用户可下载附件次数
+                window.memberStatus = res.data.memberStatus // 大会员
                 window.isEntService = res.data.isEntService
                 bigstatus = res.data.memberStatus
                 hasServiceArr = res.data.power ? res.data.power : []
@@ -1470,13 +1437,13 @@
                     })
                   }
                 }
-                //非大会员或大会员无此功能 且是新超级订阅用户
-                if (res.data && res.data.vipStatus > 0 && res.data.viper&&!window.isMemberAndPower) {
-                  $('.file-count-tip').css('display', 'inline-block')
-                  $('.go-buy-file-pack').css('display', 'inline-block')
-                  $('.icon-help').css('display', 'inline-block')
-                  $('.file-count').html(res.data.fileNum)
-                }
+                // //非大会员或大会员无此功能 且是新超级订阅用户
+                // if (res.data && res.data.vipStatus > 0 && res.data.viper&&!window.isMemberAndPower) {
+                //   $('.file-count-tip').css('display', 'inline-block')
+                //   $('.go-buy-file-pack').css('display', 'inline-block')
+                //   $('.icon-help').css('display', 'inline-block')
+                //   // $('.file-count').html(res.data.fileNum)
+                // }
                 setEntServiceInfo(res)
             },
             error:function(err) {
@@ -2034,7 +2001,7 @@
       e.preventDefault()
       location.href = '/jyapp/big/page/client_portrayal?entName=' + encodeURIComponent({{.T.obj.buyer}}) + '&from=client'
     }
-    function downFileOfVIP (fileName, callback) {
+    function downloadFileAjax (fileName, callback) {
         // 有下载次数
         $.ajax({
             type: 'post',
@@ -2047,27 +2014,44 @@
                 title: title
             },
             success: function (r) {
-                if (r&&r.r&&r.r.code&&r.r.code<0&&window.vipStatus>0){
-                    // 次数用完提醒联系客服
-                    vant.Dialog.confirm({
-                        message: '您本月附件下载机会已消耗完毕,如需下载更多附件,请前往充值。',
-                        showCancelButton: true,
-                        confirmButtonText: '立即充值',
-                        confirmButtonColor: '#2ABDD1',
-                        className: 'custom-dialog',
-                        width: 303
-
-                    }).then(() => {
-                        location.href = '/jy_mobile/common/order/create/filepack?type=0'
-                    })
-                        .catch(() => {})
+                  // 重新获取下载次数
+                  subPoint()
+                if (r&&r.r&&r.r.code&&r.r.code<0){
+                    // 次数用完提醒
+                      if(window.vipStatus>0) {
+                        vant.Dialog.confirm({
+                          message: '您本月附件下载机会已消耗完毕,如需下载更多附件,请前往充值。',
+                          showCancelButton: true,
+                          confirmButtonText: '立即充值',
+                          confirmButtonColor: '#2ABDD1',
+                          className: 'custom-dialog',
+                          width: 303
+
+                        }).then(() => {
+                          location.href = '/jy_mobile/common/order/create/filepack?type=0'
+                        }).catch(() => {})
+                      } else if(window.isFree) {
+                        vant.Dialog.confirm({
+                          title: '开通超级订阅',
+                          message: '您的免费【附件下载】次数已使用完,暂无免费查看权限。如需查看更多,请开通超级订阅获取更多权限。',
+                          showCancelButton: true,
+                          confirmButtonText: '去开通',
+                          confirmButtonColor: '#2ABDD1',
+                          className: 'custom-dialog',
+                          width: 303,
+                          messageAlign: 'left',
+                        }).then(() => {
+                          // location.href = '/jyapp/vipsubscribe/vipsubscribe_new'
+                          location.href = '/jy_mobile/common/order/create/svip?type=buy'
+                        }).catch(() => {})
+                      }
                     return
                 }else if (r && r.m === '' && r.r) {
                     var url = r.r.downUrl
                     if (url){
                         if (!r.r.isExists){
-                            window.fileNum = window.fileNum - 1;
-                            $('.file-count').html($('.file-count').text()-1)
+                            // window.fileNum = Number(window.fileNum) - 1;
+                            // $('.file-count').text(Number($('.file-count').text())-1)
                         }
                         if(mySysIsIos()){
                             typeof callback === 'function' ? callback(url) : null
@@ -2084,6 +2068,57 @@
         })
     }
 
+    // 获取当前用户附件下载数量(用户下载次数判断需要)
+    window.downloadNum = 0
+    function subPoint() {
+      $.ajax({
+        url: '/jypay/resourcePack/account',
+        type: 'POST',
+        contentType: 'application/x-www-form-urlencoded',
+        data: {
+          product: 'attachmentDownPack'
+        },
+        dataType: 'json'
+      }).done(res => {
+        if (res.error_msg === '' && res.data && res.data.data) {
+          try {
+            var downloadNum =  res.data.data[0].number || 0
+            window.downloadNum = downloadNum // 免费用户可下载附件次数
+            window.fileNum = downloadNum // 超级订阅用户可下载附件次数
+            // 免费用户处理
+            if(window.isFree) {
+              // 免费用户且未留资过也未体验过,展示文案(引导留资)
+              if (window.freeFile == 0) {
+                if(downloadNum > 0) {
+                  $('.free-down-text').text('免费用户享有' + downloadNum + '次附件下载权益')
+                } else {
+                  $('.free-down-text').text('免费用户享有1次附件下载权益')
+                }
+              } else {
+                // 免费用户体验过
+               if(downloadNum > 0){
+                  $('.free-has-num').show() // 展示下载次数
+                  $('.free-no-num').hide()
+                } else{
+                 $('.free-has-num').hide() // 隐藏下载次数
+                 $('.free-no-num').show() // 展示下载更多附件
+               }
+              }
+            }
+            //非大会员或大会员无此功能 且是新超级订阅用户
+            if ( window.vipStatus > 0 && window.viper&&!window.isMemberAndPower) {
+              $('.file-count-tip').css('display', 'inline-block')
+              $('.go-buy-file-pack').css('display', 'inline-block')
+              $('.icon-help').css('display', 'inline-block')
+            }
+            // 下载次数
+            $('.file-count').html(downloadNum)
+          } catch (e) {
+            console.warn(e)
+          }
+        }
+      })
+    }
     // 附件下载展示
     function andownload() {
         $.ajax({
@@ -2106,26 +2141,31 @@
                             html += "<li class='downs'>"+"<a class='menu_list' data-href="+data.data.attachment[i].downurl+">"+data.data.attachment[i].filename+"</a></li>"
                         }
                     }
-
                     $('.download-list>ul').append(html)
-                     // 下载附件
+                  // 下载附件
                     $('.downs').on('click', function() {
                       var url = $(this).find('a').attr('data-href')
                       var size = $(this).find('a').attr('date-size')
                       var fileName = $(this).find('a').text()
-                      console.log(window.isNoMember, window.isFree,window.freeFile, window.vipStatus, window.viper)
+                      console.log(window.isNoMember, window.isFree,window.freeFile, window.downloadNum,window.vipStatus, window.viper)
                       // 免费用户
                       if (window.isFree) {
                         // 判断有无体验过 0:未体验过
                         if (window.freeFile == 0) {
+                          // h5页跳转走数据不刷新处理
+                          if (utils.$envs.inH5) {
+                            subPoint()
+                          }
                           // 判断有无留过资 且未体验过 - 去留资
                           location.href = '/jyapp/frontPage/bigmember/free/perfect_info?source=article_attach_freeuser'
                           return
-                        } else if (window.freeFile < 0 ) {
-                          // 免费用户 体验过 下载次数为-1 弹框提醒跳至超级订阅购买页
+                        } else if (window.freeFile < 0 && window.downloadNum <= 0) {
+                          // 免费体验用户,无下载此处提示开通超级订阅
+                          // 免费用户 体验过(freeFile=-1) 剩余下载次数 弹框提醒跳至超级订阅购买页
+                          // message: '您已经免费解锁过【附件下载】权益1次,暂无免费查看权限。如需查看更多,请开通超级订阅获取更多权限。',
                           vant.Dialog.confirm({
                             title: '开通超级订阅',
-                            message: '您已经免费解锁过【附件下载】权益1次,暂无免费查看权限。如需查看更多,请开通超级订阅获取更多权限。',
+                            message: '您的免费【附件下载】次数已使用完,暂无免费查看权限。如需查看更多,请开通超级订阅获取更多权限。',
                             showCancelButton: true,
                             confirmButtonText: '去开通',
                             confirmButtonColor: '#2ABDD1',
@@ -2138,19 +2178,25 @@
                           })
                           .catch(() => {})
                           return
-                        }else if(window.freeFile>0){
+                        }else{
+                          // P317版本改为免费用户只要有下载次数,均可正常下载
                           window.freeFile=-1
-                          //
-                          gotoFilePage($(this).find('a').text())
+                          // IOS APP端特殊流程处理,先提示填写邮箱后扣次数
+                          if(mySysIsIos()) {
+                            return iosShow(url, fileName,size)
+                          }
+                          downloadFileAjax(fileName)
+                          // gotoFilePage($(this).find('a').text())
                         }
                       } else {
                         // 付费用户
-                        // 大会员用户 有下载权限
-                        if (window.isMemberAndPower) {
+                        // 大会员用户 且有附件下载个数
+                        if (window.memberStatus > 0) {
                           if(mySysIsIos()){
                             iosShow(url,fileName,size,false)
                           } else {
-                            location.href = url
+                            downloadFileAjax(fileName)
+                            // location.href = url
                           }
                           return
                         }
@@ -2162,13 +2208,13 @@
                             if(mySysIsIos()) {
                               return iosShow(url, fileName,size,false)
                             }
-                            downFileOfVIP(fileName)
+                            downloadFileAjax(fileName)
                             return
                             //if (window.fileNum <= 0) {
                             //}else{
-                              //window.fileNum = window.fileNum - 1;
-                              //gotoFilePageOfVip($(this).find('a').text())
-                              //return
+                            //window.fileNum = window.fileNum - 1;
+                            //gotoFilePageOfVip($(this).find('a').text())
+                            //return
                             //}
                           } else {
                             // 老超级订阅用户 提醒升级
@@ -2189,6 +2235,16 @@
                             return
                           }
                         }
+                        // 商机管理用户只要有个数就有下载权限
+                        if(window.entniche && window.downloadNum > 0){
+                          if(mySysIsIos()){
+                            iosShow(url,fileName,size,false)
+                          } else {
+                            downloadFileAjax(fileName)
+                          }
+                          return
+                        }
+
                         // 是大会员自定义版本没有下载权限 或 非超级订阅的商机管理用户 (弹框提醒联系客服)
                         var memberNoVip = window.isNoMember == true && !(window.vipStatus >0 && window.viper)
                         if (memberNoVip || (window.vipStatus <=0 && window.entniche)) {
@@ -2198,7 +2254,8 @@
                             confirmButtonText: '我知道了',
                             confirmButtonColor: '#2ABDD1',
                             width: 303,
-                          }).then(() => {})
+                          }).then(() => {
+                          })
                           return
                         }
                       }
@@ -2254,19 +2311,15 @@
     //ios更改为下载
     //老版本还走邮件模式  新版本走下载 需要判断版本号
     //isfree 是否是免费
-    function iosShow(url,fileName,size,isfree){
+    function iosShow(url,fileName,size){
       var version = JyObj.getVersion()
       if(version && compareVersion('3.0.4',version)){
         //切割名称获取格式
           var name = fileName ? fileName.substring(0, fileName.lastIndexOf('.')) : ''
           var types = fileName ? fileName.substring(fileName.lastIndexOf('.') + 1) : ''
-          if (isfree){
-              JyObj.downLoadFile(name,types,url,size);
-          }else{
-            downFileOfVIP(fileName, function (url) {
-              JyObj.downLoadFile(name,types,url,size);
-            })
-          }
+          downloadFileAjax(fileName, function (url) {
+            JyObj.downLoadFile(name,types,url,size);
+          })
         }else{
           iosShow_email(url,fileName,isfree)
         }
@@ -2306,7 +2359,7 @@
                     //按下确定按钮执行的操作
                     //todo ....
                     if (!isfree) {
-                        downFileOfVIP(fileName, function (url) {
+                        downloadFileAjax(fileName, function (url) {
                             sendAlert(url,getinputemail)
                         })
                     } else {
@@ -2762,6 +2815,7 @@
         $('.caigouunit .textcontent').css('color', '#171826')
         $('.zhongbiaounit').addClass('notextcontent')
       }
+      // 获取isAdd的信息
       isOpening()
       $(document).on('click',".border-tel",function(){
           if(!isEntniche&&!isVIP&&bigstatus<=0){
@@ -3201,7 +3255,8 @@
                               sessionStorage.followSetReload = "1";
                           }
                           followId = r.data;
-                          EasyAlert.show("已关注,可从“我的-<br>项目关注”查看<br>或设置提醒日期",{"text-align":"left","width":"195px"});
+                          // EasyAlert.show("已关注,可从“我的-<br>项目关注”查看<br>或设置提醒日期",{"text-align":"left","width":"195px"});
+                          pointsTaskSuccessTip()
                           followFlag = true;
                           jumpFlag = true;
                           $(".follow").html('<i class="glyphicon yiguanzhu"></i>已关注');
@@ -3231,7 +3286,19 @@
               location.href = '/jyapp/big/page/landingPage'
           })
       });
-
+      // 赚剑鱼币任务完成提示
+      function pointsTaskSuccessTip() {
+        // 获取剑鱼币任务信息
+        const from =  utils.getParam('from')
+        var point = utils.getParam('point') || 0
+        if(from && from === 'task'){
+          EasyAlert.show("关注项目成功,获得" + point + "剑鱼币。<br>可从“我的-<br>项目关注”查看<br>或设置提醒日期",{"text-align":"left","width":"195px"}, 2000);
+          utils.delUrlParam('from')
+        } else {
+          // 普通提示
+          EasyAlert.show("已关注,可从“我的-<br>项目关注”查看<br>或设置提醒日期",{"text-align":"left","width":"195px"});
+        }
+      }
       //
       $(".myfollowent").click(function(){
           var entname = $(this).text()
@@ -3455,9 +3522,13 @@
       window.addEventListener('pagehide', function () {
           isPageHide = true;
       });
+      subPoint()
       if (canRead) {
         // 有权限查看的才会下载附件
-        andownload()
+        setTimeout(function(){
+          andownload()
+        }, 500)
+
       }
       // 收藏
       $('.collec_star').on('click', function () {
@@ -3520,7 +3591,82 @@
         return key
       }
     }
+
 </script>
+{{if not .T.obj.hasSession }}
+  <script>
+      var areaNavModule = {
+      $el: null,
+      init: function () {
+        this.getTargetDOM()
+        this.addListener()
+      },
+      getTargetDOM: function () {
+        this.$el = $('.tag-area-nav-container')
+      },
+      addListener: function () {
+        var _this = this
+        if (!this.$el) return
+        this.$el.find('.action-show-more').on('click', function () {
+          _this.$el.find('.tag-area-nav-list-group').toggle()
+        })
+      }
+    }
+    var backToTop = {
+      $scrollDOM: $('.app-layout-content-b'),
+      $backToTop: $('.back-to-top'),
+      init: function () {
+        this.checkBackToTopButtonShow()
+        this.bindEvents()
+      },
+      bindEvents: function () {
+        var _this = this
+        this.$backToTop.on('click', function () {
+          $('.app-layout-content-b').animate({
+            scrollTop: 0
+          })
+        })
+        this.$scrollDOM.on('scroll', function (e) {
+          _this.checkBackToTopButtonShow()
+        })
+      },
+      checkBackToTopButtonShow: function () {
+        var scrollTop = this.$scrollDOM.scrollTop()
+        if (scrollTop < 5) {
+          this.$backToTop.hide()
+        } else {
+          this.$backToTop.show()
+        }
+      }
+    }
+    $(function(){
+      areaNavModule.init()
+      backToTop.init()
+      var timer = setInterval(function () {
+        // 判断页面所有资源已加载完毕
+        if (document.readyState === "complete") {
+          // 未登录状态下距顶部距离为顶部搜索框高度
+          var headerTop = document.querySelector('.jy-app-header ').clientHeight
+          $('.app-layout-content-b').css('top', headerTop)
+          $('.h5-tabfix').css('top', headerTop)
+          $('.wx-tabfix').css('top', headerTop)
+          $('.childNav').css('top', headerTop)
+          window.clearInterval(timer);
+        }
+      }, 800)
+      $('.tag-breadcrumb-navigation').css('background', '#EDEFF2')
+      $('.search-container').on('click', function (e) {
+        e.preventDefault()
+        localStorage.removeItem('JY-MOBILE-home-top-search')
+        sessionStorage.removeItem('JY-MOBILE-/search/result/bidding')
+        location.href = '/jy_mobile/search/middle/bidding'
+      })
+      $('.j-icon.base-icon.icon-back-white').on('click', function() {
+        window.history.back()
+      })
+    })
+  </script>
+{{end}}
 {{include "/common/baiducc.html"}}
 </body>
 </html>

+ 5 - 1
src/jfw/modules/bigmember/src/config.json

@@ -180,5 +180,9 @@
   "potentialCount": 1000,
   "newDataTime": 1685606275,
   "projectCount": 5000,
-  "portraitStartTime": 2018
+  "portraitStartTime": 2018,
+  "portraitDynamicTime": 7,
+  "portraitCount": 30,
+  "nsq": "192.168.3.240:4260",
+  "nsq_topic": "jy_event"
 }

+ 9 - 5
src/jfw/modules/bigmember/src/config/config.go

@@ -65,11 +65,15 @@ type config struct {
 		Details  string `json:"details"`
 		ListPage string `json:"listPage"`
 	} `json:"claim"`
-	ContextOldVipLimit int64 `json:"contextOldVipLimit"` //超级订阅部分用户:--- 超前项目权限
-	PotentialCount     int   `json:"potentialCount"`     //潜在客户 潜在竞争对手数据量
-	NewDataTime        int64 `json:"newDataTime"`        // 用于周边月报区分是否为新数据 、配置为p350发版的时间
-	ProjectCount       int   `json:"projectCount"`       //画像和报告项目明细最大数量
-	PortraitStartTime  int   `json:"portraitStartTime"`
+	ContextOldVipLimit  int64  `json:"contextOldVipLimit"` //超级订阅部分用户:--- 超前项目权限
+	PotentialCount      int    `json:"potentialCount"`     //潜在客户 潜在竞争对手数据量
+	NewDataTime         int64  `json:"newDataTime"`        // 用于周边月报区分是否为新数据 、配置为p350发版的时间
+	ProjectCount        int    `json:"projectCount"`       //画像和报告项目明细最大数量
+	PortraitStartTime   int    `json:"portraitStartTime"`
+	PortraitDynamicTime int    `json:"portraitDynamicTime"`
+	PortraitCount       int    `json:"portraitCount"`
+	Nsq                 string `json:"nsq"`
+	Nsq_topic           string `json:"nsq_topic"`
 }
 
 type CustomerInfo struct {

+ 2 - 2
src/jfw/modules/bigmember/src/entity/followProject.go

@@ -1,7 +1,6 @@
 package entity
 
 import (
-	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
 	"encoding/json"
 	"errors"
 	"fmt"
@@ -15,6 +14,8 @@ import (
 	"sync"
 	"time"
 
+	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
+
 	qutil "app.yhyue.com/moapp/jybase/common"
 	elastic "app.yhyue.com/moapp/jybase/es"
 	"app.yhyue.com/moapp/jybase/redis"
@@ -145,7 +146,6 @@ func (this *ProjectFollow) SaveProject(sid string) (string, error) {
 	if followId == "" {
 		return "", errors.New("关注项目出错")
 	}
-
 	return followId, nil
 }
 

+ 2 - 2
src/jfw/modules/bigmember/src/entity/portrait.go

@@ -310,14 +310,14 @@ func (this *Portrait) GetWinnerContactsMsg(entId string) ([]map[string]interface
 //		  matchType 搜索范围
 //	   area 项目地区
 //	   pushTime 发布时间
-func (this *Portrait) GetWinnerNewMsg(pwp *PortraitProjectScreen) ([]map[string]interface{}, int64, error) {
+func (this *Portrait) GetWinnerNewMsg(pwp *PortraitProjectScreen) ([]map[string]interface{}, int64, int64, error) {
 	return pwp.GetWinnerList()
 }
 func (this *Portrait) GetWinnerNewExport(pwp *PortraitProjectScreen) ([]string, error) {
 	return pwp.GetWinnerListIds()
 }
 
-func (this *Portrait) GetBuyerNewMsg(pwp *PortraitProjectScreen) ([]map[string]interface{}, int64, error) {
+func (this *Portrait) GetBuyerNewMsg(pwp *PortraitProjectScreen) ([]map[string]interface{}, int64, int64, error) {
 	return pwp.GetBuyerList()
 }
 func (this *Portrait) GetBuyerNewMsgExport(pwp *PortraitProjectScreen) ([]string, error) {

+ 77 - 21
src/jfw/modules/bigmember/src/entity/portrait_screen.go

@@ -1,6 +1,7 @@
 package entity
 
 import (
+	"app.yhyue.com/moapp/jybase/redis"
 	"encoding/json"
 	"fmt"
 	"jy/src/jfw/modules/bigmember/src/config"
@@ -219,6 +220,7 @@ func (pwp *PortraitProjectScreen) CommonPare(isWinner bool) (mustQueryArr []stri
 	}
 
 	//按照当前年份,往前推4年,共5个年份可选
+	//无权已用户
 	sTime, eTime := pwp.Screen.PareTimeSelect(isWinner) //采购单位不校验权限
 	if isWinner {
 		mustQueryArr = append(mustQueryArr, fmt.Sprintf(`{"term":{"entidlist":"%s"}}`, pwp.Screen.Ent))
@@ -232,7 +234,7 @@ func (pwp *PortraitProjectScreen) CommonPare(isWinner bool) (mustQueryArr []stri
 
 // GetWinnerListSearch 获取企业画像中标信息数据
 // 会员展示1-4页表格数据,免费用户前三条
-func (pwp *PortraitProjectScreen) GetWinnerListSearch() (list *[]map[string]interface{}, total int64, err error) {
+func (pwp *PortraitProjectScreen) GetWinnerListSearch() (list *[]map[string]interface{}, total int64, updateTime int64, err error) {
 	if pwp.Screen.Ent == "" {
 		err = fmt.Errorf("企业名称异常")
 		return
@@ -240,6 +242,11 @@ func (pwp *PortraitProjectScreen) GetWinnerListSearch() (list *[]map[string]inte
 	mustQueryArr := pwp.CommonPare(true)
 	pwp.PageNum = qutil.If(pwp.PageNum == 0, 1, pwp.PageNum).(int)     //默认第一页
 	pwp.PageSize = qutil.If(pwp.PageSize == 0, 10, pwp.PageSize).(int) //默认每页10条
+
+	if !pwp.Screen.HasPower || pwp.Free {
+		return pwp.FreePortraitNews(mustQueryArr, true)
+	}
+
 	//仅第一页查询总量
 	if pwp.PageNum == 1 || pwp.IsExport {
 		total = elastic.Count(biddingIndex, biddingType, fmt.Sprintf(NewMustSearch, strings.Join(mustQueryArr, ","), ""))
@@ -272,9 +279,9 @@ func (pwp *PortraitProjectScreen) GetWinnerListSearch() (list *[]map[string]inte
 }
 
 // GetWinnerList 获取企业画像中标信息数据
-func (pwp *PortraitProjectScreen) GetWinnerList() (list []map[string]interface{}, total int64, err error) {
+func (pwp *PortraitProjectScreen) GetWinnerList() (list []map[string]interface{}, total int64, updateTime int64, err error) {
 	var newData *[]map[string]interface{}
-	newData, total, err = pwp.GetWinnerListSearch()
+	newData, total, updateTime, err = pwp.GetWinnerListSearch()
 	if newData == nil || len(*newData) == 0 {
 		return
 	}
@@ -314,7 +321,7 @@ func (pwp *PortraitProjectScreen) GetWinnerList() (list []map[string]interface{}
 // GetWinnerListIds 画像中标单位动态数据导出
 func (pwp *PortraitProjectScreen) GetWinnerListIds() (ids []string, err error) {
 	var newData *[]map[string]interface{}
-	newData, _, err = pwp.GetWinnerListSearch()
+	newData, _, _, err = pwp.GetWinnerListSearch()
 	if newData == nil || len(*newData) == 0 {
 		err = fmt.Errorf("未找到相关数据")
 		return
@@ -349,7 +356,7 @@ func GetNewBiddingCount(winnerId, buyer string) int64 {
 }
 
 // GetBuyerListSearch 采购单位中标动态查询
-func (pwp *PortraitProjectScreen) GetBuyerListSearch() (list *[]map[string]interface{}, total int64, err error) {
+func (pwp *PortraitProjectScreen) GetBuyerListSearch() (list *[]map[string]interface{}, total int64, updateTime int64, err error) {
 	if pwp.Screen.Ent == "" {
 		err = fmt.Errorf("企业名称异常")
 		return
@@ -358,9 +365,12 @@ func (pwp *PortraitProjectScreen) GetBuyerListSearch() (list *[]map[string]inter
 	if pwp.Screen.HasPower {
 		pwp.PageNum = qutil.If(pwp.PageNum == 0, 1, pwp.PageNum).(int)    //默认第一页
 		pwp.PageSize = qutil.If(pwp.PageSize == 0, 5, pwp.PageSize).(int) //默认每页10条
-	} else { //免费用户可以查看三条
-		pwp.PageNum = 1
-		pwp.PageSize = 5
+		//} else { //免费用户可以查看三条
+		//	pwp.PageNum = 1
+		//	pwp.PageSize = 5
+	}
+	if !pwp.Screen.HasPower || pwp.Free {
+		return pwp.FreePortraitNews(mustQueryArr, false)
 	}
 
 	//仅第一页查询总量(非数据导出)
@@ -384,27 +394,73 @@ func (pwp *PortraitProjectScreen) GetBuyerListSearch() (list *[]map[string]inter
 		//log.Printf("PortraitWinnerProject GetList Sql %s\n", listQuery)
 		list = elastic.Get(biddingIndex, biddingIndex, listQuery)
 	} else { // 数据导出分批查询
-		if total > 5 {
-			if pwp.Screen.HasPower {
-				if pwp.Free {
-					total = 5
-				}
-			} else { //免费用户可以查看三条
-				total = 5
-			}
-		}
+		//if total > 5 {
+		//	if pwp.Screen.HasPower {
+		//		if pwp.Free {
+		//			total = 5
+		//		}
+		//	} else { //免费用户可以查看三条
+		//		total = 5
+		//	}
+		//}
 		listQuery := fmt.Sprintf(NewMustSearch, strings.Join(mustQueryArr, ","), `,"_source":["_id"],"sort":{"publishtime":"desc"}`)
 		list = getBatchSearchRes(biddingIndex, biddingIndex, listQuery, total)
 	}
 	return
 }
 
+func (pwp *PortraitProjectScreen) FreePortraitNews(mustQueryArr []string, isWinner bool) (data *[]map[string]interface{}, total int64, updateTime int64, err error) {
+	redisKey := fmt.Sprintf("free_portrait_list_%s", pwp.Screen.Ent)
+	redisData := make(map[string]interface{})
+	var dataArr []map[string]interface{}
+	if rBytes, err := redis.GetBytes("other", redisKey); err == nil && len(*rBytes) != 0 {
+		_ = json.Unmarshal(*rBytes, &redisData)
+		rData, _ := redisData["list"].([]interface{})
+		dataArr = qutil.ObjArrToMapArr(rData)
+		total = qutil.Int64All(redisData["total"])
+		updateTime = qutil.Int64All(redisData["updateTime"])
+	} else {
+		var fields string
+		updateTime = time.Now().Unix()
+		if isWinner {
+			fields = `"_id","projectname","bidamount","budget","title","publishtime","subtype","toptype","area","bidopentime","buyer"`
+		} else {
+			fields = `"bidstatus","_id","title","subtype","projectname","publishtime","area","bidamount","budget","bidopentime","s_winner","entidlist"`
+		}
+		mustQueryArrStr := strings.Join(mustQueryArr, ",")
+		total = elastic.Count(biddingIndex, biddingIndex, fmt.Sprintf(NewMustSearch, mustQueryArrStr, ""))
+		isTrue := true
+		if total > 0 {
+			listQuery := fmt.Sprintf(NewMustSearch, mustQueryArrStr, fmt.Sprintf(`,"_source":[%s],"sort":{%s},"from":0,"size":%d`, fields, `"publishtime":"desc","id":"desc"`, config.Config.PortraitCount))
+			list := elastic.Get(biddingIndex, biddingIndex, listQuery)
+			if list != nil && len(*list) > 0 {
+				dataArr = *list
+			} else {
+				log.Printf("画像动态数据获取异常,ent:%s,total:%d,sql:%s", pwp.Screen.Ent, total, listQuery)
+				isTrue = false
+				total = 0
+			}
+		}
+		if isTrue {
+			go func() {
+				redis.Put("other", redisKey, map[string]interface{}{
+					"list":       dataArr,
+					"total":      total,
+					"updateTime": updateTime,
+				}, 24*3600*config.Config.PortraitDynamicTime)
+			}()
+		}
+	}
+	data = &dataArr
+	return
+}
+
 // GetBuyerList 获取采购单位采购信息数据
-// 会员展示1-4页表格数据,免费用户前三条
-func (pwp *PortraitProjectScreen) GetBuyerList() (list []map[string]interface{}, total int64, err error) {
+// 会员展示1-4页表格数据,免费用户前三
+func (pwp *PortraitProjectScreen) GetBuyerList() (list []map[string]interface{}, total int64, updateTime int64, err error) {
 	var newData *[]map[string]interface{}
 	//查询
-	newData, total, err = pwp.GetBuyerListSearch()
+	newData, total, updateTime, err = pwp.GetBuyerListSearch()
 	if newData == nil || len(*newData) == 0 {
 		return
 	}
@@ -444,7 +500,7 @@ func (pwp *PortraitProjectScreen) GetBuyerList() (list []map[string]interface{},
 func (pwp *PortraitProjectScreen) GetBuyerListIds() (ids []string, err error) {
 	var newData *[]map[string]interface{}
 	//查询
-	newData, _, err = pwp.GetBuyerListSearch()
+	newData, _, _, err = pwp.GetBuyerListSearch()
 	if newData == nil || len(*newData) == 0 {
 		err = fmt.Errorf("未查询到相关数据")
 		return

+ 4 - 4
src/jfw/modules/bigmember/src/go.mod

@@ -5,8 +5,8 @@ go 1.19
 require (
 	app.yhyue.com/moapp/jybase v0.0.0-20230727083622-4dfc804ea6cf
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v0.0.0-20230710012638-0d2f7219700e
-	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.13
+	app.yhyue.com/moapp/jypkg v0.0.0-20231024062045-5c364be1561d
+	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.14
 	github.com/donnie4w/go-logger v0.0.0-20230316073421-36a48f87a69a
 	github.com/gogf/gf/v2 v2.4.2
 	github.com/olivere/elastic/v7 v7.0.32
@@ -18,7 +18,7 @@ require (
 	app.yhyue.com/moapp/jyMarketing v0.0.2-0.20230304035551-21bb1eedf547 // indirect
 	app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae // indirect
 	bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e // indirect
-	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230222052351-9d6fad062447 // indirect
+	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230225125145-431a4f70093a // indirect
 	bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.7 // indirect
 	github.com/BurntSushi/toml v1.1.0 // indirect
 	github.com/beorn7/perks v1.0.1 // indirect
@@ -134,7 +134,7 @@ require (
 	gopkg.in/yaml.v3 v3.0.1 // indirect
 	gorm.io/driver/mysql v1.0.5 // indirect
 	gorm.io/gorm v1.21.3 // indirect
-	jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20230630032508-eefb06a4588e // indirect
+	jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20231017031425-45003ca9f35a // indirect
 	k8s.io/api v0.26.3 // indirect
 	k8s.io/apimachinery v0.27.0-alpha.3 // indirect
 	k8s.io/client-go v0.26.3 // indirect

+ 8 - 8
src/jfw/modules/bigmember/src/go.sum

@@ -9,18 +9,18 @@ app.yhyue.com/moapp/jybase v0.0.0-20230727083622-4dfc804ea6cf h1:/Tk5haITmGc5c3/
 app.yhyue.com/moapp/jybase v0.0.0-20230727083622-4dfc804ea6cf/go.mod h1:D40Ae0rQilH8Hc5o2Vtt04Tjh/DNEFpcS3/WkJMPJb8=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
-app.yhyue.com/moapp/jypkg v0.0.0-20230710012638-0d2f7219700e h1:phO8+opFgz3p1XebtdLepM1u8q/TE/EgLYjP4Ebt/jU=
-app.yhyue.com/moapp/jypkg v0.0.0-20230710012638-0d2f7219700e/go.mod h1:wbDWBpLODtGhkQw4dCShvmRr6G8CazuW8kWq42paQOM=
+app.yhyue.com/moapp/jypkg v0.0.0-20231024062045-5c364be1561d h1:h8SnO8ONZlmtx8ZSYtpw36TdBhYPy8WgLeWHyMGZj0Q=
+app.yhyue.com/moapp/jypkg v0.0.0-20231024062045-5c364be1561d/go.mod h1:76Kz6+MuxcRJRyFad9W8R4AByiQlVGzuGFzklY+2m38=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae h1:6rDDaz6yxvE8viTSzEBwKYOFWq14TMfuBivSazUZMz4=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae/go.mod h1:b0zZHev3gmJao1Fo+2Z2KPVjsuLOJVvVxf+kCnu9WkA=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e h1:h+VEI3o1qC0jeCzkFGTrLI4f27cfa/W/y+0sXokWMgE=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e/go.mod h1:7Xhygw0KBuL4h0G76FnFg4otQcA9bmOO0c8M0FCjAyQ=
-bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230222052351-9d6fad062447 h1:hrBqrsf2QHTrnoR9VTV4w7g2akDfbpQ+umNQvkkNs+Y=
-bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230222052351-9d6fad062447/go.mod h1:5nimT8GJh46AyfeeDeyRlDQygMlO7TRM8Pwm41Gxemc=
+bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230225125145-431a4f70093a h1:JX2jEMrbdLzXfVC/nTUvdFOkqNj5DUxkJFjl3XE1gyg=
+bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230225125145-431a4f70093a/go.mod h1:5nimT8GJh46AyfeeDeyRlDQygMlO7TRM8Pwm41Gxemc=
 bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.7 h1:G6PHMWAHfYEuY6kbl7OM/KnCQf1Xa54mdhuP7JzK8/I=
 bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.7/go.mod h1:rRiGzKG4F/fmkNxXQCxrkxNWc8yf1SmW8qWCKfGIQSM=
-bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.13 h1:aK3ya7aznINdAuEl7sKq9U2MvJidUfk6nxPGjjX+t3Y=
-bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.13/go.mod h1:vDEKni2rnCraKgKnnCEIwsFmO92GxnpfKmNQ+83wKP0=
+bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.14 h1:L/0RrgU+l8nMS7YO2JizszaX3lAo0gqzg2Bqmu0So0s=
+bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.14/go.mod h1:03M9BWIGHy7BbGxLvjt8V9zZzEZDWhN6BuHVfVcDFbQ=
 cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 cloud.google.com/go v0.37.4/go.mod h1:NHPJ89PdicEuT9hdPXMROBD91xc5uRDxsMtSB16k7hw=
@@ -1420,8 +1420,8 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
 honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
 honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
-jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20230630032508-eefb06a4588e h1:1O11hFuKvLD3Ls+9wxssUpMV3fG9qD4EfeeAy92dsWY=
-jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20230630032508-eefb06a4588e/go.mod h1:wBxeFODhYtGenkxXJGThN/VrFaxPvvHMxzpS09pxApM=
+jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20231017031425-45003ca9f35a h1:kwjO4pqB3gnNGrQ9aXyz6f8s9qXAUenPUDWip8gYR/Q=
+jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20231017031425-45003ca9f35a/go.mod h1:p/595fgbj4r6GhSJhHDpx3Ru1NkD5UASFL8OuIQw09E=
 k8s.io/api v0.22.9/go.mod h1:rcjO/FPOuvc3x7nQWx29UcDrFJMx82RxDob71ntNH4A=
 k8s.io/api v0.26.3 h1:emf74GIQMTik01Aum9dPP0gAypL8JTLl/lHa4V9RFSU=
 k8s.io/api v0.26.3/go.mod h1:PXsqwPMXBSBcL1lJ9CYDKy7kIReUydukS5JiRlxC3qE=

+ 13 - 2
src/jfw/modules/bigmember/src/service/follow/enterprise.go

@@ -1,15 +1,18 @@
 package follow
 
 import (
-	. "app.yhyue.com/moapp/jybase/api"
-	qutil "app.yhyue.com/moapp/jybase/common"
 	"errors"
 	"fmt"
+	"jy/src/jfw/modules/bigmember/src/config"
+	"jy/src/jfw/modules/bigmember/src/db"
 	"jy/src/jfw/modules/bigmember/src/entity"
 	"jy/src/jfw/modules/bigmember/src/util"
 	"log"
 
+	. "app.yhyue.com/moapp/jybase/api"
+	qutil "app.yhyue.com/moapp/jybase/common"
 	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
+	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 )
 
 // FollowEnt 大会员关注企业接口(企业情报)
@@ -146,6 +149,14 @@ func (this *FollowEnt) AddFollow() {
 		if err != nil {
 			return nil, err
 		}
+		//	首次完成关注企业可获得积分
+		jy.Publish(db.Mgo_Log, config.Config.Nsq, config.Config.Nsq_topic, "task", qutil.ObjToString(this.GetSession("mgoUserId")), jy.Jywx_node1, map[string]interface{}{
+			"code":       1012, //关注企业
+			"types":      "followEnt",
+			"num":        50,
+			"baseUserId": this.GetSession("base_user_id"),
+			"positionId": this.GetSession("positionId"),
+		})
 		return "success", nil
 	}()
 	if errMsg != nil {

+ 17 - 3
src/jfw/modules/bigmember/src/service/follow/project.go

@@ -1,17 +1,21 @@
 package follow
 
 import (
-	. "app.yhyue.com/moapp/jybase/api"
-	qutil "app.yhyue.com/moapp/jybase/common"
-	elastic "app.yhyue.com/moapp/jybase/es"
 	"errors"
 	"fmt"
+	"jy/src/jfw/modules/bigmember/src/config"
+	"jy/src/jfw/modules/bigmember/src/db"
 	"jy/src/jfw/modules/bigmember/src/entity"
 	"jy/src/jfw/modules/bigmember/src/util"
+
 	"log"
 	"strings"
 
+	. "app.yhyue.com/moapp/jybase/api"
+	qutil "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/jypkg/common/src/qfw/util/jy"
 )
 
 // FollowProject 大会员关注项目接口
@@ -48,6 +52,16 @@ func (this *FollowProject) AddProject() {
 		if err != nil {
 			return nil, err
 		}
+
+		//	首次完成项目关注可获得积分
+		jy.Publish(db.Mgo_Log, config.Config.Nsq, config.Config.Nsq_topic, "task", qutil.ObjToString(this.GetSession("mgoUserId")), jy.Jywx_node1, map[string]interface{}{
+			"code":       1013, //关注项目
+			"types":      "followProject",
+			"num":        50,
+			"baseUserId": this.GetSession("base_user_id"),
+			"positionId": this.GetSession("positionId"),
+		})
+
 		return util.EncodeId(followId), nil
 	}()
 	if errMsg != nil {

+ 21 - 24
src/jfw/modules/bigmember/src/service/portrait/memberPortraitAction.go

@@ -116,17 +116,14 @@ func (this *EntPortrait) WinnerNewMsg() {
 		if entId == "" {
 			return nil, fmt.Errorf("企业参数异常")
 		}
-		cepm, hasPower, err, _ := entity.CreatePortraitManager(this.Session(), "entNewMsg")
-		if err != nil {
-			return nil, err
-		}
-		if !hasPower {
-			return nil, fmt.Errorf("非法请求")
-		}
+		cepm, hasPower, _, _ := entity.CreatePortraitManager(this.Session(), "entNewMsg")
+		//if err != nil {
+		//	return nil, err
+		//}
 		pageNum, _ := this.GetInteger("pageNum")
 		pageSize, _ := this.GetInteger("pageSize")
 
-		rData, total, err := cepm.GetWinnerNewMsg(&entity.PortraitProjectScreen{
+		rData, total, updateTime, err := cepm.GetWinnerNewMsg(&entity.PortraitProjectScreen{
 			Screen: &entity.PortraitScreen{
 				Ent:        entId,
 				Match:      this.GetString("match"),
@@ -145,8 +142,9 @@ func (this *EntPortrait) WinnerNewMsg() {
 			return nil, err
 		}
 		return map[string]interface{}{
-			"list":  rData,
-			"count": total,
+			"list":       rData,
+			"count":      total,
+			"updateTime": updateTime,
 		}, nil
 	}()
 	if errMsg != nil {
@@ -167,9 +165,7 @@ func (this *EntPortrait) WinnerNewMsgExport() {
 		if err != nil {
 			return nil, err
 		}
-		if !hasPower {
-			return nil, fmt.Errorf("非法请求")
-		}
+
 		//查询数据导出数据id列
 		pps := &entity.PortraitProjectScreen{
 			Screen: &entity.PortraitScreen{
@@ -298,16 +294,16 @@ func (this *EntPortrait) BuyerNewMsg() {
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	rData, errMsg := func() (interface{}, error) {
 		cepm, hasPower, err, _ := entity.CreatePortraitManager(this.Session(), "buyerPortrait")
-		if err != nil {
-			return nil, err
-		}
+		//if err != nil {
+		//	return nil, err
+		//}
 
 		buyer := this.GetString("buyer")
 		pageNum, _ := this.GetInteger("pageNum")
 		pageSize, _ := this.GetInteger("pageSize")
 
 		//免费用户仅可查看三条记录
-		rData, total, err := cepm.GetBuyerNewMsg(&entity.PortraitProjectScreen{
+		rData, total, updateTime, err := cepm.GetBuyerNewMsg(&entity.PortraitProjectScreen{
 			Screen: &entity.PortraitScreen{
 				Ent:        buyer,
 				Match:      this.GetString("match"),
@@ -325,8 +321,9 @@ func (this *EntPortrait) BuyerNewMsg() {
 			return nil, err
 		}
 		return map[string]interface{}{
-			"list":  rData,
-			"count": total,
+			"list":       rData,
+			"count":      total,
+			"updateTime": updateTime,
 		}, nil
 	}()
 	if errMsg != nil {
@@ -339,11 +336,11 @@ func (this *EntPortrait) BuyerNewMsgExport() {
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	rData, errMsg := func() (interface{}, error) {
 		cepm, hasPower, err, free := entity.CreatePortraitManager(this.Session(), "buyerPortrait")
-		if err != nil {
-			return nil, err
-		}
+		//if err != nil {
+		//	return nil, err
+		//}
 		buyer := this.GetString("buyer")
-		//免费用户仅可查看三条记录
+		//免费用户仅可查看三条记录
 		pps := &entity.PortraitProjectScreen{
 			Screen: &entity.PortraitScreen{
 				Ent:        buyer,
@@ -525,7 +522,7 @@ func (this *EntPortrait) NoLoginAssociatedInfo() {
 		// 未登录用户关联中标企业
 		data := entity.NoLoginAssociatedInfo(entId)
 		var cepm *entity.Portrait
-		rData, _, _ := cepm.GetWinnerNewMsg(&entity.PortraitProjectScreen{
+		rData, _, _, _ := cepm.GetWinnerNewMsg(&entity.PortraitProjectScreen{
 			Screen: &entity.PortraitScreen{
 				Ent:        entId,
 				Match:      this.GetString("match"),

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

@@ -68,26 +68,17 @@ func (this *SubVipPortrait) SubVipEntDetail() {
 // SubVipWinnerNewMsg 超级订阅升级版查看最新中标动态
 func (this *SubVipPortrait) SubVipWinnerNewMsg() {
 	userId := qutil.ObjToString(this.GetSession("userId"))
-	log.Println(this.Session().GetMultiple(), "---SubVipWinnerNewMsg  userId :", userId)
 	rData, errMsg := func() (interface{}, error) {
-		log.Println(qutil.ObjToString(this.GetSession("userId")), "------SubVipWinnerNewMsg -------------  userId :", userId)
 		entId := util.DecodeId(this.GetString("entId"))
 		if entId == "" {
 			return nil, fmt.Errorf("参数异常")
 		}
-		cepm, power, err, _ := entity.CreateSubVipPortraitManager(userId, "entNewMsg", entId, true, this.Session())
-		if err != nil {
-			return nil, err
-		}
-
-		if power <= 1 {
-			return nil, errors.New("非法请求")
-		}
+		cepm, power, _, _ := entity.CreateSubVipPortraitManager(userId, "entNewMsg", entId, true, this.Session())
 
 		pageNum, _ := this.GetInteger("pageNum")
 		pageSize, _ := this.GetInteger("pageSize")
 
-		rData, total, err := cepm.GetWinnerNewMsg(&entity.PortraitProjectScreen{
+		rData, total, updateTime, err := cepm.GetWinnerNewMsg(&entity.PortraitProjectScreen{
 			Screen: &entity.PortraitScreen{
 				Ent:        entId,
 				Match:      this.GetString("match"),
@@ -96,7 +87,7 @@ func (this *SubVipPortrait) SubVipWinnerNewMsg() {
 				Area:       this.GetString("area"),
 				ScopeClass: this.GetString("scopeClass"),
 				TimeRange:  this.GetString("timeRange"),
-				HasPower:   true,
+				HasPower:   power > 1,
 			},
 			PageNum:  pageNum,
 			PageSize: pageSize,
@@ -105,8 +96,9 @@ func (this *SubVipPortrait) SubVipWinnerNewMsg() {
 			return nil, err
 		}
 		return map[string]interface{}{
-			"list":  rData,
-			"count": total,
+			"list":       rData,
+			"count":      total,
+			"updateTime": updateTime,
 		}, nil
 	}()
 	if errMsg != nil {
@@ -127,9 +119,9 @@ func (this *SubVipPortrait) WinnerNewMsgExport() {
 		if err != nil {
 			return nil, err
 		}
-		if power <= 1 {
-			return nil, errors.New("非法请求")
-		}
+		//if power <= 1 {
+		//	return nil, errors.New("非法请求")
+		//}
 		//查询数据导出数据id列
 		pps := &entity.PortraitProjectScreen{
 			Screen: &entity.PortraitScreen{
@@ -140,7 +132,7 @@ func (this *SubVipPortrait) WinnerNewMsgExport() {
 				Area:       this.GetString("area"),
 				ScopeClass: this.GetString("scopeClass"),
 				TimeRange:  this.GetString("timeRange"),
-				HasPower:   true,
+				HasPower:   power > 1,
 			},
 			IsExport: true,
 			Free:     free,
@@ -341,20 +333,15 @@ func (this *SubVipPortrait) BuyerNewMsg() {
 		if buyer == "" {
 			return nil, fmt.Errorf("参数异常")
 		}
-		if userId == "" {
-			return nil, fmt.Errorf("未登录")
-		}
 		pageNum, _ := this.GetInteger("pageNum")
 		pageSize, _ := this.GetInteger("pageSize")
 		cepm, power, err, _ := entity.CreateSubVipPortraitManagerForOpen(userId, "buyerPortrait", buyer, false, this.Session())
-		if err != nil {
-			return nil, err
-		}
-		if power <= 1 {
-			return nil, fmt.Errorf("无查看权益")
-		}
+		//if err != nil {
+		//	return nil, err
+		//}
+
 		//免费用户仅可查看三条记录
-		rData, total, err := cepm.GetBuyerNewMsg(&entity.PortraitProjectScreen{
+		rData, total, updateTime, err := cepm.GetBuyerNewMsg(&entity.PortraitProjectScreen{
 			Screen: &entity.PortraitScreen{
 				Ent:        buyer,
 				Match:      this.GetString("match"),
@@ -372,8 +359,9 @@ func (this *SubVipPortrait) BuyerNewMsg() {
 			return nil, err
 		}
 		return map[string]interface{}{
-			"list":  rData,
-			"count": total,
+			"list":       rData,
+			"count":      total,
+			"updateTime": updateTime,
 		}, nil
 	}()
 	if errMsg != nil {

+ 2 - 92
src/jfw/modules/followent/src/web/templates/weixin/list.html

@@ -28,7 +28,7 @@ if(sessionStorage){
 		right: 0;
 		bottom: 0;
 	}
-  
+
   .listpage .redspot{
       position: absolute;
       width: 8px;
@@ -50,97 +50,7 @@ if(sessionStorage){
 	</div>
 	<div class="jylistbottom" style="display: none;">
         <img src="/jylab/followent/images/wx/jydustbin.png"/>批量移除30天无更新企业
-    </div>
-    <div class="_fhts92t44f" id="pro_footer"></div>
-    <script type="text/javascript">
-        $.ajax({
-            type: 'POST',
-            url: '/publicapply/bidcoll/power?t=' + new Date().getTime(),
-            success: function(res) {
-                console.log(res)
-                // res.data.entniche = false
-                // res.data.member = false
-                // res.data.vip = 0
-                if(res.error_code == 0) {
-                    if(!res.data.entniche && !res.data.member && res.data.vip <= 0){
-                        (window.slotbydup = window.slotbydup || []).push({
-                            id: "u6603901",
-                            container: "_fhts92t44f",
-                            async: true
-                        });
-                        getAjaxAdv()
-                        var frames = document.getElementById("iframeu6603901_0");
-                        console.log(frames, 'frames')
-                        IframeOnClick.track(frames, function() {
-                            jQuery(document).click();
-                        });
-                    }
-                }
-            },
-            error: function(err) {
-                console.log(err)
-            }
-        })
-        function getAjaxAdv () {
-            $.ajax({
-                type: 'POST',
-                url: '/publicapply/adLeague/exposure',
-                data: {
-                        client: 'WX',
-                        id: 'ad8',
-                        position: '关注的企业列表页底部'
-                },
-                success: function(res) {
-                        console.log(res)
-                }
-            })
-        }
-        var IframeOnClick = {
-            resolution: 200,
-            iframes: [],
-            interval: null,
-            Iframe: function() {
-                    this.element = arguments[0];
-                    this.cb = arguments[1];
-                    this.hasTracked = false;
-            },
-            track: function(element, cb) {
-                    this.iframes.push(new this.Iframe(element, cb));
-                    var _this = this;
-                            this.interval = setInterval(function() { _this.checkClick(); }, this.resolution);
-            },
-            checkClick: function() {
-                if (document.activeElement) {
-                    var activeElement = document.activeElement;
-                    for (var i in this.iframes) {
-                        if (activeElement === this.iframes[i].element) { // user is in this Iframe
-                                if (this.iframes[i].hasTracked == false) {
-                                        this.iframes[i].cb.apply(window, []);
-                                        this.iframes[i].hasTracked = true;
-                                        $.ajax({
-                                                type: 'POST',
-                                                url: '/publicapply/adLeague/click',
-                                                data: {
-                                                    client: 'WX',
-                                                    id: 'ad8',
-                                                    position: '关注的企业列表页底部'
-                                                },
-                                                success: function(res) {
-                                                        console.log(res)
-                                                }
-                                        })
-                                }
-                        } else {
-                                this.iframes[i].hasTracked = false;
-                        }
-                    }
-                }
-            }
-			};
-    </script>
-    <!-- 多条广告如下脚本只需引入一次 -->
-    <script type="text/javascript" src="//cpro.baidustatic.com/cpro/ui/cm.js" async="async" defer="defer" >
-    </script>
+  </div>
 	<div class="easypopup" id="easypopup">
 		<div class="easypopup-main">
 			<div class="easypopup-header">提示信息</div>

+ 4 - 4
src/jfw/modules/publicapply/src/bidcollection/entity/entity.go

@@ -1,7 +1,6 @@
 package entity
 
 import (
-	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
 	"fmt"
 	"jy/src/jfw/modules/publicapply/src/config"
 	"jy/src/jfw/modules/publicapply/src/db"
@@ -9,6 +8,8 @@ import (
 	"strconv"
 	"strings"
 
+	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
+
 	qu "app.yhyue.com/moapp/jybase/common"
 	. "app.yhyue.com/moapp/jybase/date"
 	"app.yhyue.com/moapp/jybase/encrypt"
@@ -136,10 +137,9 @@ func GetLabelByUser(userid string) (data []LabelByUser) {
 	labcount := map[string]int{}
 	selectsql := fmt.Sprintf(`SELECT a.labelname,COUNT(1) count,a.id
 				FROM %s a INNER JOIN %s b ON
-				FIND_IN_SET(a.id,b.labelid)
-				WHERE b.userid =?
+				a.userid =? and b.userid =? and FIND_IN_SET(a.id,b.labelid)
 				GROUP BY a.labelname,a.id`, db.DbConf.Bdlabel, db.DbConf.Bdcollection)
-	if data := *db.Mysql.SelectBySql(selectsql, userid); len(data) > 0 {
+	if data := *db.Mysql.SelectBySql(selectsql, userid, userid); len(data) > 0 {
 		for _, v := range data {
 			labcount[strconv.FormatInt(v["id"].(int64), 10)] = qu.IntAll(v["count"])
 		}

+ 1 - 0
src/jfw/modules/publicapply/src/channel/entity/entity.go

@@ -0,0 +1 @@
+package entity

+ 10 - 0
src/jfw/modules/publicapply/src/channel/init.go

@@ -0,0 +1,10 @@
+package channel
+
+import (
+	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
+	"jy/src/jfw/modules/publicapply/src/channel/service"
+)
+
+func init() {
+	xweb.AddAction(&service.ChannelStruct{})
+}

+ 8 - 0
src/jfw/modules/publicapply/src/channel/service/action.go

@@ -0,0 +1,8 @@
+package service
+
+import "app.yhyue.com/moapp/jybase/go-xweb/xweb"
+
+type ChannelStruct struct {
+	*xweb.Action
+	cooperation xweb.Mapper `xweb:"/channel/cooperation"` //招标信息收藏
+}

+ 59 - 0
src/jfw/modules/publicapply/src/channel/service/service.go

@@ -0,0 +1,59 @@
+package service
+
+import (
+	. "app.yhyue.com/moapp/jybase/api"
+	qu "app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
+	"encoding/json"
+	"jy/src/jfw/modules/publicapply/src/db"
+	"log"
+)
+
+// P414
+func (c *ChannelStruct) Cooperation() {
+	defer qu.Catch()
+	r := func() Result {
+		//已登录 不做任何操作
+		if userId, _ := c.GetSession("userId").(string); userId != "" {
+			return Result{Data: nil}
+		}
+		if c.Method() != "POST" {
+			return Result{Data: nil, Error_msg: Error_msg_1005}
+		}
+		var (
+			res = Result{}
+		)
+		channelCode := c.GetString("channelCode")
+		req := make(map[string]interface{})
+		if len(c.Body()) > 0 {
+			if err := json.Unmarshal(c.Body(), &req); err == nil {
+				channelCode = qu.ObjToString(req["channelCode"])
+			}
+		}
+		cc, err := c.Request.Cookie(jy.ChannelCookieName)
+		log.Println(err, "---channelCode.Value:--", channelCode)
+		if err == nil {
+			channelCode = cc.Value
+		}
+		if channelCode != "" {
+			selectSql := `SELECT * FROM thirdparty.ent_channel_info WHERE channel_code = ?`
+			data := db.BaseMysql.SelectBySql(selectSql, channelCode)
+			if data != nil && len(*data) > 0 {
+				var customMap = make(map[string]interface{})
+				if customInfo := qu.ObjToString((*data)[0]["custom_info"]); customInfo != "" {
+					err := json.Unmarshal([]byte(customInfo), &customMap)
+					if err != nil {
+						log.Println("err.Error():", err.Error())
+					}
+				}
+				res.Data = customMap
+			} else {
+				log.Println("未查到相关数据")
+			}
+		} else {
+			log.Println("不是 渠道合作商")
+		}
+		return res
+	}()
+	c.ServeJson(r)
+}

+ 2 - 1
src/jfw/modules/publicapply/src/config.json

@@ -57,5 +57,6 @@
   "nsq":"192.168.3.240:4260",
   "nsq_topic": "jy_event",
   "accountMergeOnline": "2015-03-30 00:00:00",
-  "criticality":2
+  "criticality":2,
+  "taskStartTime":1698020000
 }

+ 1 - 0
src/jfw/modules/publicapply/src/config/config.go

@@ -41,6 +41,7 @@ type config struct {
 	NsqTopic           string `json:"nsq_topic"`
 	AccountMergeOnline string `json:"accountMergeOnline"`
 	Criticality        int    `json:"criticality"`
+	TaskStartTime      int64
 }
 type BidColl struct {
 	PayUserCollLimit      int    //付费用户收藏数量最大限制

+ 29 - 0
src/jfw/modules/publicapply/src/filter/cookie.go

@@ -0,0 +1,29 @@
+package filter
+
+import (
+	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
+	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
+	"log"
+	"net/http"
+	"strings"
+)
+
+// CookieInfo 信息
+type CookieInfo struct {
+	App *xweb.App
+}
+
+// Do 继承过滤器方法
+func (ci *CookieInfo) Do(w http.ResponseWriter, req *http.Request) bool {
+	log.Println(req.Referer(), "----------------------", req.RequestURI)
+	if crr := req.Referer(); crr != "" {
+		if strings.Contains(crr, "cooperate") {
+			match := strings.Split(crr, "cooperate/")
+			if len(match) > 1 {
+				jy.SetCookieValue(w, jy.ChannelCookieName, match[1], 172800) //两天
+			}
+			log.Println("---------------pc-------------", match)
+		}
+	}
+	return true
+}

+ 1 - 0
src/jfw/modules/publicapply/src/filter/filter.go

@@ -7,4 +7,5 @@ import (
 func init() {
 	xweb.AddFilter(&logfilter{App: xweb.RootApp()})
 	xweb.AddFilter(&sessionfilter{App: xweb.RootApp()})
+	xweb.AddFilter(&CookieInfo{App: xweb.RootApp()})
 }

+ 1 - 1
src/jfw/modules/publicapply/src/filter/sessionfilter.go

@@ -22,7 +22,7 @@ var reg_share = regexp.MustCompile("^/publicapply/shareFission/.*")
 var reg_nps = regexp.MustCompile("^/publicapply/nps/.*")
 var regWhiteList = regexp.MustCompile("^/publicapply/userbase/whitelist$")
 var regEntSearch = regexp.MustCompile("^/publicapply/enterpriseSearch/doQuery") //企业搜索接口
-var regOneClick = regexp.MustCompile("^/publicapply/oneClick/.*")
+var regOneClick = regexp.MustCompile("^/publicapply/(oneClick|channel)/.*")
 
 func (l *sessionfilter) Do(w http.ResponseWriter, req *http.Request) bool {
 	session := l.App.SessionManager.Session(req, w)

+ 62 - 60
src/jfw/modules/publicapply/src/go.mod

@@ -3,18 +3,18 @@ module jy/src/jfw/modules/publicapply/src
 go 1.18
 
 require (
-	app.yhyue.com/moapp/jybase v0.0.0-20230727083622-4dfc804ea6cf
+	app.yhyue.com/moapp/jybase v0.0.0-20231026082242-8eb41c7bdda6
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v0.0.0-20230925120741-9e02619bfe25
-	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.14
+	app.yhyue.com/moapp/jypkg v1.0.4
+	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.15
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
 	github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.4
-	github.com/alibabacloud-go/dypnsapi-20170525/v2 v2.0.3
+	github.com/alibabacloud-go/dypnsapi-20170525/v2 v2.1.0
 	github.com/alibabacloud-go/tea v1.2.1
 	github.com/alibabacloud-go/tea-utils/v2 v2.0.4
-	github.com/gogf/gf/v2 v2.0.6
-	github.com/zeromicro/go-zero v1.5.3
-	go.mongodb.org/mongo-driver v1.11.6
+	github.com/gogf/gf/v2 v2.5.6
+	github.com/zeromicro/go-zero v1.6.0
+	go.mongodb.org/mongo-driver v1.13.0
 )
 
 require (
@@ -23,8 +23,8 @@ require (
 	app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae // indirect
 	bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e // indirect
 	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230225125145-431a4f70093a // indirect
-	bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.7 // indirect
-	github.com/BurntSushi/toml v0.4.1 // indirect
+	bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.8 // indirect
+	github.com/BurntSushi/toml v1.2.0 // indirect
 	github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4 // indirect
 	github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68 // indirect
 	github.com/alibabacloud-go/endpoint-util v1.1.0 // indirect
@@ -35,7 +35,7 @@ require (
 	github.com/beorn7/perks v1.0.1 // indirect
 	github.com/cenkalti/backoff/v4 v4.2.1 // indirect
 	github.com/cespare/xxhash/v2 v2.2.0 // indirect
-	github.com/clbanning/mxj/v2 v2.5.5 // indirect
+	github.com/clbanning/mxj/v2 v2.7.0 // indirect
 	github.com/coreos/go-semver v0.3.1 // indirect
 	github.com/coreos/go-systemd/v22 v22.5.0 // indirect
 	github.com/davecgh/go-spew v1.1.1 // indirect
@@ -47,8 +47,8 @@ require (
 	github.com/go-logr/logr v1.2.4 // indirect
 	github.com/go-logr/stdr v1.2.2 // indirect
 	github.com/go-openapi/jsonpointer v0.19.6 // indirect
-	github.com/go-openapi/jsonreference v0.20.1 // indirect
-	github.com/go-openapi/swag v0.22.3 // indirect
+	github.com/go-openapi/jsonreference v0.20.2 // indirect
+	github.com/go-openapi/swag v0.22.4 // indirect
 	github.com/go-redis/redis/v8 v8.11.5 // indirect
 	github.com/go-sql-driver/mysql v1.7.1 // indirect
 	github.com/gogo/protobuf v1.3.2 // indirect
@@ -57,25 +57,25 @@ require (
 	github.com/golang/protobuf v1.5.3 // indirect
 	github.com/golang/snappy v0.0.4 // indirect
 	github.com/gomodule/redigo v2.0.0+incompatible // indirect
-	github.com/google/gnostic v0.5.7-v3refs // indirect
+	github.com/google/gnostic-models v0.6.8 // indirect
 	github.com/google/go-cmp v0.5.9 // indirect
 	github.com/google/gofuzz v1.2.0 // indirect
+	github.com/google/uuid v1.4.0 // indirect
 	github.com/gorilla/websocket v1.5.0 // indirect
 	github.com/grokify/html-strip-tags-go v0.0.1 // indirect
-	github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.0 // indirect
+	github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0 // indirect
 	github.com/hashicorp/hcl v1.0.0 // indirect
 	github.com/howeyc/fsnotify v0.9.0 // indirect
 	github.com/jinzhu/inflection v1.0.0 // indirect
 	github.com/jinzhu/now v1.1.1 // indirect
 	github.com/josharian/intern v1.0.0 // indirect
 	github.com/json-iterator/go v1.1.12 // indirect
-	github.com/klauspost/compress v1.15.15 // indirect
-	github.com/longbridgeapp/sqlparser v0.3.1 // indirect
+	github.com/klauspost/compress v1.16.7 // indirect
 	github.com/magiconair/properties v1.8.7 // indirect
 	github.com/mailru/easyjson v0.7.7 // indirect
 	github.com/mattn/go-colorable v0.1.13 // indirect
-	github.com/mattn/go-isatty v0.0.17 // indirect
-	github.com/mattn/go-runewidth v0.0.13 // indirect
+	github.com/mattn/go-isatty v0.0.20 // indirect
+	github.com/mattn/go-runewidth v0.0.15 // indirect
 	github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
 	github.com/mitchellh/mapstructure v1.5.0 // indirect
 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
@@ -86,14 +86,14 @@ require (
 	github.com/olekukonko/tablewriter v0.0.5 // indirect
 	github.com/olivere/elastic v6.2.37+incompatible // indirect
 	github.com/olivere/elastic/v7 v7.0.22 // indirect
-	github.com/openzipkin/zipkin-go v0.4.1 // indirect
-	github.com/pelletier/go-toml/v2 v2.0.8 // indirect
+	github.com/openzipkin/zipkin-go v0.4.2 // indirect
+	github.com/pelletier/go-toml/v2 v2.1.0 // indirect
 	github.com/pkg/errors v0.9.1 // indirect
-	github.com/prometheus/client_golang v1.15.1 // indirect
-	github.com/prometheus/client_model v0.3.0 // indirect
-	github.com/prometheus/common v0.42.0 // indirect
-	github.com/prometheus/procfs v0.9.0 // indirect
-	github.com/rivo/uniseg v0.2.0 // indirect
+	github.com/prometheus/client_golang v1.17.0 // indirect
+	github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 // indirect
+	github.com/prometheus/common v0.44.0 // indirect
+	github.com/prometheus/procfs v0.11.1 // indirect
+	github.com/rivo/uniseg v0.4.4 // indirect
 	github.com/sirupsen/logrus v1.8.3 // indirect
 	github.com/spaolacci/murmur3 v1.1.0 // indirect
 	github.com/spf13/afero v1.9.3 // indirect
@@ -106,39 +106,41 @@ require (
 	github.com/thinxer/go-word2vec v0.0.0-20150917053916-5c19ec7379ed // indirect
 	github.com/tjfoc/gmsm v1.3.2 // indirect
 	github.com/xdg-go/pbkdf2 v1.0.0 // indirect
-	github.com/xdg-go/scram v1.1.1 // indirect
-	github.com/xdg-go/stringprep v1.0.3 // indirect
-	github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect
+	github.com/xdg-go/scram v1.1.2 // indirect
+	github.com/xdg-go/stringprep v1.0.4 // indirect
+	github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a // indirect
 	github.com/ziutek/blas v0.0.0-20190227122918-da4ca23e90bb // indirect
-	go.etcd.io/etcd/api/v3 v3.5.9 // indirect
-	go.etcd.io/etcd/client/pkg/v3 v3.5.9 // indirect
-	go.etcd.io/etcd/client/v3 v3.5.9 // indirect
-	go.opentelemetry.io/otel v1.15.1 // indirect
-	go.opentelemetry.io/otel/exporters/jaeger v1.15.1 // indirect
-	go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.15.1 // indirect
-	go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.15.1 // indirect
-	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.15.1 // indirect
-	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.15.1 // indirect
-	go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.14.0 // indirect
-	go.opentelemetry.io/otel/exporters/zipkin v1.15.1 // indirect
-	go.opentelemetry.io/otel/sdk v1.15.1 // indirect
-	go.opentelemetry.io/otel/trace v1.15.1 // indirect
-	go.opentelemetry.io/proto/otlp v0.19.0 // indirect
+	go.etcd.io/etcd/api/v3 v3.5.10 // indirect
+	go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect
+	go.etcd.io/etcd/client/v3 v3.5.10 // indirect
+	go.opentelemetry.io/otel v1.19.0 // indirect
+	go.opentelemetry.io/otel/exporters/jaeger v1.17.0 // indirect
+	go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0 // indirect
+	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.19.0 // indirect
+	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0 // indirect
+	go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.19.0 // indirect
+	go.opentelemetry.io/otel/exporters/zipkin v1.19.0 // indirect
+	go.opentelemetry.io/otel/metric v1.19.0 // indirect
+	go.opentelemetry.io/otel/sdk v1.19.0 // indirect
+	go.opentelemetry.io/otel/trace v1.19.0 // indirect
+	go.opentelemetry.io/proto/otlp v1.0.0 // indirect
 	go.uber.org/atomic v1.10.0 // indirect
-	go.uber.org/automaxprocs v1.5.2 // indirect
+	go.uber.org/automaxprocs v1.5.3 // indirect
 	go.uber.org/multierr v1.9.0 // indirect
 	go.uber.org/zap v1.24.0 // indirect
-	golang.org/x/crypto v0.10.0 // indirect
-	golang.org/x/net v0.11.0 // indirect
-	golang.org/x/oauth2 v0.7.0 // indirect
-	golang.org/x/sync v0.1.0 // indirect
-	golang.org/x/sys v0.9.0 // indirect
-	golang.org/x/term v0.9.0 // indirect
-	golang.org/x/text v0.10.0 // indirect
+	golang.org/x/crypto v0.14.0 // indirect
+	golang.org/x/net v0.17.0 // indirect
+	golang.org/x/oauth2 v0.12.0 // indirect
+	golang.org/x/sync v0.3.0 // indirect
+	golang.org/x/sys v0.13.0 // indirect
+	golang.org/x/term v0.13.0 // indirect
+	golang.org/x/text v0.13.0 // indirect
 	golang.org/x/time v0.3.0 // indirect
-	google.golang.org/appengine v1.6.7 // indirect
-	google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect
-	google.golang.org/grpc v1.56.1 // indirect
+	google.golang.org/appengine v1.6.8 // indirect
+	google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b // indirect
+	google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b // indirect
+	google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b // indirect
+	google.golang.org/grpc v1.59.0 // indirect
 	google.golang.org/protobuf v1.31.0 // indirect
 	gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
 	gopkg.in/inf.v0 v0.9.1 // indirect
@@ -148,13 +150,13 @@ require (
 	gopkg.in/yaml.v3 v3.0.1 // indirect
 	gorm.io/driver/mysql v1.0.5 // indirect
 	gorm.io/gorm v1.21.3 // indirect
-	jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20230710093759-d9d6c68de8b1 // indirect
-	k8s.io/api v0.26.3 // indirect
-	k8s.io/apimachinery v0.27.0-alpha.3 // indirect
-	k8s.io/client-go v0.26.3 // indirect
-	k8s.io/klog/v2 v2.90.1 // indirect
-	k8s.io/kube-openapi v0.0.0-20230307230338-69ee2d25a840 // indirect
-	k8s.io/utils v0.0.0-20230209194617-a36077c30491 // indirect
+	jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20231017031425-45003ca9f35a // indirect
+	k8s.io/api v0.28.3 // indirect
+	k8s.io/apimachinery v0.28.3 // indirect
+	k8s.io/client-go v0.28.3 // indirect
+	k8s.io/klog/v2 v2.100.1 // indirect
+	k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
+	k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
 	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 	sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
 	sigs.k8s.io/yaml v1.3.0 // indirect

+ 140 - 127
src/jfw/modules/publicapply/src/go.sum

@@ -5,22 +5,22 @@ app.yhyue.com/moapp/jyMarketing v0.0.2-0.20230304035551-21bb1eedf547/go.mod h1:J
 app.yhyue.com/moapp/jyPoints v1.1.1/go.mod h1:SvP8p5L3jGrejHiH2LXfgCg/NPlFiKBC5Yd0gsI12FU=
 app.yhyue.com/moapp/jybase v0.0.0-20220427020729-974c1a148186/go.mod h1:qNRA0sHuYqcLoYoP8irpaWnW9YsXixe6obBIkwaXpD0=
 app.yhyue.com/moapp/jybase v0.0.0-20230117032034-ad7c00ffe11a/go.mod h1:zB47XTeJvpcbtBRYgkQuxOICWNexiZfbUO+7aUf6mNs=
-app.yhyue.com/moapp/jybase v0.0.0-20230727083622-4dfc804ea6cf h1:/Tk5haITmGc5c3/y6VxyycIy/LBWO7aYlxTiHKxmzv0=
-app.yhyue.com/moapp/jybase v0.0.0-20230727083622-4dfc804ea6cf/go.mod h1:D40Ae0rQilH8Hc5o2Vtt04Tjh/DNEFpcS3/WkJMPJb8=
+app.yhyue.com/moapp/jybase v0.0.0-20231026082242-8eb41c7bdda6 h1:uyaBp5Iuc/Il4+O2n92CyU9LPvHetFzQVC8iS9iLFOc=
+app.yhyue.com/moapp/jybase v0.0.0-20231026082242-8eb41c7bdda6/go.mod h1:Hv9U/7oHRucqH315Tr1+d03NCvS9mOKPfk8pwwlOIwQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
-app.yhyue.com/moapp/jypkg v0.0.0-20230925120741-9e02619bfe25 h1:2q7b1auPihIJD3Ewsd7Zi8ESeLkxuP57avWL8UoBr9U=
-app.yhyue.com/moapp/jypkg v0.0.0-20230925120741-9e02619bfe25/go.mod h1:gPCOY8bVXdY5bD7nry7th+YNkKC/viG8Dc9+z4fUaRo=
+app.yhyue.com/moapp/jypkg v1.0.4 h1:qczPgO9uURDMFTIG7wlyx9oQKf2kY7QS0uwbfBvEIac=
+app.yhyue.com/moapp/jypkg v1.0.4/go.mod h1:LuxdVd+j3uwm7N5j2hivmpPU0LJytEV7iwAIljdoc4Q=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae h1:6rDDaz6yxvE8viTSzEBwKYOFWq14TMfuBivSazUZMz4=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae/go.mod h1:b0zZHev3gmJao1Fo+2Z2KPVjsuLOJVvVxf+kCnu9WkA=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e h1:h+VEI3o1qC0jeCzkFGTrLI4f27cfa/W/y+0sXokWMgE=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e/go.mod h1:7Xhygw0KBuL4h0G76FnFg4otQcA9bmOO0c8M0FCjAyQ=
 bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230225125145-431a4f70093a h1:JX2jEMrbdLzXfVC/nTUvdFOkqNj5DUxkJFjl3XE1gyg=
 bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230225125145-431a4f70093a/go.mod h1:5nimT8GJh46AyfeeDeyRlDQygMlO7TRM8Pwm41Gxemc=
-bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.7 h1:G6PHMWAHfYEuY6kbl7OM/KnCQf1Xa54mdhuP7JzK8/I=
-bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.7/go.mod h1:rRiGzKG4F/fmkNxXQCxrkxNWc8yf1SmW8qWCKfGIQSM=
-bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.14 h1:L/0RrgU+l8nMS7YO2JizszaX3lAo0gqzg2Bqmu0So0s=
-bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.14/go.mod h1:03M9BWIGHy7BbGxLvjt8V9zZzEZDWhN6BuHVfVcDFbQ=
+bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.8 h1:14Yxzutsej7LQe3jnN61wuRX9qjAZ4FtdWMA27ewQ3w=
+bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.8/go.mod h1:rRiGzKG4F/fmkNxXQCxrkxNWc8yf1SmW8qWCKfGIQSM=
+bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.15 h1:V8RSWazAsREs+8mpk7h2kXiavSExFFaDG1guhf3Qux8=
+bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.15/go.mod h1:+6ZjaqpCr+ih1GYOh6ZhoDri9ZjiuxxSHvR7ovvhLx0=
 cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 cloud.google.com/go v0.37.4/go.mod h1:NHPJ89PdicEuT9hdPXMROBD91xc5uRDxsMtSB16k7hw=
@@ -68,8 +68,9 @@ github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935
 github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8=
 github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/BurntSushi/toml v0.4.1 h1:GaI7EiDXDRfa8VshkTj7Fym7ha+y8/XxIgD2okUIjLw=
 github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
+github.com/BurntSushi/toml v1.2.0 h1:Rt8g24XnyGTyglgET/PRUNlrUeu9F5L+7FilkXfZgs0=
+github.com/BurntSushi/toml v1.2.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
 github.com/ClickHouse/clickhouse-go v1.4.3/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI=
 github.com/ClickHouse/clickhouse-go v1.5.4/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI=
@@ -77,9 +78,9 @@ github.com/ClickHouse/clickhouse-go/v2 v2.2.0/go.mod h1:8f2XZUi7XoeU+uPIytSi1cvx
 github.com/DATA-DOG/go-sqlmock v1.4.1/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
 github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
 github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
-github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
 github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
 github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
+github.com/RoaringBitmap/roaring v1.5.0/go.mod h1:plvDsJQpxOC5bw8LRteu/MLWHsHez/3y6cubLI4/1yE=
 github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67 h1:x98/gnpyNAiuvg/gX3KgdfKxnZj3t9pIl3BCVJg3qwg=
 github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67/go.mod h1:g1VZ0nbzBvfsWw22gNVOxWxJxpBR+CBiFNK2n2ogeUo=
 github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
@@ -99,8 +100,8 @@ github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.4 h1:7Q2FEyqxeZeIkwYMwRC3up
 github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.4/go.mod h1:5JHVmnHvGzR2wNdgaW1zDLQG8kOC4Uec8ubkMogW7OQ=
 github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68 h1:NqugFkGxx1TXSh/pBcU00Y6bljgDPaFdh5MUSeJ7e50=
 github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68/go.mod h1:6pb/Qy8c+lqua8cFpEy7g39NRRqOWc3rOwAy8m5Y2BY=
-github.com/alibabacloud-go/dypnsapi-20170525/v2 v2.0.3 h1:26XsczMxlJD9btKz2DV7N38l18VC8RUVIxH/Wa9SQ4I=
-github.com/alibabacloud-go/dypnsapi-20170525/v2 v2.0.3/go.mod h1:PVXSzGHi3i/r8NK3eH1iZCaKWqV6QFDfz9fIc48VEFs=
+github.com/alibabacloud-go/dypnsapi-20170525/v2 v2.1.0 h1:1UvmXKNyvSpcYHjlGbKJWCImHXH/7eo7V/qHpFdpKLk=
+github.com/alibabacloud-go/dypnsapi-20170525/v2 v2.1.0/go.mod h1:0EZbiBwZRLaS00rYLfzpelkX9bEhaVmW357oYrox1KY=
 github.com/alibabacloud-go/endpoint-util v1.1.0 h1:r/4D3VSw888XGaeNpP994zDUaxdgTSHBbVfZlzf6b5Q=
 github.com/alibabacloud-go/endpoint-util v1.1.0/go.mod h1:O5FuCALmCKs2Ff7JFJMudHs0I5EBgecXXxZRyswlEjE=
 github.com/alibabacloud-go/openapi-util v0.0.11/go.mod h1:sQuElr4ywwFRlCCberQwKRFhRzIyG4QTP/P4y1CJ6Ws=
@@ -116,16 +117,15 @@ github.com/alibabacloud-go/tea v1.2.1/go.mod h1:qbzof29bM/IFhLMtJPrgTGK3eauV5J2w
 github.com/alibabacloud-go/tea-utils v1.3.1 h1:iWQeRzRheqCMuiF3+XkfybB3kTgUXkXX+JMrqfLeB2I=
 github.com/alibabacloud-go/tea-utils v1.3.1/go.mod h1:EI/o33aBfj3hETm4RLiAxF/ThQdSngxrpF8rKUDJjPE=
 github.com/alibabacloud-go/tea-utils/v2 v2.0.0/go.mod h1:U5MTY10WwlquGPS34DOeomUGBB0gXbLueiq5Trwu0C4=
-github.com/alibabacloud-go/tea-utils/v2 v2.0.1/go.mod h1:U5MTY10WwlquGPS34DOeomUGBB0gXbLueiq5Trwu0C4=
 github.com/alibabacloud-go/tea-utils/v2 v2.0.4 h1:SoFgjJuO7pze88j9RBJNbKb7AgTS52O+J5ITxc00lCs=
 github.com/alibabacloud-go/tea-utils/v2 v2.0.4/go.mod h1:sj1PbjPodAVTqGTA3olprfeeqqmwD0A5OQz94o9EuXQ=
 github.com/alibabacloud-go/tea-xml v1.1.2 h1:oLxa7JUXm2EDFzMg+7oRsYc+kutgCVwm+bZlhhmvW5M=
 github.com/alibabacloud-go/tea-xml v1.1.2/go.mod h1:Rq08vgCcCAjHyRi/M7xlHKUykZCEtyBy9+DPF6GgEu8=
-github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a h1:HbKu58rmZpUGpz5+4FfNmIU+FmZg2P3Xaj2v2bfNWmk=
 github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc=
+github.com/alicebob/gopher-json v0.0.0-20230218143504-906a9b012302 h1:uvdUDbHQHO85qeSydJtItA4T55Pw6BtAejd0APRJOCE=
 github.com/alicebob/miniredis/v2 v2.14.1/go.mod h1:uS970Sw5Gs9/iK3yBg0l9Uj9s25wXxSpQUE9EaJ/Blg=
 github.com/alicebob/miniredis/v2 v2.22.0/go.mod h1:XNqvJdQJv5mSuVMc0ynneafpnL/zv52acZ6kqeS0t88=
-github.com/alicebob/miniredis/v2 v2.30.3 h1:hrqDB4cHFSHQf4gO3xu6YKQg8PqJpNjLYsQAFYHstqw=
+github.com/alicebob/miniredis/v2 v2.31.0 h1:ObEFUNlJwoIiyjxdrYF0QIDE7qXcLc7D3WpSH4c22PU=
 github.com/aliyun/credentials-go v1.1.2 h1:qU1vwGIBb3UJ8BwunHDRFtAhS6jnQLnde/yk0+Ih2GY=
 github.com/aliyun/credentials-go v1.1.2/go.mod h1:ozcZaMR5kLM7pwtCMEpVmQ242suV6qTJya2bDq4X1Tw=
 github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q=
@@ -144,6 +144,7 @@ github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+Ce
 github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
 github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
 github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
+github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA=
 github.com/bkaradzic/go-lz4 v1.0.0/go.mod h1:0YdlkowM3VswSROI7qDxhRvJ3sLhlFrRRwjwegp5jy4=
 github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff/go.mod h1:+RTT1BOk5P97fT2CiHkbFQwkK3mjsFAP6zCYV2aXtjw=
 github.com/bos-hieu/mongostore v0.0.2/go.mod h1:8AbbVmDEb0yqJsBrWxZIAZOxIfv/tsP8CDtdHduZHGg=
@@ -152,7 +153,6 @@ github.com/bradleypeabody/gorilla-sessions-memcache v0.0.0-20181103040241-659414
 github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
 github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
 github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
 github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
 github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
@@ -160,15 +160,15 @@ github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL
 github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
 github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
 github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
-github.com/clbanning/mxj/v2 v2.5.5 h1:oT81vUeEiQQ/DcHbzSytRngP6Ky9O+L+0Bw0zSJag9E=
 github.com/clbanning/mxj/v2 v2.5.5/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s=
+github.com/clbanning/mxj/v2 v2.7.0 h1:WA/La7UGCanFe5NpHF0Q3DNtnCsVoxbPKuyBNHWRyME=
+github.com/clbanning/mxj/v2 v2.7.0/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
 github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80=
 github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
 github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
 github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
 github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=
-github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
 github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
 github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
 github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
@@ -217,7 +217,6 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m
 github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=
 github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
 github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
-github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
 github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
 github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE=
 github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
@@ -273,11 +272,12 @@ github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34
 github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE=
 github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
 github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8=
-github.com/go-openapi/jsonreference v0.20.1 h1:FBLnyygC4/IZZr893oiomc9XaghoveYTrLC1F86HID8=
-github.com/go-openapi/jsonreference v0.20.1/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
+github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE=
+github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
 github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
-github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g=
 github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
+github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU=
+github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
 github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
 github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
 github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
@@ -294,7 +294,7 @@ github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrt
 github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
-github.com/go-test/deep v1.0.7 h1:/VSMRlnY/JSyqxQUzQLKVMAskpY/NZKFA5j2P+0pP2M=
+github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
 github.com/go-test/deep v1.0.7/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8=
 github.com/go-xorm/builder v0.3.4/go.mod h1:KxkQkNN1DpPKTedxXyTQcmH+rXfvk4LZ9SOOBoZBAxw=
 github.com/go-xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:56xuuqnHyryaerycW3BfssRdxQstACi0Epw/yC5E2xM=
@@ -327,8 +327,9 @@ github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5x
 github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
 github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
 github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
-github.com/gogf/gf/v2 v2.0.6 h1:2etb4FMpbQKWIJO+UjtIWrZUp01HUsFb6Po8pgizAWk=
 github.com/gogf/gf/v2 v2.0.6/go.mod h1:8uYzw7qNzuq8vrhVlWke1b1925FFqOJIgmyYW1sr/0M=
+github.com/gogf/gf/v2 v2.5.6 h1:a1UK1yUP3s+l+vPxmV91+8gTarAP9b1IEOw0W7LNl6E=
+github.com/gogf/gf/v2 v2.5.6/go.mod h1:17K/gBYrp0bHGC3XYC7bSPoywmZ6MrZHrZakTfh4eIQ=
 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
 github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
 github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
@@ -339,8 +340,7 @@ github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w
 github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg=
 github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4=
-github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE=
+github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo=
 github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@@ -384,8 +384,8 @@ github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp
 github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
-github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54=
-github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ=
+github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
+github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
 github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
 github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
 github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
@@ -419,12 +419,14 @@ github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLe
 github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
 github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
 github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
+github.com/google/pprof v0.0.0-20211214055906-6f57359322fd h1:1FjCyPC+syAzJ5/2S8fqdZK1R22vvA0J7JZKcuOIQ7Y=
 github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
 github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
 github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
+github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
 github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
 github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU=
@@ -452,9 +454,8 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf
 github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
 github.com/grpc-ecosystem/grpc-gateway v1.14.3/go.mod h1:6CwZWGDSPRJidgKAtJVvND6soZe6fT7iteq8wDPdhb0=
 github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.0 h1:1JYBfzqrWPcCclBwxFCPAou9n+q86mfnu7NAeHfte7A=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.0/go.mod h1:YDZoGHuwE+ov0c8smSH49WLF3F2LaWnYYuDVd+EWrc0=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0 h1:RtRsiaGvWxcwd8y3BiRZxsylPT8hLWZ5SPcfI+3IDNk=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0/go.mod h1:TzP6duP4Py2pHLVPPQp42aoYI92+PCrVotyR5e8Vqlk=
 github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 h1:2VTzZjLZBgl62/EtslCrtky5vbi9dd7HrQPQIx6wqiw=
 github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI=
 github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
@@ -556,8 +557,8 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI
 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
 github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
 github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
-github.com/klauspost/compress v1.15.15 h1:EF27CXIuDsYJ6mmvtBRlEuB2UVOqHG1tAXgZ7yIO+lw=
-github.com/klauspost/compress v1.15.15/go.mod h1:ZcK2JAFqKOpnBlxcLsJzYfrS9X1akm9fHZNnD9+Vo/4=
+github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I=
+github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
@@ -581,7 +582,6 @@ github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
 github.com/lib/pq v1.10.3/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
 github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
 github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
-github.com/longbridgeapp/sqlparser v0.3.1 h1:iWOZWGIFgQrJRgobLXUNJdvqGRpbVXkyKUKUA5CNJBE=
 github.com/longbridgeapp/sqlparser v0.3.1/go.mod h1:GIHaUq8zvYyHLCLMJJykx1CdM6LHtkUih/QaJXySSx4=
 github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
 github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
@@ -609,13 +609,14 @@ github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOA
 github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
 github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
 github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
-github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng=
-github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
+github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
+github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
 github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
 github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
 github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
-github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU=
 github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
+github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U=
+github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
 github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
 github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
 github.com/mattn/go-sqlite3 v1.14.5/go.mod h1:WVKg1VTActs4Qso6iwGbiFih2UIHo0ENGwNd0Lj+XmI=
@@ -639,6 +640,7 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
 github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
 github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0=
 github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
+github.com/mschoch/smat v0.2.0/go.mod h1:kc9mz7DoBKqDyiRL7VZN8KvXQMWeTaVnttLRXOlotKw=
 github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
@@ -669,7 +671,7 @@ github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vv
 github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
 github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
 github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c=
-github.com/onsi/ginkgo/v2 v2.7.0 h1:/XxtEV3I3Eif/HobnVx9YmJgk8ENdRsuUmM+fLCFNow=
+github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU=
 github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
 github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
 github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
@@ -678,18 +680,18 @@ github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1y
 github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
 github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
 github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs=
-github.com/onsi/gomega v1.26.0 h1:03cDLK28U6hWvCAns6NeydX3zIm4SF3ci69ulidS32Q=
+github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI=
 github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
 github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
 github.com/openzipkin/zipkin-go v0.4.0/go.mod h1:4c3sLeE8xjNqehmF5RpAFLPLJxXscc0R4l6Zg0P1tTQ=
-github.com/openzipkin/zipkin-go v0.4.1 h1:kNd/ST2yLLWhaWrkgchya40TJabe8Hioj9udfPcEO5A=
-github.com/openzipkin/zipkin-go v0.4.1/go.mod h1:qY0VqDSN1pOBN94dBc6w2GJlWLiovAyg7Qt6/I9HecM=
+github.com/openzipkin/zipkin-go v0.4.2 h1:zjqfqHjUpPmB3c1GlCvvgsM1G4LkvqQbBDueDOCg/jA=
+github.com/openzipkin/zipkin-go v0.4.2/go.mod h1:ZeVkFjuuBiSy13y8vpSDCjMi9GoI3hPpCJSBx/EYFhY=
 github.com/paulmach/orb v0.7.1/go.mod h1:FWRlTgl88VI1RBx/MkrwWDRhQ96ctqMCh8boXhmqB/A=
 github.com/paulmach/protoscan v0.2.1/go.mod h1:SpcSwydNLrxUGSDvXvO0P7g7AuhJ7lcKfDlhJCDw2gY=
 github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE=
 github.com/pelletier/go-toml/v2 v2.0.2/go.mod h1:MovirKjgVRESsAvNZlAjtFwV867yGuwRkXbG66OzopI=
-github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ=
-github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4=
+github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4=
+github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
 github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
 github.com/pierrec/lz4 v2.5.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
@@ -712,23 +714,23 @@ github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP
 github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
 github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
 github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
-github.com/prometheus/client_golang v1.15.1 h1:8tXpTmJbyH5lydzFPoxSIJ0J46jdh3tylbvM1xCv0LI=
-github.com/prometheus/client_golang v1.15.1/go.mod h1:e9yaBhRPU2pPNsZwE+JdQl0KEt1N9XgF6zxWmaC0xOk=
+github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
+github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY=
 github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
 github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
 github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
 github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
 github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4=
-github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w=
+github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 h1:v7DLqVdK4VrYkVD5diGdl4sxJurKJEMnODWRJlxV9oM=
+github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU=
 github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
 github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
 github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
 github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
 github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
 github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
-github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM=
-github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc=
+github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY=
+github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY=
 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
 github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
 github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
@@ -736,21 +738,22 @@ github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+Gx
 github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
 github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
 github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
-github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI=
-github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY=
+github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
+github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY=
 github.com/quasoft/memstore v0.0.0-20191010062613-2bce066d2b0b/go.mod h1:wTPjTepVu7uJBYgZ0SdWHQlIas582j6cn2jgk4DDdlg=
 github.com/rabbitmq/amqp091-go v1.1.0/go.mod h1:ogQDLSOACsLPsIq0NpbtiifNZi2YOz0VTJ0kHRghqbM=
 github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
 github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
-github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
 github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
+github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis=
+github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
 github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k=
 github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
 github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
 github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
-github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
+github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
 github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
 github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU=
 github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc=
@@ -780,7 +783,6 @@ github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h
 github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
 github.com/smartystreets/gunit v1.4.2/go.mod h1:ZjM1ozSIMJlAz/ay4SG8PeKF00ckUp+zMHZXV9/bvak=
 github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
-github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
 github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
 github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
 github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
@@ -816,8 +818,8 @@ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1F
 github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
 github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
 github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
 github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
+github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
 github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8=
 github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
 github.com/tal-tech/go-zero v1.1.5/go.mod h1:LbN0C7/rbl2+LUWTSUYx5leXmgedeMWjt1jc3/8/zFA=
@@ -825,7 +827,6 @@ github.com/tealeg/xlsx v1.0.5 h1:+f8oFmvY8Gw1iUXzPk+kz+4GpbDZPK1FhPiQRd+ypgE=
 github.com/tealeg/xlsx v1.0.5/go.mod h1:btRS8dz54TDnvKNosuAqxrM1QgN1udgk9O34bDCnORM=
 github.com/thinxer/go-word2vec v0.0.0-20150917053916-5c19ec7379ed h1:1+oKuPuDQ4AbN1WRMFxl9WQClH80GuZ81X/4FsOshjI=
 github.com/thinxer/go-word2vec v0.0.0-20150917053916-5c19ec7379ed/go.mod h1:WE5pZgSp3RwicfhHQmOJOexA0n4AKTzBqmnSu7R8Nbk=
-github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4=
 github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
 github.com/tjfoc/gmsm v1.3.2 h1:7JVkAn5bvUJ7HtU08iW6UiD+UTmJTIToHCfeFzkcCxM=
 github.com/tjfoc/gmsm v1.3.2/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w=
@@ -842,17 +843,19 @@ github.com/wader/gormstore/v2 v2.0.0/go.mod h1:3BgNKFxRdVo2E4pq3e/eiim8qRDZzavea
 github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
 github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
 github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs=
-github.com/xdg-go/scram v1.1.1 h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E=
-github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g=
+github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY=
+github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4=
 github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM=
-github.com/xdg-go/stringprep v1.0.3 h1:kdwGpVNwPFtjs98xCGkHjQtGKh86rDcRZN17QEMCOIs=
-github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8=
+github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8=
+github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM=
 github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I=
 github.com/xdg/stringprep v0.0.0-20180714160509-73f8eece6fdc/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y=
 github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
 github.com/xwb1989/sqlparser v0.0.0-20180606152119-120387863bf2/go.mod h1:hzfGeIUDq/j97IG+FhNqkowIyEcD88LrW6fyU3K3WqY=
-github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA=
+github.com/yl2chen/cidranger v1.0.2/go.mod h1:9U1yz7WPYDwf0vpNWFaeRh0bjwz5RVgRy/9UEQfHl0g=
 github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
+github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a h1:fZHgsYlfvtyqToslyjUt3VOPF4J7aK/3MPcK7xp3PDk=
+github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a/go.mod h1:ul22v+Nro/R083muKhosV54bj5niojjWZvU8xrevuH4=
 github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.1.30/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@@ -867,27 +870,27 @@ github.com/yuin/gopher-lua v1.1.0 h1:BojcDhfyDWgU2f2TOzYK/g5p2gxMrku8oupLDqlnSqE
 github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
 github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q=
 github.com/zeromicro/go-zero v1.3.5/go.mod h1:wh4o794b7Ul3W0k35Pw9nc3iB4O0OpaQTMQz/PJc1bc=
-github.com/zeromicro/go-zero v1.5.3 h1:9poyd+raeL7gSMUu6P19N7bssTppieR2j7Oos2j1yFQ=
-github.com/zeromicro/go-zero v1.5.3/go.mod h1:dmoBpgJTxt9KWmgrNGpv06XxZRPXMakrxUVgROFAR3g=
+github.com/zeromicro/go-zero v1.6.0 h1:UwSOR1lGZ2g7L0S07PM8RoneAcubtd5x//EfbuNucQ0=
+github.com/zeromicro/go-zero v1.6.0/go.mod h1:E9GCFPb0SwsTKFBcFr9UynGvXiDMmfc6fI5F15vqvAQ=
 github.com/ziutek/blas v0.0.0-20190227122918-da4ca23e90bb h1:uWiILQloLUVdtPYr1ZZo2zqtlpzo4G8vUpglo/Fs2H8=
 github.com/ziutek/blas v0.0.0-20190227122918-da4ca23e90bb/go.mod h1:J3xKssoVdrwZ2E29fIox/EKxOZWimS7AZ4fOTCFkOLo=
 github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0=
 go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
 go.etcd.io/etcd v0.0.0-20200402134248-51bdeb39e698/go.mod h1:YoUyTScD3Vcv2RBm3eGVOq7i1ULiz3OuXoQFWOirmAM=
 go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A=
-go.etcd.io/etcd/api/v3 v3.5.9 h1:4wSsluwyTbGGmyjJktOf3wFQoTBIURXHnq9n/G/JQHs=
-go.etcd.io/etcd/api/v3 v3.5.9/go.mod h1:uyAal843mC8uUVSLWz6eHa/d971iDGnCRpmKd2Z+X8k=
+go.etcd.io/etcd/api/v3 v3.5.10 h1:szRajuUUbLyppkhs9K6BRtjY37l66XQQmw7oZRANE4k=
+go.etcd.io/etcd/api/v3 v3.5.10/go.mod h1:TidfmT4Uycad3NM/o25fG3J07odo4GBB9hoxaodFCtI=
 go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
-go.etcd.io/etcd/client/pkg/v3 v3.5.9 h1:oidDC4+YEuSIQbsR94rY9gur91UPL6DnxDCIYd2IGsE=
-go.etcd.io/etcd/client/pkg/v3 v3.5.9/go.mod h1:y+CzeSmkMpWN2Jyu1npecjB9BBnABxGM4pN8cGuJeL4=
+go.etcd.io/etcd/client/pkg/v3 v3.5.10 h1:kfYIdQftBnbAq8pUWFXfpuuxFSKzlmM5cSn76JByiT0=
+go.etcd.io/etcd/client/pkg/v3 v3.5.10/go.mod h1:DYivfIviIuQ8+/lCq4vcxuseg2P2XbHygkKwFo9fc8U=
 go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY=
-go.etcd.io/etcd/client/v3 v3.5.9 h1:r5xghnU7CwbUxD/fbUtRyJGaYNfDun8sp/gTr1hew6E=
-go.etcd.io/etcd/client/v3 v3.5.9/go.mod h1:i/Eo5LrZ5IKqpbtpPDuaUnDOUv471oDg8cjQaUr2MbA=
+go.etcd.io/etcd/client/v3 v3.5.10 h1:W9TXNZ+oB3MCd/8UjxHTWK5J9Nquw9fQBLJd5ne5/Ao=
+go.etcd.io/etcd/client/v3 v3.5.10/go.mod h1:RVeBnDz2PUEZqTpgqwAtUd8nAPf5kjyFyND7P1VkOKc=
 go.mongodb.org/mongo-driver v1.5.0/go.mod h1:boiGPFqyBs5R0R5qf2ErokGRekMfwn+MqKaUyHs7wy0=
 go.mongodb.org/mongo-driver v1.9.0/go.mod h1:0sQWfOeY63QTntERDJJ/0SuKK0T1uVSgKCuAROlKEPY=
 go.mongodb.org/mongo-driver v1.9.1/go.mod h1:0sQWfOeY63QTntERDJJ/0SuKK0T1uVSgKCuAROlKEPY=
-go.mongodb.org/mongo-driver v1.11.6 h1:XM7G6PjiGAO5betLF13BIa5TlLUUE3uJ/2Ox3Lz1K+o=
-go.mongodb.org/mongo-driver v1.11.6/go.mod h1:G9TgswdsWjX4tmDA5zfs2+6AEPpYJwqblyjsfuh8oXY=
+go.mongodb.org/mongo-driver v1.13.0 h1:67DgFFjYOCMWdtTEmKFpV3ffWlFnh+CYZ8ZS/tXWUfY=
+go.mongodb.org/mongo-driver v1.13.0/go.mod h1:/rGBTebI3XYboVmgz+Wv3Bcbl3aD0QF9zl6kDDw18rQ=
 go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
 go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
 go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
@@ -899,38 +902,38 @@ go.opentelemetry.io/otel v1.0.0/go.mod h1:AjRVh9A5/5DE7S+mZtTR6t8vpKKryam+0lREnf
 go.opentelemetry.io/otel v1.3.0/go.mod h1:PWIKzi6JCp7sM0k9yZ43VX+T345uNbAkDKwHVjb2PTs=
 go.opentelemetry.io/otel v1.7.0/go.mod h1:5BdUoMIz5WEs0vt0CUEMtSSaTSHBBVwrhnz7+nrD5xk=
 go.opentelemetry.io/otel v1.8.0/go.mod h1:2pkj+iMj0o03Y+cW6/m8Y4WkRdYN3AvCXCnzRMp9yvM=
-go.opentelemetry.io/otel v1.15.1 h1:3Iwq3lfRByPaws0f6bU3naAqOR1n5IeDWd9390kWHa8=
-go.opentelemetry.io/otel v1.15.1/go.mod h1:mHHGEHVDLal6YrKMmk9LqC4a3sF5g+fHfrttQIB1NTc=
+go.opentelemetry.io/otel v1.19.0 h1:MuS/TNf4/j4IXsZuJegVzI1cwut7Qc00344rgH7p8bs=
+go.opentelemetry.io/otel v1.19.0/go.mod h1:i0QyjOq3UPoTzff0PJB2N66fb4S0+rSbSB15/oyH9fY=
 go.opentelemetry.io/otel/exporters/jaeger v1.8.0/go.mod h1:GbWg+ng88rDtx+id26C34QLqw2erqJeAjsCx9AFeHfE=
-go.opentelemetry.io/otel/exporters/jaeger v1.15.1 h1:x3SLvwli0OyAJapNcOIzf1xXBRBA+HD3elrMQmFfmXo=
-go.opentelemetry.io/otel/exporters/jaeger v1.15.1/go.mod h1:0Ck9b5oLL/bFZvfAEEqtrb1U0jZXjm5fWXMCOCG3vvM=
-go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.15.1 h1:XYDQtNzdb2T4uM1pku2m76eSMDJgqhJ+6KzkqgQBALc=
-go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.15.1/go.mod h1:uOTV75+LOzV+ODmL8ahRLWkFA3eQcSC2aAsbxIu4duk=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.15.1 h1:tyoeaUh8REKay72DVYsSEBYV18+fGONe+YYPaOxgLoE=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.15.1/go.mod h1:HUSnrjQQ19KX9ECjpQxufsF+3ioD3zISPMlauTPZu2g=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.15.1 h1:pIfoG5IAZFzp9EUlJzdSkpUwpaUAAnD+Ru1nBLTACIQ=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.15.1/go.mod h1:poNKBqF5+nR/6ke2oGTDjHfksrsHDOHXAl2g4+9ONsY=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.15.1 h1:pnJfHmVcCEBcH5lkM+npJF8cTAjV/d+9cXVNCs5P/ao=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.15.1/go.mod h1:cC3Eu2V56zXY09YlijmqDhOUnL2jVL6KKJg4PGh++dU=
-go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.14.0 h1:sEL90JjOO/4yhquXl5zTAkLLsZ5+MycAgX99SDsxGc8=
-go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.14.0/go.mod h1:oCslUcizYdpKYyS9e8srZEqM6BB8fq41VJBjLAE6z1w=
+go.opentelemetry.io/otel/exporters/jaeger v1.17.0 h1:D7UpUy2Xc2wsi1Ras6V40q806WM07rqoCWzXu7Sqy+4=
+go.opentelemetry.io/otel/exporters/jaeger v1.17.0/go.mod h1:nPCqOnEH9rNLKqH/+rrUjiMzHJdV1BlpKcTwRTyKkKI=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0 h1:Mne5On7VWdx7omSrSSZvM4Kw7cS7NQkOOmLcgscI51U=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0/go.mod h1:IPtUMKL4O3tH5y+iXVyAXqpAwMuzC1IrxVS81rummfE=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.19.0 h1:3d+S281UTjM+AbF31XSOYn1qXn3BgIdWl8HNEpx08Jk=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.19.0/go.mod h1:0+KuTDyKL4gjKCF75pHOX4wuzYDUZYfAQdSu43o+Z2I=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0 h1:IeMeyr1aBvBiPVYihXIaeIZba6b8E1bYp7lbdxK8CQg=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0/go.mod h1:oVdCUtjq9MK9BlS7TtucsQwUcXcymNiEDjgDD2jMtZU=
+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.19.0 h1:Nw7Dv4lwvGrI68+wULbcq7su9K2cebeCUrDjVrUJHxM=
+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.19.0/go.mod h1:1MsF6Y7gTqosgoZvHlzcaaM8DIMNZgJh87ykokoNH7Y=
 go.opentelemetry.io/otel/exporters/zipkin v1.8.0/go.mod h1:0uYAyCuGT67MFV9Z/Mmx93wGuugHw0FbxMc74fs3LNo=
-go.opentelemetry.io/otel/exporters/zipkin v1.15.1 h1:B6s/o48bx00ayJu7F+jIMJfhPTyxW+S8vthjTZMNBj0=
-go.opentelemetry.io/otel/exporters/zipkin v1.15.1/go.mod h1:EjjV7/YfYXG+khxCOfG6PPeRGoOmtcSusyW66qPqpRQ=
+go.opentelemetry.io/otel/exporters/zipkin v1.19.0 h1:EGY0h5mGliP9o/nIkVuLI0vRiQqmsYOcbwCuotksO1o=
+go.opentelemetry.io/otel/exporters/zipkin v1.19.0/go.mod h1:JQgTGJP11yi3o4GHzIWYodhPisxANdqxF1eHwDSnJrI=
+go.opentelemetry.io/otel/metric v1.19.0 h1:aTzpGtV0ar9wlV4Sna9sdJyII5jTVJEvKETPiOKwvpE=
+go.opentelemetry.io/otel/metric v1.19.0/go.mod h1:L5rUsV9kM1IxCj1MmSdS+JQAcVm319EUrDVLrt7jqt8=
 go.opentelemetry.io/otel/sdk v1.0.0/go.mod h1:PCrDHlSy5x1kjezSdL37PhbFUMjrsLRshJ2zCzeXwbM=
 go.opentelemetry.io/otel/sdk v1.3.0/go.mod h1:rIo4suHNhQwBIPg9axF8V9CA72Wz2mKF1teNrup8yzs=
 go.opentelemetry.io/otel/sdk v1.8.0/go.mod h1:uPSfc+yfDH2StDM/Rm35WE8gXSNdvCg023J6HeGNO0c=
-go.opentelemetry.io/otel/sdk v1.15.1 h1:5FKR+skgpzvhPQHIEfcwMYjCBr14LWzs3uSqKiQzETI=
-go.opentelemetry.io/otel/sdk v1.15.1/go.mod h1:8rVtxQfrbmbHKfqzpQkT5EzZMcbMBwTzNAggbEAM0KA=
+go.opentelemetry.io/otel/sdk v1.19.0 h1:6USY6zH+L8uMH8L3t1enZPR3WFEmSTADlqldyHtJi3o=
+go.opentelemetry.io/otel/sdk v1.19.0/go.mod h1:NedEbbS4w3C6zElbLdPJKOpJQOrGUJ+GfzpjUvI0v1A=
 go.opentelemetry.io/otel/trace v1.0.0/go.mod h1:PXTWqayeFUlJV1YDNhsJYB184+IvAH814St6o6ajzIs=
 go.opentelemetry.io/otel/trace v1.3.0/go.mod h1:c/VDhno8888bvQYmbYLqe41/Ldmr/KKunbvWM4/fEjk=
 go.opentelemetry.io/otel/trace v1.7.0/go.mod h1:fzLSB9nqR2eXzxPXb2JW9IKE+ScyXA48yyE4TNvoHqU=
 go.opentelemetry.io/otel/trace v1.8.0/go.mod h1:0Bt3PXY8w+3pheS3hQUt+wow8b1ojPaTBoTCh2zIFI4=
-go.opentelemetry.io/otel/trace v1.15.1 h1:uXLo6iHJEzDfrNC0L0mNjItIp06SyaBQxu5t3xMlngY=
-go.opentelemetry.io/otel/trace v1.15.1/go.mod h1:IWdQG/5N1x7f6YUlmdLeJvH9yxtuJAfc4VW5Agv9r/8=
+go.opentelemetry.io/otel/trace v1.19.0 h1:DFVQmlVbfVeOuBRrwdtaehRrWiL1JoVs9CPIQ1Dzxpg=
+go.opentelemetry.io/otel/trace v1.19.0/go.mod h1:mfaSyvGyEJEI0nyV2I4qhNQnbBOUUmYZpYojqMnX2vo=
 go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
-go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw=
-go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U=
+go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I=
+go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM=
 go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
 go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
 go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
@@ -941,8 +944,8 @@ go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0
 go.uber.org/automaxprocs v1.3.0/go.mod h1:9CWT6lKIep8U41DDaPiH6eFscnTyjfTANNQNx6LrIcA=
 go.uber.org/automaxprocs v1.4.0/go.mod h1:/mTEdr7LvHhs0v7mjdxDreTz1OG5zdZGqgOnhWiR/+Q=
 go.uber.org/automaxprocs v1.5.1/go.mod h1:BF4eumQw0P9GtnuxxovUd06vwm1o18oMzFtK66vU6XU=
-go.uber.org/automaxprocs v1.5.2 h1:2LxUOGiR3O6tw8ui5sZa2LAaHnsviZdVOUZw4fvbnME=
-go.uber.org/automaxprocs v1.5.2/go.mod h1:eRbA25aqJrxAbsLO0xy5jVwPt7FQnRgjW+efnwa1WM0=
+go.uber.org/automaxprocs v1.5.3 h1:kWazyxZUrS3Gs4qUpbwo5kEIMGe/DAvi5Z4tl2NW4j8=
+go.uber.org/automaxprocs v1.5.3/go.mod h1:eRbA25aqJrxAbsLO0xy5jVwPt7FQnRgjW+efnwa1WM0=
 go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
 go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
 go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
@@ -986,8 +989,9 @@ golang.org/x/crypto v0.0.0-20210920023735-84f357641f63/go.mod h1:GvvjBRRGRdwPK5y
 golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
 golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
 golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
-golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM=
 golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I=
+golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc=
+golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -1078,8 +1082,9 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug
 golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
 golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
 golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
-golang.org/x/net v0.11.0 h1:Gi2tvZIJyBtO9SDr1q9h5hEQCp/4L2RQ+ar0qjx2oNU=
 golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ=
+golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
+golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -1090,9 +1095,8 @@ golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ
 golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
 golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
 golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.7.0 h1:qe6s0zUXlPX80/dITx3440hWZ7GwMwgDDyrSGTPJG/g=
-golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4=
+golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4=
+golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -1106,8 +1110,9 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ
 golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
 golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
+golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -1190,17 +1195,20 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc
 golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s=
 golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
+golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
 golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
-golang.org/x/term v0.9.0 h1:GRRCnKYhdQrD8kfRAdQ6Zcw1P0OcELxGLKJvtjVMZ28=
 golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo=
+golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek=
+golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
 golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -1211,10 +1219,12 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
 golang.org/x/text v0.3.8-0.20211105212822-18b340fc7af2/go.mod h1:EFNZuWvGYxIRUEX+K8UmCFwYmZjqcrnq15ZuVldZkZ0=
+golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
 golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
 golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
-golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58=
 golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
+golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
+golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
 golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -1293,6 +1303,7 @@ golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
 golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo=
 golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
 golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
+golang.org/x/tools v0.9.3 h1:Gn1I8+64MsuTb/HpH+LmQtNas23LhUVr3rYZ0eKuaMM=
 golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -1326,8 +1337,9 @@ google.golang.org/appengine v1.6.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7
 google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
 google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
 google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
 google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
+google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
 google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
 google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
 google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
@@ -1369,11 +1381,14 @@ google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6D
 google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
 google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
 google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
-google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
 google.golang.org/genproto v0.0.0-20220228195345-15d65a4533f7/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
 google.golang.org/genproto v0.0.0-20220602131408-e326c6e8e9c8/go.mod h1:yKyY4AMRwFiC8yMMNaMi+RkCnjZJt9LoWuvhXjMs+To=
-google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A=
-google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU=
+google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b h1:+YaDE2r2OG8t/z5qmsh7Y+XXwCbvadxxZ0YY6mTdrVA=
+google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:CgAqfJo+Xmu0GwA0411Ht3OU3OntXwsGmrmjI8ioGXI=
+google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b h1:CIC2YMXmIhYw6evmhPxBKJ4fmLbOFtXQN/GV3XOZR8k=
+google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:IBQ646DjkDkvUIsVq/cc03FUFQ9wbZu7yE396YcL870=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b h1:ZlWIi1wSK56/8hn4QcBp/j9M7Gt3U/3hZw3mC7vDICo=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:swOH3j0KzcDDgGUWr+SNpyTen5YrXjS3eyPzFYKc6lc=
 google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
 google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
@@ -1395,15 +1410,13 @@ google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA5
 google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
 google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
 google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
-google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
 google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k=
-google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
 google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
 google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ=
 google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
 google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
-google.golang.org/grpc v1.56.1 h1:z0dNfjIl0VpaZ9iSVjA6daGatAYwPGstTjt5vkRMFkQ=
-google.golang.org/grpc v1.56.1/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s=
+google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
+google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
 google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
@@ -1481,30 +1494,30 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
 honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
 honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
-jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20230710093759-d9d6c68de8b1 h1:BItxi1gkQUs3sjxaBk6tc34fZWSO4hUSXcTM3PcnY4I=
-jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20230710093759-d9d6c68de8b1/go.mod h1:p/595fgbj4r6GhSJhHDpx3Ru1NkD5UASFL8OuIQw09E=
+jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20231017031425-45003ca9f35a h1:kwjO4pqB3gnNGrQ9aXyz6f8s9qXAUenPUDWip8gYR/Q=
+jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20231017031425-45003ca9f35a/go.mod h1:p/595fgbj4r6GhSJhHDpx3Ru1NkD5UASFL8OuIQw09E=
 k8s.io/api v0.22.9/go.mod h1:rcjO/FPOuvc3x7nQWx29UcDrFJMx82RxDob71ntNH4A=
-k8s.io/api v0.26.3 h1:emf74GIQMTik01Aum9dPP0gAypL8JTLl/lHa4V9RFSU=
-k8s.io/api v0.26.3/go.mod h1:PXsqwPMXBSBcL1lJ9CYDKy7kIReUydukS5JiRlxC3qE=
+k8s.io/api v0.28.3 h1:Gj1HtbSdB4P08C8rs9AR94MfSGpRhJgsS+GF9V26xMM=
+k8s.io/api v0.28.3/go.mod h1:MRCV/jr1dW87/qJnZ57U5Pak65LGmQVkKTzf3AtKFHc=
 k8s.io/apimachinery v0.22.9/go.mod h1:ZvVLP5iLhwVFg2Yx9Gh5W0um0DUauExbRhe+2Z8I1EU=
-k8s.io/apimachinery v0.27.0-alpha.3 h1:uujqsdFrbqF+cEbqFHrkLKp+s3XxRgphTpc6Yg84qLo=
-k8s.io/apimachinery v0.27.0-alpha.3/go.mod h1:TO4higCGNMwebVSdb1XPJdXMU4kk+nmMY/cTMVCGa6M=
+k8s.io/apimachinery v0.28.3 h1:B1wYx8txOaCQG0HmYF6nbpU8dg6HvA06x5tEffvOe7A=
+k8s.io/apimachinery v0.28.3/go.mod h1:uQTKmIqs+rAYaq+DFaoD2X7pcjLOqbQX2AOiO0nIpb8=
 k8s.io/client-go v0.22.9/go.mod h1:IoH7exYnoH/zgvHOuVxh2c4yJepcCBt72FzCTisOc4k=
-k8s.io/client-go v0.26.3 h1:k1UY+KXfkxV2ScEL3gilKcF7761xkYsSD6BC9szIu8s=
-k8s.io/client-go v0.26.3/go.mod h1:ZPNu9lm8/dbRIPAgteN30RSXea6vrCpFvq+MateTUuQ=
+k8s.io/client-go v0.28.3 h1:2OqNb72ZuTZPKCl+4gTKvqao0AMOl9f3o2ijbAj3LI4=
+k8s.io/client-go v0.28.3/go.mod h1:LTykbBp9gsA7SwqirlCXBWtK0guzfhpoW4qSm7i9dxo=
 k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
 k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
 k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
 k8s.io/klog/v2 v2.40.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
-k8s.io/klog/v2 v2.90.1 h1:m4bYOKall2MmOiRaR1J+We67Do7vm9KiQVlT96lnHUw=
-k8s.io/klog/v2 v2.90.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
+k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg=
+k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
 k8s.io/kube-openapi v0.0.0-20211109043538-20434351676c/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw=
-k8s.io/kube-openapi v0.0.0-20230307230338-69ee2d25a840 h1:1Q4XWtrQQh04ZweCpL7aMNYafFMoPEiST4dl5b4PmYw=
-k8s.io/kube-openapi v0.0.0-20230307230338-69ee2d25a840/go.mod h1:y5VtZWM9sHHc2ZodIH/6SHzXj+TPU5USoA8lcIeKEKY=
+k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780=
+k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA=
 k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 k8s.io/utils v0.0.0-20220706174534-f6158b442e7c/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
-k8s.io/utils v0.0.0-20230209194617-a36077c30491 h1:r0BAOLElQnnFhE/ApUsg3iHdVYYPBjNSSOMowRZxxsY=
-k8s.io/utils v0.0.0-20230209194617-a36077c30491/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
+k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI=
+k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
 rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
 rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=

+ 4 - 0
src/jfw/modules/publicapply/src/identity/service/action.go

@@ -10,4 +10,8 @@ type Identity struct {
 	list xweb.Mapper `xweb:"/identity/list"`
 	//身份切换
 	switchIdentity xweb.Mapper `xweb:"/identity/switch"`
+	//编辑身份信息维护
+	edit xweb.Mapper `xweb:"/identity/maintenance/edit"`
+	//获取身份信息维护
+	detail xweb.Mapper `xweb:"/identity/maintenance/detail"`
 }

+ 106 - 0
src/jfw/modules/publicapply/src/identity/service/service.go

@@ -6,10 +6,12 @@ import (
 	. "jy/src/jfw/modules/publicapply/src/config"
 	. "jy/src/jfw/modules/publicapply/src/db"
 	"log"
+	"strings"
 
 	. "app.yhyue.com/moapp/jybase/api"
 	util "app.yhyue.com/moapp/jybase/common"
 	"app.yhyue.com/moapp/jybase/encrypt"
+	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 	. "app.yhyue.com/moapp/jypkg/identity"
 )
 
@@ -78,6 +80,9 @@ func (f *Identity) List() {
 					EntId:        v.EntId,
 					EntUserId:    v.EntUserId,
 					EntUserName:  v.EntUserName,
+					EntRole:      v.EntRole,
+					EntNicheDis:  v.EntNicheDis,
+					EntDeptId:    v.EntDeptId,
 				}),
 			})
 		}
@@ -98,3 +103,104 @@ func (f *Identity) SwitchIdentity() {
 		Data: status,
 	})
 }
+
+func (f *Identity) Edit() {
+	userId, _ := f.GetSession("mgoUserId").(string)
+	set := map[string]interface{}{}
+	entName := strings.TrimSpace(f.GetString("entName"))
+	if entName != "" {
+		set["s_company"] = entName
+	}
+	if entType := strings.TrimSpace(f.GetString("entType")); entType != "" {
+		set["identity_info.ent_type"] = entType
+	}
+	if position := strings.TrimSpace(f.GetString("position")); position != "" {
+		set["identity_info.position"] = position
+	}
+	if deptName := strings.TrimSpace(f.GetString("deptName")); deptName != "" {
+		set["identity_info.dept_name"] = deptName
+	}
+	entBusinessType := strings.TrimSpace(f.GetString("entBusinessType"))
+	if entBusinessType != "" {
+		set["identity_info.ent_businessType"] = entBusinessType
+	}
+	status := 0
+	if len(set) > 0 {
+		if Mgo.UpdateById("user", userId, map[string]interface{}{"$set": set}) {
+			userMsg, _ := Mgo.FindById("user", userId, `{"l_registedate":1}`)
+			isNew := false
+			if userMsg != nil && len(*userMsg) > 0 {
+				l_registedate := util.Int64All((*userMsg)["l_registedate"])
+				isNew = l_registedate > Config.TaskStartTime //是否注册时间处于新手任务开始时间
+			}
+			status = 1
+			if entName != "" {
+				err := jy.Publish(Mgo_Log, Config.Nsq, Config.NsqTopic, "task", userId, "", map[string]interface{}{
+					"code":       util.If(isNew, "1010", "1017"),
+					"types":      "improveEntInfo",
+					"baseUserId": util.Int64All(f.GetSession("base_user_id")),
+				})
+				if err != nil {
+					log.Println(userId, "完善身份信息-公司信息,发送nsq消息错误-->", err)
+				}
+			}
+			if entBusinessType != "" {
+				err := jy.Publish(Mgo_Log, Config.Nsq, Config.NsqTopic, "task", userId, "", map[string]interface{}{
+					"code":       util.If(isNew, "1011", "1018"),
+					"types":      "improveBusiness",
+					"baseUserId": util.Int64All(f.GetSession("base_user_id")),
+				})
+				if err != nil {
+					log.Println(userId, "完善身份信息-公司信息,发送nsq消息错误-->", err)
+				}
+			}
+		}
+	}
+	f.ServeJson(Result{Data: status})
+}
+
+func (f *Identity) Detail() {
+	userId, _ := f.GetSession("userId").(string)
+	mgoUserId, _ := f.GetSession("mgoUserId").(string)
+	u, ok := Mgo.FindById("user", mgoUserId, `{"s_company":1,"identity_info":1}`)
+	data := M{}
+	if ok && u != nil && len(*u) > 0 {
+		entType, position, deptName, entBusinessType := "", "", "", ""
+		entName, _ := (*u)["s_company"].(string)
+		identityInfo, _ := (*u)["identity_info"].(map[string]interface{})
+		if identityInfo != nil {
+			entType, _ = identityInfo["ent_type"].(string)
+			position, _ = identityInfo["position"].(string)
+			deptName, _ = identityInfo["dept_name"].(string)
+			entBusinessType, _ = identityInfo["ent_businessType"].(string)
+		}
+		if entName == "" || position == "" || deptName == "" || entType == "" {
+			saleLeads, ok := Mgo.Find("saleLeads", map[string]interface{}{
+				"userid": userId,
+			}, `{"createtime":-1}`, `{"company":1,"position":1,"department":1,"companyType":1,"branch":1}`, false, 0, 1)
+			if ok && saleLeads != nil && len(*saleLeads) == 1 {
+				if entName == "" {
+					entName, _ = (*saleLeads)[0]["company"].(string)
+				}
+				if position == "" {
+					position, _ = (*saleLeads)[0]["position"].(string)
+				}
+				if deptName == "" {
+					deptName, _ = (*saleLeads)[0]["department"].(string)
+				}
+				if deptName == "" {
+					deptName, _ = (*saleLeads)[0]["branch"].(string)
+				}
+				if entType == "" {
+					entType, _ = (*saleLeads)[0]["companyType"].(string)
+				}
+			}
+		}
+		data["entName"] = entName
+		data["entType"] = entType
+		data["position"] = position
+		data["deptName"] = deptName
+		data["entBusinessType"] = entBusinessType
+	}
+	f.ServeJson(Result{Data: data})
+}

+ 1 - 0
src/jfw/modules/publicapply/src/main.go

@@ -26,6 +26,7 @@ import (
 	_ "jy/src/jfw/modules/publicapply/src/transfer"
 	"net/http"
 
+	_ "jy/src/jfw/modules/publicapply/src/channel"
 	_ "jy/src/jfw/modules/publicapply/src/shareFission"
 	_ "jy/src/jfw/modules/publicapply/src/subscribe"
 	_ "jy/src/jfw/modules/publicapply/src/subscribePush"

+ 62 - 19
src/jfw/modules/publicapply/src/oneclick/entity/entity.go

@@ -1,6 +1,19 @@
 package entity
 
 import (
+	"encoding/json"
+	"errors"
+	"fmt"
+	"jy/src/jfw/modules/publicapply/src/config"
+	"jy/src/jfw/modules/publicapply/src/db"
+	"jy/src/jfw/modules/publicapply/src/jyutil"
+	"jy/src/jfw/modules/publicapply/src/oneclick/initjson"
+	"log"
+	"net/http"
+	"strings"
+	"sync"
+	"time"
+
 	"app.yhyue.com/moapp/jybase/common"
 	"app.yhyue.com/moapp/jybase/date"
 	"app.yhyue.com/moapp/jybase/encrypt"
@@ -10,23 +23,12 @@ import (
 	qrpc "app.yhyue.com/moapp/jybase/rpc"
 	"app.yhyue.com/moapp/jybase/usercenter"
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
+	"app.yhyue.com/moapp/jypkg/public"
 	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
-	"encoding/json"
-	"errors"
-	"fmt"
 	openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
 	dypnsapi20170525 "github.com/alibabacloud-go/dypnsapi-20170525/v2/client"
 	util "github.com/alibabacloud-go/tea-utils/v2/service"
 	"github.com/alibabacloud-go/tea/tea"
-	"jy/src/jfw/modules/publicapply/src/config"
-	"jy/src/jfw/modules/publicapply/src/db"
-	"jy/src/jfw/modules/publicapply/src/jyutil"
-	"jy/src/jfw/modules/publicapply/src/oneclick/initjson"
-	"log"
-	"net/http"
-	"strings"
-	"sync"
-	"time"
 )
 
 type OneClickInfo struct {
@@ -48,6 +50,7 @@ type OneClickInfo struct {
 	Session        *httpsession.Session
 	ResponseWriter *http.ResponseWriter
 	Host           string
+	R              *http.Request
 }
 
 var (
@@ -299,7 +302,6 @@ func (o *OneClickInfo) ProcessPhone(phone string) (map[string]interface{}, error
 		}
 		returnData = rs
 	}
-
 	return returnData, nil
 }
 
@@ -307,6 +309,16 @@ func (o *OneClickInfo) ProcessPhone(phone string) (map[string]interface{}, error
 func (o *OneClickInfo) phoneLogin(phone string) (map[string]interface{}, error) {
 	returnSign := ""
 	userInfo := map[string]interface{}{}
+	channelCode := "jy_app_phone"
+	platform := "app"
+	if strings.Contains(o.Host, "h5.jianyu360.cn") {
+		platform = "h5"
+		channelCode = "jy_h5_phone"
+	}
+	cc, ckErr := o.R.Cookie(jy.ChannelCookieName)
+	if ckErr == nil {
+		channelCode = cc.Value
+	}
 	status := func() int {
 		RegLock.Lock()
 		reg := RegMap[phone]
@@ -329,10 +341,6 @@ func (o *OneClickInfo) phoneLogin(phone string) (map[string]interface{}, error)
 			client := o.UA
 			log.Println(client)
 			//clearRidByRid(rid)
-			s_platform := "app"
-			if strings.Contains(o.Host, "h5.jianyu360.cn") {
-				s_platform = "h5"
-			}
 			data := map[string]interface{}{
 				"i_appid":       2,
 				"s_phone":       phone,
@@ -348,7 +356,8 @@ func (o *OneClickInfo) phoneLogin(phone string) (map[string]interface{}, error)
 					"i_ratemode":   2,
 					"l_modifydate": time.Now().Unix(),
 				},
-				"s_platform": s_platform,
+				"s_platform": platform,
+				"s_sourceid": channelCode,
 			}
 			// 新注册用户
 			if o.Activity != "" {
@@ -392,7 +401,7 @@ func (o *OneClickInfo) phoneLogin(phone string) (map[string]interface{}, error)
 				}
 				mgoUserId, _ := o.Session.Get("mgoUserId").(string)
 				go o.saveLog(mgoUserId, "o_register")
-				return 1
+				return 2
 			}
 		} else {
 			//以s_m_phone登录的 需要把s_m_phone转化为s_phone
@@ -413,6 +422,40 @@ func (o *OneClickInfo) phoneLogin(phone string) (map[string]interface{}, error)
 		}
 		return 0
 	}()
+	if status > 0 {
+		//mgoUserId := qutil.ObjToString(o.Session.Get("mgoUserId"))
+		mgoUserId, _ := o.Session.Get("mgoUserId").(string)
+		err := jy.Publish(db.Mgo_Log, config.Config.Nsq, config.Config.NsqTopic, "task", mgoUserId, "", map[string]interface{}{
+			"code":       1014, //下载app任务
+			"types":      "downloadApp",
+			"num":        50,
+			"baseUserId": o.Session.Get("base_user_id"),
+			"positionId": o.Session.Get("positionId"),
+		})
+		if err != nil {
+			log.Println(mgoUserId, "下载app任务,发送nsq消息错误-->", err)
+		}
+		//登录source 更新 p414
+		phone, _ := o.Session.Get("phone").(string)
+		//positionId, _ := o.Session.Get("positionId").(int64)
+		positionId := common.Int64All(o.Session.Get("positionId"))
+		us := jy.UserSource{
+			UserId:           mgoUserId,
+			PositionId:       positionId,
+			Phone:            phone,
+			State:            status, //注册/登录标志 1:登录;2:注册
+			ChannelCode:      channelCode,
+			EncryptionUserId: encrypt.SE.EncodeString(mgoUserId),
+			CreateTime:       time.Now().Format(date.Date_Full_Layout),
+			LoginWay:         4,                                                                  //登录方式;1:手机号密码;2:手机号验证码;3:微信;4:手机号一键登录
+			Platform:         common.If(strings.Contains(o.Host, "h5.jianyu360.cn"), 4, 3).(int), //登录端;1:PC;2:WX;3:APP;4:H5
+			Ip:               common.GetIp(o.R),
+		}
+		go func(us jy.UserSource) {
+			jy.SaveUserSource(public.BaseMysql, jy.ChannelTableName, common.StructToMapMore(us))
+		}(us)
+		status = 1
+	}
 	result := map[string]interface{}{
 		"status": status,
 		"userId": o.Session.Get("mgoUserId"),

+ 1 - 0
src/jfw/modules/publicapply/src/oneclick/service/service.go

@@ -33,6 +33,7 @@ func (o *OneClick) GetPhoneByToken() {
 				Vender:         o.GetString("vender"),
 				Host:           o.Request.Host,
 				Activity:       o.GetString("activity"),
+				R:              o.Request,
 			}
 		)
 		if oci.SpToken == "" && oci.AccessToken == "" {

+ 25 - 1
src/jfw/modules/publicapply/src/subscribePush/entity/keyWords.go

@@ -1,7 +1,6 @@
 package entity
 
 import (
-	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
 	"fmt"
 	"jy/src/jfw/modules/publicapply/src/config"
 	"jy/src/jfw/modules/publicapply/src/db"
@@ -10,6 +9,8 @@ import (
 	"strings"
 	"time"
 
+	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
+
 	qutil "app.yhyue.com/moapp/jybase/common"
 	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
@@ -268,6 +269,17 @@ func AddKeyWordsFree(types, userId, classIndex, className, keywordsIndex, keywor
 				AppId:      "10000",
 			})
 			config.Middleground.PowerCheckCenter.DelCheckRedis("10000", qutil.Int64All(positionId))
+			//判断是新增
+			if (keywordCount == "" || keywordCount == "0") || (keywordCount == keywordsIndex || qutil.Int64All(keywordCount) == qutil.Int64All(keywordsIndex)+1) {
+				//设置关键词送积分
+				jy.Publish(db.Mgo_Log, config.Config.Nsq, config.Config.NsqTopic, "task", qutil.ObjToString(session.Get("mgoUserId")), jy.Jywx_node1, map[string]interface{}{
+					"code":       1015, //首次订阅
+					"types":      "subscribeKeyWords",
+					"num":        50,
+					"baseUserId": session.Get("base_user_id"),
+					"positionId": positionId,
+				})
+			}
 		}
 		SetLog(userId, types, 0, session)
 	}
@@ -342,6 +354,18 @@ func AddKeyWords(types, userId, classIndex, className, keywordsIndex, keywordNam
 			"$set": saveData,
 		})
 		SetLog(userId, types, positionType, session)
+		//判断是新增
+
+		if (keywordCount == "" || keywordCount == "0") || (keywordCount == keywordsIndex || qutil.Int64All(keywordCount) == qutil.Int64All(keywordsIndex)+1) {
+			//设置关键词送积分
+			jy.Publish(db.Mgo_Log, config.Config.Nsq, config.Config.NsqTopic, "task", qutil.ObjToString(session.Get("mgoUserId")), jy.Jywx_node1, map[string]interface{}{
+				"code":       1015, //首次订阅
+				"types":      "subscribeKeyWords",
+				"num":        50,
+				"baseUserId": session.Get("base_user_id"),
+				"positionId": session.Get("positionId"),
+			})
+		}
 	}
 	return map[string]interface{}{"flag": flag, "msg": ""}
 }

+ 30 - 1
src/jfw/modules/publicapply/src/transfer/transfer.go

@@ -20,7 +20,8 @@ func init() {
 
 type Transfer struct {
 	*xweb.Action
-	transfer xweb.Mapper `xweb:"/transfer"`
+	transfer   xweb.Mapper `xweb:"/transfer"`
+	biTransfer xweb.Mapper `xweb:"/biTransfer"`
 }
 
 func (this *Transfer) Transfer() error {
@@ -52,6 +53,20 @@ func (this *Transfer) Transfer() error {
 	}
 	return this.WriteBytes([]byte("请求异常"))
 }
+func (this *Transfer) BiTransfer() error {
+	newUrl := func() string {
+		buyerName := this.GetString("buyerName")
+		if buyerName == "" {
+			return ""
+		}
+		return BiUrlHandle(buyerName, this.Session())
+	}()
+	if newUrl != "" {
+		log.Println("最近地址", newUrl)
+		return this.Redirect(newUrl)
+	}
+	return this.WriteBytes([]byte("请求异常"))
+}
 
 // 标讯
 var PCWXArticle = "/article/content/%s"
@@ -83,6 +98,20 @@ var PCVipEntPortrait = "/swordfish/page_big_pc/svip/ent_ser_portrait/%s"
 var APPEntPortrait = "/jyapp/big/page/ent_portrait?eId=%s"
 var WXEntPortrait = "/weixin/frontPage/collection/sess/ent_portrait?eId=%s"
 
+func BiUrlHandle(buyerName string, u *httpsession.Session) string {
+	newUrl := ""
+	//pc采购单位画像
+	BaseMsg := jy.GetBigVipUserBaseMsg(u, *config.Middleground)
+	if BaseMsg.EntnicheStatus > 0 {
+		newUrl = fmt.Sprintf("/entpc/unit_portrayal/%s?%s", buyerName, "resource=BI&aside=0")
+	} else {
+		newUrl = fmt.Sprintf("/swordfish/page_big_pc/unit_portrayal/%s?%s", buyerName, "resource=BI&aside=0")
+	}
+	if BaseMsg.Status > 0 {
+		newUrl = fmt.Sprintf("/swordfish/page_big_pc/unit_portrayal/%s?%s", buyerName, "resource=BI&aside=0")
+	}
+	return newUrl
+}
 func UrlHandle(urlStr string, repType string, u *httpsession.Session) string {
 	newUrl := ""
 	lastPath, queryMap := QueryHadle(urlStr)

+ 216 - 216
src/jfw/modules/publicapply/src/util/util.go

@@ -1,37 +1,37 @@
 package util
 
 import (
-    "encoding/json"
-    "fmt"
-    "jy/src/jfw/modules/publicapply/src/config"
-    "jy/src/jfw/modules/publicapply/src/db"
-    "regexp"
-    "strconv"
-    "strings"
-    "time"
+	"encoding/json"
+	"fmt"
+	"jy/src/jfw/modules/publicapply/src/config"
+	"jy/src/jfw/modules/publicapply/src/db"
+	"regexp"
+	"strconv"
+	"strings"
+	"time"
 
-    qutil "app.yhyue.com/moapp/jybase/common"
-    . "app.yhyue.com/moapp/jybase/date"
-    "app.yhyue.com/moapp/jybase/encrypt"
-    "app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
+	qutil "app.yhyue.com/moapp/jybase/common"
+	. "app.yhyue.com/moapp/jybase/date"
+	"app.yhyue.com/moapp/jybase/encrypt"
+	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 )
 
 var ClearHtml = regexp.MustCompile("<[^>]*>")
 
-//加密
+// 加密
 func EncodeId(sid string) string {
-    if sid == "" {
-        return ""
-    }
-    return encrypt.EncodeArticleId2ByCheck(sid)
+	if sid == "" {
+		return ""
+	}
+	return encrypt.EncodeArticleId2ByCheck(sid)
 }
 
-//解密
+// 解密
 func DecodeId(eid string) string {
-    if eid == "" {
-        return ""
-    }
-    return encrypt.CommonDecodeArticle("content", eid)[0]
+	if eid == "" {
+		return ""
+	}
+	return encrypt.CommonDecodeArticle("content", eid)[0]
 }
 
 //收藏列表
@@ -43,231 +43,231 @@ func DecodeId(eid string) string {
 	   开始时间-结束时间:1622476800-1623859200
 */
 type CollList struct {
-    Pagenum     int    `json:"pagenum"`     //页数
-    Label       string `json:"label"`       //标签 用,分隔开
-    SelectTime  string `json:"selectTime"`  //收藏时间
-    Buyerclass  string `json:"buyerclass"`  //采购单位 用,分隔开
-    BuyerPhone  int    `json:"buyerPhone"`  //是否需要采购单位联系方式 1:需要 -1:不需要 0:未选中
-    WinnerPhone int    `json:"winnerPhone"` //是否需要中标单位联系方式 1:需要 -1:不需要 0:未选中
-    Pagesize    int    `json:"pagesize"`    //每页展示数量
+	Pagenum     int    `json:"pagenum"`     //页数
+	Label       string `json:"label"`       //标签 用,分隔开
+	SelectTime  string `json:"selectTime"`  //收藏时间
+	Buyerclass  string `json:"buyerclass"`  //采购单位 用,分隔开
+	BuyerPhone  int    `json:"buyerPhone"`  //是否需要采购单位联系方式 1:需要 -1:不需要 0:未选中
+	WinnerPhone int    `json:"winnerPhone"` //是否需要中标单位联系方式 1:需要 -1:不需要 0:未选中
+	Pagesize    int    `json:"pagesize"`    //每页展示数量
 }
 
-//搜藏列表
+// 搜藏列表
 func CollListSql(c *CollList, isPay bool, userid string) string {
-    sql := fmt.Sprintf(`select bid from %s where userid ='%s'`, db.DbConf.Bdcollection, userid)
-    limit := config.BidCollConfig.FreeUserCollLimit
-    //个人标签
-    if c.Label != "" {
-        i := 0
-        sql += ` and `
-        if labelArr := strings.Split(c.Label, ","); len(labelArr) > 0 {
-            sql += `(`
-            for _, v := range labelArr {
-                i++
-                labid := encrypt.SE.DecodeString(v)
-                if i == len(labelArr) {
-                    sql += fmt.Sprintf(`FIND_IN_SET(%s,labelid)`, labid)
-                } else {
-                    sql += fmt.Sprintf(`FIND_IN_SET(%s,labelid) or `, labid)
-                }
-            }
-            sql += `)`
-        }
-    }
-    now := time.Now()
-    start, end := "", ""
-    //收藏时间
-    if c.SelectTime == "lately-7" { //最近7天
-        start = fmt.Sprint(time.Date(now.Year(), now.Month(), now.Day()-7, 0, 0, 0, 0, time.Local).Format(Date_Full_Layout))
-    } else if c.SelectTime == "lately-30" { //最近30天
-        start = fmt.Sprint(time.Date(now.Year(), now.Month(), now.Day()-30, 0, 0, 0, 0, time.Local).Format(Date_Full_Layout))
-    } else if c.SelectTime == "thisyear" { //去年
-        start = fmt.Sprint(time.Date(now.Year()-1, 1, 1, 0, 0, 0, 0, time.Local).Format(Date_Full_Layout))
-        end = fmt.Sprint(time.Date(now.Year()-1, 12, 31, 23, 59, 59, 0, time.Local).Format(Date_Full_Layout))
-    } else if len(strings.Split(c.SelectTime, "_")) == 2 {
-        if c.SelectTime != "0_0" {
-            starttime := strings.Split(c.SelectTime, "_")[0]
-            startstamp, _ := strconv.Atoi(starttime)
-            start = time.Unix(int64(startstamp), 0).Format(Date_Full_Layout)
-            endtime := strings.Split(c.SelectTime, "_")[1]
-            et, _ := strconv.ParseInt(endtime, 0, 64)
-            etTime := time.Unix(et, 0)
-            end = fmt.Sprint(time.Date(etTime.Year(), etTime.Month(), etTime.Day()+1, 0, 0, 0, 0, time.Local).Format(Date_Full_Layout))
-        }
-    }
-    if start != "" && end != "" {
-        sql += ` and createdate >= '` + start + `' and createdate < '` + end + `'`
-    } else if start != "" && end == "" {
-        sql += ` and createdate >= '` + start + `'`
-    } else if start == "" && end != "" {
-        sql += ` and createdate < '` + end + `'`
-    }
-    if isPay {
+	sql := fmt.Sprintf(`select bid from %s where userid ='%s'`, db.DbConf.Bdcollection, userid)
+	limit := config.BidCollConfig.FreeUserCollLimit
+	//个人标签
+	if c.Label != "" {
+		i := 0
+		sql += ` and `
+		if labelArr := strings.Split(c.Label, ","); len(labelArr) > 0 {
+			sql += `(`
+			for _, v := range labelArr {
+				i++
+				labid := encrypt.SE.DecodeString(v)
+				if i == len(labelArr) {
+					sql += fmt.Sprintf(`FIND_IN_SET(%s,labelid)`, labid)
+				} else {
+					sql += fmt.Sprintf(`FIND_IN_SET(%s,labelid) or `, labid)
+				}
+			}
+			sql += `)`
+		}
+	}
+	now := time.Now()
+	start, end := "", ""
+	//收藏时间
+	if c.SelectTime == "lately-7" { //最近7天
+		start = fmt.Sprint(time.Date(now.Year(), now.Month(), now.Day()-7, 0, 0, 0, 0, time.Local).Format(Date_Full_Layout))
+	} else if c.SelectTime == "lately-30" { //最近30天
+		start = fmt.Sprint(time.Date(now.Year(), now.Month(), now.Day()-30, 0, 0, 0, 0, time.Local).Format(Date_Full_Layout))
+	} else if c.SelectTime == "thisyear" { //去年
+		start = fmt.Sprint(time.Date(now.Year()-1, 1, 1, 0, 0, 0, 0, time.Local).Format(Date_Full_Layout))
+		end = fmt.Sprint(time.Date(now.Year()-1, 12, 31, 23, 59, 59, 0, time.Local).Format(Date_Full_Layout))
+	} else if len(strings.Split(c.SelectTime, "_")) == 2 {
+		if c.SelectTime != "0_0" {
+			starttime := strings.Split(c.SelectTime, "_")[0]
+			startstamp, _ := strconv.Atoi(starttime)
+			start = time.Unix(int64(startstamp), 0).Format(Date_Full_Layout)
+			endtime := strings.Split(c.SelectTime, "_")[1]
+			et, _ := strconv.ParseInt(endtime, 0, 64)
+			etTime := time.Unix(et, 0)
+			end = fmt.Sprint(time.Date(etTime.Year(), etTime.Month(), etTime.Day()+1, 0, 0, 0, 0, time.Local).Format(Date_Full_Layout))
+		}
+	}
+	if start != "" && end != "" {
+		sql += ` and createdate >= '` + start + `' and createdate < '` + end + `'`
+	} else if start != "" && end == "" {
+		sql += ` and createdate >= '` + start + `'`
+	} else if start == "" && end != "" {
+		sql += ` and createdate < '` + end + `'`
+	}
+	if isPay {
 
-        //采购单位 用,分隔开
-        if c.Buyerclass != "" {
-            i := 0
-            sql += ` and buyerclass in (`
-            if buyClassArr := strings.Split(c.Buyerclass, ","); len(buyClassArr) > 0 {
-                for _, v := range buyClassArr {
-                    i++
-                    buyerclassid := fmt.Sprint(jy.PushMapping.Buyerclass[v])
-                    if i == len(buyClassArr) {
-                        sql += buyerclassid + `)`
-                    } else {
-                        sql += buyerclassid + ","
-                    }
-                }
-            }
-        }
-        //是否存在采购单位电话
-        if c.BuyerPhone == 1 {
-            sql += ` and buyerinfo = 1`
-        } else if c.BuyerPhone == -1 {
-            sql += ` and buyerinfo = 0`
-        }
-        //是否存在中标单位电话
-        if c.WinnerPhone == 1 {
-            sql += ` and winnerinfo = 1`
-        } else if c.WinnerPhone == -1 {
-            sql += ` and winnerinfo = 0`
-        }
-        limit = config.BidCollConfig.PayUserCollLimit
-    }
-    sql += fmt.Sprintf(` order by createdate desc limit %v`, limit)
-    return sql
+		//采购单位 用,分隔开
+		if c.Buyerclass != "" {
+			i := 0
+			sql += ` and buyerclass in (`
+			if buyClassArr := strings.Split(c.Buyerclass, ","); len(buyClassArr) > 0 {
+				for _, v := range buyClassArr {
+					i++
+					buyerclassid := fmt.Sprint(jy.PushMapping.Buyerclass[v])
+					if i == len(buyClassArr) {
+						sql += buyerclassid + `)`
+					} else {
+						sql += buyerclassid + ","
+					}
+				}
+			}
+		}
+		//是否存在采购单位电话
+		if c.BuyerPhone == 1 {
+			sql += ` and buyerinfo = 1`
+		} else if c.BuyerPhone == -1 {
+			sql += ` and buyerinfo = 0`
+		}
+		//是否存在中标单位电话
+		if c.WinnerPhone == 1 {
+			sql += ` and winnerinfo = 1`
+		} else if c.WinnerPhone == -1 {
+			sql += ` and winnerinfo = 0`
+		}
+		limit = config.BidCollConfig.PayUserCollLimit
+	}
+	sql += fmt.Sprintf(` order by createdate desc limit %v`, limit)
+	return sql
 }
 
 func ConfirmIntArr(arr []interface{}) []int {
-    tmp := make([]int, 0)
-    for _, v := range arr {
-        tmp = append(tmp, qutil.IntAll(v))
-    }
-    return tmp
+	tmp := make([]int, 0)
+	for _, v := range arr {
+		tmp = append(tmp, qutil.IntAll(v))
+	}
+	return tmp
 }
 
-//判断同一个数组是否重复
+// 判断同一个数组是否重复
 func IsRepeat(slice1 []string) bool {
-    m := make(map[string]int)
-    for _, v := range slice1 {
-        m[v]++
-        if m[v] > 1 {
-            return true
-        }
-    }
-    return false
+	m := make(map[string]int)
+	for _, v := range slice1 {
+		m[v]++
+		if m[v] > 1 {
+			return true
+		}
+	}
+	return false
 }
 
-//判断数组是否包含
+// 判断数组是否包含
 func IsContain(slice []string, s string) bool {
-    for _, qq := range slice {
-        if qq == s {
-            return true
-        }
-    }
-    return false
+	for _, qq := range slice {
+		if qq == s {
+			return true
+		}
+	}
+	return false
 }
 
 // jsonStr转map
 func JsonToMap(jsonStr string) (map[string]interface{}, error) {
-    m := map[string]interface{}{}
-    err := json.Unmarshal([]byte(jsonStr), &m)
-    if err != nil {
-        fmt.Printf("Unmarshal with error: %+v\n", err)
-        return nil, err
-    }
-    return m, nil
+	m := map[string]interface{}{}
+	err := json.Unmarshal([]byte(jsonStr), &m)
+	if err != nil {
+		fmt.Printf("Unmarshal with error: %+v\n", err)
+		return nil, err
+	}
+	return m, nil
 }
 
-//判断stringArr相等方法
+// 判断stringArr相等方法
 func StringArrEqual(a, b []string) bool {
-    if (len(a) == 0) != (len(b) == 0) {
-        return false
-    }
-    if len(a) != len(b) {
-        return false
-    }
-    for i := range a {
-        if a[i] != b[i] {
-            return false
-        }
-    }
-    return true
+	if (len(a) == 0) != (len(b) == 0) {
+		return false
+	}
+	if len(a) != len(b) {
+		return false
+	}
+	for i := range a {
+		if a[i] != b[i] {
+			return false
+		}
+	}
+	return true
 }
 
-//获取频次信息:fre="周-1"(每周周一);"天-3":每三天一个周期;"日-3":每天三点;
+// 获取频次信息:fre="周-1"(每周周一);"天-3":每三天一个周期;"日-3":每天三点;
 func GetFrequencyInfo(fre string) (string, bool, int) {
-    if fre != "" && len(strings.Split(fre, "-")) > 1 {
-        f := strings.Split(fre, "-")[0]
-        d, _ := strconv.Atoi(strings.Split(fre, "-")[1])
-        switch f {
-        case "月":
-            day := time.Now().Day()
-            return fmt.Sprintf("nps_%s", time.Now().Month().String()), day == d, 31 * 24 * 60 * 60
-        case "周":
-            mi := ConvertWeekday(time.Now().Weekday().String())
-            return fmt.Sprintf("nps_%s", WeekByDate(time.Now())), mi == d, 7 * 24 * 60 * 60
-        case "日":
-            day := time.Now().Day()
-            hour := time.Now().Hour()
-            return fmt.Sprintf("nps_%s", strconv.Itoa(day)), hour == d, 24 * 60 * 60
-        case "天":
-            return fmt.Sprintf("nps_%s", strings.Split(fre, "-")[1]), true, d * 24 * 60 * 60
-        }
-    }
-    return "", false, 0
+	if fre != "" && len(strings.Split(fre, "-")) > 1 {
+		f := strings.Split(fre, "-")[0]
+		d, _ := strconv.Atoi(strings.Split(fre, "-")[1])
+		switch f {
+		case "月":
+			day := time.Now().Day()
+			return fmt.Sprintf("nps_%s", time.Now().Month().String()), day == d, 31 * 24 * 60 * 60
+		case "周":
+			mi := ConvertWeekday(time.Now().Weekday().String())
+			return fmt.Sprintf("nps_%s", WeekByDate(time.Now())), mi == d, 7 * 24 * 60 * 60
+		case "日":
+			day := time.Now().Day()
+			hour := time.Now().Hour()
+			return fmt.Sprintf("nps_%s", strconv.Itoa(day)), hour == d, 24 * 60 * 60
+		case "天":
+			return fmt.Sprintf("nps_%s", strings.Split(fre, "-")[1]), true, d * 24 * 60 * 60
+		}
+	}
+	return "", false, 0
 }
 
-//获取当年第几周
+// 获取当年第几周
 func WeekByDate(t time.Time) string {
-    yearDay := t.YearDay()
-    yearFirstDay := t.AddDate(0, 0, -yearDay+1)
-    firstDayInWeek := int(yearFirstDay.Weekday())
+	yearDay := t.YearDay()
+	yearFirstDay := t.AddDate(0, 0, -yearDay+1)
+	firstDayInWeek := int(yearFirstDay.Weekday())
 
-    //今年第一周有几天
-    firstWeekDays := 1
-    if firstDayInWeek != 0 {
-        firstWeekDays = 7 - firstDayInWeek + 1
-    }
-    var week int
-    if yearDay <= firstWeekDays {
-        week = 1
-    } else {
-        week = (yearDay-firstWeekDays)/7 + 2
-    }
-    return fmt.Sprintf("%d-%d", t.Year(), week)
+	//今年第一周有几天
+	firstWeekDays := 1
+	if firstDayInWeek != 0 {
+		firstWeekDays = 7 - firstDayInWeek + 1
+	}
+	var week int
+	if yearDay <= firstWeekDays {
+		week = 1
+	} else {
+		week = (yearDay-firstWeekDays)/7 + 2
+	}
+	return fmt.Sprintf("%d-%d", t.Year(), week)
 }
 
 func ConvertWeekday(weekday string) int {
-    _weekday := 0
-    if weekday == "Sunday" {
-        _weekday = 7
-    } else if weekday == "Monday" {
-        _weekday = 1
-    } else if weekday == "Tuesday" {
-        _weekday = 2
-    } else if weekday == "Wednesday" {
-        _weekday = 3
-    } else if weekday == "Thursday" {
-        _weekday = 4
-    } else if weekday == "Friday" {
-        _weekday = 5
-    } else if weekday == "Saturday" {
-        _weekday = 6
-    }
-    return _weekday
+	_weekday := 0
+	if weekday == "Sunday" {
+		_weekday = 7
+	} else if weekday == "Monday" {
+		_weekday = 1
+	} else if weekday == "Tuesday" {
+		_weekday = 2
+	} else if weekday == "Wednesday" {
+		_weekday = 3
+	} else if weekday == "Thursday" {
+		_weekday = 4
+	} else if weekday == "Friday" {
+		_weekday = 5
+	} else if weekday == "Saturday" {
+		_weekday = 6
+	}
+	return _weekday
 }
 
-//map转结构体
+// map转结构体
 func JsonUnmarshal(m interface{}, s interface{}) interface{} {
-    var b []byte
-    if v, ok := m.(string); ok {
-        b = []byte(v)
-    } else if v, ok := m.([]byte); ok {
-        b = v
-    } else {
-        b, _ = json.Marshal(m)
-    }
-    json.Unmarshal(b, &s)
-    return s
+	var b []byte
+	if v, ok := m.(string); ok {
+		b = []byte(v)
+	} else if v, ok := m.([]byte); ok {
+		b = v
+	} else {
+		b, _ = json.Marshal(m)
+	}
+	json.Unmarshal(b, &s)
+	return s
 }

+ 7 - 7
src/jfw/modules/subscribepay/src/baseApi.json

@@ -1,12 +1,12 @@
 {
   "appId": "10000",
   "apiList": {
-    "buyBalance": "http://127.0.0.1:8124/resources/purchaseUserBalance",
-    "useBalance": "http://127.0.0.1:8124/resources/useUserDetailed",
-    "findPreview": "http://127.0.0.1:8124/resources/findPreview",
-    "findBalance": "http://127.0.0.1:8124/resources/findBalance",
-    "findRecord": "http://127.0.0.1:8124/resources/findRecord",
-    "entdedupUrl": "http://127.0.0.1:8888/data/deduplication",
-    "updateVipTime":"http://127.0.0.1:8124/resources/updateVipTime"
+    "buyBalance": "http://127.0.0.1:8889/resources/purchaseUserBalance",
+    "useBalance": "http://127.0.0.1:8889/resources/useUserDetailed",
+    "findPreview": "http://127.0.0.1:8889/resources/findPreview",
+    "findBalance": "http://127.0.0.1:8889/resources/findBalance",
+    "findRecord": "http://127.0.0.1:8889/resources/findRecord",
+    "entdedupUrl": "http://127.0.0.1:8889/data/deduplication",
+    "updateVipTime":"http://127.0.0.1:8889/resources/updateVipTime"
   }
 }

+ 11 - 10
src/jfw/modules/subscribepay/src/config.json

@@ -1,17 +1,17 @@
 {
-  "smsServiceRpc":"192.168.3.11:932",
+  "smsServiceRpc":"192.168.3.149:932",
   "mongodbServers": "192.168.3.206:27080",
   "mongodbPoolSize": 10,
   "mongodbName": "qfw",
   "mongoent":{
-    "address": "192.168.3.207:27001,192.168.3.206:27002",
+    "address": "192.168.3.206:27002",
     "size": 5,
     "dbName": "qfw_data",
     "userName": "jyDevGroup",
     "password": "jy@DevGroup"
   },
   "mongobidding":{
-    "address": "192.168.3.207:27001,192.168.3.206:27002",
+    "address": "192.168.3.206:27002",
     "size": 5,
     "dbName": "qfw_data",
     "replSet": "",
@@ -33,7 +33,7 @@
     "userName": "admin",
     "password": "123456"
   },
-  "redisaddrs": "other=192.168.3.206:1712,session=192.168.3.11:1713,push=192.168.3.206:1712,newother=192.168.3.206:1712",
+  "redisaddrs": "other=192.168.3.149:1712,session=192.168.3.149:1713,push=192.168.3.149:1712,newother=192.168.3.149:1712",
   "elasticsearch": "http://192.168.3.206:9800,http://192.168.3.206:9801",
   "elasticPoolSize": 30,
   "elasticVersion": "v7",
@@ -43,7 +43,7 @@
   "appsecret": "ed5961aa2fca99d13ccff99130ba2866",
   "webport": "86",
   "webrpcport": "84",
-  "weixinrpc": "192.168.3.11:8202",
+  "weixinrpc": "127.0.0.1:8202",
   "cassandra": {
     "log": {
       "host": [
@@ -61,7 +61,7 @@
   },
     "mysql": {
         "dbName": "jianyu",
-        "address": "192.168.3.11:3366",
+        "address": "192.168.3.149:3306",
         "userName": "root",
         "passWord": "Topnet123",
 		"maxOpenConns":5,
@@ -69,15 +69,15 @@
 	},
     "infoMysql": {
         "dbName": "base_service",
-        "address": "192.168.3.11:3366",
+        "address": "192.168.3.217:4000",
         "userName": "root",
-        "passWord": "Topnet123",
+        "passWord": "=PDT49#80Z!RVv52_z",
 		"maxOpenConns":2,
 		"maxIdleConns":2
 	},
 	"activityMysql":{
 		 "dbName": "jyactivities",
-        "address": "192.168.3.11:3366",
+        "address": "192.168.3.149:3306",
         "userName": "root",
         "passWord": "Topnet123",
 		"maxOpenConns":5,
@@ -157,5 +157,6 @@
     "etcd": {
     	"hosts": "192.168.3.149:2379",
     	"key": "powercheck.rpc"
-    }
+    },
+    "taskStartTime":1698020000
 }

+ 1 - 1
src/jfw/modules/subscribepay/src/config.yaml

@@ -1,6 +1,6 @@
 etcd:
   hosts:
-  - 192.168.3.149:2379
+  - 127.0.0.1:2379
 userCenterKey: "usercenter.rpc" #用户中台rpc
 powerCheckCenterKey: "powercheck.rpc" #权益校验中台
 activityKey: "activity.rpc" #营销平台rpc

+ 4 - 3
src/jfw/modules/subscribepay/src/config/config.go

@@ -3,9 +3,6 @@ package config
 import (
 	"time"
 
-	"app.yhyue.com/moapp/jypkg/middleground"
-	"github.com/gogf/gf/v2/frame/g"
-	"github.com/gogf/gf/v2/os/gcfg"
 	"github.com/gogf/gf/v2/os/gctx"
 
 	qutil "app.yhyue.com/moapp/jybase/common"
@@ -13,6 +10,9 @@ import (
 	"app.yhyue.com/moapp/jybase/mail"
 	qrpc "app.yhyue.com/moapp/jybase/rpc"
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/middleGround"
+	"app.yhyue.com/moapp/jypkg/middleground"
+	"github.com/gogf/gf/v2/frame/g"
+	"github.com/gogf/gf/v2/os/gcfg"
 )
 
 type config struct {
@@ -116,6 +116,7 @@ type config struct {
 	}
 	KeywordsLimit     int
 	BreakRenewTipTime string
+	TaskStartTime     int64
 }
 type mgoConf struct {
 	Address           string

+ 1 - 1
src/jfw/modules/subscribepay/src/dataexport.json

@@ -52,13 +52,13 @@
     {"name":"城市","filed":"city","width":7,"color":"00D2E7F7","vMerge":1,"hMerge":0},
     {"name":"区县","filed":"district","width":7,"color":"00D2E7F7","vMerge":1,"hMerge":0},
     {"name":"公告标题","filed":"title","width":20,"color":"00D2E7F7","vMerge":1,"hMerge":0},
-    {"name":"行业","filed":"s_topscopeclass","width":20,"color":"00D2E7F7","vMerge":1,"hMerge":0},
     {"name":"公告类别","filed":"subtype","width":9,"color":"00D2E7F7","vMerge":1,"hMerge":0},
     {"name":"公告内容","filed":"detail","width":40,"color":"00D2E7F7","vMerge":1,"hMerge":0},
     {"name":"发布时间","filed":"publishtime","width":11,"color":"00D2E7F7","vMerge":1,"hMerge":0},
     {"name":"公告地址","filed":"href","width":20,"color":"00D2E7F7","vMerge":1,"hMerge":0},
     {"name":"剑鱼标讯地址","filed":"url","width":20,"color":"00D2E7F7","vMerge":1,"hMerge":0},
     {"name":"项目名称","filed":"projectname","width":18,"color":"00FFDCCB","vMerge":1,"hMerge":0},
+    {"name":"行业","filed":"s_topscopeclass","width":20,"color":"00D2E7F7","vMerge":1,"hMerge":0},
     {"name":"项目编号","filed":"projectcode","width":18,"color":"00FFDCCB","vMerge":1,"hMerge":0},
     {"name":"项目范围","filed":"projectscope","width":20,"color":"00FFDCCB","vMerge":1,"hMerge":0},
     {"name":"预算金额(万元)","filed":"budget","width":20,"color":"00FFDCCB","vMerge":1,"hMerge":0},

+ 69 - 71
src/jfw/modules/subscribepay/src/entity/basePack.go

@@ -4,6 +4,7 @@ import (
 	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
 	"encoding/json"
 	"fmt"
+	"github.com/gogf/gf/v2/util/gconv"
 	"jy/src/jfw/modules/subscribepay/src/config"
 	"jy/src/jfw/modules/subscribepay/src/util"
 	"log"
@@ -13,7 +14,6 @@ import (
 	. "app.yhyue.com/moapp/jybase/date"
 	"app.yhyue.com/moapp/jybase/encrypt"
 	. "app.yhyue.com/moapp/jybase/mongodb"
-	"app.yhyue.com/moapp/jybase/redis"
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 )
 
@@ -26,20 +26,56 @@ func (this *UseBalanceStruct) defaultConsume() (r map[string]interface{}, m stri
 	return
 }
 
-//附件下载消费 fui:免费赠送已使用次数;pui:付费权限已使用次数
+// 附件下载消费 fui:免费赠送已使用次数;pui:付费权限已使用次数
 func (this *UseBalanceStruct) fileConsume() (r map[string]interface{}, m string, c int) {
 	_fileName := this.Remarks["fileName"].(string)
 	_id := this.Remarks["id"].(string)
 	log.Println("附件下载包。。。。。")
 	BaseMsg := jy.GetBigVipUserBaseMsg(this.Session, *config.Middleground)
 	log.Println("---:", this.Remarks)
+	//获取余额数量
+	dbs := &FindBalanceStruct{
+		AccountId:    this.UserId,
+		ResourceType: "附件下载包",
+		VipState:     BaseMsg.VipStatus,
+	}
+	this.VipState = BaseMsg.VipStatus
+	data, err := dbs.FindBalance()
+	if data == nil || err != nil {
+		c = -1
+		m = "余额不足"
+		return
+	}
+	number := 0
+	if data != nil {
+		dataArr := gconv.SliceAny(data["data"])
+		if len(dataArr) > 0 {
+			dataMap := gconv.MapStrStr(dataArr[0])
+			number = gconv.Int(dataMap["number"])
+		}
+	}
+	isExists := false
+	id := this.FindJyConsumePackRecord()
+	if id != "" && this.Remarks["downUrl"] != nil {
+		if util.MQFW.UpdateById(jyCC, id, map[string]interface{}{
+			"$set": map[string]interface{}{
+				"l_updateDate": time.Now().Unix(),
+			},
+		}) {
+			delete(this.Remarks, "id")
+			delete(this.Remarks, "title")
+			r = this.Remarks
+			r["isExists"] = true
+			isExists = true
+		}
+	}
 	if BaseMsg.Status > 0 && BaseMsg.PowerMap[3] {
 		if this.Remarks["infoType"] != nil && this.Remarks["infoType"].(string) == "S" {
 			r = SupplyInfoFile(_fileName, _id)
 		} else {
 			r = fileAttachRpc(_fileName, _id)
 		}
-		go func(this *UseBalanceStruct, r map[string]interface{}) {
+		/*go func(this *UseBalanceStruct, r map[string]interface{}) {
 			data := make(map[string]interface{})
 			data["p_type"] = "大会员用户附件下载"
 			data["p_userid"] = this.UserId
@@ -51,38 +87,21 @@ func (this *UseBalanceStruct) fileConsume() (r map[string]interface{}, m string,
 			if util.MQFW.Save("filehistroy", data) == "" {
 				log.Println("大会员附件下载-历史记录异常:" + this.UserId)
 			}
-		}(this, r)
-	} else if BaseMsg.VipStatus > 0 {
-		isExists := false
-		//查询当月附件下载历史记录-如是已下载过的附件不再扣除次数
-		id := this.FindJyConsumePackRecord()
-		if id != "" && this.Remarks["downUrl"] != nil {
-			if util.MQFW.UpdateById(jyCC, id, map[string]interface{}{
-				"$set": map[string]interface{}{
-					"l_updateDate": time.Now().Unix(),
-				},
-			}) {
-				delete(this.Remarks, "id")
-				delete(this.Remarks, "title")
-				r = this.Remarks
-				r["isExists"] = true
-				isExists = true
-			}
+		}(this, r)*/
+		if r["downUrl"] != nil {
+			this.Remarks["downUrl"] = r["downUrl"]
+			this.Remarks["size"] = r["size"]
 		}
+		if !isExists {
+			this.saveJyConsumePackList()
+		}
+	} else {
+		//查询当月附件下载历史记录-如是已下载过的附件不再扣除次数
 		// log.Println(this.Remarks, "++++++", this.AccountId, id, "-------------", isExists)
 		//当月未有消费记录
 		if !isExists {
-			isCanConsume_f := false
-			isCanConsume_p := false
 			//免费赠送已使用次数
-			mon_free := fmt.Sprintf(jy.VipFileUploadNumKey, this.UserId, fmt.Sprint(time.Now().Month()))
-			fui := redis.GetInt(jy.PowerCacheDb, mon_free)
-			if fui < config.BidfileConfig.File_number {
-				isCanConsume_f = true
-			} else if payCount := this.accountPack(); payCount > 0 { //付费未使用次数
-				isCanConsume_p = true
-			}
-			if isCanConsume_f || isCanConsume_p {
+			if number > 0 {
 				if this.Remarks["infoType"] != nil && this.Remarks["infoType"].(string) == "S" {
 					r = SupplyInfoFile(_fileName, _id)
 				} else {
@@ -92,24 +111,10 @@ func (this *UseBalanceStruct) fileConsume() (r map[string]interface{}, m string,
 					this.Remarks["downUrl"] = r["downUrl"]
 					this.Remarks["size"] = r["size"]
 					if this.saveJyConsumePackList() {
-						if isCanConsume_p {
-							//中台消费记录
-							rb, err := this.UseBalance()
-							if err != nil || (rb != nil && qutil.IntAll(rb["code"]) == 0) {
-								m = fmt.Sprintf("消费记录保存异常:%s", qutil.ObjToString(rb["message"]))
-							} else {
-								//更新redis 购买附件下载包数量
-								mon_pay := fmt.Sprintf(jy.FilePackNumKey, this.UserId, fmt.Sprint(time.Now().Month()))
-								if redis.GetInt(jy.PowerCacheDb, mon_pay) <= 0 || redis.Decrby(jy.PowerCacheDb, mon_pay, 1) < 0 {
-									log.Println(fmt.Sprintf("附件下载包 消费异常:%s,附件名称:%s", this.UserId, this.Remarks["fileName"].(string)))
-								}
-							}
-						} else if isCanConsume_f { //下载后自增一次 免费权限默认存储31d
-							if fui == 0 {
-								redis.Put(jy.PowerCacheDb, mon_free, 1, 60*60*24*31)
-							} else {
-								redis.Incr(jy.PowerCacheDb, mon_free)
-							}
+						//中台消费记录
+						rb, err := this.UseBalance()
+						if err != nil || (rb != nil && qutil.IntAll(rb["code"]) == 0) {
+							m = fmt.Sprintf("消费记录保存异常:%s", qutil.ObjToString(rb["message"]))
 						}
 					}
 				} else {
@@ -117,22 +122,8 @@ func (this *UseBalanceStruct) fileConsume() (r map[string]interface{}, m string,
 				}
 			} else {
 				c = -1
-				m = "该用户下载权限当前月已用完"
-			}
-		}
-	} else {
-		//判断免费用户是否有留资下载权限
-		if _, _, freeFileNum := jy.FreeExperience(this.UserId); freeFileNum == 1 {
-			if this.Remarks["infoType"] != nil && this.Remarks["infoType"].(string) == "S" {
-				r = SupplyInfoFile(_fileName, _id)
-			} else {
-				r = fileAttachRpc(_fileName, _id)
+				m = "该用户下载权限已用完"
 			}
-			//免费用户下载后取消下载权限
-			redis.PutKV(fmt.Sprintf(jy.PowerCacheFileKey, this.UserId), -1)
-		} else {
-			c = -1
-			m = "该用户没有下载权限"
 		}
 	}
 	return
@@ -140,7 +131,7 @@ func (this *UseBalanceStruct) fileConsume() (r map[string]interface{}, m string,
 
 var jyCC = "jy_consumepack"
 
-//查询jy 消费日志记录
+// 查询jy 消费日志记录
 func (this *UseBalanceStruct) FindJyConsumePackRecord() string {
 	query := map[string]interface{}{
 		"s_id":       this.Remarks["id"].(string),
@@ -161,7 +152,7 @@ func (this *UseBalanceStruct) FindJyConsumePackRecord() string {
 	return BsonIdToSId((*res)["_id"])
 }
 
-//保存日志
+// 保存日志
 func (this *UseBalanceStruct) saveJyConsumePackList() (b bool) {
 	saveMap := map[string]interface{}{
 		"s_id":         this.Remarks["id"],
@@ -184,7 +175,7 @@ func (this *UseBalanceStruct) saveJyConsumePackList() (b bool) {
 	return
 }
 
-//调rpc 获取附件信息
+// 调rpc 获取附件信息
 func fileAttachRpc(fileName, id string) (r map[string]interface{}) {
 	r = make(map[string]interface{})
 	// 调用rpc 获取附件信息
@@ -210,7 +201,7 @@ func fileAttachRpc(fileName, id string) (r map[string]interface{}) {
 	return
 }
 
-//供应信息附件
+// 供应信息附件
 func SupplyInfoFile(fileName, msgId string) (r map[string]interface{}) {
 	//查数据
 	data := util.InfoMysql.FindOne("supply_info", map[string]interface{}{"id": msgId}, "", "")
@@ -236,7 +227,14 @@ func SupplyInfoFile(fileName, msgId string) (r map[string]interface{}) {
 	return
 }
 
-//消费
+// 兑换作废
+func JyexchangeCance(userId, product, platform, queryTime string, pageSize, pageNum int) (list []map[string]interface{}, total int, err error) {
+	RStruct := InitFindRecord(userId, product, queryTime, platform, pageSize, pageNum, 2)
+	list, total = RStruct.DefaultData()
+	return list, total, nil
+}
+
+// 消费
 func JyConsumePack(userId, product, platform string, remarks map[string]interface{}, session *httpsession.Session) (r map[string]interface{}, m string, c int) {
 	CStruct := InitUseBalance(userId, product, product, "", "", nil, remarks, 1, platform, session)
 	switch product {
@@ -248,7 +246,7 @@ func JyConsumePack(userId, product, platform string, remarks map[string]interfac
 	return
 }
 
-//流水
+// 流水
 func JyFindRecordPack(userId, productName, queryTime, platform string, pageSize, pageNum int) (list []map[string]interface{}, total int, err error) {
 	RStruct := InitFindRecord(userId, productName, queryTime, platform, pageSize, pageNum, 0)
 	switch productName {
@@ -260,7 +258,7 @@ func JyFindRecordPack(userId, productName, queryTime, platform string, pageSize,
 	return list, total, nil
 }
 
-//数据处理-附件下载包
+// 数据处理-附件下载包
 func (this *FindRecordStruct) FindJyConsumePackAllRecord() ([]map[string]interface{}, int) {
 	var articleAddMap = map[string]string{
 		"PC":  "/article/content/%s.html",
@@ -301,7 +299,7 @@ func (this *FindRecordStruct) FindJyConsumePackAllRecord() ([]map[string]interfa
 	return *list, total
 }
 
-//数据处理-default
+// 数据处理-default
 func (this *FindRecordStruct) DefaultData() ([]map[string]interface{}, int) {
 	returnList, total, err := this.FindRecord()
 	if err != nil {

+ 23 - 18
src/jfw/modules/subscribepay/src/entity/commonApi.go

@@ -1,22 +1,18 @@
 package entity
 
 import (
+	qu "app.yhyue.com/moapp/jybase/common"
 	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
+	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/middleGround"
 	"encoding/json"
 	"fmt"
 	"jy/src/jfw/modules/subscribepay/src/config"
 	"log"
 	"net/url"
 	"strings"
-	"time"
-
-	qu "app.yhyue.com/moapp/jybase/common"
-	"app.yhyue.com/moapp/jybase/redis"
-	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
-	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/middleGround"
 )
 
-//充值
+// 充值
 type PayStruct struct {
 	AccountId    string                 //用户身份
 	Name         string                 //资源名称
@@ -27,9 +23,10 @@ type PayStruct struct {
 	Remarks      map[string]interface{} //备注
 	AppId        string                 //appId默认10000
 	VipTime      int64                  //超级订阅截止日期
+	VipState     int64                  //超级订阅状态
 }
 
-func InitPurchase(userId, product, resourceType, num, spec, endTime string, remarks map[string]interface{}, vipEndTime int64) *PayStruct {
+func InitPurchase(userId, product, resourceType, num, spec, endTime string, remarks map[string]interface{}, vipEndTime int64, vipState int) *PayStruct {
 	return &PayStruct{
 		AccountId:    userId,
 		Name:         product,      //资源名称
@@ -40,6 +37,7 @@ func InitPurchase(userId, product, resourceType, num, spec, endTime string, rema
 		Remarks:      remarks,      //备注
 		AppId:        config.CouponConfig.AppId,
 		VipTime:      vipEndTime,
+		VipState:     int64(vipState),
 	}
 }
 
@@ -72,6 +70,7 @@ func (this *PayStruct) PurchaseUserBalance() (bool, error) {
 type FindBalanceStruct struct {
 	AccountId    string //账户标识
 	ResourceType string //产品类型
+	VipState     int
 }
 
 // @Summary 余额接口【数据流量包、附件下载包。。】
@@ -81,6 +80,7 @@ func (this *FindBalanceStruct) FindBalance() (map[string]interface{}, error) {
 	param := url.Values{
 		"accountId":    []string{this.AccountId},
 		"resourceType": []string{this.ResourceType},
+		"vipState":     []string{qu.InterfaceToStr(this.VipState)},
 	}
 	rmap, err := middleGround.CommonPost(middleGround.JyApiConfig.ApiList.FindBalance, param)
 	if err != nil {
@@ -90,24 +90,28 @@ func (this *FindBalanceStruct) FindBalance() (map[string]interface{}, error) {
 	if rmap != nil && len(rmap) > 0 && this.ResourceType == "附件下载包" {
 		rdata, _ := rmap["data"].([]interface{})
 		rdataArr := qu.ObjArrToMapArr(rdata)
-		vipFileKey := fmt.Sprintf(jy.VipFileUploadNumKey, this.AccountId, fmt.Sprint(time.Now().Month()))
-		vipFileKeyNum := redis.GetInt(jy.PowerCacheDb, vipFileKey)
-		free_num := config.BidfileConfig.File_number - vipFileKeyNum //free
+		//vipFileKey := fmt.Sprintf(jy.VipFileUploadNumKey, this.AccountId, fmt.Sprint(time.Now().Month()))
+		//vipFileKeyNum := redis.GetInt(jy.PowerCacheDb, vipFileKey)
+		//free_num := config.BidfileConfig.File_number - vipFileKeyNum //free
 		if len(rdata) > 0 {
 			for k, v := range rdataArr {
 				num := qu.IntAll(v["number"]) //buy
-				v["number"] = num + free_num
+				v["number"] = num
+				v["purchaseNum"] = qu.IntAll(v["number1"]) //充值数量
+				v["exchangeNum"] = qu.IntAll(v["number2"]) //兑换数量
+				v["grantNum"] = qu.IntAll(v["number3"])    //超级订阅定期发放数量
+				v["freeNum"] = qu.IntAll(v["number4"])     //免费数量
 				rdataArr[k] = v
 			}
 		} else {
-			rdataArr = append(rdataArr, map[string]interface{}{"name": this.ResourceType, "number": free_num, "resourceType": this.ResourceType, "thirtyNum": 0})
+			rdataArr = append(rdataArr, map[string]interface{}{"name": this.ResourceType, "number": 0, "purchaseNum": 0, "exchangeNum": 0, "grantNum": 0, "freeNum": 0, "resourceType": this.ResourceType, "thirtyNum": 0})
 		}
 		rmap["data"] = rdataArr
 	}
 	return rmap, err
 }
 
-//使用
+// 使用
 type UseBalanceStruct struct {
 	AccountId        string                 //账户标识
 	Name             string                 //资源名称
@@ -121,9 +125,9 @@ type UseBalanceStruct struct {
 	InfoId           []string               //数据Id,多个以逗号隔开【数据流量包用到】
 	Platform         string                 //平台:PC;APP;WX
 	Session          *httpsession.Session
+	VipState         int
 }
 
-//
 func InitUseBalance(userId, product, resourceType, ruleId, duplicateRemoval string, infoId []string, remarks map[string]interface{}, num int, platform string, session *httpsession.Session) *UseBalanceStruct {
 	return &UseBalanceStruct{
 		AccountId:        userId,
@@ -159,6 +163,7 @@ func (this *UseBalanceStruct) UseBalance() (map[string]interface{}, error) {
 		"remarks":          []string{string(remarkBytes)},            //备注 查询条件、下载地址、导出时间、导出条数
 		"infoId":           []string{strings.Join(this.InfoId, ",")}, //数据Id,多个以逗号隔开
 		"duplicateRemoval": []string{this.DuplicateRemoval},          //是否去重0不去1去重
+		"vipState":         []string{qu.InterfaceToStr(this.VipState)},
 	})
 	if err != nil {
 		log.Println("UseBalance post err:", err)
@@ -167,7 +172,7 @@ func (this *UseBalanceStruct) UseBalance() (map[string]interface{}, error) {
 	return resMap, err
 }
 
-//流水
+// 流水
 type FindRecordStruct struct {
 	AccountId    string //账户标识
 	UserId       string //用户标识
@@ -181,7 +186,7 @@ type FindRecordStruct struct {
 
 }
 
-//定义结构体
+// 定义结构体
 func InitFindRecord(userId, resourceType, queryTime, platform string, pageSize, pageNum, state int) *FindRecordStruct {
 	if pageSize == 0 {
 		pageSize = 10
@@ -249,7 +254,7 @@ func (this *UpdateVipTimeStruct) UpdateVipEndTime() (bool, error) {
 	return ok, nil
 }
 
-//账户信息
+// 账户信息
 func (this *UseBalanceStruct) accountPack() (payCount int) {
 	resMap, err := middleGround.CommonPost(middleGround.JyApiConfig.ApiList.FindBalance, url.Values{
 		"accountId":    []string{this.UserId}, //账户标识*

+ 1 - 1
src/jfw/modules/subscribepay/src/entity/dataExportPackStruct.go

@@ -625,7 +625,7 @@ func sendPackExportMail(userId, selectId, userMail, excelPath string) {
 	if userId == "" || selectId == "" || userMail == "" || excelPath == "" {
 		return
 	}
-	mailContent, err := GetPackDataExportMailContent(selectId, config.Config.WebDomain+excelPath)
+	mailContent, err := GetPackDataExportMailContent(selectId, config.Config.WxDomain+excelPath)
 	if err != nil {
 		log.Printf("SendDataExportMailForPayed SendMailToPayUser 订单号%s获取邮件内容异常%v\n", selectId, err)
 	}

+ 1 - 1
src/jfw/modules/subscribepay/src/entity/dataexport.go

@@ -702,7 +702,7 @@ func GetDataExportMailContent(orderCode string) (content string, err error) {
 	product_type := qutil.ObjToString((*orderData)["product_type"]) + "导出"
 	order_money := qutil.Float64All((*orderData)["order_money"]) / 100
 	pay_time := qutil.ObjToString((*orderData)["pay_time"])
-	download_url := config.Config.WebDomain + qutil.ObjToString((*orderData)["download_url"])
+	download_url := config.Config.WxDomain + qutil.ObjToString((*orderData)["download_url"])
 
 	create_time := qutil.ObjToString((*orderData)["create_time"])
 	if create_time != "" {

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio