Files
2026-05-20 16:13:58 +08:00

156 lines
5.5 KiB
Go

package advertiseSer
import (
"context"
"fmt"
"sort"
"stat/common/enum/consts"
"stat/common/utils"
"stat/models/advertiseLocMod"
"stat/models/advertiseMod"
"stat/models/appInfoMod"
"stat/statg"
"strings"
"time"
"go.mongodb.org/mongo-driver/bson"
)
func CheckChange(ctx context.Context, oldDoc, newDoc *advertiseMod.Advertise, account string) {
msg := ""
changed := false
apps, _ := appInfoMod.GetAllAppIdNameMap(ctx)
appId := int32(0)
// 检测更新
if oldDoc != nil && newDoc != nil {
warnChar := "☢️"
appId = oldDoc.AppId
msg += fmt.Sprintf("检测到广告内容变更:\n广告ID:【%d】\n名称:【%s】\n", oldDoc.Id, oldDoc.Title)
locs, _ := advertiseLocMod.GetAllAdvertiseLocationMap(ctx, bson.M{})
locName := ""
if nm := locs[oldDoc.AppId]; nm != nil {
if loc := nm[oldDoc.LocId]; loc != nil {
locName = loc.Name
}
}
msg += fmt.Sprintf("位置ID:【%d】\n位置名称:【%s】\n", oldDoc.LocId, locName)
if oldDoc.AppId != newDoc.AppId {
changed = true
warnChar = "🔯"
msg += fmt.Sprintf("应用变更:\n┏旧值【%s】(%d)\n┗新值【%s】(%d)\n", apps[oldDoc.AppId], oldDoc.AppId, apps[newDoc.AppId], newDoc.AppId)
}
if oldDoc.IsActive != newDoc.IsActive {
changed = true
msg += fmt.Sprintf("激活变更:\n┏旧值【%v】【%v】\n┗新值【%v】【%v】\n", oldDoc.IsActive, consts.StatusDesc[oldDoc.IsActive],
newDoc.IsActive, consts.StatusDesc[newDoc.IsActive])
}
if oldDoc.Title != newDoc.Title {
changed = true
msg += fmt.Sprintf("标题变更:\n┏旧值【%s】\n┗新值【%s】\n", oldDoc.Title, newDoc.Title)
}
if oldDoc.Sort != newDoc.Sort {
changed = true
msg += fmt.Sprintf("排序变更:\n┏旧值【%d】\n┗新值【%d】\n", oldDoc.Sort, newDoc.Sort)
}
if oldDoc.StartTime != newDoc.StartTime {
changed = true
msg += fmt.Sprintf("开始时间变更:\n┏旧值【%s】\n┗新值【%s】\n", oldDoc.StartTime.Format("2006-01-02T15:04:05"), newDoc.StartTime.Format("2006-01-02T15:04:05"))
}
if oldDoc.EndTime != newDoc.EndTime {
changed = true
msg += fmt.Sprintf("结束时间变更:\n┏旧值【%s】\n┗新值【%s】\n", oldDoc.EndTime.Format("2006-01-02T15:04:05"), newDoc.EndTime.Format("2006-01-02T15:04:05"))
}
if oldDoc.LocId != newDoc.LocId {
changed = true
oName := ""
if om := locs[oldDoc.AppId]; om != nil {
if loc := om[oldDoc.LocId]; loc != nil {
oName = loc.Name
}
}
nName := ""
if nm := locs[newDoc.AppId]; nm != nil {
if loc := nm[newDoc.LocId]; loc != nil {
nName = loc.Name
}
}
msg += fmt.Sprintf("位置变更:\n┏旧值【%s】(%d)\n┗新值【%s】(%d)\n", oName, oldDoc.LocId, nName, newDoc.LocId)
}
oLinks := utils.StrSliceConstruct(len(oldDoc.Links), func(index int) (string, bool) {
link := oldDoc.Links[index]
return link.Link, true
})
nLinks := utils.StrSliceConstruct(len(newDoc.Links), func(index int) (string, bool) {
link := newDoc.Links[index]
return link.Link, true
})
sort.Sort(sort.StringSlice(oLinks))
sort.Sort(sort.StringSlice(nLinks))
if strings.Join(oLinks, "") != strings.Join(nLinks, "") {
warnChar = "🛑"
changed = true
msg += fmt.Sprintf("链接变更:\n")
for index, link := range oLinks {
msg += fmt.Sprintf("┣%d.旧值: %s\n", index+1, link)
}
for index, link := range nLinks {
msg += fmt.Sprintf("┣%d.新值: %s\n", index+1, link)
}
} else {
msg += fmt.Sprintf("链接不变:【%d个】\n", len(nLinks))
for index, link := range nLinks {
msg += fmt.Sprintf("┣%d.链接: %s\n", index+1, link)
}
}
msg = warnChar + msg
} else if oldDoc == nil && newDoc != nil {
changed = true
appId = newDoc.AppId
msg += fmt.Sprintf("🟢检测到新增广告:\n广告ID:【%d】\n广告标题:【%s】\n", newDoc.Id, newDoc.Title)
locs, _ := advertiseLocMod.GetAllAdvertiseLocationMap(ctx, bson.M{})
locName := ""
if nm := locs[newDoc.AppId]; nm != nil {
if loc := nm[newDoc.LocId]; loc != nil {
locName = loc.Name
}
}
msg += fmt.Sprintf("位置ID:【%d】\n位置名称:【%s】\n", newDoc.LocId, locName)
nLinks := utils.StrSliceConstruct(len(newDoc.Links), func(index int) (string, bool) {
link := newDoc.Links[index]
return link.Link, true
})
msg += fmt.Sprintf("链接:【%d个】\n", len(nLinks))
for index, link := range nLinks {
msg += fmt.Sprintf("┣%d.链接: %s\n", index+1, link)
}
} else if oldDoc != nil && newDoc == nil {
changed = true
appId = oldDoc.AppId
msg += fmt.Sprintf("⛔️检测到删除广告:\n广告ID:【%d】\n广告标题:【%s】\n", oldDoc.Id, oldDoc.Title)
locs, _ := advertiseLocMod.GetAllAdvertiseLocationMap(ctx, bson.M{})
locName := ""
if nm := locs[oldDoc.AppId]; nm != nil {
if loc := nm[oldDoc.LocId]; loc != nil {
locName = loc.Name
}
}
msg += fmt.Sprintf("位置ID:【%d】\n位置名称:【%s】\n", oldDoc.LocId, locName)
nLinks := utils.StrSliceConstruct(len(oldDoc.Links), func(index int) (string, bool) {
link := oldDoc.Links[index]
return link.Link, true
})
msg += fmt.Sprintf("链接:【%d个】\n", len(nLinks))
for index, link := range nLinks {
msg += fmt.Sprintf("┣%d.链接: %s\n", index+1, link)
}
}
if changed {
msg += fmt.Sprintf("广告所属应用:【%s】(%d)\n", apps[appId], appId)
msg += fmt.Sprintf("操作人员账号:【%s】\n", account)
msg += fmt.Sprintf("操作发生时间:【%s】\n", time.Now().Format("2006-01-02T15:04:05"))
msg += fmt.Sprintf("请确认是否异常: %s \n", statg.Tgbotsend)
statg.Bot.SendAdvertiseMessage(msg)
}
}