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) } }