detailStruct.go 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. package service
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/gogf/gf/v2/frame/g"
  6. "github.com/gogf/gf/v2/util/gconv"
  7. "jybxseo/utility"
  8. "math/rand"
  9. "strings"
  10. "time"
  11. )
  12. var (
  13. JyBxSeoDetailRoot *DetailRoot = &DetailRoot{}
  14. DetailNeedMosaic map[string]interface{}
  15. PreviewClassTemplate = map[string]string{}
  16. BidTemplate = map[string]string{}
  17. WinBidTemplate = map[string]string{}
  18. CreditBidTemplate = map[string]string{}
  19. BottomDescribe string
  20. )
  21. type (
  22. DetailRoot struct{}
  23. )
  24. // GetDetail 根据seoId查询标讯详情
  25. // seoId 标讯seoId标识
  26. // isLogin 是否登录,未登录内容加密
  27. func (dRoot *DetailRoot) GetDetail(ctx context.Context, seoId string, isLogin bool) map[string]interface{} {
  28. res, err := g.DB().GetOne(ctx, fmt.Sprintf(`SELECT col.bid_id FROM jyseo.column_bidList col WHERE col.seo_id = '%s'`, seoId))
  29. if err != nil || res.IsEmpty() {
  30. return nil
  31. }
  32. data, ok := utility.BiddingMgo.FindById("bidding", gconv.String(res["bid_id"]), nil)
  33. if ok && data != nil && len(*data) > 0 {
  34. obj := *data
  35. if !isLogin {
  36. obj = Filter(obj)
  37. }
  38. obj["abstract"] = GetAbstractInfo(obj)
  39. obj["time"] = time.Unix(gconv.Int64(obj["publishtime"]), 0).Format(time.DateTime)
  40. obj["bottomAbstract"] = fmt.Sprintf(g.Cfg("global").MustGet(context.Background(), "bottomDescribe").String(), "子站名称")
  41. return obj
  42. }
  43. return nil
  44. }
  45. // 未登录用户进行数据过滤 name 配置文件
  46. func Filter(obj map[string]interface{}) map[string]interface{} {
  47. detail := fmt.Sprint(obj["detail"])
  48. mosaicText := fmt.Sprintf(`<span style="color:#2ABED1;">%s</span>`, g.Cfg("global").MustGet(context.Background(), "detailMosaic").String())
  49. detailText := fmt.Sprintf(`<span class="noLoginMosaic" style="color: #2ABED1;">%s</span>`, g.Cfg("global").MustGet(context.Background(), "detailMosaic").String())
  50. if DetailNeedMosaic == nil {
  51. DetailNeedMosaic = g.Cfg("global").MustGet(context.Background(), "detailNeedMosaic").Map()
  52. }
  53. for dk, dv := range DetailNeedMosaic {
  54. if !dv.(bool) {
  55. continue
  56. }
  57. if obj["package"] != nil {
  58. pk := gconv.Map(obj["package"])
  59. for _, pv := range pk {
  60. if pv != nil {
  61. if page := gconv.Map(pv); page != nil {
  62. if page[dk] != nil {
  63. page[dk] = mosaicText
  64. }
  65. delete(page, "text")
  66. }
  67. }
  68. }
  69. }
  70. //if util.ObjToString(obj[dk]) != "" {
  71. // detail = strings.ReplaceAll(detail, util.ObjToString(obj[dk]), detailText)
  72. //}
  73. if gconv.String(obj[dk]) != "" {
  74. value, b := obj[dk].(float64)
  75. if b {
  76. replaceStr := fmt.Sprintf("%v", int64(value))
  77. detail = strings.ReplaceAll(detail, replaceStr, detailText)
  78. } else {
  79. detail = strings.ReplaceAll(detail, gconv.String(obj[dk]), detailText)
  80. }
  81. }
  82. //中标企业信息
  83. if dk == "winnerMap" {
  84. winnerNewMap := map[string]interface{}{}
  85. if obj[dk] != nil {
  86. winnerMap := gconv.Map(obj[dk])
  87. for _, wv := range winnerMap {
  88. winnerNewMap[mosaicText] = wv
  89. }
  90. }
  91. obj[dk] = winnerNewMap
  92. } else {
  93. obj[dk] = mosaicText
  94. }
  95. }
  96. obj["detail"] = detail
  97. return obj
  98. }
  99. // GetAbstractInfo 获取摘要
  100. func GetAbstractInfo(obj map[string]interface{}) string {
  101. date := gconv.Int64(obj["publishtime"])
  102. if date == 0 {
  103. date = gconv.Int64(obj["comeintime"])
  104. }
  105. dateStr := time.Unix(gconv.Int64(obj["publishtime"]), 0).Format("2006年01月02日")
  106. var abs = ""
  107. topType := gconv.String(obj["toptype"])
  108. switch topType {
  109. case "招标":
  110. BidTemplate = g.Cfg("global").MustGet(context.Background(), "bidTemplate").MapStrStr()
  111. subType := gconv.String(obj["subType"])
  112. if subType == "变更" || subType == "单一" || subType == "邀标" {
  113. if gconv.String(obj["buyer"]) != "" && gconv.String(obj["title"]) != "" {
  114. abs = fmt.Sprintf(BidTemplate["tmp4"], date, gconv.String(obj["buyer"]), gconv.String(obj["title"]), "分站名称")
  115. }
  116. }
  117. if subType != "变更" && subType != "单一" && subType != "邀标" && gconv.String(obj["agency"]) != "" {
  118. if gconv.String(obj["buyer"]) != "" && gconv.String(obj["subtype"]) != "" && gconv.String(obj["title"]) != "" {
  119. r := rand.New(rand.NewSource(time.Now().UnixNano()))
  120. number := r.Intn(2) + 2
  121. if number == 2 {
  122. abs = fmt.Sprintf(BidTemplate["tmp2"], dateStr, gconv.String(obj["buyer"]), gconv.String(obj["title"]))
  123. } else {
  124. abs = fmt.Sprintf(BidTemplate["tmp3"], dateStr, gconv.String(obj["buyer"]), gconv.String(obj["subtype"]), gconv.String(obj["title"]))
  125. }
  126. }
  127. }
  128. case "结果":
  129. WinBidTemplate = g.Cfg("global").MustGet(context.Background(), "winBidTemplate").MapStrStr()
  130. subType := gconv.String(obj["subtype"])
  131. if subType == "中标" || subType == "成交" {
  132. if gconv.String(obj["agency"]) != "" {
  133. if gconv.String(obj["title"]) != "" && gconv.String(obj["winner"]) != "" {
  134. abs = fmt.Sprintf(WinBidTemplate["tmp3"], gconv.String(obj["agency"]), gconv.String(obj["buyer"]), gconv.String(obj["title"]), dateStr, gconv.String(obj["s_winner"]), "分站名称", gconv.String(obj["subtype"]))
  135. }
  136. } else {
  137. if gconv.String(obj["buyer"]) != "" && gconv.String(obj["title"]) != "" && gconv.String(obj["s_winner"]) != "" {
  138. r := rand.New(rand.NewSource(time.Now().UnixNano()))
  139. number := r.Intn(2) + 1
  140. if number == 1 {
  141. winner := strings.Join(strings.Split(gconv.String(obj["s_winner"]), ","), "、")
  142. abs = fmt.Sprintf(WinBidTemplate["tmp1"], "分站名称", dateStr, gconv.String(obj["title"]), winner)
  143. } else {
  144. abs = fmt.Sprintf(WinBidTemplate["tmp2"], dateStr, gconv.String(obj["buyer"]), gconv.String(obj["title"]), gconv.String(obj["s_winner"]))
  145. }
  146. }
  147. }
  148. }
  149. if subType == "流标" || subType == "废标" || subType == "结果变更" {
  150. abs = fmt.Sprintf(gconv.String(WinBidTemplate["tmp4"]), dateStr, gconv.String(obj["buyer"]), gconv.String(obj["subtype"]), gconv.String(obj["title"]), "分站名称")
  151. }
  152. case "预告":
  153. PreviewClassTemplate = g.Cfg("global").MustGet(context.Background(), "previewClassTemplate").MapStrStr()
  154. if gconv.String(obj["agency"]) != "" {
  155. if gconv.String(obj["buyer"]) != "" && gconv.String(obj["subtype"]) != "" && gconv.String(obj["title"]) != "" {
  156. abs = fmt.Sprintf(PreviewClassTemplate["tmp1"], gconv.String(obj["buyer"]), dateStr, gconv.String(obj["agency"]), gconv.String(obj["subtype"]), gconv.String(obj["title"]), "分站名称")
  157. }
  158. } else {
  159. if gconv.String(obj["buyer"]) != "" && gconv.String(obj["subtype"]) != "" && gconv.String(obj["title"]) != "" {
  160. r := rand.New(rand.NewSource(time.Now().UnixNano()))
  161. number := r.Intn(2) + 2
  162. if number == 2 {
  163. abs = fmt.Sprintf(PreviewClassTemplate["tmp2"], dateStr, gconv.String(obj["buyer"]), gconv.String(obj["title"]))
  164. } else {
  165. abs = fmt.Sprintf(PreviewClassTemplate["tmp3"], dateStr, gconv.String(obj["buyer"]), gconv.String(obj["subtype"]), gconv.String(obj["title"]))
  166. }
  167. }
  168. }
  169. case "其他":
  170. CreditBidTemplate = g.Cfg("global").MustGet(context.Background(), "creditBidTemplate").MapStrStr()
  171. subType := gconv.String(obj["subtype"])
  172. if subType == "合同" || subType == "验收" {
  173. if gconv.String(obj["buyer"]) != "" && gconv.String(obj["title"]) != "" && gconv.String(obj["subtype"]) != "" && gconv.String(obj["s_winner"]) != "" {
  174. r := rand.New(rand.NewSource(time.Now().UnixNano()))
  175. number := r.Intn(2) + 1
  176. if number == 1 {
  177. abs = fmt.Sprintf(CreditBidTemplate["tmp1"], dateStr, gconv.String(obj["buyer"]), gconv.String(obj["title"]), gconv.String(obj["subtype"]), gconv.String(obj["s_winner"]), "分站名称")
  178. } else {
  179. abs = fmt.Sprintf(CreditBidTemplate["tmp2"], dateStr, gconv.String(obj["buyer"]), gconv.String(obj["subtype"]), gconv.String(obj["title"]), gconv.String(obj["s_winner"]))
  180. }
  181. }
  182. } else if subType == "违规" {
  183. abs = fmt.Sprintf(CreditBidTemplate["tmp2"], dateStr, gconv.String(obj["title"]))
  184. }
  185. }
  186. return abs
  187. }