classificationTag.go 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. package front
  2. import (
  3. qu "app.yhyue.com/moapp/jybase/common"
  4. "app.yhyue.com/moapp/jybase/encrypt"
  5. "app.yhyue.com/moapp/jybase/redis"
  6. "app.yhyue.com/moapp/jypkg/common/src/qfw/util/bidsearch"
  7. "app.yhyue.com/moapp/jypkg/public"
  8. "encoding/json"
  9. "fmt"
  10. "jy/src/jfw/config"
  11. "jy/src/jfw/jyutil"
  12. "jy/src/jfw/paging"
  13. "log"
  14. "math"
  15. "math/rand"
  16. "sync"
  17. "time"
  18. )
  19. type KeyType struct {
  20. Name string `json:"name"`
  21. Url string `json:"url"`
  22. }
  23. // RegionAndInformationAndTender 1地域 2信息类型 3热门招标
  24. func RegionAndInformationAndTender() map[string]interface{} {
  25. if bytes, err := redis.GetBytes(RedisNameNew, "regionAndInformationAndTender"); err == nil && bytes != nil {
  26. rData := map[string]interface{}{}
  27. log.Println()
  28. if err := json.Unmarshal(*bytes, &rData); err != nil {
  29. log.Printf("[MANAGER-ERR]RegionAndInformationAndTender GetData Error %v \n", err)
  30. return nil
  31. }
  32. return rData
  33. }
  34. data := make(map[string]interface{})
  35. for _, v := range []int{1, 2, 3} {
  36. data[fmt.Sprintf("labUrl_%d", v)] = GetLabUrl(v) //1地域 2信息类型 3热门招标
  37. }
  38. if bytes, err := json.Marshal(data); err == nil && bytes != nil {
  39. _ = redis.PutBytes(RedisNameNew, "regionAndInformationAndTender", &bytes, 2*60*60)
  40. }
  41. return data
  42. }
  43. // HotSubjectMatter 热门标的物
  44. func HotSubjectMatter() []map[string]interface{} {
  45. checkedLetter := LetterArr[getRandomWithAll(0, len(LetterArr))]
  46. industryHref := fmt.Sprintf("/tags/industry/%s_%s_all_%s.html", "%v", "all", "%v")
  47. letterLabel, _, _ := GetLetterPaging(1, checkedLetter) //热门标的物 随机字母标签
  48. tradeLabel := GetIndustry(industryHref) //热门标的物 行业分类标签
  49. letterLabel = append(letterLabel, tradeLabel...)
  50. var subjectMatter []map[string]interface{}
  51. if len(letterLabel) > 0 {
  52. for _, v := range jyutil.GenerateRandomNumber(0, len(letterLabel)-1, 200) {
  53. subjectMatter = append(subjectMatter, letterLabel[v])
  54. }
  55. }
  56. return subjectMatter
  57. }
  58. // ContentRecommendation 实用内容推荐
  59. func ContentRecommendation() []map[KeyType][]KeyType {
  60. if bytes, err := redis.GetBytes(RedisNameNew, "contentRecommendation"); err == nil && bytes != nil {
  61. var rData []map[KeyType][]KeyType
  62. log.Println()
  63. if err := json.Unmarshal(*bytes, &rData); err != nil {
  64. log.Printf("[MANAGER-ERR]contentRecommendation GetData Error %v \n", err)
  65. return nil
  66. }
  67. return rData
  68. }
  69. columnCode, _ := config.Sysconfig["columnCode"].(map[string]interface{})
  70. jySchoolCode := qu.InterfaceToStr(columnCode["招投标攻略"])
  71. industryInfoCode := qu.InterfaceToStr(columnCode["行业资讯"])
  72. industryInfoUrl, _ := config.Sysconfig["industryInfoUrl"].(map[string]interface{})
  73. jySchoolUrl, _ := config.Sysconfig["jySchoolUrl"].(map[string]interface{})
  74. column, ok := mongodb.Find("column", map[string]interface{}{"$or": []map[string]interface{}{
  75. {"pid": "ztbgl"}, {"pid": "hyzx"}, {"pid": "bzzx"},
  76. }}, `{"i_order":1}`, "", false, -1, -1)
  77. dataMap := make(map[KeyType][]KeyType)
  78. if ok && column != nil && len(*column) > 0 {
  79. for _, v := range *column {
  80. pid := qu.InterfaceToStr(v["pid"])
  81. code := qu.InterfaceToStr(v["s_columncode"])
  82. var v1, v2 KeyType
  83. v1.Name = qu.InterfaceToStr(v["s_columnname"])
  84. if pid == jySchoolCode {
  85. v2.Name = "招投标攻略"
  86. v2.Url = qu.InterfaceToStr(jySchoolUrl["homeUrl"])
  87. v1.Url = fmt.Sprintf(qu.InterfaceToStr(jySchoolUrl["towUrl"]), code)
  88. } else if pid == industryInfoCode {
  89. v2.Name = "行业资讯"
  90. v2.Url = qu.InterfaceToStr(industryInfoUrl["homeUrl"])
  91. v1.Url = fmt.Sprintf(qu.InterfaceToStr(industryInfoUrl["towUrl"]), code)
  92. } else if pid == industryInfoCode {
  93. v2.Name = "帮助中心"
  94. v2.Url = "/helpCenter/index"
  95. v1.Url = fmt.Sprintf("/helpCenter/catalog/%s", code)
  96. }
  97. dataMap[v2] = append(dataMap[v2], v1)
  98. }
  99. }
  100. dataArr := []KeyType{{Name: "招投标攻略", Url: qu.InterfaceToStr(jySchoolUrl["homeUrl"])},
  101. {"行业资讯", qu.InterfaceToStr(industryInfoUrl["homeUrl"])},
  102. {"帮助中心", "/helpCenter/index"}}
  103. var data []map[KeyType][]KeyType
  104. for _, v := range dataArr {
  105. if v1, ok1 := dataMap[v]; ok1 && v1 != nil {
  106. data = append(data, map[KeyType][]KeyType{v: dataMap[v]})
  107. }
  108. }
  109. if bytes, err := json.Marshal(data); err == nil && bytes != nil {
  110. _ = redis.PutBytes(RedisNameNew, "contentRecommendation", &bytes, 12*60*60)
  111. }
  112. return data
  113. }
  114. // 推荐标讯
  115. func RecommendationBeacon() map[string]interface{} {
  116. if bytes, err := redis.GetBytes(RedisNameNew, "recommendationBeacon"); err == nil && bytes != nil {
  117. rData := make(map[string]interface{})
  118. log.Println()
  119. if err := json.Unmarshal(*bytes, &rData); err != nil {
  120. log.Printf("[MANAGER-ERR]recommendationBeacon GetData Error %v \n", err)
  121. return nil
  122. }
  123. return rData
  124. }
  125. data := make(map[string]interface{})
  126. sy := sync.RWMutex{}
  127. wg := sync.WaitGroup{}
  128. for _, v := range []string{"招标预告,招标公告,招标结果,招标信用信息"} {
  129. wg.Add(1)
  130. go func(vst string) {
  131. defer wg.Done()
  132. var list []map[string]interface{}
  133. _, _, lists := bidsearch.GetPcBidSearchData("", "", "", "", vst, "", "", "", "", "", "", "", "", 1, false, nil, bidSearch_field_1, "", false, false, "", 8, "")
  134. if lists != nil {
  135. for _, v1 := range *lists {
  136. v1["_id"] = encrypt.CommonEncodeArticle("content", v1["_id"].(string))
  137. delete(v1, "toptype")
  138. delete(v1, "s_subscopeclass")
  139. tmpdate := v1["publishtime"]
  140. v1["publishtime"] = qu.Int64All(tmpdate.(float64))
  141. if v1["budget"] != nil {
  142. v1["budget"] = ConversionMoeny(v1["budget"])
  143. } else if v1["bidamount"] != nil {
  144. v1["budget"] = ConversionMoeny(v1["bidamount"])
  145. }
  146. }
  147. list = *lists
  148. }
  149. sy.Lock()
  150. data[v] = list
  151. sy.Unlock()
  152. }(v)
  153. }
  154. wg.Wait()
  155. if bytes, err := json.Marshal(data); err == nil && bytes != nil {
  156. _ = redis.PutBytes(RedisNameNew, "recommendationBeacon", &bytes, 5*60)
  157. }
  158. return data
  159. }
  160. // 不包含上限 [min, max)
  161. func getRandomWithAll(min, max int) int {
  162. rand.Seed(time.Now().UnixNano())
  163. return rand.Intn(max-min) + min
  164. }
  165. // this.T["letterList"],this.T["letterListCount"],this.T["pagingMap"]=this.GetLetterPaging(pageNum,checkedLetter)
  166. func GetLetterPaging(pageNum int, checkedLetter string) (letterList []map[string]interface{}, letterListCount int64, pagingMap map[string]interface{}) {
  167. seoLetterPageSize := qu.Int64All(config.Seoconfig["seoLetterPageSize"])
  168. if pageNum == 0 {
  169. pageNum = 1
  170. }
  171. letterList, letterListCount = GetLetterMap(seoLetterPageSize, int64(pageNum), checkedLetter)
  172. pagecount := int(math.Ceil(qu.Float64All(letterListCount) / float64(seoLetterPageSize)))
  173. paging := paging.PaggingHtml(pageNum, pagecount, fmt.Sprintf("/tags/letter/%s", checkedLetter)+"_%v.html")
  174. pagingMap = map[string]interface{}{
  175. "paging": paging,
  176. "pageNum": pageNum,
  177. "pageCount": pagecount,
  178. "pageSize": seoLetterPageSize,
  179. }
  180. return
  181. }
  182. func GetLetterMap(pageSize, pageNum int64, letter string) ([]map[string]interface{}, int64) {
  183. m := []map[string]interface{}{}
  184. sql := `select id,name,letter from seo_words.seo_resource where letter = ? order by id desc`
  185. cql := `select count(1) from seo_words.seo_resource where letter = ?`
  186. offset := (pageNum - 1) * pageSize
  187. sql += fmt.Sprintf(" limit %v,%v", offset, pageSize)
  188. data := public.BaseMysql.SelectBySql(sql, letter)
  189. count := public.BaseMysql.CountBySql(cql, letter)
  190. if data != nil {
  191. for _, v := range *data {
  192. letter := qu.ObjToString(v["letter"])
  193. id := qu.Int64All(v["id"])
  194. name := qu.ObjToString(v["name"])
  195. name += qu.ObjToString(config.Seoconfig["seoKeywordSuffix"])
  196. m = append(m, map[string]interface{}{
  197. "name": name,
  198. "url": fmt.Sprintf("/tags/letter/all_all_all_%v_%v.html", letter, id),
  199. })
  200. }
  201. }
  202. return m, count
  203. }
  204. func GetIndustry(industryHref string) []map[string]interface{} {
  205. 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`)
  206. industryArr := []string{}
  207. industryMap := map[string][]map[string]interface{}{}
  208. if len(*data) > 0 && data != nil {
  209. for _, v := range *data {
  210. class := qu.ObjToString(v["class_1"])
  211. name := qu.ObjToString(v["name"])
  212. id := qu.Int64All(v["id"])
  213. industryId := qu.Int64All(v["class_id"])
  214. if !IsInArr(industryArr, class) {
  215. industryArr = append(industryArr, class)
  216. }
  217. industryMap[class] = append(industryMap[class], map[string]interface{}{
  218. "name": name + qu.ObjToString(config.Seoconfig["seoKeywordSuffix"]),
  219. // "url": fmt.Sprintf("/tags/industry/%v_all_all_%v.html", industryId, id),
  220. "url": fmt.Sprintf(industryHref, industryId, id),
  221. })
  222. }
  223. }
  224. m := []map[string]interface{}{}
  225. //
  226. for _, v := range industryArr {
  227. m = append(m, industryMap[v]...)
  228. }
  229. return m
  230. }