Browse Source

分支合并

lianbingjie 4 năm trước cách đây
mục cha
commit
dcf066ba6f
40 tập tin đã thay đổi với 1059 bổ sung216 xóa
  1. 0 1
      README.md
  2. 8 0
      src/jfw/front/big-member.go
  3. 62 25
      src/jfw/front/frontRouter.go
  4. 26 0
      src/jfw/front/shorturl.go
  5. 59 5
      src/jfw/modules/app/src/app/tag/ad.go
  6. 2 0
      src/jfw/modules/app/src/web/staticres/jyapp/js/check-bind-phone.js
  7. 3 1
      src/jfw/modules/app/src/web/templates/big-member/page_ai_result.html
  8. 3 3
      src/jfw/modules/app/src/web/templates/big-member/page_forecast_list.html
  9. 2 3
      src/jfw/modules/bigmember/src/entity/analysisEntName.go
  10. 47 2
      src/jfw/modules/bigmember/src/entity/followEnterprise.go
  11. 7 4
      src/jfw/modules/bigmember/src/entity/followProject.go
  12. 32 22
      src/jfw/modules/bigmember/src/entity/portrait.go
  13. 26 0
      src/jfw/modules/bigmember/src/entity/portraitWinnerSearch.go
  14. 6 1
      src/jfw/modules/bigmember/src/service/analysis/analysis.go
  15. 12 4
      src/jfw/modules/bigmember/src/service/analysis/forecastproject.go
  16. 38 18
      src/jfw/modules/bigmember/src/service/analysis/forecastwinner.go
  17. 1 3
      src/jfw/modules/bigmember/src/service/analysis/potential.go
  18. 34 8
      src/jfw/modules/bigmember/src/service/follow/enterprise.go
  19. 4 2
      src/jfw/modules/bigmember/src/service/follow/project.go
  20. 1 0
      src/jfw/modules/bigmember/src/service/portrait/entPortraitAction.go
  21. 76 4
      src/jfw/modules/bigmember/src/service/portrait/portraitActionNew.go
  22. 24 6
      src/jfw/modules/bigmember/src/service/subscribe/subscribe.go
  23. 7 5
      src/jfw/modules/bigmember/src/service/use/use.go
  24. 3 0
      src/jfw/modules/bigmember/src/util/util.go
  25. 8 3
      src/jfw/modules/bigmember/src/util/view.go
  26. 66 37
      src/jfw/modules/common/src/qfw/util/jy/memberpush.go
  27. 1 0
      src/jfw/modules/common/src/qfw/util/jy/subscribepush.go
  28. 2 0
      src/jfw/modules/subscribepay/src/a/init.go
  29. 101 0
      src/jfw/modules/subscribepay/src/service/ad.go
  30. 59 5
      src/jfw/tag/ad.go
  31. BIN
      src/web/staticres/images/guanzhued.png
  32. 2 0
      src/web/staticres/js/check-bind-phone.js
  33. 40 3
      src/web/staticres/js/login.js
  34. 18 9
      src/web/templates/big-member/pc/page_index.html
  35. 2 0
      src/web/templates/common/pcbottom.html
  36. 130 0
      src/web/templates/frontRouter/pc/page_big_pc/sess/index.html
  37. 1 10
      src/web/templates/order/pc/paySuccess.html
  38. 117 31
      src/web/templates/pc/biddetail_bd.html
  39. 2 0
      src/web/templates/pc/biddetail_rec.html
  40. 27 1
      src/web/templates/pc/index.html

+ 0 - 1
README.md

@@ -3,4 +3,3 @@
 weixin sdk https://github.com/wizjin/weixin
 web用xweb框架
 
-

+ 8 - 0
src/jfw/front/big-member.go

