123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- package service
- import (
- "context"
- "fmt"
- "github.com/gogf/gf/v2/frame/g"
- "github.com/gogf/gf/v2/util/gconv"
- "jybxseo/utility"
- "math/rand"
- "strings"
- "time"
- )
- var (
- JyBxSeoDetailRoot *DetailRoot = &DetailRoot{}
- DetailNeedMosaic map[string]interface{}
- PreviewClassTemplate = map[string]string{}
- BidTemplate = map[string]string{}
- WinBidTemplate = map[string]string{}
- CreditBidTemplate = map[string]string{}
- BottomDescribe string
- )
- type (
- DetailRoot struct{}
- )
- // GetDetail 根据seoId查询标讯详情
- // seoId 标讯seoId标识
- // isLogin 是否登录,未登录内容加密
- func (dRoot *DetailRoot) GetDetail(ctx context.Context, seoId string, isLogin bool) map[string]interface{} {
- res, err := g.DB().GetOne(ctx, fmt.Sprintf(`SELECT col.bid_id FROM jyseo.column_bidList col WHERE col.seo_id = '%s'`, seoId))
- if err != nil || res.IsEmpty() {
- return nil
- }
- data, ok := utility.BiddingMgo.FindById("bidding", gconv.String(res["bid_id"]), nil)
- if ok && data != nil && len(*data) > 0 {
- obj := *data
- if !isLogin {
- obj = Filter(obj)
- }
- obj["abstract"] = GetAbstractInfo(obj)
- obj["time"] = time.Unix(gconv.Int64(obj["publishtime"]), 0).Format(time.DateTime)
- obj["bottomAbstract"] = fmt.Sprintf(g.Cfg("global").MustGet(context.Background(), "bottomDescribe").String(), "子站名称")
- return obj
- }
- return nil
- }
- // 未登录用户进行数据过滤 name 配置文件
- func Filter(obj map[string]interface{}) map[string]interface{} {
- detail := fmt.Sprint(obj["detail"])
- mosaicText := fmt.Sprintf(`<span style="color:#2ABED1;">%s</span>`, g.Cfg("global").MustGet(context.Background(), "detailMosaic").String())
- detailText := fmt.Sprintf(`<span class="noLoginMosaic" style="color: #2ABED1;">%s</span>`, g.Cfg("global").MustGet(context.Background(), "detailMosaic").String())
- if DetailNeedMosaic == nil {
- DetailNeedMosaic = g.Cfg("global").MustGet(context.Background(), "detailNeedMosaic").Map()
- }
- for dk, dv := range DetailNeedMosaic {
- if !dv.(bool) {
- continue
- }
- if obj["package"] != nil {
- pk := gconv.Map(obj["package"])
- for _, pv := range pk {
- if pv != nil {
- if page := gconv.Map(pv); page != nil {
- if page[dk] != nil {
- page[dk] = mosaicText
- }
- delete(page, "text")
- }
- }
- }
- }
- //if util.ObjToString(obj[dk]) != "" {
- // detail = strings.ReplaceAll(detail, util.ObjToString(obj[dk]), detailText)
- //}
- if gconv.String(obj[dk]) != "" {
- value, b := obj[dk].(float64)
- if b {
- replaceStr := fmt.Sprintf("%v", int64(value))
- detail = strings.ReplaceAll(detail, replaceStr, detailText)
- } else {
- detail = strings.ReplaceAll(detail, gconv.String(obj[dk]), detailText)
- }
- }
- //中标企业信息
- if dk == "winnerMap" {
- winnerNewMap := map[string]interface{}{}
- if obj[dk] != nil {
- winnerMap := gconv.Map(obj[dk])
- for _, wv := range winnerMap {
- winnerNewMap[mosaicText] = wv
- }
- }
- obj[dk] = winnerNewMap
- } else {
- obj[dk] = mosaicText
- }
- }
- obj["detail"] = detail
- return obj
- }
- // GetAbstractInfo 获取摘要
- func GetAbstractInfo(obj map[string]interface{}) string {
- date := gconv.Int64(obj["publishtime"])
- if date == 0 {
- date = gconv.Int64(obj["comeintime"])
- }
- dateStr := time.Unix(gconv.Int64(obj["publishtime"]), 0).Format("2006年01月02日")
- var abs = ""
- topType := gconv.String(obj["toptype"])
- switch topType {
- case "招标":
- BidTemplate = g.Cfg("global").MustGet(context.Background(), "bidTemplate").MapStrStr()
- subType := gconv.String(obj["subType"])
- if subType == "变更" || subType == "单一" || subType == "邀标" {
- if gconv.String(obj["buyer"]) != "" && gconv.String(obj["title"]) != "" {
- abs = fmt.Sprintf(BidTemplate["tmp4"], date, gconv.String(obj["buyer"]), gconv.String(obj["title"]), "分站名称")
- }
- }
- if subType != "变更" && subType != "单一" && subType != "邀标" && gconv.String(obj["agency"]) != "" {
- if gconv.String(obj["buyer"]) != "" && gconv.String(obj["subtype"]) != "" && gconv.String(obj["title"]) != "" {
- r := rand.New(rand.NewSource(time.Now().UnixNano()))
- number := r.Intn(2) + 2
- if number == 2 {
- abs = fmt.Sprintf(BidTemplate["tmp2"], dateStr, gconv.String(obj["buyer"]), gconv.String(obj["title"]))
- } else {
- abs = fmt.Sprintf(BidTemplate["tmp3"], dateStr, gconv.String(obj["buyer"]), gconv.String(obj["subtype"]), gconv.String(obj["title"]))
- }
- }
- }
- case "结果":
- WinBidTemplate = g.Cfg("global").MustGet(context.Background(), "winBidTemplate").MapStrStr()
- subType := gconv.String(obj["subtype"])
- if subType == "中标" || subType == "成交" {
- if gconv.String(obj["agency"]) != "" {
- if gconv.String(obj["title"]) != "" && gconv.String(obj["winner"]) != "" {
- 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"]))
- }
- } else {
- if gconv.String(obj["buyer"]) != "" && gconv.String(obj["title"]) != "" && gconv.String(obj["s_winner"]) != "" {
- r := rand.New(rand.NewSource(time.Now().UnixNano()))
- number := r.Intn(2) + 1
- if number == 1 {
- winner := strings.Join(strings.Split(gconv.String(obj["s_winner"]), ","), "、")
- abs = fmt.Sprintf(WinBidTemplate["tmp1"], "分站名称", dateStr, gconv.String(obj["title"]), winner)
- } else {
- abs = fmt.Sprintf(WinBidTemplate["tmp2"], dateStr, gconv.String(obj["buyer"]), gconv.String(obj["title"]), gconv.String(obj["s_winner"]))
- }
- }
- }
- }
- if subType == "流标" || subType == "废标" || subType == "结果变更" {
- abs = fmt.Sprintf(gconv.String(WinBidTemplate["tmp4"]), dateStr, gconv.String(obj["buyer"]), gconv.String(obj["subtype"]), gconv.String(obj["title"]), "分站名称")
- }
- case "预告":
- PreviewClassTemplate = g.Cfg("global").MustGet(context.Background(), "previewClassTemplate").MapStrStr()
- if gconv.String(obj["agency"]) != "" {
- if gconv.String(obj["buyer"]) != "" && gconv.String(obj["subtype"]) != "" && gconv.String(obj["title"]) != "" {
- abs = fmt.Sprintf(PreviewClassTemplate["tmp1"], gconv.String(obj["buyer"]), dateStr, gconv.String(obj["agency"]), gconv.String(obj["subtype"]), gconv.String(obj["title"]), "分站名称")
- }
- } else {
- if gconv.String(obj["buyer"]) != "" && gconv.String(obj["subtype"]) != "" && gconv.String(obj["title"]) != "" {
- r := rand.New(rand.NewSource(time.Now().UnixNano()))
- number := r.Intn(2) + 2
- if number == 2 {
- abs = fmt.Sprintf(PreviewClassTemplate["tmp2"], dateStr, gconv.String(obj["buyer"]), gconv.String(obj["title"]))
- } else {
- abs = fmt.Sprintf(PreviewClassTemplate["tmp3"], dateStr, gconv.String(obj["buyer"]), gconv.String(obj["subtype"]), gconv.String(obj["title"]))
- }
- }
- }
- case "其他":
- CreditBidTemplate = g.Cfg("global").MustGet(context.Background(), "creditBidTemplate").MapStrStr()
- subType := gconv.String(obj["subtype"])
- if subType == "合同" || subType == "验收" {
- if gconv.String(obj["buyer"]) != "" && gconv.String(obj["title"]) != "" && gconv.String(obj["subtype"]) != "" && gconv.String(obj["s_winner"]) != "" {
- r := rand.New(rand.NewSource(time.Now().UnixNano()))
- number := r.Intn(2) + 1
- if number == 1 {
- abs = fmt.Sprintf(CreditBidTemplate["tmp1"], dateStr, gconv.String(obj["buyer"]), gconv.String(obj["title"]), gconv.String(obj["subtype"]), gconv.String(obj["s_winner"]), "分站名称")
- } else {
- abs = fmt.Sprintf(CreditBidTemplate["tmp2"], dateStr, gconv.String(obj["buyer"]), gconv.String(obj["subtype"]), gconv.String(obj["title"]), gconv.String(obj["s_winner"]))
- }
- }
- } else if subType == "违规" {
- abs = fmt.Sprintf(CreditBidTemplate["tmp2"], dateStr, gconv.String(obj["title"]))
- }
- }
- return abs
- }
|