123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- package service
- import (
- "context"
- "fmt"
- "github.com/gogf/gf/v2/frame/g"
- "github.com/gogf/gf/v2/util/gconv"
- "jybxseo/internal/consts"
- "jybxseo/utility"
- "jygit.jydev.jianyu360.cn/BaseService/ossClient"
- "jygit.jydev.jianyu360.cn/BaseService/ossClient/entity"
- "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 %s col WHERE col.seo_id = '%s'`, consts.TableName, 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["title"] = gconv.String(fmt.Sprintf("【%s】%s", consts.TopTypeMap[gconv.String(obj["toptype"])], obj["title"]))
- var publishTime int64
- tm := time.Date(time.Now().Year(), time.Now().Month(), time.Now().Day(), 23, 59, 59, 0, time.Now().Location())
- if gconv.Int64(obj["publishtime"])+3600*24 > tm.Unix() {
- publishTime = gconv.Int64(obj["publishtime"])
- } else {
- publishTime = gconv.Int64(obj["publishtime"]) + 3600*24
- }
- obj["time"] = time.Unix(publishTime, 0).Format("2006-01-02")
- //var _detail = gconv.String(obj["detail"])
- // 从oss获取正文
- detailRes, err := ossClient.GetBidDetailByGrpc(g.Cfg().MustGet(ctx, "bidDetailByRpc").String(), &entity.Args{
- BucketID: "detail",
- ObjectName: gconv.String(res["bid_id"]),
- })
- delete(obj, "detail")
- if err != nil {
- g.Log().Errorf(ctx, "ossClient.GetBidDetailByGrpc err: %+v", err)
- } else {
- var _detail string = gconv.String(detailRes.Data)
- for _, v := range []string{"table", "div"} {
- var intOpen = strings.Count(_detail, "<"+v)
- var intClose = strings.Count(_detail, "</"+v+">")
- if intOpen >= intClose {
- for di := 0; di < (intOpen - intClose); di++ {
- _detail += "</" + v + ">"
- }
- } else {
- for di := 0; di < (intClose - intOpen); di++ {
- _detail = "<" + v + ">" + _detail
- }
- }
- }
- obj["detail"] = _detail
- }
- 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{}, areaName string) 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"]), areaName)
- }
- }
- 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"]), areaName, 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"], areaName, 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"]), areaName)
- }
- 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"]), areaName)
- }
- } 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"]), areaName)
- } 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
- }*/
|