@@ -22,6 +22,14 @@ func (s *BigMemberAction) VIPViewPage(htmlName string) {
 	s.T["logid"] = config.Seoconfig["bigmember"].(string)
 	userid, _ := s.GetSession("userId").(string)
 	bigBaseMsg := jy.GetBigVipUserBaseMsg(userid, public.Mysql, public.MQFW)
+	//大会员介绍页需要使用power字段
+	if bigBaseMsg.Status > 0 && htmlName == "index" {
+		power := []int{}
+		for key, _ := range bigBaseMsg.PowerMap {
+			power = append(power, key)
+		}
+		s.T["power"] = power
+	}
 	s.T["member_status"] = bigBaseMsg.Status
 	s.T["member_trial"] = bigBaseMsg.HasTrial
 	s.Render("/big-member/pc/page_"+htmlName+".html", &s.T)

+ 62 - 25
src/jfw/front/frontRouter.go

@@ -2,9 +2,12 @@ package front
 
 import (
 	"fmt"
-	"jfw/config"
-
 	"github.com/go-xweb/xweb"
+	"jfw/config"
+	"jfw/public"
+	"qfw/util/jy"
+	"regexp"
+	"strings"
 )
 
 //前端通用路由
@@ -33,10 +36,15 @@ type CommonRouter struct {
 	//商机管理
 	entpcIndex xweb.Mapper `xweb:"/entpc/"`
 	entpcPage  xweb.Mapper `xweb:"/entpc/(.*)"`
+
+	//pc大会员
+	bigpcIndex xweb.Mapper `xweb:"/swordfish/page_big_pc/"`
+	bigpcPage  xweb.Mapper `xweb:"/swordfish/page_big_pc/(.*)"`
 }
 
 func init() {
 	xweb.AddAction(&CommonRouter{})
+	jy.InitBigVipService(public.Mysql)
 }
 
 func (this *CommonRouter) WxCommonPage(folder, loginSign, htmlPage string) error {
@@ -73,13 +81,12 @@ func (this *CommonRouter) PcCommonPage(folder, loginSign, htmlPage string) error
 
 //积分
 func (this *CommonRouter) IntegralIndex() error {
-	userid, _ := this.GetSession("userId").(string)
-	if userid == "" {
-		return this.Redirect("/notin/page")
-	}
-	return this.Render(fmt.Sprintf("/frontRouter/pc/integral/sess/index.html"))
+	return this.doIntegralPage()
 }
 func (this *CommonRouter) IntegralPage(htmlPage string) error {
+	return this.doIntegralPage()
+}
+func (this *CommonRouter) doIntegralPage() error {
 	userid, _ := this.GetSession("userId").(string)
 	if userid == "" {
 		return this.Redirect("/notin/page")
@@ -89,13 +96,12 @@ func (this *CommonRouter) IntegralPage(htmlPage string) error {
 
 //文库
 func (this *CommonRouter) DocsIndex() error {
-	userid, _ := this.GetSession("userId").(string)
-	if userid == "" {
-		return this.Redirect("/notin/page")
-	}
-	return this.Render(fmt.Sprintf("/frontRouter/pc/docs/sess/index.html"))
+	return this.doDocsPage()
 }
 func (this *CommonRouter) DocsPage(htmlPage string) error {
+	return this.doDocsPage()
+}
+func (this *CommonRouter) doDocsPage() error {
 	userid, _ := this.GetSession("userId").(string)
 	if userid == "" {
 		return this.Redirect("/notin/page")
@@ -105,13 +111,12 @@ func (this *CommonRouter) DocsPage(htmlPage string) error {
 
 //线上课程
 func (this *CommonRouter) XspcIndex() error {
-	userid, _ := this.GetSession("userId").(string)
-	if userid == "" {
-		return this.Redirect("/notin/page")
-	}
-	return this.Render(fmt.Sprintf("/frontRouter/pc/xspc/sess/index.html"))
+	return this.doXspcPage()
 }
 func (this *CommonRouter) XspcPage(htmlPage string) error {
+	return this.doXspcPage()
+}
+func (this *CommonRouter) doXspcPage() error {
 	userid, _ := this.GetSession("userId").(string)
 	if userid == "" {
 		return this.Redirect("/notin/page")
@@ -121,13 +126,12 @@ func (this *CommonRouter) XspcPage(htmlPage string) error {
 
 //商机管理
 func (this *CommonRouter) EntpcIndex() error {
-	userid, _ := this.GetSession("userId").(string)
-	if userid == "" {
-		return this.Redirect("/notin/page")
-	}
-	return this.Render(fmt.Sprintf("/frontRouter/pc/entpc/sess/index.html"))
+	return this.doEntpcPage()
 }
 func (this *CommonRouter) EntpcPage(htmlPage string) error {
+	return this.doEntpcPage()
+}
+func (this *CommonRouter) doEntpcPage() error {
 	userid, _ := this.GetSession("userId").(string)
 	if userid == "" {
 		return this.Redirect("/notin/page")
@@ -135,16 +139,49 @@ func (this *CommonRouter) EntpcPage(htmlPage string) error {
 	return this.Render(fmt.Sprintf("/frontRouter/pc/entpc/sess/index.html"))
 }
 
-//卡卷
-func (this *CommonRouter) CouponIndex() error {
+//大会员
+func (this *CommonRouter) BigpcIndex() error {
+	return this.doPcBigPage("")
+}
+func (this *CommonRouter) BigpcPage(htmlPage string) error {
+	return this.doPcBigPage(htmlPage)
+}
+
+var bigVipFreePageReg = regexp.MustCompile(`set_*|free_*`)
+
+func (this *CommonRouter) doPcBigPage(pageSign string) error {
 	userid, _ := this.GetSession("userId").(string)
+	//没有登录跳转登录页面
 	if userid == "" {
 		return this.Redirect("/notin/page")
 	}
-	return this.Render(fmt.Sprintf("/frontRouter/pc/coupon/sess/index.html"))
+	//没有购买大会员跳转大会员介绍页
+	bigBaseMsg := jy.GetBigVipUserBaseMsg(userid, public.Mysql, public.MQFW)
+	if bigBaseMsg.Status <= 0 {
+		return this.Redirect("/big/page/index")
+	}
+	//大会员页面权限判断
+	if pageSign != "" {
+		if array := strings.Split(pageSign, "/"); len(array) > 0 {
+			pageSign = array[0]
+		}
+		if !bigVipFreePageReg.MatchString(pageSign) {
+			if !bigBaseMsg.CheckBigVipFrontPower(pageSign) {
+				return this.Redirect("/big/page/index")
+			}
+		}
+	}
+	return this.Render(fmt.Sprintf("/frontRouter/pc/page_big_pc/sess/index.html"))
 }
 
+//卡卷
+func (this *CommonRouter) CouponIndex() error {
+	return this.doCouponPage()
+}
 func (this *CommonRouter) CouponPage(htmlPage string) error {
+	return this.doCouponPage()
+}
+func (this *CommonRouter) doCouponPage() error {
 	userid, _ := this.GetSession("userId").(string)
 	if userid == "" {
 		return this.Redirect("/notin/page")

+ 26 - 0
src/jfw/front/shorturl.go

@@ -339,6 +339,32 @@ func (s *Short) Article(stype, id string) error {
 				if obj["projectname"] != nil {
 					s.SetSession("projectname", obj["projectname"])
 				}
+				if obj["entidlist"] != nil { //大会员中标企业跳转至画像
+					winner := util.ObjToString(obj["winner"])
+					s_winner := util.ObjToString(obj["s_winner"])
+					idObjs, _ := obj["entidlist"].([]interface{})
+					winnerId := ""
+					if names := strings.Split(s_winner, ","); len(names) > 1 {
+						index := 0
+						for i := 0; i < len(names); i++ {
+							if names[i] == winner {
+								index = i
+								break
+							}
+						}
+						if len(idObjs) > index {
+							winnerId = util.ObjToString(idObjs[index])
+						}
+					} else { //中标企业仅一个
+						if len(idObjs) > 0 {
+							winnerId = util.ObjToString(idObjs[0])
+						}
+					}
+					if winnerId != "" {
+						obj["entId"] = util.EncodeArticleId2ByCheck(winnerId)
+					}
+				}
+
 				content, _ := s.Render4Cache("/pc/biddetail_rec.html", &s.T)
 				redis.Put("other", catchKey, string(content), 60*60*2)
 				return s.SetBody(content)

+ 59 - 5
src/jfw/modules/app/src/app/tag/ad.go

@@ -7,10 +7,13 @@ package tag
 **/
 
 import (
+	"encoding/json"
 	"fmt"
 	"jfw/public"
 	"log"
-	"qfw/util"
+	"strings"
+	"time"
+
 	"qfw/util/redis"
 	"runtime"
 )
@@ -29,7 +32,7 @@ var mongodb = public.MQFW
 	{{end}}
 {{end}}
 **/
-func Ad(s_code string, n int) []map[string]interface{} {
+func Ad(s_code string, n int) []adInfo {
 	defer func() {
 		if r := recover(); r != nil {
 			log.Println("[E]", r)
@@ -44,7 +47,7 @@ func Ad(s_code string, n int) []map[string]interface{} {
 	}()
 	obj := redis.Get("other", "ad_"+s_code)
 	if obj != nil {
-		return util.ObjArrToMapArr(obj.([]interface{}))
+		return adHandle(obj.([]interface{}), s_code)
 	} else {
 		f := ""
 		if n > -1 {
@@ -55,10 +58,61 @@ func Ad(s_code string, n int) []map[string]interface{} {
 		res, ok := mongodb.FindOneByField("ad", `{"s_code":"`+s_code+`"}`, f)
 		if ok && res != nil && (*res)["a_son"] != nil {
 			son := (*res)["a_son"].([]interface{})
-			resmap := util.ObjArrToMapArr(son)
-			redis.PutCKV("other", "ad_"+s_code, resmap)
+			resmap := adHandle(son, s_code)
+			if len(resmap) > 0 {
+				redis.PutCKV("other", "ad_"+s_code, resmap)
+			}
 			return resmap
 		}
 	}
 	return nil
 }
+
+type adInfo struct {
+	S_link   string `json:"s_link"`   //广告位跳转链接
+	S_pic    string `json:"s_pic"`    //广告位弹窗
+	S_remark string `json:"s_remark"` //备注
+	O_extend struct {
+		Linktype  string `json:"linktype"`  //是否外部链接
+		Height    string `json:"height"`    //高度
+		Width     string `json:"width"`     //宽度
+		StartTime string `json:"startTime"` //开始时间
+		EndTime   string `json:"endTime"`   //结束时间
+	} `json:"o_extend"` //拓展属性
+}
+
+//广告位信息处理
+func adHandle(data []interface{}, s_code string) []adInfo {
+	var res = []adInfo{}
+	if len(data) > 0 {
+		adInfo_Arr := []adInfo{}
+		bytes, err := json.Marshal(data)
+		if err != nil {
+			return res
+		}
+		json.Unmarshal(bytes, &adInfo_Arr)
+		if len(adInfo_Arr) > 0 {
+			now := time.Now()
+			for _, v := range adInfo_Arr {
+				if v.O_extend.StartTime != "" && len(strings.Split(v.O_extend.StartTime, "-")) == 6 {
+					if thisTime, err := time.ParseInLocation("2006-01-02-15-04-05", v.O_extend.StartTime, time.Local); err == nil {
+						//广告还未开始
+						if thisTime.Unix() > now.Unix() {
+							continue
+						}
+					}
+				}
+				if v.O_extend.EndTime != "" && len(strings.Split(v.O_extend.EndTime, "-")) == 6 {
+					if thisTime, err := time.ParseInLocation("2006-01-02-15-04-05", v.O_extend.EndTime, time.Local); err == nil {
+						//广告已经结束
+						if thisTime.Unix() < now.Unix() {
+							continue
+						}
+					}
+				}
+				res = append(res, v)
+			}
+		}
+	}
+	return res
+}

+ 2 - 0
src/jfw/modules/app/src/web/staticres/jyapp/js/check-bind-phone.js

@@ -282,6 +282,8 @@
                 } catch (e) {
                     console.log('获取状态失败: ', e)
                 }
+            }).fail(function () {
+              canBindPhone = true
             })
         }
         // 初始化获取绑定状态

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

@@ -356,7 +356,9 @@
         },
         methods: {
             goEntInfo: function(name) {
-                location.href = './ent_portrait?eId=' + encodeURIComponent(name)
+              if (name!=""){
+                  location.href = './ent_portrait?eId=' + encodeURIComponent(name)
+                }
             },
             otherClick:function(){
                 location.replace('./ai_search')

+ 3 - 3
src/jfw/modules/app/src/web/templates/big-member/page_forecast_list.html

@@ -190,7 +190,7 @@
                         <div @click="goDetail(item)">
                             <p class="custom-title">预测采购内容</p>
                             <a href="javascript:;" class="custom-info">
-                                <span v-for="keys in item.results">${keys.keys.join('、')}</span>
+                                <span v-for="keys in item.results">${keys.keys ? keys.keys.join('、') : ''}</span>
                             </a>
                         </div>
                     </van-step>
@@ -214,7 +214,7 @@
             </div>
         </div>
     </div>
-</div>  
+</div>
 
 <!--S-必定需要预加载的资源-->
 <link rel="preload" as="script" href=//cdn.jsdelivr.net/npm/vue@2.6.11/dist/vue.min.js />
@@ -264,7 +264,7 @@
             } else {
                 this.getList()
             }
-            
+
         },
         mounted() {
             sessionStorage.removeItem('forecast_keys')

+ 2 - 3
src/jfw/modules/bigmember/src/entity/analysisEntName.go

@@ -8,7 +8,6 @@ import (
 	qutil "qfw/util"
 	"qfw/util/elastic"
 	"strings"
-	"util"
 )
 
 /**即时获取项目名称列表
@@ -42,7 +41,7 @@ func GetProInfoById(ids, sourceinfoids []string) []map[string]interface{} {
 						"should": []
 					}
 				},
-			  	"_source": ["projectname","_id","buyerclass","firsttime","area","city","purchasing","ids","buyer","budget","bidstatus","zbtime","bidopentime","agency","s_subscopeclass","bidamount","bidcycle"],
+			  	"_source": ["projectname","_id","buyerclass","firsttime","area","city","purchasing","ids","buyer","budget","bidstatus","zbtime","bidopentime","agency","s_subscopeclass","bidamount","bidcycle","buyerperson","buyertel"],
 			  	"sort": [
 			    	{
 			    	  "_id": "desc"
@@ -123,7 +122,7 @@ func GetEntIdByQYXY(entName string) string {
 		it := sess.DB(db.Mgo_Ent.DbName).C("qyxy_std").Find(query).Select(map[string]interface{}{"company_name": 1, "_id": 1}).Iter()
 		for m := make(map[string]interface{}); it.Next(&m); {
 			if m["company_name"] != nil && m["company_name"].(string) != "" {
-				entId = util.EncodeId(m["_id"].(string))
+				entId = m["_id"].(string)
 			}
 		}
 	}

+ 47 - 2
src/jfw/modules/bigmember/src/entity/followEnterprise.go

@@ -113,8 +113,8 @@ func (this *EntFollow) EntFollowedShow(entId string) (followed, showFollow bool,
 }
 
 //我关注的企业列表
-func (this *EntFollow) GetEntFollowList(pNum, pSize int) (followData []map[string]interface{}, hasNext bool, err error) {
-	count := db.Mgo.Count(this.SaveTable, map[string]interface{}{"s_userid": this.UserId})
+func (this *EntFollow) GetEntFollowList(pNum, pSize int) (followData []map[string]interface{}, hasNext bool, count int, err error) {
+	count = db.Mgo.Count(this.SaveTable, map[string]interface{}{"s_userid": this.UserId})
 	if count == 0 {
 		return
 	}
@@ -151,6 +151,51 @@ func (this *EntFollow) GetEntFollowList(pNum, pSize int) (followData []map[strin
 	return
 }
 
+func (this *EntFollow) GetEntFollowAndChangeList(num int) (followData []map[string]interface{}, err error) {
+	res, _ := db.Mgo.Find(this.SaveTable, map[string]interface{}{"s_userid": this.UserId}, `{"l_lastpushtime":-1}`, `{"s_entname":1,"i_apppushunread":1,"s_entId":1,"l_lastpushtime":1}`, false, 0, num)
+	if res == nil || len(*res) == 0 {
+		err = errors.New("查询异常")
+		return
+	}
+	//加密entId,查询变更条数
+	for _, item := range *res {
+		entId := qutil.ObjToString(item["s_entId"])
+		changNum, changeItems := func(entid string) (int, string) {
+			entInfo, _ := db.Mgo_Ent.FindOneByField("qyxy_change", map[string]interface{}{
+				"company_id": entId,
+			}, map[string]interface{}{
+				"changes": 1, //变更记录
+			})
+			if entInfo == nil || len(*entInfo) == 0 {
+				return 0, ""
+			}
+			changeValue, _ := (*entInfo)["changes"].([]interface{})
+			entChanges := qutil.ObjArrToMapArr(changeValue)
+			if len(entChanges) == 0 {
+				return 0, ""
+			}
+			entChangesSort := InitializeSort(entChanges)
+			for _, item := range entChangesSort {
+				for _, array := range item {
+					if newShowItem := qutil.ObjToString(array[len(array)-1].Change_name_new); newShowItem != "" {
+						return len(entChangesSort), newShowItem
+					}
+				}
+			}
+			return len(entChangesSort), ""
+		}(entId)
+		followData = append(followData, map[string]interface{}{
+			"s_entId":         util.EncodeId(entId), //此处id需要加密
+			"s_entname":       item["s_entname"],
+			"i_apppushunread": qutil.If(item["i_apppushunread"] == nil, 0, item["i_apppushunread"]),
+			"l_lastDate":      item["l_lastpushtime"],
+			"entChangeNum":    changNum,
+			"entChangeItems":  changeItems,
+		})
+	}
+	return followData, nil
+}
+
 func (this *EntFollow) updateFollowed(follow map[string]interface{}) string {
 	folloid, entName := mongodb.BsonIdToSId(follow["_id"]), qutil.ObjToString(follow["s_entname"])
 	if entName == "" {

+ 7 - 4
src/jfw/modules/bigmember/src/entity/followProject.go

@@ -87,7 +87,10 @@ func (this *ProjectFollow) SaveProject(sid string) (string, error) {
 		//根据信息id查询项目信息
 		res, _ := db.Mgo_Bidding.FindById("bidding", sid, `{"publishtime":1,"projectname":1,area":1,"title":1,"href":1,"toptype":1,"subtype":1}`)
 		if res == nil || len(*res) == 0 {
-			return "", errors.New("项目关注异常")
+			res, _ = db.Mgo_Bidding.FindById("bidding_back", sid, `{"publishtime":1,"projectname":1,area":1,"title":1,"href":1,"toptype":1,"subtype":1}`)
+			if res == nil || len(*res) == 0 {
+				return "", errors.New("项目关注异常")
+			}
 		}
 		projectName = qutil.ObjToString((*res)["projectname"])
 		data = map[string]interface{}{
@@ -266,8 +269,8 @@ func (this *ProjectFollow) SetFollowRead(sid, fid, flag string) bool {
 }
 
 //获取列表页
-func (this *ProjectFollow) GetFollowList(pNum, pSize int) (followData []map[string]interface{}, hasNext bool, err error) {
-	count := db.Mgo.Count(this.SaveTable, map[string]interface{}{"s_userid": this.UserId})
+func (this *ProjectFollow) GetFollowList(pNum, pSize int) (followData []map[string]interface{}, hasNext bool, count int, err error) {
+	count = db.Mgo.Count(this.SaveTable, map[string]interface{}{"s_userid": this.UserId})
 	if count == 0 {
 		return
 	}
@@ -294,7 +297,7 @@ func (this *ProjectFollow) GetFollowList(pNum, pSize int) (followData []map[stri
 	projectInfos, err := getProjectsBySid(sidArr)
 	if err != nil {
 		err = errors.New("项目信息查询异常")
-		return nil, false, err
+		return nil, false, 0, err
 	}
 	for _, projectinfo := range projectInfos { //补充设置信息
 		for _, k := range qutil.ObjArrToStringArr(projectinfo["ids"].([]interface{})) {

+ 32 - 22
src/jfw/modules/bigmember/src/entity/portrait.go

@@ -14,6 +14,8 @@ type Portrait struct {
 	//ShowEntChange bool
 }
 
+const PortraitNewMegsLimit = 50 //画像最新信息限制50跳
+
 //企业画像
 func CreatePortraitManager(userid string, pageFlag ...string) (*Portrait, error) {
 	if userid == "" {
@@ -115,20 +117,33 @@ func (this *Portrait) GetEntIdByName(entName string) (string, error) {
 	return entId, nil
 }
 
+//企业画像-获取历史项目联系方式
+func (this *Portrait) GetContactsMsg(entId string, pageNum, pageSize int, count int64) ([]map[string]interface{}, int64, error) {
+	if entId == "" {
+		return nil, 0, errors.New("企业名称异常")
+	}
+	start, limit := (pageNum-1)*pageSize, pageSize
+	if start > PortraitNewMegsLimit || start+limit > PortraitNewMegsLimit {
+		return nil, 0, errors.New("超出检索限制")
+	}
+	if count == 0 { //查询总量
+		count = GetWinnerContactsMsgCount(entId)
+		if count > PortraitNewMegsLimit {
+			count = PortraitNewMegsLimit
+		}
+	}
+	return GetWinnerContactsMsg(entId, start, limit), count, nil
+}
+
 //企业画像-查询最新项目动态
-func (this *Portrait) GetWinnerNewMsg(entId, flag string) ([]map[string]interface{}, error) {
+func (this *Portrait) GetWinnerNewMsg(entId string, start, limit int) ([]map[string]interface{}, error) {
 	if entId == "" {
 		return nil, errors.New("企业名称异常")
 	}
-	start, size := 0, 3
-	if flag == "more" {
-		start = size
-		size = 20
-	} else if flag == "max" {
-		start = 20 + 3
-		size = 50 - start
+	if start > PortraitNewMegsLimit || start+limit > PortraitNewMegsLimit {
+		return nil, errors.New("超出检索限制")
 	}
-	return GetWinnerNewProject(entId, start, size), nil
+	return GetWinnerNewProject(entId, start, limit), nil
 }
 
 //企业画像-查询最新项目数量(前端用于展示是否加载更多)
@@ -137,8 +152,8 @@ func (this *Portrait) GetWinnerNewCount(entId string) int64 {
 		return -1
 	}
 	count := GetWinnerNewProjectCount(entId)
-	if count > 50 {
-		count = 50
+	if count > PortraitNewMegsLimit {
+		count = PortraitNewMegsLimit
 	}
 	return count
 }
@@ -157,19 +172,14 @@ func (this *Portrait) WinnerPortraitData(entId string) (map[string]interface{},
 }
 
 //采购单位画像-查询最新项目动态
-func (this *Portrait) GetBuyerNewMsg(buyer, flag string) ([]map[string]interface{}, error) {
+func (this *Portrait) GetBuyerNewMsg(buyer string, start, limit int) ([]map[string]interface{}, error) {
 	if buyer == "" {
 		return nil, errors.New("企业名称异常")
 	}
-	start, size := 0, 3
-	if flag == "more" {
-		start = size
-		size = 20
-	} else if flag == "max" {
-		start = 20 + 3
-		size = 50 - start
+	if start > PortraitNewMegsLimit || start+limit > PortraitNewMegsLimit {
+		return nil, errors.New("超出检索限制")
 	}
-	return GetBuyerNewProject(buyer, start, size), nil
+	return GetBuyerNewProject(buyer, start, limit), nil
 }
 
 //采购单位画像-查询最新项目数量(前端用于展示是否加载更多)
@@ -178,8 +188,8 @@ func (this *Portrait) GetBuyerNewCount(buyer string) int64 {
 		return -1
 	}
 	count := GetBuyerNewProjectCount(buyer)
-	if count > 50 {
-		count = 50
+	if count > PortraitNewMegsLimit {
+		count = PortraitNewMegsLimit
 	}
 	return count
 }

+ 26 - 0
src/jfw/modules/bigmember/src/entity/portraitWinnerSearch.go

@@ -15,6 +15,7 @@ import (
 const (
 	newProject_fields       = `"_id","projectname","bidamount","title","publishtime","subtype","toptype","area"`
 	winnerPortraitSearchSql = `{"query":{"filtered":{"filter":{"bool":{"must":[{"term":{"entidlist":"%s"}},{"range":{"firsttime":{"lt":%d}}}]}}}},"aggs":{"three_year_data":{"filter":{"bool":{"must":[{"range":{"firsttime":{"gte":%d}}}]}},"aggs":{"bidamount_count":{"sum":{"field":"bidamount"}},"area_count":{"cardinality":{"field":"area"}},"buyer_count":{"cardinality":{"field":"buyer"}},"group_area":{"terms":{"field":"area","size":40},"aggs":{"bidamount_count":{"sum":{"field":"bidamount"}}}},"all_buyerclass":` + YearRate + `,"top_buyerclass":{"terms":{"field":"buyerclass","size":11,"order":[{"buyerclass_count_bidamount":"desc"}]},"aggs":{"buyerclass_avg_rate":` + BaseRate + `,"buyerclass_count_bidamount":{"sum":{"field":"bidamount"}},"buyerclass_top_buyer":{"terms":{"field":"buyer","order":[{"count_top_buyer":"desc"},{"_count":"desc"},{"last_winner_time":"desc"}],"size":5},"aggs":{"count_top_buyer":{"sum":{"field":"bidamount"}},"avg_rate_top_buyer":` + BaseRate + `,"last_winner_time":{"max":{"field":"firsttime"}}}},"top_buyerclass_rate_time_avg":` + YearRate + `}}}},"five_year_data_bidamount":{"filter":{"bool":{"must":[{"range":{"firsttime":{"gte":%d}}}]}},"aggs":{"year_bidamount":{"range":{"field":"firsttime","ranges":[%s]},"aggs":{"count":{"sum":{"field":"bidamount"}}}}}}},"size":0}`
+	winnerContactsSearch    = `{"bool":{"must":[{"term":{"projectset.entidlist":"%s"}}],"must_not":[{"term":{"projectset.buyertel":""}}]}}`
 )
 
 //根据名称获取企业id【精确匹配】
@@ -75,6 +76,31 @@ func GetWinnerNewProjectCount(entId string) int64 {
 	return elastic.Count("bidding", "bidding", `{"query":{"bool":{"must":[{"term": {"entidlist": "`+entId+`"}}]}}}`)
 }
 
+//中标企业-获取历史项目联系方式
+func GetWinnerContactsMsg(entId string, start, size int) []map[string]interface{} {
+	defer qutil.Catch()
+	if entId == "" {
+		return []map[string]interface{}{}
+	}
+	contactsList := elastic.Get("projectset", "projectset", fmt.Sprintf(`{"query":%s,"_source":["_id","zbtime","buyertel","buyerperson","projectname"],"sort":[{"zbtime":"desc"}],"from":%d,"size":%d}`, fmt.Sprintf(winnerContactsSearch, entId), start, size))
+	if contactsList == nil || len(*contactsList) == 0 {
+		return []map[string]interface{}{}
+	}
+	for k, rowData := range *contactsList {
+		if rowData["_id"] != nil {
+			(*contactsList)[k]["id"] = util.EncodeId(qutil.ObjToString(rowData["_id"]))
+			delete((*contactsList)[k], "_id")
+		}
+	}
+	return *contactsList
+}
+
+//中标企业-获取历史项目联系方式数量
+func GetWinnerContactsMsgCount(entId string) int64 {
+	defer qutil.Catch()
+	return elastic.Count("projectset", "projectset", fmt.Sprintf(`{"query":%s}`, fmt.Sprintf(winnerContactsSearch, entId)))
+}
+
 //中标企业画像
 func GetWinnerPortraitSearch(entId string) (map[string]interface{}, error) {
 	defer qutil.Catch()

+ 6 - 1
src/jfw/modules/bigmember/src/service/analysis/analysis.go

@@ -6,13 +6,14 @@ import (
 	. "config"
 	"db"
 	"entity"
-	"github.com/go-xweb/xweb"
 	qutil "qfw/util"
 	"regexp"
 	"strconv"
 	"strings"
 	"time"
 	"util"
+
+	"github.com/go-xweb/xweb"
 )
 
 type Analysis struct {
@@ -102,6 +103,8 @@ func (this *Analysis) PInfo() {
 				buyer := qutil.ObjToString(ptdata["buyer"]) //采购单位
 				ids := qutil.ObjArrToStringArr(ptdata["ids"].([]interface{}))
 				s_subscopeclass := qutil.ObjToString(ptdata["s_subscopeclass"]) //项目行业
+				buyerperson := qutil.ObjToString(ptdata["buyerperson"])         //采购联系人
+				buyertel := qutil.ObjToString(ptdata["buyertel"])               //采购联系方式
 				if this.GetString("D") == "" {
 					var keyArr = []map[string]interface{}{}
 					var a_key = []map[string]interface{}{}
@@ -208,6 +211,8 @@ func (this *Analysis) PInfo() {
 				ArrPS["id"] = util.EncodeId(ptdata["_id"].(string))
 				ArrPS["buyer"] = buyer
 				ArrPS["budget"] = qutil.Float64All(ptdata["budget"]) //预算
+				ArrPS["buyerperson"] = buyerperson
+				ArrPS["buyertel"] = buyertel
 			}
 			regMap.Data = ArrPS
 		} else {

+ 12 - 4
src/jfw/modules/bigmember/src/service/analysis/forecastproject.go

@@ -106,6 +106,7 @@ func (this *Analysis) ForPList() {
 		msg := ""
 		code := 0
 		list := []map[string]interface{}{}
+		count := 0
 		userId, _ := this.GetSession("userId").(string)
 		mainId := userId
 		isSubCount := false
@@ -118,7 +119,7 @@ func (this *Analysis) ForPList() {
 		}
 		if ok && o_mb != nil && (*o_mb) != nil && (*o_mb)["o_member_jy"] != nil {
 			pageNum, _ := this.GetInteger("pageNum")
-			list = getNewProjects(mainId, pageNum)
+			list, count = getNewProjects(mainId, pageNum)
 			o_member_jy := qutil.ObjToMap((*o_mb)["o_member_jy"])
 			if pageNum == 1 {
 				if (*o_member_jy)["a_items"] != nil {
@@ -140,6 +141,7 @@ func (this *Analysis) ForPList() {
 			"msg":        msg,
 			"code":       code,
 			"list":       list,
+			"count":      count,
 			"isSubCount": isSubCount,
 		}
 	} else {
@@ -150,10 +152,16 @@ func (this *Analysis) ForPList() {
 }
 
 //getData
-func getNewProjects(userId string, cpage int) []map[string]interface{} {
+func getNewProjects(userId string, cpage int) ([]map[string]interface{}, int) {
 	if cpage == 0 {
 		cpage = 1
 	}
+	var count int
+	if cpage == 1 {
+		count = db.Mgo.Count(C_FPList, map[string]interface{}{
+			"userid": userId,
+		})
+	}
 	data, ok := db.Mgo.Find(C_FPList, map[string]interface{}{
 		"userid": userId,
 	}, `{"createtime":-1}`, `{"buyer":1,"results":1,"createtime":1,"title":1,"id":1}`, false, (cpage-1)*FP_Limit, FP_Limit)
@@ -164,7 +172,7 @@ func getNewProjects(userId string, cpage int) []map[string]interface{} {
 			ov["id"] = util.EncodeId(ov["id"].(string))
 			delete(ov, "_id")
 		}
-		return *data
+		return *data, count
 	}
-	return nil
+	return nil, 0
 }

+ 38 - 18
src/jfw/modules/bigmember/src/service/analysis/forecastwinner.go

@@ -8,6 +8,7 @@ import (
 	"encoding/json"
 	"entity"
 	"errors"
+	"fmt"
 	"log"
 	. "mongodb"
 	qutil "qfw/util"
@@ -167,7 +168,7 @@ func (this *Analysis) FWData() {
 							go SaveFalseLogAndSendMail(userId, "rpc 接口调用出错", "", s_nickname, *getRes)
 						}
 						//保存中标预测记录
-						SaveFWHistorys(status, userId, main_userId, base64Key, phone, currentCount, this.Request, getRes, ai)
+						go SaveFWHistorys(status, userId, main_userId, base64Key, phone, currentCount, this.Request, getRes, ai)
 					} else {
 						if member_status == 4 {
 							status = -3 //是否是试用用户
@@ -229,6 +230,7 @@ type EntInfo struct {
 	City        string  `json:"city"`        //company_city 城市
 	Capital     float64 `json:"capital"`     //capital 注册资本
 	Employee_no string  `json:"employee_no"` //employee_no 员工人数
+	Id          string  `json:"id"`
 }
 
 //前端每5秒查一次 预测是否完成
@@ -257,7 +259,7 @@ func (this *Analysis) FWStatus() {
 					json.Unmarshal([]byte(f_res.(string)), &resp)
 					//获取数据为空
 					if resp != nil && len(resp) > 0 {
-						//rpc 返回预测数据只有企业名称和中标概率  还需要查询企业得成立日期 注册资本 员工人数 地区 城市 联系电话
+						//rpc 返回预测数据只有企业名称和中标概率  还需要查询企业得成立日期 注册资本 员工人数 地区 城市 联系电话 企业信用库id
 						handleData := handleResp(resp)
 						//结果更新mongodb中
 						if db.Mgo.UpdateById(C_ForecastData, f_id, map[string]interface{}{
@@ -310,19 +312,22 @@ func (this *Analysis) FWStatus() {
 				}
 			}
 			if isFFalse > 0 {
-				//预测失败 清除redis数据
-				go ClearRedisInfo(userId)
-				go func() {
-					getRes := new(util.ForecastS)
-					if redis.GetNewInterface("other", redis_forecast_status+userId, &getRes) != nil {
-						log.Println("redis 1获取预测参数有误-", userId)
-					}
-					s_nickname, _ := this.GetSession("s_nickname").(string)
-					if s_nickname == "" {
-						s_nickname, _ = this.GetSession("app_name").(string)
-					}
-					SaveFalseLogAndSendMail(userId, falseMsg, f_id, s_nickname, *getRes)
-				}()
+				if rfrExist && f_id != "" {
+					go func() {
+						//预测失败 清除redis数据
+						ClearRedisInfo(userId)
+						//发送失败邮件提醒
+						getRes := new(util.ForecastS)
+						if redis.GetNewInterface("other", redis_forecast_status+userId, &getRes) != nil {
+							log.Println("redis 1获取预测参数有误-", userId)
+						}
+						s_nickname, _ := this.GetSession("s_nickname").(string)
+						if s_nickname == "" {
+							s_nickname, _ = this.GetSession("app_name").(string)
+						}
+						SaveFalseLogAndSendMail(userId, falseMsg, f_id, s_nickname, *getRes)
+					}()
+				}
 				regMap.Data = map[string]interface{}{
 					"id":      "",
 					"success": false,
@@ -340,11 +345,20 @@ func (this *Analysis) FWStatus() {
 
 }
 
+//查询中标企业名称【带曾用名检索】
+const queryFullEntName = `{"query":{"function_score":{"query":{"multi_match":{"query":"%s","type":"phrase","fields":["name","history_name"]}},"field_value_factor":{"field":"company_type_int","modifier":"reciprocal","factor":2}}},"_source":["name","history_name","company_type_int","_id"],"size":%d}`
+
 //数据填充
 func handleResp(r []*EntInfo) []*EntInfo {
 	if len(r) > 0 {
 		for _, v := range r {
 			entInfo, _ := db.Mgo_Ent.FindOne(C_FW_qyxy, `{"company_name":"`+v.EntName+`"}`)
+			if entInfo == nil || (*entInfo)["_id"] == nil {
+				list := elastic.Get("qyxy", "qyxy", fmt.Sprintf(queryFullEntName, v.EntName, 1))
+				if list != nil && len(*list) > 0 {
+					entInfo = &(*list)[0]
+				}
+			}
 			if entInfo != nil {
 				if (*entInfo)["company_area"] != nil {
 					v.Area = qutil.ObjToString((*entInfo)["company_area"])
@@ -361,6 +375,9 @@ func handleResp(r []*EntInfo) []*EntInfo {
 				if (*entInfo)["capital"] != nil {
 					v.Capital = qutil.Float64All((*entInfo)["capital"])
 				}
+				if (*entInfo)["_id"] != nil {
+					v.Id = qutil.ObjToString((*entInfo)["_id"])
+				}
 				if (*entInfo)["annual_reports"] != nil {
 					annual_reports := qutil.ObjArrToMapArr((*entInfo)["annual_reports"].([]interface{}))
 					if len(annual_reports) > 0 {
@@ -421,9 +438,12 @@ func (this *Analysis) FWResult() {
 						if responseData != nil && len(responseData) > 0 {
 							for _, v := range responseData {
 								rdv := *qutil.ObjToMap(v)
-								entName := qutil.ObjToString(rdv["entname"])
-								entId := entity.GetEntIdByQYXY(entName)
-								rdv["entId"] = entId
+								entId := qutil.ObjToString(rdv["id"])
+								if rdv["id"] == nil || qutil.ObjToString(rdv["id"]) == "" {
+									entName := qutil.ObjToString(rdv["entname"])
+									entId = entity.GetEntIdByQYXY(entName)
+								}
+								rdv["entId"] = util.EncodeId(entId)
 							}
 						}
 					}

+ 1 - 3
src/jfw/modules/bigmember/src/service/analysis/potential.go

@@ -82,13 +82,11 @@ func (this *Analysis) CsORRsList() {
 			json.Unmarshal(this.Body(), &getRes)
 		}
 		if getRes.PCOR != "" {
-			main_userId := userId
+			main_userId, _, _ := util.MainUserId(userId, "", 0)
 			// getRes.Searchbool -- 0:默认查询 1:条件查询
 			// log.Println(len(getRes.Area), "----", getRes.BuyerClass, "----", getRes.Business_scope, "--", getRes.Searchbool)
 			if getRes.Searchbool == 0 && (len(getRes.Area) == 0 || len(getRes.BuyerClass) == 0 || len(getRes.Business_scope) == 0) {
 				//查库获得大会员用户的信息
-				// userId = util.MainUserId(userId)
-				main_userId, _, _ = util.MainUserId(userId, "", 0)
 				o_mb, ok := db.Mgo.FindById(C_User, main_userId, `{"o_member_jy":1}`)
 				if ok && o_mb != nil && (*o_mb) != nil {
 					o_member_jy := qutil.ObjToMap((*o_mb)["o_member_jy"])

+ 34 - 8
src/jfw/modules/bigmember/src/service/follow/enterprise.go

@@ -4,21 +4,23 @@ import (
 	. "api"
 	"entity"
 	"errors"
-	"github.com/go-xweb/xweb"
 	"log"
 	qutil "qfw/util"
 	"util"
+
+	"github.com/go-xweb/xweb"
 )
 
 //大会员关注企业接口(企业情报)
 type FollowEnt struct {
 	*xweb.Action
-	association   xweb.Mapper `xweb:"/follow/ent/association"`   //搜索企业联想
-	followCheck   xweb.Mapper `xweb:"/follow/ent/followCheck"`   //企业是否关注
-	list          xweb.Mapper `xweb:"/follow/ent/list"`          //关注企业列表
-	addFollow     xweb.Mapper `xweb:"/follow/ent/addFollow"`     //添加关注标企业
-	delFollow     xweb.Mapper `xweb:"/follow/ent/delFollow"`     //取消关注标企业
-	entChangeList xweb.Mapper `xweb:"/follow/ent/entChangeList"` //企业变更记录
+	association        xweb.Mapper `xweb:"/follow/ent/association"`        //搜索企业联想
+	followCheck        xweb.Mapper `xweb:"/follow/ent/followCheck"`        //企业是否关注
+	list               xweb.Mapper `xweb:"/follow/ent/list"`               //关注企业列表
+	addFollow          xweb.Mapper `xweb:"/follow/ent/addFollow"`          //添加关注标企业
+	delFollow          xweb.Mapper `xweb:"/follow/ent/delFollow"`          //取消关注标企业
+	entChangeList      xweb.Mapper `xweb:"/follow/ent/entChangeList"`      //企业变更记录
+	pcSimpleFollowList xweb.Mapper `xweb:"/follow/ent/pcSimpleFollowList"` //pc关注企业列表(带变更)
 }
 
 //中标企业联想
@@ -82,11 +84,12 @@ func (this *FollowEnt) List() {
 		if pSize == 0 || pSize > 100 {          //默认一页50条数据
 			pSize = 50
 		}
-		entList, hasNext, err := followEntManager.GetEntFollowList(pNum, pSize)
+		entList, hasNext, count, err := followEntManager.GetEntFollowList(pNum, pSize)
 		if err != nil {
 			return nil, err
 		}
 		return map[string]interface{}{
+			"total":     count,
 			"hasNext":   hasNext,                 //是否有下一页
 			"list":      entList,                 //我关注的企业信息
 			"followMax": followEntManager.MaxNum, //最多关注企业数量
@@ -98,6 +101,29 @@ func (this *FollowEnt) List() {
 	this.ServeJson(NewResult(rData, errMsg))
 }
 
+func (this *FollowEnt) PcSimpleFollowList() {
+	userId := qutil.ObjToString(this.GetSession("userId"))
+	rData, errMsg := func() (interface{}, error) {
+		followEntManager, err := entity.CreateEntFollowManager(userId)
+		if err != nil {
+			return nil, err
+		}
+		pSize, _ := this.GetInteger("size") //每页数据量
+		if pSize <= 0 || pSize > 10 {
+			pSize = 10
+		}
+		entList, err := followEntManager.GetEntFollowAndChangeList(pSize)
+		if err != nil {
+			return nil, err
+		}
+		return entList, nil
+	}()
+	if errMsg != nil {
+		log.Printf("%s 企业情报变更列表查询异常:%s\n", userId, errMsg.Error())
+	}
+	this.ServeJson(NewResult(rData, errMsg))
+}
+
 //添加关注企业
 func (this *FollowEnt) AddFollow() {
 	userId := qutil.ObjToString(this.GetSession("userId"))

+ 4 - 2
src/jfw/modules/bigmember/src/service/follow/project.go

@@ -5,10 +5,11 @@ import (
 	"entity"
 	"errors"
 	"fmt"
-	"github.com/go-xweb/xweb"
 	"log"
 	qutil "qfw/util"
 	"util"
+
+	"github.com/go-xweb/xweb"
 )
 
 //大会员关注项目接口
@@ -113,12 +114,13 @@ func (this *FollowProject) FollowList() {
 		if pSize == 0 || pSize > 100 {          //默认一页50条数据
 			pSize = 50
 		}
-		pList, hasNext, err := projectManager.GetFollowList(pNum, pSize)
+		pList, hasNext, count, err := projectManager.GetFollowList(pNum, pSize)
 		//是否有下一页??
 		if err != nil {
 			return nil, err
 		}
 		return map[string]interface{}{
+			"total":     count,
 			"hasNext":   hasNext,
 			"List":      pList,
 			"followMax": projectManager.MaxNum,

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

@@ -14,6 +14,7 @@ type EntPortrait struct {
 	*xweb.Action
 	entDetail xweb.Mapper `xweb:"/portrait/ent/detail"` //企业基本信息
 	//新画像接口
+	winnerContacts xweb.Mapper `xweb:"/portrait/winner/contacts"`  //历史项目联系方式 dev4.0pc端新增接口
 	winnerNewMsg   xweb.Mapper `xweb:"/portrait/winner/getNewMsg"` //最新项目动态(需购买项目进度监控)
 	winnerPortrait xweb.Mapper `xweb:"/portrait/winner/getData"`   //最新项目动态
 	//新采购单位画像

+ 76 - 4
src/jfw/modules/bigmember/src/service/portrait/portraitActionNew.go

@@ -8,6 +8,38 @@ import (
 	"util"
 )
 
+func (this *EntPortrait) WinnerContacts() {
+	userId := qutil.ObjToString(this.GetSession("userId"))
+	rData, errMsg := func() (interface{}, error) {
+		cepm, err := entity.CreatePortraitManager(userId, "entNewMsg")
+		if err != nil {
+			return nil, err
+		}
+		entId := util.DecodeId(this.GetString("entId"))
+		pageNum, _ := this.GetInteger("pageNum")
+		count, _ := this.GetInt("count")
+		pageSize, _ := this.GetInteger("pageSize")
+		if pageSize == 0 {
+			pageSize = 5
+		}
+		if pageNum == 0 {
+			pageNum = 1
+		}
+		rData, total, err := cepm.GetContactsMsg(entId, pageNum, pageSize, count)
+		if err != nil {
+			return nil, err
+		}
+		return map[string]interface{}{
+			"list":  rData,
+			"count": total,
+		}, nil
+	}()
+	if errMsg != nil {
+		log.Printf("%s WinnerContacts获取历史项目联系方式出错:%s\n", userId, errMsg.Error())
+	}
+	this.ServeJson(NewResult(rData, errMsg))
+}
+
 //企业画像-最新项目动态
 func (this *EntPortrait) WinnerNewMsg() {
 	userId := qutil.ObjToString(this.GetSession("userId"))
@@ -16,11 +48,30 @@ func (this *EntPortrait) WinnerNewMsg() {
 		if err != nil {
 			return nil, err
 		}
-		pageSign := this.GetString("pageSign") //more:4-23条;max:24-50条
 		entId := util.DecodeId(this.GetString("entId"))
 		count, _ := this.GetInt("count")
 
-		rData, err := cepm.GetWinnerNewMsg(entId, pageSign)
+		pageNum, _ := this.GetInteger("pageNum")
+		limit, _ := this.GetInteger("pageSize")
+		if limit == 0 {
+			limit = 3
+		}
+		var start = 0
+		if pageNum > 0 {
+			start = (pageNum - 1) * limit
+		}
+
+		if pageSign := this.GetString("pageSign"); pageSign != "" { //more:4-23条;max:24-50条(移动端)
+			if pageSign == "more" {
+				start = 3
+				limit = 20
+			} else if pageSign == "max" {
+				start = 20 + 3
+				limit = entity.PortraitNewMegsLimit - start
+			}
+		}
+
+		rData, err := cepm.GetWinnerNewMsg(entId, start, limit)
 		if err != nil {
 			return nil, err
 		}
@@ -67,10 +118,31 @@ func (this *EntPortrait) BuyerNewMsg() {
 		if err != nil {
 			return nil, err
 		}
-		pageSign := this.GetString("pageSign") //more:4-23条;max:24-50条
+
 		buyer := this.GetString("buyer")
 		count, _ := this.GetInt("count")
-		rData, err := cepm.GetBuyerNewMsg(buyer, pageSign)
+
+		pageNum, _ := this.GetInteger("pageNum")
+		limit, _ := this.GetInteger("pageSize")
+		if limit == 0 {
+			limit = 3
+		}
+		var start = 0
+		if pageNum > 0 {
+			start = (pageNum - 1) * limit
+		}
+
+		if pageSign := this.GetString("pageSign"); pageSign != "" { //more:4-23条;max:24-50条(移动端)
+			if pageSign == "more" {
+				start = 3
+				limit = 20
+			} else if pageSign == "max" {
+				start = 20 + 3
+				limit = entity.PortraitNewMegsLimit - start
+			}
+		}
+
+		rData, err := cepm.GetBuyerNewMsg(buyer, start, limit)
 		if err != nil {
 			return nil, err
 		}

+ 24 - 6
src/jfw/modules/bigmember/src/service/subscribe/subscribe.go

@@ -202,8 +202,10 @@ func (s *Subscribe) GetPushView() {
 			return Result{Data: nil, Error_msg: "未登录"}
 		}
 		pageNum, _ := s.GetInteger("pageNum")
-		keys, list, hasNextPage := util.SubViewDatas(userId, "", pageNum)
+		pageSize, _ := s.GetInteger("pageSize")
+		keys, list, hasNextPage, count := util.SubViewDatas(userId, "", pageNum, pageSize)
 		return Result{Data: M{
+			"total":       count,
 			"keys":        strings.Replace(strings.Trim(fmt.Sprint(keys), "[]"), " ", ",", -1),
 			"list":        list,
 			"hasNextPage": hasNextPage,
@@ -218,20 +220,36 @@ func (s *Subscribe) List() {
 		return
 	}
 	pageNum, _ := s.GetInteger("pagenum")
+	pageSize, _ := s.GetInteger("pageSize")
 	area := s.GetString("area")
 	var formatTime string
+	var startTime string
+	var endTime string
 	if selectTime := s.GetString("time"); selectTime != "" {
-		selectTime = selectTime[0:10]
-		select_time, _ := strconv.ParseInt(selectTime, 10, 64)
-		//转化
-		formatTime = time.Unix(select_time, 0).Format("2006-01-02")
+		//单日时间
+		if !strings.Contains(selectTime, "_") {
+			selectTime = selectTime[0:10]
+			select_time, _ := strconv.ParseInt(selectTime, 10, 64)
+			//转化
+			formatTime = time.Unix(select_time, 0).Format("2006-01-02")
+		} else {
+			st := strings.Split(selectTime, "_")[0][0:10]
+			start_time, _ := strconv.ParseInt(st, 10, 64)
+			//转化
+			startTime = time.Unix(start_time, 0).Format("2006-01-02")
+			et := strings.Split(selectTime, "_")[1][0:10]
+			end_time, _ := strconv.ParseInt(et, 10, 64)
+			//转化
+			endTime = time.Unix(end_time, 0).Format("2006-01-02")
+		}
 	}
 	userid := qutil.ObjToString(s.GetSession("userId"))
 	// mainid, _, _ := util.MainUserId(userid, "", 0)
 	m := M{}
-	hasNextPage, list := jy.MemberPush.Datas(db.Mgo_Bidding, db.DbConf.Mongodb.Bidding.Collection, db.DbConf.Mongodb.Bidding.Collection_change, db.Mysql_Push, userid, pageNum, formatTime, area)
+	hasNextPage, list, count := jy.MemberPush.Datas(db.Mgo_Bidding, db.DbConf.Mongodb.Bidding.Collection, db.DbConf.Mongodb.Bidding.Collection_change, db.Mysql_Push, userid, pageNum, formatTime, area, pageSize, startTime, endTime)
 	m["hasnextpage"] = hasNextPage
 	m["list"] = list
+	m["total"] = count
 	s.ServeJson(Result{Data: m})
 }
 

+ 7 - 5
src/jfw/modules/bigmember/src/service/use/use.go

@@ -7,8 +7,6 @@ import (
 	"encoding/json"
 	"entity"
 	"fmt"
-	"github.com/go-xweb/xweb"
-	elastic1 "gopkg.in/olivere/elastic.v1"
 	"log"
 	"mongodb"
 	qu "qfw/util"
@@ -17,6 +15,9 @@ import (
 	"strings"
 	"time"
 	"util"
+
+	"github.com/go-xweb/xweb"
+	elastic1 "gopkg.in/olivere/elastic.v1"
 )
 
 type Use struct {
@@ -147,10 +148,11 @@ func (u *Use) Info() {
 		if userid == "" {
 			return Result{Data: M{"status": -1}, Error_msg: "未登录"}
 		}
+		mainid, _, _ := util.MainUserId(userid, "", 0)
 		d := map[string]interface{}{
 			"i_member_status": 0,
 		}
-		data, _ := db.Mgo.FindById("user", userid, `{"i_member_starttime":1,"i_member_endtime":1,"i_member_status":1,"o_member_jy":1}`)
+		data, _ := db.Mgo.FindById("user", mainid, `{"i_member_starttime":1,"i_member_endtime":1,"i_member_status":1,"o_member_jy":1}`)
 		if (*data)["i_member_status"] != nil {
 			d["member_status"] = qu.IntAll((*data)["i_member_status"])
 			d["member_starttime"] = qu.IntAll((*data)["i_member_starttime"])
@@ -581,9 +583,9 @@ func (u *Use) Aiused_history() {
 		surplus, _ := GetSurplusCount(mainid)
 		//dev3.4 中标预测记录表 修改为 大会员消费记录表
 		res := db.Mysql.SelectBySql(`select s_phone,l_createtime from bigmember_consume
-						where s_master_userid =? and s_serviceid = '15'  order by l_createtime desc`, userid)
+						where s_master_userid =? and s_serviceid = '15'  order by l_createtime desc`, mainid)
 		used_count := db.Mysql.CountBySql(`select COUNT(DISTINCT s_key) from bigmember_consume
-						where s_master_userid =? and s_serviceid = '15'`, userid)
+						where s_master_userid =? and s_serviceid = '15'`, mainid)
 		return Result{Data: M{
 			"surplus":       surplus,
 			"used_count":    used_count,

+ 3 - 0
src/jfw/modules/bigmember/src/util/util.go

@@ -8,6 +8,9 @@ import (
 var ClearHtml = regexp.MustCompile("<[^>]*>")
 
 func EncodeId(sid string) string {
+	if sid == "" {
+		return ""
+	}
 	return qutil.EncodeArticleId2ByCheck(sid)
 }
 

+ 8 - 3
src/jfw/modules/bigmember/src/util/view.go

@@ -39,7 +39,7 @@ const (
 	bidSearch_field = `"_id","title","publishtime","toptype","subtype","type","area","buyerclass","budget","bidamount"`
 )
 
-func SubViewDatas(userId, allquery string, pageNum int) (keys []interface{}, list *[]map[string]interface{}, hasNextPage bool) {
+func SubViewDatas(userId, allquery string, pageNum, pageSize int) (keys []interface{}, list *[]map[string]interface{}, hasNextPage bool, count int64) {
 	if userId == "" {
 		return
 	}
@@ -47,6 +47,10 @@ func SubViewDatas(userId, allquery string, pageNum int) (keys []interface{}, lis
 	if sql == nil {
 		return
 	}
+	//PC端
+	if pageSize == 0 || pageSize > 100 {
+		pageSize = view_pageSize
+	}
 	for _, v := range sql.Keyword {
 		var keys_one []string
 		for _, k := range v.Keyword {
@@ -59,13 +63,14 @@ func SubViewDatas(userId, allquery string, pageNum int) (keys []interface{}, lis
 		keys = append(keys, strings.Join(keys_one, "++"))
 	}
 	qstr := GetMemberViewSql(sql)
-	list = elastic.GetAllByNgram(INDEX, TYPE, qstr, findfields, bidSearch_sort, bidSearch_field, (pageNum-1)*view_pageSize, view_pageSize, 0, false)
+	count = elastic.Count(INDEX, TYPE, qstr)
+	list = elastic.GetAllByNgram(INDEX, TYPE, qstr, findfields, bidSearch_sort, bidSearch_field, (pageNum-1)*pageSize, pageSize, 0, false)
 	if list != nil {
 		for _, v := range *list {
 			v["_id"] = EncodeId(qutil.ObjToString(v["_id"]))
 		}
 	}
-	hasNextPage = list != nil && len(*list) == view_pageSize && pageNum < view_maxPageNum
+	hasNextPage = list != nil && len(*list) == pageSize && pageNum < view_maxPageNum
 	return
 }
 

+ 66 - 37
src/jfw/modules/common/src/qfw/util/jy/memberpush.go

@@ -42,31 +42,35 @@ func (m *memberPush) PutTodayCache(userId string, pc_a *SubPush) {
 func (m *memberPush) todayKey(userId string) string {
 	return fmt.Sprintf("memberpush_%s", userId)
 }
-func (m *memberPush) Datas(Mgo_bidding mg.MongodbSim, bidding, bidding_back string, PushMysql *mysql.Mysql, userId string, pageNum int, selectTime, area string) (hasNextPage bool, result []*SubPushList) {
+func (m *memberPush) Datas(Mgo_bidding mg.MongodbSim, bidding, bidding_back string, PushMysql *mysql.Mysql, userId string, pageNum int, selectTime, area string, pageSizePC int, startTime, endTime string) (hasNextPage bool, result []*SubPushList, count int64) {
 	if pageNum < 1 {
 		pageNum = 1
 	}
+	if pageSizePC == 0 || pageSizePC > 100 {
+		pageSizePC = pageSize
+	}
 	now := NowFormat(Date_Short_Layout)
-	start := (pageNum - 1) * pageSize
-	end := start + pageSize
+	start := (pageNum - 1) * pageSizePC
+	end := start + pageSizePC
 	if now == selectTime && area == "" {
 		subPush, err := m.GetTodayCache(userId)
 		if err != nil {
 			log.Println(userId, "GetTodayCache Error", err)
 		}
 		if err != nil || subPush == nil || subPush.Date != now || len(subPush.Datas) == 0 {
-			list := m.getDatasFromMysql(Mgo_bidding, bidding, bidding_back, PushMysql, userId, pageNum, pageSize, selectTime, area, false)
+			listSearch, countSearch := m.getDatasFromMysql(Mgo_bidding, bidding, bidding_back, PushMysql, userId, pageNum, pageSizePC, selectTime, area, false, startTime, endTime)
 			subPush = &SubPush{
 				Date:  now,
-				Datas: list,
+				Datas: listSearch,
+				Count: countSearch,
 			}
 			m.PutTodayCache(userId, subPush)
 		}
-		length := len(subPush.Datas)
-		if end > length {
-			end = length
+		count = subPush.Count
+		if end > int(count) {
+			end = int(count)
 		}
-		if start < length {
+		if start < int(count) {
 			result = subPush.Datas[start:end]
 		}
 	} else if selectTime == "" && area == "" && pageNum <= 5 {
@@ -74,28 +78,33 @@ func (m *memberPush) Datas(Mgo_bidding mg.MongodbSim, bidding, bidding_back stri
 		if err != nil {
 			log.Println(userId, "GetAllCache Error", err)
 		}
-		if err != nil || allCache == nil || len(allCache) == 0 {
-			allCache = m.getDatasFromMysql(Mgo_bidding, bidding, bidding_back, PushMysql, userId, 1, AllSubPushCacheSize, selectTime, area, true)
+		if err != nil || allCache == nil {
+			listSearch, countSearch := m.getDatasFromMysql(Mgo_bidding, bidding, bidding_back, PushMysql, userId, 1, AllSubPushCacheSize, selectTime, area, true, startTime, endTime)
+			allCache = &SubPush{
+				Date:  now,
+				Datas: listSearch,
+				Count: countSearch,
+			}
 			m.PutAllCache(userId, allCache)
 		}
-		length := len(allCache)
-		if end > length {
-			end = length
+		count = allCache.Count
+		if end > int(count) {
+			end = int(count)
 		}
-		if start < length {
-			result = allCache[start:end]
+		if start < int(count) {
+			result = allCache.Datas[start:end]
 		}
 	} else {
-		result = m.getDatasFromMysql(Mgo_bidding, bidding, bidding_back, PushMysql, userId, pageNum, pageSize, selectTime, area, true)
+		result, count = m.getDatasFromMysql(Mgo_bidding, bidding, bidding_back, PushMysql, userId, pageNum, pageSizePC, selectTime, area, true, startTime, endTime)
 	}
 	if result == nil {
 		result = []*SubPushList{}
 	}
-	hasNextPage = len(result) >= pageSize
+	hasNextPage = len(result) >= pageSizePC
 	return
 }
-func (m *memberPush) getDatasFromMysql(Mgo_bidding mg.MongodbSim, bidding, bidding_back string, PushMysql *mysql.Mysql, userId string, pageNum, myPageSize int, selectTime, area string, isLimit bool) (result []*SubPushList) {
-	findSQL := `select id,date,infoid,isvisit,matchkeys,type from pushmember where userid="` + userId + `"`
+func (m *memberPush) getDatasFromMysql(Mgo_bidding mg.MongodbSim, bidding, bidding_back string, PushMysql *mysql.Mysql, userId string, pageNum, myPageSize int, selectTime, area string, isLimit bool, startTime, endTime string) (result []*SubPushList, count int64) {
+	findSQL := ` %s where userid="` + userId + `" `
 	findStr := ""
 	if selectTime != "" {
 		startTime := selectTime + " 00:00:00"
@@ -103,27 +112,51 @@ func (m *memberPush) getDatasFromMysql(Mgo_bidding mg.MongodbSim, bidding, biddi
 		st, _ := time.ParseInLocation("2006-01-02 15:04:05", startTime, time.Local)
 		et, _ := time.ParseInLocation("2006-01-02 15:04:05", endTime, time.Local)
 		findStr += " and date < " + fmt.Sprint(et.Unix()) + " and date >= " + fmt.Sprint(st.Unix())
+	} else if startTime != "" && endTime != "" {
+		startTime = startTime + " 00:00:00"
+		endTime = endTime + " 23:59:59"
+		st, _ := time.ParseInLocation("2006-01-02 15:04:05", startTime, time.Local)
+		et, _ := time.ParseInLocation("2006-01-02 15:04:05", endTime, time.Local)
+		findStr += " and date < " + fmt.Sprint(et.Unix()) + " and date >= " + fmt.Sprint(st.Unix())
 	}
 	if area != "" {
-		findStr += " and area in ("
-		var _area = ""
+		var _area, _city = "", ""
 		for _, v := range strings.Split(area, ",") {
 			if v == "全部" {
 				continue
 			}
-			if _area != "" {
-				_area += ","
+			//省份
+			if province, ok := PushMapping.Area[v]; ok {
+				if _area != "" {
+					_area += ","
+				}
+				_area += fmt.Sprint(province)
+			}
+			//城市
+			if city, ok := PushMapping.City[v]; ok {
+				if _city != "" {
+					_city += ","
+				}
+				_city += fmt.Sprint(city)
 			}
-			_area += fmt.Sprint(PushMapping.Area[v])
 		}
-		findStr += _area + ")"
+
+		if _area != "" && _city != "" {
+			findStr += fmt.Sprintf(" and ( area in ( %s ) or city in ( %s ) )", _area, _city)
+		} else if _area != "" && _city == "" { //仅查询省份
+			findStr += fmt.Sprintf(" and area in ( %s ) ", _area)
+		} else if _area == "" && _city != "" { //仅查询城市
+			findStr += fmt.Sprintf(" and  city in ( %s ) ", _city)
+		}
 	}
 	start := (pageNum - 1) * myPageSize
+	count = PushMysql.CountBySql(fmt.Sprintf(findSQL+findStr, "select count(id) from pushmember"))
+
 	findStr += " order by id desc"
 	if isLimit {
 		findStr += " limit " + fmt.Sprint(start) + "," + fmt.Sprint(myPageSize)
 	}
-	findSQL = findSQL + findStr
+	findSQL = fmt.Sprintf(findSQL+findStr, `select id,date,infoid,isvisit,matchkeys,type from pushmember`)
 	log.Println("findsql:", findSQL)
 	list := PushMysql.SelectBySql(findSQL)
 	if len(*list) > 0 {
@@ -173,7 +206,7 @@ func (m *memberPush) Visit(PushMysql *mysql.Mysql, userId string, id int) {
 	//
 	allSubPush, err := m.GetAllCache(userId)
 	if err == nil && allSubPush != nil {
-		for _, v := range allSubPush {
+		for _, v := range allSubPush.Datas {
 			if v.Ca_index == Int64All(id) {
 				v.Ca_isvisit = 1
 				break
@@ -185,26 +218,22 @@ func (m *memberPush) Visit(PushMysql *mysql.Mysql, userId string, id int) {
 
 //查看全部列表缓存
 func (m *memberPush) allKey(userId string) string {
-	return fmt.Sprintf("all_memberpush_%s", userId)
+	return fmt.Sprintf("all_memberpush_new_%s", userId)
 }
 
-func (m *memberPush) PutAllCache(userId string, datas []*SubPushList) {
+func (m *memberPush) PutAllCache(userId string, datas *SubPush) {
 	redis.Put("pushcache_2_a", m.allKey(userId), datas, threeDay)
 }
 
-func (m *memberPush) GetAllCache(userId string) ([]*SubPushList, error) {
-	return m.GetCache("pushcache_2_a", m.allKey(userId))
-}
-
-func (m *memberPush) GetCache(code, key string) ([]*SubPushList, error) {
-	pc_a, err := redis.GetNewBytes(code, key)
+func (m *memberPush) GetAllCache(userId string) (*SubPush, error) {
+	pc_a, err := redis.GetNewBytes("pushcache_2_b", m.allKey(userId))
 	if err != nil {
 		return nil, err
 	}
 	if pc_a == nil {
 		return nil, nil
 	}
-	var p []*SubPushList
+	var p *SubPush
 	if err := json.Unmarshal(*pc_a, &p); err != nil {
 		return nil, err
 	}

+ 1 - 0
src/jfw/modules/common/src/qfw/util/jy/subscribepush.go

@@ -54,6 +54,7 @@ var Mysql_table = "pushsubscribe"
 type SubPush struct {
 	Date  string
 	Datas []*SubPushList
+	Count int64
 }
 
 type PushCa struct {

+ 2 - 0
src/jfw/modules/subscribepay/src/a/init.go

@@ -45,6 +45,8 @@ func init() {
 	xweb.AddRouter("/jypay", &service.PayCallBackAction{})
 	//支付成功&申请等
 	xweb.AddRouter("/jypay", &service.CommonAction{})
+	//广告位
+	xweb.AddRouter("/jypay", &service.Ad{})
 	//企业商机管理
 	xweb.AddRouter("/jypay", &service.Entniche{})
 	//招投标课程

+ 101 - 0
src/jfw/modules/subscribepay/src/service/ad.go

@@ -0,0 +1,101 @@
+package service
+
+import (
+	. "api"
+	"encoding/json"
+	"fmt"
+	"github.com/go-xweb/xweb"
+	"log"
+	"qfw/util/redis"
+	"strings"
+	"time"
+	"util"
+)
+
+type Ad struct {
+	*xweb.Action
+	ad xweb.Mapper `xweb:"/getAdvertisement"` //广告位图片
+}
+
+func (ad *Ad) Ad() {
+	rData, errMsg := func() (interface{}, error) {
+		var i_num int = -1
+		s_code := ad.GetString("code")                          //广告位代码
+		if i_num_req, err := ad.GetInteger("num"); err == nil { //数量 -1取一个
+			i_num = i_num_req
+		}
+		obj := redis.Get("other", "ad_"+s_code)
+		if obj != nil {
+			return adHandle(obj.([]interface{})), nil
+			//return util.ObjArrToMapArr(obj.([]interface{})), nil
+		} else {
+			f := ""
+			if i_num > -1 {
+				f = `{"a_son":{"$slice":[0,` + fmt.Sprintf("%d", i_num) + `]}}`
+			} else {
+				f = `{"a_son":1}`
+			}
+			res, ok := util.MQFW.FindOneByField("ad", `{"s_code":"`+s_code+`"}`, f)
+			if ok && res != nil && (*res)["a_son"] != nil {
+				son := (*res)["a_son"].([]interface{})
+				resmap := adHandle(son)
+				redis.PutCKV("other", "ad_"+s_code, resmap)
+				return resmap, nil
+			}
+		}
+		return nil, nil
+	}()
+	if errMsg != nil {
+		log.Printf("Ad  err:%s\n", errMsg.Error())
+	}
+	ad.ServeJson(NewResult(rData, errMsg))
+}
+
+type adInfo struct {
+	S_link   string `json:"s_link"`   //广告位跳转链接
+	S_pic    string `json:"s_pic"`    //广告位弹窗
+	S_remark string `json:"s_remark"` //备注
+	O_extend struct {
+		Linktype  string `json:"linktype"`  //是否外部链接
+		Height    string `json:"height"`    //高度
+		Width     string `json:"width"`     //宽度
+		StartTime string `json:"startTime"` //开始时间
+		EndTime   string `json:"endTime"`   //结束时间
+	} `json:"o_extend"` //拓展属性
+}
+
+//广告位信息处理
+func adHandle(data []interface{}) []adInfo {
+	var res = []adInfo{}
+	if len(data) > 0 {
+		adInfo_Arr := []adInfo{}
+		bytes, err := json.Marshal(data)
+		if err != nil {
+			return res
+		}
+		json.Unmarshal(bytes, &adInfo_Arr)
+		if len(adInfo_Arr) > 0 {
+			now := time.Now()
+			for _, v := range adInfo_Arr {
+				if v.O_extend.StartTime != "" && len(strings.Split(v.O_extend.StartTime, "-")) == 6 {
+					if thisTime, err := time.ParseInLocation("2006-01-02-15-04-05", v.O_extend.StartTime, time.Local); err == nil {
+						//广告还未开始
+						if thisTime.Unix() > now.Unix() {
+							continue
+						}
+					}
+				}
+				if v.O_extend.EndTime != "" && len(strings.Split(v.O_extend.EndTime, "-")) == 6 {
+					if thisTime, err := time.ParseInLocation("2006-01-02-15-04-05", v.O_extend.EndTime, time.Local); err == nil {
+						//广告已经结束
+						if thisTime.Unix() < now.Unix() {
+							continue
+						}
+					}
+				}
+				res = append(res, v)
+			}
+		}
+	}
+	return res
+}

+ 59 - 5
src/jfw/tag/ad.go

@@ -7,10 +7,13 @@ package tag
 **/
 
 import (
+	"encoding/json"
 	"fmt"
 	"jfw/public"
 	"log"
-	"qfw/util"
+	"strings"
+	"time"
+
 	"qfw/util/redis"
 	"runtime"
 )
@@ -29,7 +32,7 @@ var mongodb = public.MQFW
 	{{end}}
 {{end}}
 **/
-func Ad(s_code string, n int) []map[string]interface{} {
+func Ad(s_code string, n int) []adInfo {
 	defer func() {
 		if r := recover(); r != nil {
 			log.Println("[E]", r)
@@ -44,7 +47,7 @@ func Ad(s_code string, n int) []map[string]interface{} {
 	}()
 	obj := redis.Get("other", "ad_"+s_code)
 	if obj != nil {
-		return util.ObjArrToMapArr(obj.([]interface{}))
+		return adHandle(obj.([]interface{}), s_code)
 	} else {
 		f := ""
 		if n > -1 {
@@ -55,10 +58,61 @@ func Ad(s_code string, n int) []map[string]interface{} {
 		res, ok := mongodb.FindOneByField("ad", `{"s_code":"`+s_code+`"}`, f)
 		if ok && res != nil && (*res)["a_son"] != nil {
 			son := (*res)["a_son"].([]interface{})
-			resmap := util.ObjArrToMapArr(son)
-			redis.PutCKV("other", "ad_"+s_code, resmap)
+			resmap := adHandle(son, s_code)
+			if len(resmap) > 0 {
+				redis.PutCKV("other", "ad_"+s_code, resmap)
+			}
 			return resmap
 		}
 	}
 	return nil
 }
+
+type adInfo struct {
+	S_link   string `json:"s_link"`   //广告位跳转链接
+	S_pic    string `json:"s_pic"`    //广告位弹窗
+	S_remark string `json:"s_remark"` //备注
+	O_extend struct {
+		Linktype  string `json:"linktype"`  //是否外部链接
+		Height    string `json:"height"`    //高度
+		Width     string `json:"width"`     //宽度
+		StartTime string `json:"startTime"` //开始时间
+		EndTime   string `json:"endTime"`   //结束时间
+	} `json:"o_extend"` //拓展属性
+}
+
+//广告位信息处理
+func adHandle(data []interface{}, s_code string) []adInfo {
+	var res = []adInfo{}
+	if len(data) > 0 {
+		adInfo_Arr := []adInfo{}
+		bytes, err := json.Marshal(data)
+		if err != nil {
+			return res
+		}
+		json.Unmarshal(bytes, &adInfo_Arr)
+		if len(adInfo_Arr) > 0 {
+			now := time.Now()
+			for _, v := range adInfo_Arr {
+				if v.O_extend.StartTime != "" && len(strings.Split(v.O_extend.StartTime, "-")) == 6 {
+					if thisTime, err := time.ParseInLocation("2006-01-02-15-04-05", v.O_extend.StartTime, time.Local); err == nil {
+						//广告还未开始
+						if thisTime.Unix() > now.Unix() {
+							continue
+						}
+					}
+				}
+				if v.O_extend.EndTime != "" && len(strings.Split(v.O_extend.EndTime, "-")) == 6 {
+					if thisTime, err := time.ParseInLocation("2006-01-02-15-04-05", v.O_extend.EndTime, time.Local); err == nil {
+						//广告已经结束
+						if thisTime.Unix() < now.Unix() {
+							continue
+						}
+					}
+				}
+				res = append(res, v)
+			}
+		}
+	}
+	return res
+}

BIN
src/web/staticres/images/guanzhued.png


+ 2 - 0
src/web/staticres/js/check-bind-phone.js

@@ -269,6 +269,8 @@
         } catch (e) {
           console.log('获取状态失败: ', e)
         }
+      }).fail(function () {
+        canBindPhone = true
       })
     }
     // 初始化获取绑定状态

+ 40 - 3
src/web/staticres/js/login.js

@@ -286,6 +286,18 @@ var redisUserInfo = function(pid,kid){
 		}
 	})
 }
+function checkBigStatus () {
+  $.ajax({
+    type: 'post',
+    url: '/bigmember/use/isAdd',
+    success: function (res) {
+      console.log(res)
+      if (res && res.data && res.data.memberStatus > 0) {
+        $(".myorderDiv.lastBox").show()
+      }
+    }
+  })
+}
 // 查询商机管理PC权限
 function checkMenuForEnt () {
     $.ajax({
@@ -307,7 +319,7 @@ function checkMenuForEnt () {
                             +"<span>商机管理</span>"
                             +"</div>"
                     }
-                    $(".infoList .exitDiv").before(tempHtml)
+                    $(".infoList .lastBox").before(tempHtml)
                 }
             })
         }
@@ -316,6 +328,7 @@ function checkMenuForEnt () {
 //查询用户信息,响应页面登录信息
 var logic = function(data,num){
 	if(data.result=="ok"){
+	  clearLoginStorage(/-login-clear/)
 		//$(".QRLogin").hide();
 		$("#bidLogin").modal("hide")
 		$("#bidcommunity").modal("hide")
@@ -371,6 +384,9 @@ var logic = function(data,num){
           +"</div>"
           +"<div class=\"myorderDiv\" onclick=\"window.location.href='/front/swordfish/toMyOrder'\">"
           +"<span>我的订单</span>"
+          +"</div>"
+          +"<div class=\"myorderDiv lastBox\" style='display: none' onclick=\"window.location.href='/swordfish/page_big_pc'\">"
+          +"<span>大会员</span>"
           +"</div>"
 					hhtml+= "<div class='exitDiv' onclick='signout()'>"
 						+"<img id='outImg' src='/images/userexit.png'/>"
@@ -380,7 +396,8 @@ var logic = function(data,num){
 			+"</div>"
 		$("#login").html(hhtml);
 		try{
-            checkMenuForEnt()
+      checkBigStatus()
+      checkMenuForEnt()
 			infoListCss();
 			commonMouseEvent();
 		}catch(e){}
@@ -539,6 +556,21 @@ var processpage = function(shareid,num){
 	}
 }
 
+function clearObjKeyForRegFn (obj, reg) {
+  if (obj) {
+    for(var k in obj) {
+      if (reg.test(k)) {
+        obj.removeItem(k)
+      }
+    }
+  }
+}
+
+function clearLoginStorage (reg) {
+  clearObjKeyForRegFn(sessionStorage, reg)
+  clearObjKeyForRegFn(localStorage, reg)
+}
+
 
 //退出登录
 var signout = function(){
@@ -554,6 +586,7 @@ var signout = function(){
 	$(".superSearch").show();
 	$.post("/front/signOut",function(data){
 		if(data=="ok"){
+		  clearLoginStorage(/-login-clear/)
 			try{
 				$.cookie("userid_secure","",{expires:-1,path:"/",domain:document.domain.replace(/[^.]+/,"")});
 			}catch(e){
@@ -623,6 +656,9 @@ var haslogin = function(num,kyorpn,url){
             +"<div class=\"myorderDiv\" onclick=\"window.location.href='/front/swordfish/toMyOrder'\">"
             +"<span>我的订单</span>"
             +"</div>"
+            +"<div class=\"myorderDiv lastBox\" style='display: none' onclick=\"window.location.href='/swordfish/page_big_pc'\">"
+            +"<span>大会员</span>"
+            +"</div>"
             hhtml+= "<div class='exitDiv' onclick='signout()'>"
             +"<img id='outImg' src='/images/userexit.png'/>"
             +"<span>退出</span>"
@@ -631,7 +667,8 @@ var haslogin = function(num,kyorpn,url){
 				+"</div>"
 			$("#login").html(hhtml);
 			try{
-                checkMenuForEnt()
+        checkBigStatus()
+        checkMenuForEnt()
 				infoListCss();
 				commonMouseEvent();
 			}catch(e){}

+ 18 - 9
src/web/templates/big-member/pc/page_index.html

@@ -125,7 +125,7 @@
             </div>
         </div>
     </div>
-    <div class="w-box">
+    <div class="w-box" id="zb">
         <div>
             <div class="title-box--new" style="margin: 96px 0 64px 0;">帮你抢先获取销售机会</div>
             <div class="tab-nav-box--header w1200">
@@ -236,7 +236,7 @@
             </div>
         </div>
     </div>
-    <div class="w-box">
+    <div class="w-box" id="jc">
         <div class="bg-img" style="padding: 98px 0 84px 0;">
             <div class="title-box--new">辅助你做投标决策</div>
             <div class="tab-nav-box--header w1200" style="width: 800px;min-width: 800px;">
@@ -345,7 +345,7 @@
                 </div>
         </div>
     </div>
-    <div class="w-box">
+    <div class="w-box" id="fx">
         <div class="" style="padding-top: 98px">
             <div class="title-box--new">帮助你分析洞察市场</div>
             <div class="tab-nav-box--header w1200">
@@ -553,7 +553,7 @@
             </div>
         </div>
     </div>
-    <div class="w-box">
+    <div class="w-box" id="qz">
         <div class="bg-img2" style="padding: 98px 0 84px 0;">
             <div class="title-box--new">帮助厂商拓展客户和代理渠道</div>
             <div class="tab-nav-box--header w1200" style="width: 800px;min-width: 800px;">
@@ -918,12 +918,17 @@
     var pageUserInfo = {
         memberStatus: {{.T.member_status}} || 0,
         memberTrial: {{.T.member_trial}} || false
-
     }
     // 修改底部横幅广告
-    if (pageUserInfo.memberTrial || pageUserInfo.memberStatus > 0) {
+    if (pageUserInfo.memberTrial) {
         $(".footer-banner .w1200 img").attr('src', '/big-member/image/new_index/banner-buy.png')
         $(".footer-banner .w1200 map area[data-free-week]").remove()
+
+    }
+    if (pageUserInfo.memberStatus > 0) {
+      $('.footer-banner').hide()
+      $("*[data-go-buy]").text('立即使用')
+      $('.click-button-box.free').hide()
     }
     var canBindPhone = false
     // 此时无法获取绑定状态和登陆状态,只能同步请求已保证跳转判断正常运行
@@ -944,6 +949,8 @@
         } catch (e) {
             console.log('获取状态失败: ', e)
         }
+    }).fail(function () {
+      canBindPhone = true
     })
     /* 数字动画 */
     function filpNumber () {
@@ -1009,9 +1016,11 @@
         try {
             var injectLogic = logic
             logic = function (data, num) {
-                if (data.result === 'ok' && window.waitGoBuy) {
+                if (data.result === 'ok') {
+                  if (window.waitGoBuy) {
                     sessionStorage.setItem('pc_big_buy_type', window.waitGoBuy)
-                    location.reload()
+                  }
+                  location.reload()
                 }
                 injectLogic(data, num)
             }
@@ -1134,7 +1143,7 @@
             sessionStorage.removeItem('pc_big_buy_redirect')
             if (pageUserInfo.memberStatus > 0) {
                 // 购买过
-                location.href = '/big/page/open_app'
+                location.href = '/swordfish/page_big_pc'
             } else {
                 var buy_commit_href ='/big/pc/page/buy_commit';
                 if(source!=null&&source!=undefined){

+ 2 - 0
src/web/templates/common/pcbottom.html

@@ -462,6 +462,8 @@
                     ajaxUserInfo[v] = r[v]
                 }
             })
+            // 存储userId 大会员中标预测历史记录要用到
+            localStorage.setItem('BIGMEMBER_PC', r.userId)
         }
         setConfig()
     }).fail(function () {

+ 130 - 0
src/web/templates/frontRouter/pc/page_big_pc/sess/index.html

@@ -0,0 +1,130 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <title>大会员_剑鱼标讯,全行业招标信息智能推送领导者</title>
+    <meta content="IE=edge,Chrome=1" http-equiv="X-UA-Compatible"/>
+    <meta content="招标订阅,招标项目,中标项目,招标信息,剑鱼标讯" name="Keywords"/>
+    <meta content="使用剑鱼标讯,可以精准匹配招标信息,只需要微信关注剑鱼标讯公众号,然后自行设定所关注的招标关键词和地区,满足订阅需求的招标信息就会在两个小时内自动推送。" name="Description"/>
+    <meta content="webkit" name="renderer">
+    <meta content="telephone=no" name="format-detection"/>
+    <meta content="大会员" theme="light" name="enable-header">
+    {{include "/common/pnc.html"}}
+    <link href='{{Msg "seo" "cdn"}}/css/reset.css?v={{Msg "seo" "version"}}' rel="stylesheet" type="text/css"/>
+    <link href='{{Msg "seo" "cdn"}}/pccss/reset_pc.css' rel="stylesheet" type="text/css"/>
+    <link href='{{Msg "seo" "cdn"}}/css/pc.css?v={{Msg "seo" "version"}}' rel="stylesheet"/>
+    <link href='{{Msg "seo" "cdn"}}/pccss/public-nav-1200.css?v={{Msg "seo" "version"}}' rel="stylesheet" type="text/css"/>
+    <!-- S-注入  -->
+    <meta name="importmap-type" content="systemjs-importmap">
+    <script>
+      if (String.prototype.startsWith === 'undefined') {
+        String.prototype.startsWith = function (str) {
+          if(str==null||str==""||this.length==0||str.length>this.length)
+            return false;
+          if(this.substr(0,str.length)==str)
+            return true;
+          else
+            return false;
+        }
+      }
+      if (typeof Promise === 'undefined')
+        document.write('<script src="https://cdn.jsdelivr.net/npm/bluebird@3.7.2/js/browser/bluebird.core.min.js"><\/script>');
+      if (typeof fetch === 'undefined')
+        document.write('<script src="https://cdn.jsdelivr.net/npm/whatwg-fetch@3.4.1/dist/fetch.umd.min.js"><\/script>');
+    </script>
+    <script type="systemjs-importmap" crossorigin="anonymous">
+      {
+        "imports": {
+          "app": "/page_big_pc/js/app.js?v={{Msg "seo" "version"}}",
+          "single-spa": "https://cdn.jsdelivr.net/npm/single-spa@4.3.7/lib/system/single-spa.min.js",
+          "vue": "https://cdn-common.jianyu360.cn/cdn/lib/vue/2.6.11/vue.min.js",
+          "vue-router": "https://cdn-common.jianyu360.cn/cdn/lib/vue-router/3.1.5/vue-router.min.js",
+          "vuex": "https://cdn-common.jianyu360.cn/cdn/lib/vuex/3.4.0/vuex.min.js",
+          "axios": "https://cdn-common.jianyu360.cn/cdn/lib/axios/0.19.2/axios.min.js",
+          "echarts": "https://cdn.jsdelivr.net/npm/echarts@4.8.0/dist/echarts.min.js",
+          "lodash": "https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js",
+          "moment": "https://cdn.jsdelivr.net/npm/moment@2.29.1/moment.min.js"
+        }
+      }
+    </script>
+    <!-- S 预加载一些库资源 -->
+    <link rel="preload" href="//cdn.jsdelivr.net/npm/single-spa@4.3.7/lib/system/single-spa.min.js" as="script" crossorigin="anonymous" />
+    <link rel="preload" href="//cdn-common.jianyu360.cn/cdn/lib/vue/2.6.11/vue.min.js" as="script" crossorigin="anonymous" />
+    <link rel="preload" href="//cdn-common.jianyu360.cn/cdn/lib/axios/0.19.2/axios.min.js" as="script" crossorigin="anonymous" />
+    <link rel="preload" href="//cdn.jsdelivr.net/npm/echarts@4.8.0/dist/echarts.min.js" as="script" crossorigin="anonymous" />
+    <link rel="preload" href="//cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js" as="script" crossorigin="anonymous" />
+    <link rel="preload" href="//cdn.jsdelivr.net/npm/moment@2.29.1/moment.min.js" as="script" crossorigin="anonymous" />
+     <!-- E 预加载库资源 -->
+     <!-- S 注入 -->
+    <script src="https://cdn.jsdelivr.net/npm/import-map-overrides@2.2.0/dist/import-map-overrides.js"></script>
+    <script src="https://cdn.jsdelivr.net/npm/systemjs@6.8.3/dist/system.min.js"></script>
+    <script src="https://cdn.jsdelivr.net/npm/systemjs@6.8.3/dist/extras/amd.min.js"></script>
+    <script src="https://cdn.jsdelivr.net/npm/systemjs@6.8.3/dist/extras/named-exports.js"></script>
+    <script src="https://cdn.jsdelivr.net/npm/systemjs@6.8.3/dist/extras/named-register.min.js"></script>
+    <script src="https://cdn.jsdelivr.net/npm/systemjs@6.8.3/dist/extras/use-default.min.js"></script>
+    <!-- E-注入  -->
+    <style>
+        #public-nav {
+            border-bottom: 1px solid #e0e0e0;
+            background: #fff;
+        }
+        .page--docs--index .page-container {
+            min-height: calc(100vh - 364px);
+            padding-top: 77px;
+            box-sizing: border-box;
+        }
+    </style>
+</head>
+<body class="page--docs--index">
+{{include "/common/pchead.html"}}
+<!-- S-注入  -->
+<div class="w-box page-container">
+    <div id="single-spa-app"></div>
+</div>
+<!-- See https://github.com/joeldenning/import-map-overrides#user-interface  -->
+<import-map-overrides-full show-when-local-storage="overrides-ui"></import-map-overrides-full>
+<!-- E-注入  -->
+<script>
+  // 按需引入参考 https://github.com/systemjs/systemjs/blob/master/docs/errors.md#8
+  (function() {
+    Promise.all([
+      System.import('single-spa'),
+      System.import('vue'),
+      System.import('vue-router'),
+      System.import('vuex'),
+      System.import('axios'),
+      System.import('moment'),
+      System.import('lodash')
+    ]).then(function (modules) {
+      var singleSpa = modules[0];
+      var Vue = modules[1];
+      var VueRouter = modules[2];
+
+      Vue.use(VueRouter)
+
+      singleSpa.registerApplication(
+        'app',
+        function() {
+          return System.import('app')
+        },
+        function (location) {
+          return true
+        }
+      )
+
+      singleSpa.start();
+    })
+  })()
+</script>
+<script src='{{Msg "seo" "cdn"}}/js/jquery.cookie.js?v={{Msg "seo" "version"}}' type="text/javascript"></script>
+<script src='{{Msg "seo" "cdn"}}/js/public-nav.js?v={{Msg "seo" "version"}}' type="text/javascript"></script>
+<script>
+    $(function () {
+      haslogin({{.T.logid}});
+    })
+</script>
+<!--S-百度统计-->
+{{include "/common/pcbottom.html"}}
+{{include "/common/baiducc.html"}}
+<!--E-百度统计-->
+</body>
+</html>

+ 1 - 10
src/web/templates/order/pc/paySuccess.html

@@ -32,9 +32,7 @@
         <div class="c_top">
             <div class="c_t_status">
                 <img src="/order/image/pay_success.png" alt="">
-            {{if eq .T.orderType "member"}}
-                <p style="margin-top: 8px">支付成功,扫码下载剑鱼标讯APP即可使用</p>
-            {{else if eq .T.orderType "integral"}}
+            {{if eq .T.orderType "integral"}}
                 <p> 充值成功!</p>
                 <p id="point"><img src ="/order/image/jianyuIcon.png" alt="" style="width:24px !important;height:24px !important"><div class="point"></div></p>
             {{else}}
@@ -46,13 +44,6 @@
             {{else if eq .T.orderType "dataexport"}}
                 <p class="c_t_tips"> 我们会尽快将历史数据发送至{{.T.email}}邮箱,请稍后查阅。</p>
             {{end}}
-            {{if eq .T.orderType "member"}}
-            <p class="c_t_price" id="orderMoney"></p>
-            <div class="qrcode">
-              <img class="qrcodeImg" src="/front/downloadJyApp/qr?page=member_pc_order&source=pc_scan">
-              <div class="download">扫码下载剑鱼标讯APP</div>
-            </div>
-            {{end}}
         </div>
         <div class="c_bottom">
             <p class="order_item">

+ 117 - 31
src/web/templates/pc/biddetail_bd.html

@@ -184,47 +184,133 @@ $(function(){
 		<script>
 			{{$s:=(Ad "jy-pccontent-right" -1)}}
 			var ADList={{$s}};
-			if(ADList){
-				var random=Math.floor(Math.random()*ADList.length);
-				var AD=ADList[random];
-				var ADHtml = "";
-				if(AD.s_pic!=undefined&&AD.s_pic){
-					if(AD.s_link){
-						ADHtml += "<a dataHref='"+AD.s_link+"' target='_blank'>";
-					}
-					ADHtml += "<img id='pc-article-content-right' src='"+AD.s_pic+"'>";
-					if(AD.s_link){
-						ADHtml += "</a>";
-					}
-				}else {
-					ADHtml += AD.s_script;
-				}
-				$("#B1").html(ADHtml);
-			}
+      var ExcludeList = ""
+      if (ADList.length>0){
+        for (var i=0;i<ADList.length;i++ ){
+          if (ExcludeList!=""&&ExcludeList.split("-").length==ADList.length){
+            break;
+          }
+          var random=Math.floor(Math.random()*ADList.length);
+          if (ExcludeList.indexOf(random)>-1){
+            continue;
+          }
+          var AD=ADList[random];
+          if (AD.o_extend != undefined) {
+            var nowTime = new Date().getTime();
+            if (AD.o_extend.startTime!=undefined){
+              var stArr = AD.o_extend.startTime.split("-");
+              if (stArr.length==6){
+                var stStr = stArr[0]+"-"+stArr[1]+"-"+stArr[2]+" "+stArr[3]+":"+stArr[4]+":"+stArr[5]
+                var stTime = new Date(stStr).getTime();
+                //未开始
+                if (stTime>nowTime){
+                  if (ExcludeList!=""){
+                    ExcludeList +="-"
+                  }
+                  ExcludeList = ExcludeList+ random 
+                  continue
+                }
+              }
+            }
+            if (AD.o_extend.endTime!=undefined){
+              var etArr = AD.o_extend.endTime.split("-");
+              if (etArr.length==6){
+                var etStr = etArr[0]+"-"+etArr[1]+"-"+etArr[2]+" "+etArr[3]+":"+etArr[4]+":"+etArr[5]
+                var etTime = new Date(etStr).getTime();
+                //已结束
+                if (etTime<nowTime){
+                  if (ExcludeList!=""){
+                    ExcludeList +="-"
+                  }
+                  ExcludeList = ExcludeList+ random 
+                  continue
+                }
+              }
+            }
+          }
+          var ADHtml = "";
+          if(AD.s_pic){
+              if(AD.s_link){
+                  ADHtml += "<a dataHref='"+AD.s_link+"' target='_blank'>";
+              }
+              ADHtml += "<img id='pc-article-content-right' src='"+AD.s_pic+"'>";
+              if(AD.s_link){
+                  ADHtml += "</a>";
+              }
+          }else {
+              ADHtml += AD.s_script;
+          }
+          $("#B1").html(ADHtml);
+          break;
+        }
+      }
 		</script>
 	</div>
 </div>
 <div  onclick="adv_statistics(this)" adv_name="PC快照页-底部"  class="adv-pccontent-bottom" id="B2" style="cursor:default;">
 	<script>
 		{{$s:=(Ad "jy-pccontent-bottom" -1)}}
-		var ADList={{$s}};
-        if(ADList){
-			var random=Math.floor(Math.random()*ADList.length);
-            var AD=ADList[random];
-            var ADHtml = "";
-            if(AD.s_pic!=undefined&&AD.s_pic){
-                if(AD.s_link){
-                    ADHtml += "<a dataHref='"+AD.s_link+"' target='_blank'>";
+		var ADList={{$s}}; 
+    var ExcludeList = ""
+    if (ADList.length>0){
+      for (var i=0;i<ADList.length;i++ ){
+        if (ExcludeList!=""&&ExcludeList.split("-").length==ADList.length){
+          break;
+        }
+        var random=Math.floor(Math.random()*ADList.length);
+        if (ExcludeList.indexOf(random)>-1){
+          continue;
+        }
+        var AD=ADList[random];
+        if (AD.o_extend != undefined) {
+          var nowTime = new Date().getTime();
+          if (AD.o_extend.startTime!=undefined){
+            var stArr = AD.o_extend.startTime.split("-");
+            if (stArr.length==6){
+              var stStr = stArr[0]+"-"+stArr[1]+"-"+stArr[2]+" "+stArr[3]+":"+stArr[4]+":"+stArr[5]
+              var stTime = new Date(stStr).getTime();
+              //未开始
+              if (stTime>nowTime){
+                if (ExcludeList!=""){
+                  ExcludeList +="-"
                 }
-                ADHtml += "<img id='pc-article-content-bottom' src='"+AD.s_pic+"'>";
-                if(AD.s_link){
-                    ADHtml += "</a>";
+                ExcludeList = ExcludeList+ random 
+                continue
+              }
+            }
+          }
+          if (AD.o_extend.endTime!=undefined){
+            var etArr = AD.o_extend.endTime.split("-");
+            if (etArr.length==6){
+              var etStr = etArr[0]+"-"+etArr[1]+"-"+etArr[2]+" "+etArr[3]+":"+etArr[4]+":"+etArr[5]
+              var etTime = new Date(etStr).getTime();
+              //已结束
+              if (etTime<nowTime){
+                if (ExcludeList!=""){
+                  ExcludeList +="-"
                 }
-            }else {
-                ADHtml += AD.s_script;
+                ExcludeList = ExcludeList+ random 
+                continue
+              }
+            }
+          }
+        }
+        var ADHtml = "";
+        if(AD.s_pic){
+            if(AD.s_link){
+                ADHtml += "<a dataHref='"+AD.s_link+"' target='_blank'>";
+            }
+            ADHtml += "<img id='pc-article-content-bottom' src='"+AD.s_pic+"'>";
+            if(AD.s_link){
+                ADHtml += "</a>";
             }
-            $("#B2").html(ADHtml);
+        }else {
+            ADHtml += AD.s_script;
         }
+        $("#B2").html(ADHtml);
+        break;
+      }
+    }
 	</script>
 </div>
 </div>

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 2 - 0
src/web/templates/pc/biddetail_rec.html


+ 27 - 1
src/web/templates/pc/index.html

@@ -280,7 +280,8 @@ var adv_background_opacity = 0.6;
 {{if $s}}
 var ADList={{$s}}
 if (ADList.length>0){
-	  var AD=ADList[0]
+  for (var i=0;i<ADList.length;i++ ){
+	  var AD=ADList[i]
 		if(AD.s_link){
       adv_url = AD.s_link
     }
@@ -288,6 +289,29 @@ if (ADList.length>0){
       adv_img = AD.s_pic+"?v="+ new Date().getTime()
     }
     if (AD.o_extend != undefined) {
+      var nowTime = new Date().getTime();
+      if (AD.o_extend.startTime!=undefined){
+        var stArr = AD.o_extend.startTime.split("-");
+        if (stArr.length==6){
+          var stStr = stArr[0]+"-"+stArr[1]+"-"+stArr[2]+" "+stArr[3]+":"+stArr[4]+":"+stArr[5]
+          var stTime = new Date(stStr).getTime();
+          //未开始
+          if (stTime>nowTime){
+            continue
+          }
+        }
+      }
+      if (AD.o_extend.endTime!=undefined){
+        var etArr = AD.o_extend.endTime.split("-");
+        if (etArr.length==6){
+          var etStr = etArr[0]+"-"+etArr[1]+"-"+etArr[2]+" "+etArr[3]+":"+etArr[4]+":"+etArr[5]
+          var etTime = new Date(etStr).getTime();
+          //已结束
+          if (etTime<nowTime){
+            continue
+          }
+        }
+      }
       if (AD.o_extend.width!=undefined){
         adv_width = AD.o_extend.width;
         adv_margin_left = parseInt(adv_width)/2;
@@ -305,8 +329,10 @@ if (ADList.length>0){
       $("#pc-index-alert").removeClass("pc_tc").addClass("pc_tc_master").css({"margin-top":"-"+adv_margin_top+"px","margin-left":"-"+adv_margin_left+"px"});
       $("#index_tc").removeClass("tc").addClass("tc_master").css({"width":adv_width+"px","height":adv_height+"px","background":"url('"+adv_img+"')","background-size":"cover"}).attr("dataurl",adv_url);
       $(".tans").css({"opacity":adv_background_opacity});//遮罩层透明度
+      break;
     }
   }
+}
 {{end}}
 
 var showDay = localStorage.tc;

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác