123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- package utility
- import (
- "analyze/internal/consts"
- "analyze/internal/model"
- "analyze/internal/model/entity"
- "app.yhyue.com/moapp/jybase/encrypt"
- "fmt"
- "github.com/gogf/gf/v2/database/gredis"
- "github.com/gogf/gf/v2/frame/g"
- "math"
- "strconv"
- "strings"
- "time"
- )
- var (
- y_m_day = map[int]int{1: 31, 2: 28, 3: 31, 4: 30, 5: 31, 6: 30, 7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31}
- )
- func GetPreviousMarket(sTime, eTime time.Time) int64 {
- var os_time int64
- s_time := sTime
- if SEMonth(sTime, eTime) {
- var min int
- //统计月份
- for sTime.Before(eTime) {
- sTime = sTime.AddDate(0, 1, 0)
- min++
- }
- os_time = s_time.AddDate(0, -min, 0).Unix()
- } else {
- os_time = s_time.AddDate(0, 0, -int(math.Ceil(eTime.Sub(sTime).Hours()/24))).Unix()
- }
- return os_time
- }
- // 判断是否月初到月末
- func SEMonth(sTime, eTime time.Time) bool {
- var day int
- month := int(eTime.Month())
- if month == 2 {
- if eTime.Year()%4 == 0 {
- day = 29
- } else {
- day = 28
- }
- } else {
- day = y_m_day[month]
- }
- if sTime.Day() == 1 && eTime.Day() == day {
- return true
- }
- return false
- }
- func GetMonthData(sTime, eTime time.Time) (_b bool, dateSpans []entity.DateSpan) {
- //整月多取一个月进行环比
- if SEMonth(sTime, eTime) {
- _b = true
- sTime = sTime.AddDate(0, -1, 0)
- }
- dateSpans = getBidAmountStatistics(sTime, eTime)
- return
- }
- func getBidAmountStatistics(sTime, eTime time.Time) (dateSpans []entity.DateSpan) {
- tmpTime, rTime, tEndTime := sTime, sTime, getMonthRange(eTime, false)
- for rTime.Before(tEndTime) {
- ts, te := getMonthRange(tmpTime, true), getMonthRange(tmpTime, false)
- if sTime == tmpTime {
- ts = sTime
- }
- if te == tEndTime {
- te = eTime
- }
- if ts.Before(te) {
- dateSpans = append(dateSpans, entity.DateSpan{
- Key: fmt.Sprintf("%d-%d", ts.Year(), ts.Month()),
- From: ts.Unix(),
- To: te.Unix(),
- })
- }
- rTime = rTime.AddDate(0, 1, 0)
- if int(rTime.Month())-int(tmpTime.Month()) > 1 {
- rTime = rTime.AddDate(0, -1, 0)
- }
- tmpTime = rTime
- }
- return
- }
- // getMonthRange获取月份范围
- // isStart true本月月初 false 本月月末(下月月初)
- func getMonthRange(t time.Time, isStart bool) time.Time {
- if isStart {
- return time.Date(t.Year(), t.Month(), 1, 0, 0, 0, 0, t.Location())
- }
- return time.Date(t.Year(), t.Month()+1, 1, 0, 0, 0, 0, t.Location())
- }
- func GetYearData(sTime, eTime time.Time) (_b bool, dateSpans []entity.DateSpan) {
- //整年多取一年进行环比
- if sTime.Month() == 1 && sTime.Day() == 1 && eTime.Month() == 12 && eTime.Day() == 31 {
- _b = true
- sTime = sTime.AddDate(-1, 0, 0)
- }
- dateSpans = getCommonYearStatistics(sTime, eTime)
- return
- }
- // 年份统计
- func getCommonYearStatistics(sTime, eTime time.Time) (dateSpans []entity.DateSpan) {
- tmpTime, rTime, tEndTime := sTime, sTime, getYearRange(eTime, false)
- for rTime.Before(tEndTime) {
- ts, te := getYearRange(tmpTime, true), getYearRange(tmpTime, false)
- if sTime == tmpTime {
- ts = sTime
- }
- if te == tEndTime {
- te = eTime
- }
- if ts.Before(te) {
- dateSpans = append(dateSpans, entity.DateSpan{
- Key: fmt.Sprintf("%d", ts.Year()),
- From: ts.Unix(),
- To: te.Unix(),
- })
- }
- rTime = rTime.AddDate(1, 0, 0)
- tmpTime = rTime
- }
- return
- }
- // getYearRange获取月份范围
- // isStart true本月月初 false 本月月末(下月月初)
- func getYearRange(t time.Time, isStart bool) time.Time {
- if isStart {
- return time.Date(t.Year(), 1, 1, 0, 0, 0, 0, t.Location())
- }
- return time.Date(t.Year()+1, 1, 1, 0, 0, 0, 0, t.Location())
- }
- // GetAllKeywordArr 获取所有匹配词
- func GetAllKeywordArr(res []entity.KeyWordGroup) (rData []entity.ViewKeyWord) {
- for _, kwg := range res {
- rData = append(rData, GetGroupKeywordArr(kwg.A_Key)...)
- }
- return
- }
- // GetGroupKeywordArr 模糊拆分为多个精准匹配
- func GetGroupKeywordArr(res []entity.ViewKeyWord) (rData []entity.ViewKeyWord) {
- for _, kw := range res {
- if kw.MatchWay == 1 {
- for _, kk := range kw.Keyword {
- rData = append(rData, entity.ViewKeyWord{
- Keyword: []string{kk},
- Exclude: kw.Exclude,
- })
- }
- for _, kk := range kw.Appended {
- rData = append(rData, entity.ViewKeyWord{
- Keyword: []string{kk},
- Exclude: kw.Exclude,
- })
- }
- } else {
- rData = append(rData, kw)
- }
- }
- return
- }
- func DateIsIn(from, to, n, m int64) bool {
- if m == 0 {
- return to >= n && from <= n
- }
- return to > n && from < n
- }
- func EncodeId(sid string) string {
- if sid == "" || sid == "-" { //不存在的id为-
- return ""
- }
- return encrypt.EncodeArticleId2ByCheck(sid)
- }
- // xxxx重点中标单位 更新分数值
- func UpdateWinnerInfoOfScore(key string, pt *entity.ProjectInfo, score float64) {
- if pt.Winners != "" {
- for k, w := range strings.Split(pt.Winners, ",") {
- id := ""
- if len(pt.Entidlist) > k {
- id = encrypt.EncodeArticleId2ByCheck(pt.Entidlist[k])
- }
- UpdateIncrementRedis(key, fmt.Sprintf("%s##%s", w, id), score)
- }
- }
- }
- // xxxx重点采购单位 更新分数值
- func UpdateBuyerInfoOfScore(key string, pt *entity.ProjectInfo, score float64) {
- if pt.Buyer != "" {
- UpdateIncrementRedis(key, fmt.Sprintf("%s##%s", pt.Buyer, pt.Id), score)
- }
- }
- // prev
- func GetJudgmentPrevKey(first int, next string) (key string) {
- return fmt.Sprintf("mk_%d_%s", first, next)
- }
- // redis update|| expire
- func UpdateIncrementRedis(key, member string, increment float64) {
- _, err := g.Redis().ZIncrBy(model.Ctx, key, increment, member)
- if err != nil {
- g.Log().Info(model.Ctx, "---update---err:", err.Error())
- } else {
- _, err = g.Redis().Expire(model.Ctx, key, consts.Top30) //缓存三十秒
- if err != nil {
- g.Log().Info(model.Ctx, "---expire---err:", err.Error())
- }
- }
- }
- // -- score
- func GetZrevRangeByScore(key string, max, min int64) (res []entity.MemberScore, err error) {
- gvar, _err := g.Redis().ZRevRange(model.Ctx, key, min, max, gredis.ZRevRangeOption{WithScores: true})
- if _err != nil {
- err = _err
- g.Log().Info(model.Ctx, "err:", err.Error())
- return
- }
- // 遍历返回结果
- for k, v := range gvar.Slice() {
- if k%2 == 0 {
- ms := entity.MemberScore{}
- ms.Member = strings.Split(fmt.Sprintf("%s", v), "##")[0]
- ms.Id = strings.Split(fmt.Sprintf("%s", v), "##")[1]
- res = append(res, ms)
- } else {
- res[k/2].Score, _ = strconv.ParseFloat(fmt.Sprintf("%s", v), 64)
- }
- }
- return
- }
- // --Del
- func DelRedisInfo(key string) {
- if _, err := g.Redis().Del(model.Ctx, key); err != nil {
- g.Log().Info(model.Ctx, "redis del err :", err.Error())
- }
- }
- // --key
- func GetSortedKeyOfRedis(prev int, key, id, suffix string) string {
- return fmt.Sprintf("sorted_%d_%s_%s_%s", prev, key, id, suffix)
- }
- // --
- func IsAnalyzeCancel(id string) bool {
- n, _ := g.Redis().Exists(model.Ctx, fmt.Sprintf(consts.ReportCanceledKey, id))
- return n > 0
- }
|