|
|
package script
|
|
|
|
|
|
import (
|
|
|
"context"
|
|
|
"joybuywork/internal/app"
|
|
|
"joybuywork/internal/config"
|
|
|
"joybuywork/internal/consts"
|
|
|
"joybuywork/internal/consts/ckey"
|
|
|
"joybuywork/internal/plugins/jsonm"
|
|
|
"joybuywork/internal/plugins/printer"
|
|
|
"joybuywork/internal/repository/cache"
|
|
|
"joybuywork/internal/repository/dao"
|
|
|
"joybuywork/internal/repository/finder"
|
|
|
"joybuywork/internal/repository/model"
|
|
|
"joybuywork/internal/repository/mtype"
|
|
|
"joybuywork/internal/repository/withdefault"
|
|
|
"joybuywork/internal/service/provider"
|
|
|
"joybuywork/internal/service/queue/producer"
|
|
|
"joybuywork/internal/service/queue/types"
|
|
|
"joybuywork/internal/utils"
|
|
|
"encoding/json"
|
|
|
"fmt"
|
|
|
"os"
|
|
|
"strings"
|
|
|
"time"
|
|
|
|
|
|
"github.com/aliyun/aliyun-oss-go-sdk/oss"
|
|
|
ddevicepb "gits.branchcn.com/backend/deeplink/proto/go_proto/ddevice"
|
|
|
)
|
|
|
|
|
|
type clearCache struct {
|
|
|
ctx context.Context
|
|
|
Table string `json:"table"`
|
|
|
}
|
|
|
|
|
|
// 清楚对应的数据表缓存
|
|
|
func (c clearCache) clearCache() {
|
|
|
var table = strings.Split(c.Table, ",")
|
|
|
|
|
|
for _, v := range table {
|
|
|
|
|
|
var mkey string
|
|
|
switch v {
|
|
|
case model.TableNameFissionCampaign:
|
|
|
cc := cache.NewCampaign(c.ctx)
|
|
|
|
|
|
mkey = cc.Cache.Prefix()
|
|
|
|
|
|
case model.TableNameFissionCampaignConfig:
|
|
|
cc := cache.NewCampaignConfig(c.ctx)
|
|
|
|
|
|
mkey = cc.Cache.Prefix()
|
|
|
case model.TableNameFissionCampaignStyle:
|
|
|
cc := cache.NewCampaignStyle(c.ctx)
|
|
|
|
|
|
mkey = cc.Cache.Prefix()
|
|
|
case model.TableNameFissionCampaignCash:
|
|
|
cc := cache.NewCampaignCash(c.ctx)
|
|
|
|
|
|
mkey = cc.Cache.Prefix()
|
|
|
case model.TableNameUser:
|
|
|
cc := cache.NewUser(c.ctx)
|
|
|
|
|
|
mkey = cc.Cache.Prefix()
|
|
|
case model.TableNameProject:
|
|
|
cc := cache.NewProject(c.ctx)
|
|
|
|
|
|
mkey = cc.Cache.Prefix()
|
|
|
case model.TableNameFissionUser:
|
|
|
cc := cache.NewFissionUser(c.ctx, 0)
|
|
|
|
|
|
mkey = cc.Cache.Prefix()
|
|
|
case model.TableNameReward:
|
|
|
cc := cache.NewReward(c.ctx)
|
|
|
|
|
|
mkey = cc.Cache.Prefix()
|
|
|
case model.TableNameFissionWebUser:
|
|
|
cc := cache.NewReward(c.ctx)
|
|
|
|
|
|
mkey = cc.Cache.Prefix()
|
|
|
case model.TableNameFissionTemp:
|
|
|
cc := cache.NewFissionTemp(c.ctx)
|
|
|
|
|
|
mkey = cc.Cache.Prefix()
|
|
|
case model.TableNameLibraryQaGroup:
|
|
|
cc := cache.NewLibraryQaGroup(c.ctx)
|
|
|
|
|
|
mkey = cc.Cache.Prefix()
|
|
|
case model.TableNameFissionTempGroup:
|
|
|
cc := cache.NewFissionTempGroup(c.ctx)
|
|
|
|
|
|
list, _ := dao.FissionTempGroup.WithContext(c.ctx).Find()
|
|
|
_ = cc.Clear(list...)
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if mkey == "" {
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
app.FeishuNormalSend("[%s]开始处理缓存数据", v)
|
|
|
|
|
|
var idx int
|
|
|
var cursor uint64
|
|
|
var err error
|
|
|
var keys []string
|
|
|
for {
|
|
|
|
|
|
keys, cursor, err = app.Redis.Cache.Scan(c.ctx, cursor, fmt.Sprintf("%s:*", mkey), 10000).Result()
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
app.Redis.Cache.Del(c.ctx, keys...)
|
|
|
|
|
|
idx += len(keys)
|
|
|
|
|
|
if cursor == 0 {
|
|
|
break
|
|
|
}
|
|
|
}
|
|
|
app.FeishuNormalSend("[%s]删除了%d个缓存", v, idx)
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
type lang struct {
|
|
|
ctx context.Context
|
|
|
taskId string
|
|
|
}
|
|
|
|
|
|
// 把json文件里面的语言数据写到表里面
|
|
|
func (s lang) lang() {
|
|
|
dir, _ := os.Getwd()
|
|
|
|
|
|
var path string
|
|
|
|
|
|
if consts.RunTest {
|
|
|
path = fmt.Sprintf("../../../asset/campaign/lang")
|
|
|
} else {
|
|
|
path = fmt.Sprintf("%s/asset/campaign/lang", dir)
|
|
|
}
|
|
|
|
|
|
var err error
|
|
|
tx := dao.Q.Begin()
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
|
app.Logger.Error(s.ctx, fmt.Sprintf("语言包处理有异常:%v", err))
|
|
|
_ = tx.Rollback()
|
|
|
return
|
|
|
}
|
|
|
_ = tx.Commit()
|
|
|
}()
|
|
|
|
|
|
entrys, err := os.ReadDir(path)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
m := tx.Lang
|
|
|
for _, entry := range entrys {
|
|
|
if !strings.HasSuffix(entry.Name(), ".json") {
|
|
|
continue
|
|
|
}
|
|
|
mark, _ := strings.CutSuffix(entry.Name(), ".json")
|
|
|
|
|
|
_, ok := mtype.MarkToLangType[mark]
|
|
|
if !ok {
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
var ddd = make(map[string]string)
|
|
|
var b []byte
|
|
|
b, err = os.ReadFile(path + "/" + entry.Name())
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
_ = json.Unmarshal(b, &ddd)
|
|
|
var list []*model.Lang
|
|
|
list, err = m.WithContext(s.ctx).Where(m.Mark.Eq(mark)).Find()
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var oldMap = make(map[string]*model.Lang)
|
|
|
for _, v := range list {
|
|
|
oldMap[v.LangMark] = v
|
|
|
}
|
|
|
|
|
|
var add []*model.Lang
|
|
|
for mk, text := range ddd {
|
|
|
|
|
|
for {
|
|
|
if strings.HasSuffix(text, "_") {
|
|
|
text = strings.TrimSuffix(text, "_")
|
|
|
continue
|
|
|
}
|
|
|
break
|
|
|
}
|
|
|
|
|
|
l, ok1 := oldMap[mk]
|
|
|
if !ok1 {
|
|
|
add = append(add, withdefault.Lang(&model.Lang{
|
|
|
Mark: mark,
|
|
|
LangMark: mk,
|
|
|
LangText: text,
|
|
|
}))
|
|
|
|
|
|
continue
|
|
|
}
|
|
|
if l.LangText != text {
|
|
|
_, err = m.WithContext(s.ctx).Where(m.ID.Eq(l.ID)).UpdateSimple(m.LangText.Value(text))
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(add) > 0 {
|
|
|
err = m.WithContext(s.ctx).Create(add...)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
type langModule struct {
|
|
|
ctx context.Context
|
|
|
taskId string
|
|
|
}
|
|
|
|
|
|
func (s langModule) langModule() {
|
|
|
dir, _ := os.Getwd()
|
|
|
|
|
|
var path string
|
|
|
|
|
|
if consts.RunTest {
|
|
|
path = fmt.Sprintf("../../../asset/campaign")
|
|
|
} else {
|
|
|
path = fmt.Sprintf("%s/asset/campaign", dir)
|
|
|
}
|
|
|
|
|
|
var err error
|
|
|
tx := dao.Q.Begin()
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
|
app.Logger.Error(s.ctx, fmt.Sprintf("语言包处理有异常:%v", err))
|
|
|
_ = tx.Rollback()
|
|
|
return
|
|
|
}
|
|
|
_ = tx.Commit()
|
|
|
}()
|
|
|
|
|
|
m := tx.FissionLangModule
|
|
|
|
|
|
type parts struct {
|
|
|
Parts any `json:"parts"`
|
|
|
Desc string `json:"desc"`
|
|
|
}
|
|
|
|
|
|
var ddd = make(map[string]*parts)
|
|
|
b, err := os.ReadFile(path + "/fission_lang.json")
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
_ = json.Unmarshal(b, &ddd)
|
|
|
|
|
|
list, err := m.WithContext(s.ctx).Find()
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var old = make(map[string]*model.FissionLangModule)
|
|
|
for _, v := range list {
|
|
|
old[v.Mark] = v
|
|
|
}
|
|
|
|
|
|
var add []*model.FissionLangModule
|
|
|
for mark, v := range ddd {
|
|
|
ps, _ := jsonm.MarshalToString(v.Parts)
|
|
|
module, ok := old[mark]
|
|
|
if !ok {
|
|
|
add = append(add, withdefault.FissionLangModule(&model.FissionLangModule{
|
|
|
Mark: mark,
|
|
|
Desc: v.Desc,
|
|
|
Parts: ps,
|
|
|
}))
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
_, err = m.WithContext(s.ctx).Where(m.ID.Eq(module.ID)).UpdateSimple(m.Desc.Value(v.Desc), m.Parts.Value(ps))
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(add) > 0 {
|
|
|
err = m.WithContext(s.ctx).Create(add...)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
type langTextMark struct {
|
|
|
ctx context.Context
|
|
|
taskId string
|
|
|
}
|
|
|
|
|
|
// 语言文案标识,用中文来做文案标识
|
|
|
func (s langTextMark) langTextMark() {
|
|
|
dir, _ := os.Getwd()
|
|
|
|
|
|
var path string
|
|
|
if consts.RunTest {
|
|
|
path = fmt.Sprintf("../../../asset/campaign/lang")
|
|
|
} else {
|
|
|
path = fmt.Sprintf("%s/asset/campaign/lang", dir)
|
|
|
}
|
|
|
|
|
|
var err error
|
|
|
tx := dao.Q.Begin()
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
|
app.Logger.Error(s.ctx, fmt.Sprintf("语言包处理有异常:%v", err))
|
|
|
_ = tx.Rollback()
|
|
|
return
|
|
|
}
|
|
|
_ = tx.Commit()
|
|
|
}()
|
|
|
|
|
|
b, err := os.ReadFile(path + "/zh.json")
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
m := tx.LangTextMark
|
|
|
|
|
|
var ddd = make(map[string]string)
|
|
|
_ = json.Unmarshal(b, &ddd)
|
|
|
|
|
|
var list []*model.LangTextMark
|
|
|
list, err = m.WithContext(s.ctx).Find()
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var lm = make(map[string]*model.LangTextMark)
|
|
|
for _, v := range list {
|
|
|
lm[v.Mark] = v
|
|
|
}
|
|
|
|
|
|
var add []*model.LangTextMark
|
|
|
for mark, text := range ddd {
|
|
|
ltm, ok := lm[mark]
|
|
|
if !ok {
|
|
|
add = append(add, withdefault.LangTextMark(&model.LangTextMark{
|
|
|
Mark: mark,
|
|
|
Text: text,
|
|
|
}))
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
if ltm.Text != text {
|
|
|
_, err = m.WithContext(s.ctx).Where(m.ID.Eq(ltm.ID)).UpdateSimple(m.Text.Value(text))
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(add) > 0 {
|
|
|
err = m.WithContext(s.ctx).Create(add...)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
type checkLang struct {
|
|
|
ctx context.Context
|
|
|
taskId string
|
|
|
}
|
|
|
|
|
|
func (s checkLang) checkLang() {
|
|
|
path := fmt.Sprintf("../../../asset/campaign/lang")
|
|
|
b, err := os.ReadFile(path + "/zh.json")
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var ddd = make(map[string]string)
|
|
|
_ = json.Unmarshal(b, &ddd)
|
|
|
|
|
|
entrys, err := os.ReadDir(path)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
for _, entry := range entrys {
|
|
|
if !strings.HasSuffix(entry.Name(), ".json") {
|
|
|
continue
|
|
|
}
|
|
|
mark, _ := strings.CutSuffix(entry.Name(), ".json")
|
|
|
|
|
|
_, ok := mtype.MarkToLangType[mark]
|
|
|
if !ok {
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
var c []byte
|
|
|
c, err = os.ReadFile(path + "/" + entry.Name())
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var fff = make(map[string]string)
|
|
|
_ = json.Unmarshal(c, &fff)
|
|
|
|
|
|
for k := range fff {
|
|
|
if _, ok1 := ddd[k]; !ok1 {
|
|
|
fmt.Printf("[%s]文件的[%s]不存在于zh\n", entry.Name(), k)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
for k := range ddd {
|
|
|
if _, ok1 := fff[k]; !ok1 {
|
|
|
fmt.Printf("[%s]不存在于[%s]\n", k, entry.Name())
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
type fillLang struct {
|
|
|
ctx context.Context
|
|
|
taskId string
|
|
|
}
|
|
|
|
|
|
func (s fillLang) fillLang() {
|
|
|
|
|
|
var lts = []int8{
|
|
|
mtype.FissionLangTypeZh,
|
|
|
mtype.FissionLangTypeEn,
|
|
|
mtype.FissionLangTypeRu,
|
|
|
mtype.FissionLangTypeFr,
|
|
|
mtype.FissionLangTypePt,
|
|
|
mtype.FissionLangTypeJa,
|
|
|
mtype.FissionLangTypeDe,
|
|
|
mtype.FissionLangTypeEs,
|
|
|
mtype.FissionLangTypeId,
|
|
|
mtype.FissionLangTypeIt,
|
|
|
mtype.FissionLangTypeTr,
|
|
|
mtype.FissionLangTypeAr,
|
|
|
mtype.FissionLangTypeKo,
|
|
|
mtype.FissionLangTypeTh,
|
|
|
}
|
|
|
|
|
|
m := dao.FissionTempGroup
|
|
|
list, err := m.WithContext(s.ctx).Find()
|
|
|
|
|
|
tx := dao.Q.Begin()
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
|
app.Logger.Error(s.ctx, fmt.Sprintf("语言包处理有异常:%v", err))
|
|
|
_ = tx.Rollback()
|
|
|
return
|
|
|
}
|
|
|
_ = tx.Commit()
|
|
|
}()
|
|
|
|
|
|
tempM := tx.FissionTemp
|
|
|
imgM := tx.FissionTempImage
|
|
|
for _, v := range list {
|
|
|
var tempList []*model.FissionTemp
|
|
|
tempList, err = tempM.WithContext(s.ctx).Where(tempM.GroupID.Eq(v.ID), tempM.LangType.In(lts...)).Find()
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var old = make(map[int8]*model.FissionTemp)
|
|
|
var ch bool
|
|
|
for _, temp := range tempList {
|
|
|
if temp.LangType == mtype.FissionLangTypeZh {
|
|
|
ch = true
|
|
|
}
|
|
|
old[temp.LangType] = temp
|
|
|
}
|
|
|
|
|
|
if len(tempList) == 0 || !ch {
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
var add []*model.FissionTemp
|
|
|
for _, lt := range lts {
|
|
|
if _, ok := old[lt]; ok {
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
one := withdefault.FissionTemp(&model.FissionTemp{
|
|
|
FissionID: v.FissionID,
|
|
|
GroupID: v.ID,
|
|
|
LangType: lt,
|
|
|
TextType: mtype.FissionLangTypeTextType[lt],
|
|
|
})
|
|
|
|
|
|
add = append(add, one)
|
|
|
}
|
|
|
|
|
|
if len(add) == 0 {
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
err = tempM.WithContext(s.ctx).Create(add...)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
var images []*model.FissionTempImage
|
|
|
enTemp, ok := old[mtype.FissionLangTypeEn]
|
|
|
if ok {
|
|
|
var useImg []*model.FissionTempImage
|
|
|
useImg, err = dao.FissionTempImage.WithContext(s.ctx).Where(dao.FissionTempImage.TempID.Eq(enTemp.ID)).Find()
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
for _, temp := range add {
|
|
|
for _, image := range useImg {
|
|
|
images = append(images, withdefault.FissionTempImage(&model.FissionTempImage{
|
|
|
TempID: temp.ID,
|
|
|
Mark: image.Mark,
|
|
|
Val: image.Val,
|
|
|
Desc: image.Desc,
|
|
|
}))
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
for _, temp := range add {
|
|
|
images = append(images, withdefault.FissionTempImage(&model.FissionTempImage{
|
|
|
TempID: temp.ID,
|
|
|
Mark: "main",
|
|
|
Val: fmt.Sprintf("ftg/%s/main_en.png", v.Mark),
|
|
|
Desc: "活动主图",
|
|
|
}), withdefault.FissionTempImage(&model.FissionTempImage{
|
|
|
TempID: temp.ID,
|
|
|
Mark: "wechat",
|
|
|
Val: fmt.Sprintf("ftg/%s/main_en.png", v.Mark),
|
|
|
Desc: "微信引导图",
|
|
|
}), withdefault.FissionTempImage(&model.FissionTempImage{
|
|
|
TempID: temp.ID,
|
|
|
Mark: "wechat_bg",
|
|
|
Val: fmt.Sprintf("ftg/%s/main_en.png", v.Mark),
|
|
|
Desc: "微信引导图背景",
|
|
|
}), withdefault.FissionTempImage(&model.FissionTempImage{
|
|
|
TempID: temp.ID,
|
|
|
Mark: "download",
|
|
|
Val: fmt.Sprintf("ftg/%s/main_en.png", v.Mark),
|
|
|
Desc: "下载引导图",
|
|
|
}))
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if len(images) > 0 {
|
|
|
err = imgM.WithContext(s.ctx).Create(images...)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
type openAd struct {
|
|
|
ctx context.Context
|
|
|
taskId string
|
|
|
ProjectId int64 `json:"project_id"`
|
|
|
ProjectHashId string `json:"project_hash_id"`
|
|
|
GaShowId string `json:"ga_show_id"`
|
|
|
GaEmbedId string `json:"ga_embed_id"`
|
|
|
GaDoubleId string `json:"ga_double_id"`
|
|
|
Prod bool `json:"prod"`
|
|
|
}
|
|
|
|
|
|
func (s openAd) openAd() {
|
|
|
project, err := finder.Project(s.ctx, s.ProjectId, s.ProjectHashId)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if project == nil {
|
|
|
app.FeishuNormalSend(fmt.Sprintf("[%d_%s] 找不到对应的项目", s.ProjectId, s.ProjectHashId))
|
|
|
return
|
|
|
}
|
|
|
|
|
|
ads, err := cache.NewProjectAd(s.ctx).FindByProjectId(project.ID)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
showId := utils.Ternary[string](s.Prod, s.GaShowId, "6366208850")
|
|
|
embedId := utils.Ternary[string](s.Prod, s.GaEmbedId, "8800800505")
|
|
|
doubleId := utils.Ternary[string](s.Prod, s.GaDoubleId, "6174637163")
|
|
|
status := utils.Ternary[int8](s.Prod, mtype.ProjectAdStatusProd, mtype.ProjectAdStatusTest)
|
|
|
|
|
|
if ads == nil {
|
|
|
ads = withdefault.ProjectAd(&model.ProjectAd{
|
|
|
ProjectID: project.ID,
|
|
|
OpenAd: mtype.Yes,
|
|
|
CampaignAd: mtype.Yes,
|
|
|
GaShowID: showId,
|
|
|
GaEmbedID: embedId,
|
|
|
GaDoubleID: doubleId,
|
|
|
AdStatus: status,
|
|
|
})
|
|
|
|
|
|
err = dao.ProjectAd.WithContext(s.ctx).Create(ads)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
m := dao.ProjectAd
|
|
|
_, err = m.WithContext(s.ctx).Where(m.ID.Eq(ads.ID)).UpdateSimple(
|
|
|
m.GaShowID.Value(showId),
|
|
|
m.GaEmbedID.Value(embedId),
|
|
|
m.GaDoubleID.Value(doubleId),
|
|
|
m.AdStatus.Value(status),
|
|
|
)
|
|
|
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
_ = cache.NewProjectAd(s.ctx).Clear(ads)
|
|
|
}
|
|
|
|
|
|
app.FeishuNormalSend(fmt.Sprintf(
|
|
|
"[%d_%s]配置广告成功, 谷歌展示广告id:%s, 谷歌内嵌广告id:%s,谷歌多重广告id:%s,状态:%d",
|
|
|
s.ProjectId,
|
|
|
s.ProjectHashId,
|
|
|
showId,
|
|
|
embedId,
|
|
|
doubleId,
|
|
|
status,
|
|
|
))
|
|
|
|
|
|
}
|
|
|
|
|
|
type openCloseCopyShare struct {
|
|
|
ctx context.Context
|
|
|
taskId string
|
|
|
ProjectId int64 `json:"project_id"`
|
|
|
ProjectHashId string `json:"project_hash_id"`
|
|
|
Open int8 `json:"open"`
|
|
|
}
|
|
|
|
|
|
func (s openCloseCopyShare) openCloseCopyShare() {
|
|
|
project, err := finder.Project(s.ctx, s.ProjectId, s.ProjectHashId)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if project == nil {
|
|
|
app.FeishuNormalSend(fmt.Sprintf("[%d_%s] 找不到对应的项目", s.ProjectId, s.ProjectHashId))
|
|
|
return
|
|
|
}
|
|
|
|
|
|
m := dao.Project
|
|
|
_, err = m.WithContext(s.ctx).Where(m.ID.Eq(project.ID)).UpdateSimple(m.CloseCopyShare.Value(s.Open))
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
_ = cache.NewProject(s.ctx).Clear(project)
|
|
|
app.Redis.Cache.Del(s.ctx,
|
|
|
fmt.Sprintf("certified:project:project_show_id:%d", project.ID),
|
|
|
fmt.Sprintf("certified:project:project_show_hash:%s", project.HashID),
|
|
|
)
|
|
|
app.FeishuNormalSend(fmt.Sprintf("[%d_%s]项目关闭社媒状态修改为[%s]", s.ProjectId, s.ProjectHashId, utils.Ternary(s.Open == mtype.Yes, "开启", "关闭")))
|
|
|
|
|
|
}
|
|
|
|
|
|
type openPushLadder struct {
|
|
|
ctx context.Context
|
|
|
taskId string
|
|
|
ProjectId int64 `json:"project_id"`
|
|
|
ProjectHashId string `json:"project_hash_id"`
|
|
|
Open int8 `json:"open"`
|
|
|
}
|
|
|
|
|
|
func (s openPushLadder) openPushLadder() {
|
|
|
project, err := finder.Project(s.ctx, s.ProjectId, s.ProjectHashId)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if project == nil {
|
|
|
app.FeishuNormalSend(fmt.Sprintf("[%d_%s] 找不到对应的项目", s.ProjectId, s.ProjectHashId))
|
|
|
return
|
|
|
}
|
|
|
|
|
|
m := dao.Project
|
|
|
_, err = m.WithContext(s.ctx).Where(m.ID.Eq(project.ID)).UpdateSimple(m.PushLadder.Value(s.Open))
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
_ = cache.NewProject(s.ctx).Clear(project)
|
|
|
app.Redis.Cache.Del(s.ctx,
|
|
|
fmt.Sprintf("certified:project:project_show_id:%d", project.ID),
|
|
|
fmt.Sprintf("certified:project:project_show_hash:%s", project.HashID),
|
|
|
)
|
|
|
app.FeishuNormalSend(fmt.Sprintf("[%d_%s]项目代理推送状态修改为[%s]", s.ProjectId, s.ProjectHashId, utils.Ternary(s.Open == mtype.Yes, "开启", "关闭")))
|
|
|
|
|
|
}
|
|
|
|
|
|
type openCert struct {
|
|
|
ctx context.Context
|
|
|
taskId string
|
|
|
ProjectId int64 `json:"project_id"`
|
|
|
ProjectHashId string `json:"project_hash_id"`
|
|
|
Open int8 `json:"open"`
|
|
|
}
|
|
|
|
|
|
func (s openCert) openCert() {
|
|
|
project, err := finder.Project(s.ctx, s.ProjectId, s.ProjectHashId)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if project == nil {
|
|
|
app.FeishuNormalSend(fmt.Sprintf("[%d_%s] 找不到对应的项目", s.ProjectId, s.ProjectHashId))
|
|
|
return
|
|
|
}
|
|
|
|
|
|
m := dao.Project
|
|
|
_, err = m.WithContext(s.ctx).Where(m.ID.Eq(project.ID)).UpdateSimple(m.FissionCertType.Value(s.Open))
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
_ = cache.NewProject(s.ctx).Clear(project)
|
|
|
app.Redis.Cache.Del(s.ctx,
|
|
|
fmt.Sprintf("certified:project:project_show_id:%d", project.ID),
|
|
|
fmt.Sprintf("certified:project:project_show_hash:%s", project.HashID),
|
|
|
)
|
|
|
app.FeishuNormalSend(fmt.Sprintf("[%d_%s]项目认证状态修改为[%s]", s.ProjectId, s.ProjectHashId, utils.Ternary(s.Open == mtype.Yes, "开启", "关闭")))
|
|
|
|
|
|
}
|
|
|
|
|
|
// 奖品库存缓存清理
|
|
|
type clearStock struct {
|
|
|
ctx context.Context
|
|
|
taskId string
|
|
|
CampaignId int64 `json:"campaign_id"`
|
|
|
}
|
|
|
|
|
|
func (s clearStock) clearStock() {
|
|
|
var err error
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
|
app.Logger.Error(s.ctx, fmt.Sprintf("fixData逻辑问题%v", err))
|
|
|
return
|
|
|
}
|
|
|
}()
|
|
|
cpn, err := finder.Campaign(s.ctx, s.CampaignId)
|
|
|
if err != nil || cpn == nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
m := dao.FissionCampaignReward
|
|
|
|
|
|
list, err := m.WithContext(s.ctx).Where(m.CampaignID.Eq(cpn.ID), m.IsDel.Eq(mtype.No)).Find()
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var ids []int64
|
|
|
|
|
|
for _, v := range list {
|
|
|
ids = append(ids, v.ID)
|
|
|
}
|
|
|
|
|
|
type num struct {
|
|
|
RewardId int64
|
|
|
Num int64
|
|
|
}
|
|
|
|
|
|
recordM := dao.FissionRewardRecord.SubTable(cpn.ID)
|
|
|
var nums []*num
|
|
|
err = recordM.WithContext(s.ctx).Select(recordM.RewardID, recordM.ID.Count().As("num")).Where(recordM.RewardID.In(ids...)).Group(recordM.RewardID).Scan(&nums)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var idMap = make(map[int64]int64)
|
|
|
for _, v := range nums {
|
|
|
idMap[v.RewardId] = v.Num
|
|
|
}
|
|
|
|
|
|
var preIdMap = make(map[int64]int64)
|
|
|
switch cpn.FissionID {
|
|
|
case consts.IdKeep:
|
|
|
var preNums []*num
|
|
|
preM := dao.FissionKeep
|
|
|
err = preM.WithContext(s.ctx).Select(preM.RewardID, preM.ID.Count().As("num")).Where(preM.RewardID.In(ids...)).Group(preM.RewardID).Scan(&nums)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
for _, v := range preNums {
|
|
|
preIdMap[v.RewardId] = v.Num
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
for _, v := range list {
|
|
|
n, _ := app.Redis.Cache.Get(s.ctx, ckey.FissionCampaignRewardPool(v.ID)).Int64()
|
|
|
n1, _ := app.Redis.Cache.Get(s.ctx, ckey.FissionCampaignRewardUseStock(v.ID)).Int64()
|
|
|
|
|
|
app.FeishuNormalSend("配置库存:%d, 实际发放库存: %d,redis记录库存池剩余库存:%d,已使用库存: %d", v.Stock, idMap[v.ID], n, n1)
|
|
|
|
|
|
app.Redis.Cache.Del(s.ctx, ckey.FissionCampaignRewardPool(v.ID), ckey.FissionCampaignRewardUseStock(v.ID))
|
|
|
|
|
|
pn, _ := app.Redis.Cache.Get(s.ctx, ckey.FissionCampaignPreRewardPool(v.ID)).Int64()
|
|
|
pn1, _ := app.Redis.Cache.Get(s.ctx, ckey.FissionCampaignRewardPreUseStock(v.ID)).Int64()
|
|
|
|
|
|
app.FeishuNormalSend("配置预备库存:%d, 实际发放预备库存: %d,redis记录预备库存池剩余预备库存:%d,已使用预备库存: %d", v.Stock, preIdMap[v.ID], pn, pn1)
|
|
|
|
|
|
app.Redis.Cache.Del(s.ctx, ckey.FissionCampaignPreRewardPool(v.ID), ckey.FissionCampaignRewardPreUseStock(v.ID))
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
type resetAdsInit struct {
|
|
|
ctx context.Context
|
|
|
taskId string
|
|
|
Url string `json:"url"`
|
|
|
}
|
|
|
|
|
|
// 重制广告配置
|
|
|
func (s resetAdsInit) resetAdsInit() {
|
|
|
|
|
|
resp, err := app.EtcdCli.Put(s.ctx, app.EtcdConfig+"/ads", s.Url)
|
|
|
if err != nil {
|
|
|
app.FeishuNormalSend("重制广告配置错误:%v", err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
app.FeishuNormalSend("重制广告配置成功, Header: %+v, PrevKv: %+v", resp.Header, resp.PrevKv)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
type taskCenterLang struct {
|
|
|
ctx context.Context
|
|
|
taskId string
|
|
|
Refresh int32 `json:"refresh"`
|
|
|
Ver int64 `json:"ver"`
|
|
|
}
|
|
|
|
|
|
// 重制广告配置
|
|
|
func (s taskCenterLang) taskCenterLang() {
|
|
|
var err error
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
|
app.Logger.Error(s.ctx, fmt.Sprintf("语言包处理有异常:%v", err))
|
|
|
return
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
dir, _ := os.Getwd()
|
|
|
|
|
|
var path string
|
|
|
if consts.RunTest {
|
|
|
path = fmt.Sprintf("../../../asset/taskcenter")
|
|
|
} else {
|
|
|
path = fmt.Sprintf("%s/asset/taskcenter", dir)
|
|
|
}
|
|
|
|
|
|
client, err := oss.New("https://oss-cn-shenzhen.aliyuncs.com", "LTAI5tNvMLF181bTb3qCZxk4", "9HXWh6yTXhbBQ7WaMkS1c3o0UNtl7A")
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 填写存储空间名称,例如examplebucket。
|
|
|
bucket, err := client.Bucket("client-project-resource")
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var yunPath = "taskcenter/lang"
|
|
|
var fileNames []string
|
|
|
files, _ := os.ReadDir(path)
|
|
|
for _, v := range files {
|
|
|
name := fmt.Sprintf("%s/%s", yunPath, v.Name())
|
|
|
err = bucket.PutObjectFromFile(name, fmt.Sprintf("%s/%s", path, v.Name()))
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
fileNames = append(fileNames, name)
|
|
|
}
|
|
|
|
|
|
if s.Refresh == 0 {
|
|
|
app.FeishuNormalSend("任务中心语言包处理成功,仅更新远端语言包")
|
|
|
return
|
|
|
}
|
|
|
|
|
|
b, _ := jsonm.MarshalToString(map[string]interface{}{
|
|
|
"ver": utils.STernary[int64](s.Ver, 0, time.Now().Unix()),
|
|
|
"path": fmt.Sprintf("%s/%s", config.Config.Upload.Host, yunPath),
|
|
|
})
|
|
|
|
|
|
resp, err := app.EtcdCli.Put(s.ctx, "/taskcenter/lang", b)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
app.FeishuNormalSend("任务中心语言包处理成功, Header: %+v, PrevKv: %+v, data: %s, 文件内容:%+v", resp.Header, resp.PrevKv, b, fileNames)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
type clearCpn struct {
|
|
|
ctx context.Context
|
|
|
CampaignHashId string `json:"campaign_hash_id"`
|
|
|
}
|
|
|
|
|
|
// 清楚活动的用户设备数据
|
|
|
func (s clearCpn) clearCpn() {
|
|
|
d := dao.Q.Begin()
|
|
|
var err error
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
|
app.Logger.Error(s.ctx, fmt.Sprintf("clearCpn逻辑问题%v", err))
|
|
|
d.Rollback()
|
|
|
return
|
|
|
}
|
|
|
d.Commit()
|
|
|
}()
|
|
|
|
|
|
cpn, err := finder.Campaign(s.ctx, s.CampaignHashId)
|
|
|
if err != nil || cpn == nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
project, err := finder.Project(s.ctx, cpn.ProjectID)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if project == nil || project.IsDel == mtype.Yes || project.IsTest == mtype.No {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
m := d.FissionUser.SubTable(cpn.ID)
|
|
|
|
|
|
list, err := m.WithContext(s.ctx).Where(m.CampaignID.Eq(cpn.ID)).Limit(50).Find()
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if len(list) == 0 {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
cc := cache.NewFissionUser(s.ctx, cpn.ID)
|
|
|
var keys []string
|
|
|
var ids []int64
|
|
|
for _, v := range list {
|
|
|
ids = append(ids, v.ID)
|
|
|
|
|
|
if v.DeviceID != "" {
|
|
|
keys = append(keys, cc.IdxKey("campaign_id", v.CampaignID, "device_id", v.DeviceID))
|
|
|
}
|
|
|
|
|
|
if v.SubUserID != "" {
|
|
|
keys = append(keys, cc.IdxKey("campaign_id", v.CampaignID, "sub_user_id", v.SubUserID))
|
|
|
}
|
|
|
|
|
|
if v.DeviceID != "" {
|
|
|
_, _ = app.NewDeepLinkDevice().DeleteDevice(s.ctx, &ddevicepb.DeleteDeviceReq{
|
|
|
Code: v.DeviceID,
|
|
|
ProjectId: project.ID,
|
|
|
})
|
|
|
}
|
|
|
}
|
|
|
|
|
|
res, err := m.WithContext(s.ctx).Where(m.ID.In(ids...)).Delete()
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
statM := d.FissionUserStat
|
|
|
resStat, err := statM.WithContext(s.ctx).Where(statM.UserID.In(ids...)).Delete()
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
_ = cc.Clear(list...)
|
|
|
|
|
|
if len(keys) > 0 {
|
|
|
app.Redis.Cache.Del(s.ctx, keys...)
|
|
|
}
|
|
|
|
|
|
app.FeishuNormalSend("用户数据删除:%d,统计数据删除:%d", res.RowsAffected, resStat.RowsAffected)
|
|
|
}
|
|
|
|
|
|
type openTest struct {
|
|
|
ctx context.Context
|
|
|
taskId string
|
|
|
ProjectId int64 `json:"project_id"`
|
|
|
ProjectHashId string `json:"project_hash_id"`
|
|
|
Open int8 `json:"open"`
|
|
|
}
|
|
|
|
|
|
// 把项目变成测试项目
|
|
|
func (s openTest) openTest() {
|
|
|
project, err := finder.Project(s.ctx, s.ProjectId, s.ProjectHashId)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if project == nil {
|
|
|
app.FeishuNormalSend(fmt.Sprintf("[%d_%s] 找不到对应的项目", s.ProjectId, s.ProjectHashId))
|
|
|
return
|
|
|
}
|
|
|
|
|
|
m := dao.Project
|
|
|
_, err = m.WithContext(s.ctx).Where(m.ID.Eq(project.ID)).UpdateSimple(m.IsTest.Value(s.Open))
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
_ = cache.NewProject(s.ctx).Clear(project)
|
|
|
app.Redis.Cache.Del(s.ctx,
|
|
|
fmt.Sprintf("certified:project:project_show_id:%d", project.ID),
|
|
|
fmt.Sprintf("certified:project:project_show_hash:%s", project.HashID),
|
|
|
)
|
|
|
app.FeishuNormalSend(fmt.Sprintf("[%d_%s]项目测试状态修改为[%s]", s.ProjectId, s.ProjectHashId, utils.Ternary(s.Open == mtype.Yes, "开启", "关闭")))
|
|
|
|
|
|
}
|
|
|
|
|
|
type getCache struct {
|
|
|
ctx context.Context
|
|
|
taskId string
|
|
|
Key string `json:"key"`
|
|
|
Cmd string `json:"cmd"`
|
|
|
}
|
|
|
|
|
|
// 把项目变成测试项目
|
|
|
func (s getCache) getCache() {
|
|
|
|
|
|
var v string
|
|
|
switch s.Cmd {
|
|
|
case "hget":
|
|
|
r, _ := app.Redis.Cache.HGetAll(s.ctx, s.Key).Result()
|
|
|
v, _ = jsonm.MarshalToString(r)
|
|
|
case "del":
|
|
|
r, _ := app.Redis.Cache.Del(s.ctx, s.Key).Result()
|
|
|
v = fmt.Sprintf("del:%d rows", r)
|
|
|
default:
|
|
|
v, _ = app.Redis.Cache.Get(s.ctx, s.Key).Result()
|
|
|
}
|
|
|
|
|
|
app.FeishuNormalSend("key:%s value:%s", s.Key, utils.STernary[string](v, "", "没有查到数据哦"))
|
|
|
|
|
|
}
|
|
|
|
|
|
type printAllLog struct {
|
|
|
ctx context.Context
|
|
|
taskId string
|
|
|
Open int32 `json:"open"`
|
|
|
}
|
|
|
|
|
|
// 把项目变成测试项目
|
|
|
func (s printAllLog) printAllLog() {
|
|
|
|
|
|
switch s.Open {
|
|
|
case 1:
|
|
|
consts.PrintAllLog = true
|
|
|
default:
|
|
|
consts.PrintAllLog = false
|
|
|
}
|
|
|
|
|
|
app.FeishuNormalSend(fmt.Sprintf("全量日志状态修改为[%s]", utils.Ternary[string](s.Open == mtype.Yes, "开启", "关闭")))
|
|
|
}
|
|
|
|
|
|
type collectSlowLog struct {
|
|
|
ctx context.Context
|
|
|
taskId string
|
|
|
Open int32 `json:"open"`
|
|
|
}
|
|
|
|
|
|
// 把项目变成测试项目
|
|
|
func (s collectSlowLog) collectSlowLog() {
|
|
|
defer app.TryCatch(s.ctx, "收集慢日志状态修改")
|
|
|
|
|
|
switch s.Open {
|
|
|
case 1:
|
|
|
if consts.CollectSlowLog {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
consts.CollectSlowLog = true
|
|
|
printer.Slow.Run()
|
|
|
default:
|
|
|
if !consts.CollectSlowLog {
|
|
|
return
|
|
|
}
|
|
|
consts.CollectSlowLog = false
|
|
|
printer.Slow.Stop()
|
|
|
}
|
|
|
|
|
|
app.FeishuNormalSend(fmt.Sprintf("收集慢日志状态修改为[%s]", utils.Ternary[string](s.Open == mtype.Yes, "开启", "关闭")))
|
|
|
}
|
|
|
|
|
|
type setLangParts struct {
|
|
|
ctx context.Context
|
|
|
taskId string
|
|
|
Mark string `json:"mark"`
|
|
|
Parts string `json:"parts"`
|
|
|
}
|
|
|
|
|
|
func (s setLangParts) setLangParts() {
|
|
|
m := dao.FissionTempGroup
|
|
|
g, err := m.WithContext(s.ctx).Where(m.Mark.Eq(s.Mark)).Take()
|
|
|
if err != nil || g == nil || g.LangParts == s.Parts {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
_, err = m.WithContext(s.ctx).Where(m.ID.Eq(g.ID)).UpdateSimple(m.LangParts.Value(s.Parts))
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
_ = cache.NewFissionTempGroup(s.ctx).Clear(g)
|
|
|
|
|
|
app.FeishuNormalSend(fmt.Sprintf("模版组[%s]语言包修改过成功[%s]->[%s]", g.Mark, g.LangParts, s.Parts))
|
|
|
}
|
|
|
|
|
|
type openLvApi struct {
|
|
|
ctx context.Context
|
|
|
taskId string
|
|
|
CompanyId int64 `json:"company_id"`
|
|
|
Open int32 `json:"open"`
|
|
|
}
|
|
|
|
|
|
func (s openLvApi) openLvApi() {
|
|
|
|
|
|
made, err := cache.NewCompanyMade(s.ctx).FindByUniqId(s.CompanyId, mtype.CompanyMadeMarkLvApi)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if made == nil && s.Open == 1 {
|
|
|
err = provider.NewCompanyMade(s.ctx, s.CompanyId).SetMake(mtype.CompanyMadeMarkLvApi, "")
|
|
|
|
|
|
app.FeishuNormalSend(fmt.Sprintf("企业[%d]开启[%s]组件", s.CompanyId, mtype.CompanyMadeMarkLvApi))
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if made != nil && s.Open == 0 {
|
|
|
err = provider.NewCompanyMade(s.ctx, s.CompanyId).Del(mtype.CompanyMadeMarkLvApi)
|
|
|
|
|
|
app.FeishuNormalSend(fmt.Sprintf("企业[%d]关闭[%s]组件", s.CompanyId, mtype.CompanyMadeMarkLvApi))
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
type openFissionTemp struct {
|
|
|
ctx context.Context
|
|
|
taskId string
|
|
|
CompanyId int64 `json:"company_id"`
|
|
|
Temp []string `json:"temp"`
|
|
|
}
|
|
|
|
|
|
func (s openFissionTemp) openFissionTemp() {
|
|
|
|
|
|
made, err := cache.NewCompanyMade(s.ctx).FindByUniqId(s.CompanyId, mtype.CompanyMadeMarkFissionTemp)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if len(s.Temp) > 0 {
|
|
|
err = provider.NewCompanyMade(s.ctx, s.CompanyId).SetMake(mtype.CompanyMadeMarkFissionTemp, s.Temp)
|
|
|
|
|
|
app.FeishuNormalSend(fmt.Sprintf("企业[%d]开启[%s]组件, 模板:%+v", s.CompanyId, mtype.CompanyMadeMarkFissionTemp, s.Temp))
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if made != nil && len(s.Temp) == 0 {
|
|
|
err = provider.NewCompanyMade(s.ctx, s.CompanyId).Del(mtype.CompanyMadeMarkFissionTemp)
|
|
|
|
|
|
app.FeishuNormalSend(fmt.Sprintf("企业[%d]关闭[%s]组件", s.CompanyId, mtype.CompanyMadeMarkFissionTemp))
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
type pushWaitReward struct {
|
|
|
ctx context.Context
|
|
|
taskId string
|
|
|
CampaignId int64 `json:"campaign_id"`
|
|
|
}
|
|
|
|
|
|
func (s pushWaitReward) pushWaitReward() {
|
|
|
|
|
|
m := dao.FissionRewardRecord.SubTable(s.CampaignId)
|
|
|
list, err := m.WithContext(s.ctx).Where(m.CampaignID.Eq(s.CampaignId), m.Status.Eq(mtype.FissionRewardRecordStatusWait)).Find()
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
for _, record := range list {
|
|
|
producer.NewCampaignNotice(s.ctx).CampaignRewardNotify(types.CampaignRewardNotify{
|
|
|
CampaignId: record.CampaignID,
|
|
|
UserId: record.UserID,
|
|
|
UserRewardId: record.ID,
|
|
|
})
|
|
|
}
|
|
|
}
|
|
|
|
|
|
type statCampaign struct {
|
|
|
ctx context.Context
|
|
|
taskId string
|
|
|
|
|
|
BehaviorType int32 `json:"behavior_type"`
|
|
|
IpAddress string `json:"ip_address"`
|
|
|
UserID string `json:"user_id"`
|
|
|
DeviceID string `json:"device_id"`
|
|
|
Event string `json:"event"`
|
|
|
EventData []types.EventData `json:"event_data"`
|
|
|
ProjectID int64 `json:"project_id"`
|
|
|
Hid int64 `json:"hid"`
|
|
|
TsHID string `json:"ts_hid"` //任务中心hash_id
|
|
|
Language string `json:"language"` // 语言
|
|
|
}
|
|
|
|
|
|
func (s statCampaign) statCampaign() {
|
|
|
p := producer.NewStatCampaign(s.ctx)
|
|
|
|
|
|
p.StatCampaign(types.StatCampaignValue{
|
|
|
BehaviorType: s.BehaviorType,
|
|
|
BehaviorTime: time.Now().Unix(),
|
|
|
IpAddress: s.IpAddress,
|
|
|
Os: "ios",
|
|
|
OsVersion: "16.3",
|
|
|
DeviceModel: "iphone",
|
|
|
DeviceID: s.DeviceID,
|
|
|
UserID: s.UserID,
|
|
|
Event: s.Event,
|
|
|
EventData: s.EventData,
|
|
|
ProjectID: s.ProjectID,
|
|
|
Language: s.Language,
|
|
|
})
|
|
|
|
|
|
}
|