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, "") if intOpen >= intClose { for di := 0; di < (intOpen - intClose); di++ { _detail += "" } } 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 }*/