package service
import (
"context"
"fmt"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/util/gconv"
"jybxseo/internal/consts"
"jybxseo/utility"
"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, 59, time.Now().Location())
if gconv.Int64(obj["publish_time"])+3600*24 > tm.Unix() {
publishTime = gconv.Int64(obj["publish_time"])
} else {
publishTime = gconv.Int64(obj["publish_time"]) + 3600*24
}
obj["time"] = time.Unix(publishTime, 0).Format("2006-01-02")
var _detail = gconv.String(obj["detail"])
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(`%s`, g.Cfg("global").MustGet(context.Background(), "detailMosaic").String())
detailText := fmt.Sprintf(`%s`, 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
}*/