123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 |
- package front
- import (
- qu "app.yhyue.com/moapp/jybase/common"
- "app.yhyue.com/moapp/jybase/encrypt"
- "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"
- "jy/src/jfw/config"
- "jy/src/jfw/jyutil"
- "jy/src/jfw/paging"
- "log"
- "math"
- "math/rand"
- "sync"
- "time"
- )
- type KeyType struct {
- Name string `json:"name"`
- Url string `json:"url"`
- }
- // RegionAndInformationAndTender 1地域 2信息类型 3热门招标
- func RegionAndInformationAndTender() map[string]interface{} {
- if bytes, err := redis.GetBytes(RedisNameNew, "regionAndInformationAndTender"); err == nil && bytes != nil {
- rData := map[string]interface{}{}
- log.Println()
- if err := json.Unmarshal(*bytes, &rData); err != nil {
- log.Printf("[MANAGER-ERR]RegionAndInformationAndTender GetData Error %v \n", err)
- return nil
- }
- return rData
- }
- data := make(map[string]interface{})
- for _, v := range []int{1, 2, 3} {
- data[fmt.Sprintf("labUrl_%d", v)] = GetLabUrl(v) //1地域 2信息类型 3热门招标
- }
- if bytes, err := json.Marshal(data); err == nil && bytes != nil {
- _ = redis.PutBytes(RedisNameNew, "regionAndInformationAndTender", &bytes, 2*60*60)
- }
- return data
- }
- // HotSubjectMatter 热门标的物
- func HotSubjectMatter() []map[string]interface{} {
- checkedLetter := LetterArr[getRandomWithAll(0, len(LetterArr))]
- industryHref := fmt.Sprintf("/tags/industry/%s_%s_all_%s.html", "%v", "all", "%v")
- letterLabel, _, _ := GetLetterPaging(1, checkedLetter) //热门标的物 随机字母标签
- tradeLabel := GetIndustry(industryHref) //热门标的物 行业分类标签
- letterLabel = append(letterLabel, tradeLabel...)
- var subjectMatter []map[string]interface{}
- if len(letterLabel) > 0 {
- for _, v := range jyutil.GenerateRandomNumber(0, len(letterLabel)-1, 200) {
- subjectMatter = append(subjectMatter, letterLabel[v])
- }
- }
- return subjectMatter
- }
- // ContentRecommendation 实用内容推荐
- func ContentRecommendation() []map[KeyType][]KeyType {
- if bytes, err := redis.GetBytes(RedisNameNew, "contentRecommendation"); err == nil && bytes != nil {
- var rData []map[KeyType][]KeyType
- log.Println()
- if err := json.Unmarshal(*bytes, &rData); err != nil {
- log.Printf("[MANAGER-ERR]contentRecommendation GetData Error %v \n", err)
- return nil
- }
- return rData
- }
- columnCode, _ := config.Sysconfig["columnCode"].(map[string]interface{})
- jySchoolCode := qu.InterfaceToStr(columnCode["招投标攻略"])
- industryInfoCode := qu.InterfaceToStr(columnCode["行业资讯"])
- industryInfoUrl, _ := config.Sysconfig["industryInfoUrl"].(map[string]interface{})
- jySchoolUrl, _ := config.Sysconfig["jySchoolUrl"].(map[string]interface{})
- column, ok := mongodb.Find("column", map[string]interface{}{"$or": []map[string]interface{}{
- {"pid": "ztbgl"}, {"pid": "hyzx"}, {"pid": "bzzx"},
- }}, `{"i_order":1}`, "", false, -1, -1)
- dataMap := make(map[KeyType][]KeyType)
- if ok && column != nil && len(*column) > 0 {
- for _, v := range *column {
- pid := qu.InterfaceToStr(v["pid"])
- code := qu.InterfaceToStr(v["s_columncode"])
- var v1, v2 KeyType
- v1.Name = qu.InterfaceToStr(v["s_columnname"])
- if pid == jySchoolCode {
- v2.Name = "招投标攻略"
- v2.Url = qu.InterfaceToStr(jySchoolUrl["homeUrl"])
- v1.Url = fmt.Sprintf(qu.InterfaceToStr(jySchoolUrl["towUrl"]), code)
- } else if pid == industryInfoCode {
- v2.Name = "行业资讯"
- v2.Url = qu.InterfaceToStr(industryInfoUrl["homeUrl"])
- v1.Url = fmt.Sprintf(qu.InterfaceToStr(industryInfoUrl["towUrl"]), code)
- } else if pid == industryInfoCode {
- v2.Name = "帮助中心"
- v2.Url = "/helpCenter/index"
- v1.Url = fmt.Sprintf("/helpCenter/catalog/%s", code)
- }
- dataMap[v2] = append(dataMap[v2], v1)
- }
- }
- dataArr := []KeyType{{Name: "招投标攻略", Url: qu.InterfaceToStr(jySchoolUrl["homeUrl"])},
- {"行业资讯", qu.InterfaceToStr(industryInfoUrl["homeUrl"])},
- {"帮助中心", "/helpCenter/index"}}
- var data []map[KeyType][]KeyType
- for _, v := range dataArr {
- if v1, ok1 := dataMap[v]; ok1 && v1 != nil {
- data = append(data, map[KeyType][]KeyType{v: dataMap[v]})
- }
- }
- if bytes, err := json.Marshal(data); err == nil && bytes != nil {
- _ = redis.PutBytes(RedisNameNew, "contentRecommendation", &bytes, 12*60*60)
- }
- return data
- }
- // 推荐标讯
- func RecommendationBeacon() map[string]interface{} {
- if bytes, err := redis.GetBytes(RedisNameNew, "recommendationBeacon"); err == nil && bytes != nil {
- rData := make(map[string]interface{})
- log.Println()
- if err := json.Unmarshal(*bytes, &rData); err != nil {
- log.Printf("[MANAGER-ERR]recommendationBeacon GetData Error %v \n", err)
- return nil
- }
- return rData
- }
- data := make(map[string]interface{})
- sy := sync.RWMutex{}
- wg := sync.WaitGroup{}
- for _, v := range []string{"招标预告,招标公告,招标结果,招标信用信息"} {
- wg.Add(1)
- go func(vst string) {
- defer wg.Done()
- var list []map[string]interface{}
- _, _, lists := bidsearch.GetPcBidSearchData("", "", "", "", vst, "", "", "", "", "", "", "", "", 1, false, nil, bidSearch_field_1, "", false, false, "", 8, "")
- if lists != nil {
- for _, v1 := range *lists {
- v1["_id"] = encrypt.CommonEncodeArticle("content", v1["_id"].(string))
- delete(v1, "toptype")
- delete(v1, "s_subscopeclass")
- tmpdate := v1["publishtime"]
- v1["publishtime"] = qu.Int64All(tmpdate.(float64))
- if v1["budget"] != nil {
- v1["budget"] = ConversionMoeny(v1["budget"])
- } else if v1["bidamount"] != nil {
- v1["budget"] = ConversionMoeny(v1["bidamount"])
- }
- }
- list = *lists
- }
- sy.Lock()
- data[v] = list
- sy.Unlock()
- }(v)
- }
- wg.Wait()
- if bytes, err := json.Marshal(data); err == nil && bytes != nil {
- _ = redis.PutBytes(RedisNameNew, "recommendationBeacon", &bytes, 5*60)
- }
- return data
- }
- // 不包含上限 [min, max)
- func getRandomWithAll(min, max int) int {
- rand.Seed(time.Now().UnixNano())
- return rand.Intn(max-min) + min
- }
- // this.T["letterList"],this.T["letterListCount"],this.T["pagingMap"]=this.GetLetterPaging(pageNum,checkedLetter)
- func GetLetterPaging(pageNum int, checkedLetter string) (letterList []map[string]interface{}, letterListCount int64, pagingMap map[string]interface{}) {
- seoLetterPageSize := qu.Int64All(config.Seoconfig["seoLetterPageSize"])
- if pageNum == 0 {
- pageNum = 1
- }
- letterList, letterListCount = GetLetterMap(seoLetterPageSize, int64(pageNum), checkedLetter)
- pagecount := int(math.Ceil(qu.Float64All(letterListCount) / float64(seoLetterPageSize)))
- paging := paging.PaggingHtml(pageNum, pagecount, fmt.Sprintf("/tags/letter/%s", checkedLetter)+"_%v.html")
- pagingMap = map[string]interface{}{
- "paging": paging,
- "pageNum": pageNum,
- "pageCount": pagecount,
- "pageSize": seoLetterPageSize,
- }
- return
- }
- func GetLetterMap(pageSize, pageNum int64, letter string) ([]map[string]interface{}, int64) {
- m := []map[string]interface{}{}
- sql := `select id,name,letter from seo_words.seo_resource where letter = ? order by id desc`
- cql := `select count(1) from seo_words.seo_resource where letter = ?`
- offset := (pageNum - 1) * pageSize
- sql += fmt.Sprintf(" limit %v,%v", offset, pageSize)
- data := public.BaseMysql.SelectBySql(sql, letter)
- count := public.BaseMysql.CountBySql(cql, letter)
- if data != nil {
- for _, v := range *data {
- letter := qu.ObjToString(v["letter"])
- id := qu.Int64All(v["id"])
- name := qu.ObjToString(v["name"])
- name += qu.ObjToString(config.Seoconfig["seoKeywordSuffix"])
- m = append(m, map[string]interface{}{
- "name": name,
- "url": fmt.Sprintf("/tags/letter/all_all_all_%v_%v.html", letter, id),
- })
- }
- }
- return m, count
- }
- func GetIndustry(industryHref string) []map[string]interface{} {
- data := public.BaseMysql.SelectBySql(`select a.id,a.name,b.id class_id,b.name class_1 from seo_words.seo_industry a left join seo_words.seo_industry_class b on a.class_1=b.name order by a.class_1`)
- industryArr := []string{}
- industryMap := map[string][]map[string]interface{}{}
- if len(*data) > 0 && data != nil {
- for _, v := range *data {
- class := qu.ObjToString(v["class_1"])
- name := qu.ObjToString(v["name"])
- id := qu.Int64All(v["id"])
- industryId := qu.Int64All(v["class_id"])
- if !IsInArr(industryArr, class) {
- industryArr = append(industryArr, class)
- }
- industryMap[class] = append(industryMap[class], map[string]interface{}{
- "name": name + qu.ObjToString(config.Seoconfig["seoKeywordSuffix"]),
- // "url": fmt.Sprintf("/tags/industry/%v_all_all_%v.html", industryId, id),
- "url": fmt.Sprintf(industryHref, industryId, id),
- })
- }
- }
- m := []map[string]interface{}{}
- //
- for _, v := range industryArr {
- m = append(m, industryMap[v]...)
- }
- return m
- }
|