feat: 同步 huangguo2-server 的 11 个非基线提交

按意图重做在 huakui 代码底:
- 删除数据埋点逻辑:移除 pub/dataReport、reportser、srv_report、
  eventmod、上报定时任务及注册/登录/点赞/收藏/评论/解锁/订单处的
  上报调用和 reportSdkConfig 配置下发
- app 认证改为按设备ID识别用户:去掉 token 校验、Register/Login/
  ResetPassword/GuestLogin 接口,新增 ResolveDeviceUser 和设备缓存
- 广告改为按 AppId 从媒资中心拉取:pub/storage 新增 QueryAdvitise,
  UpdateAdvitiseData 替代 UpdateAdvitiseDataFromJt
- 后台登录取消谷歌二次验证,密码正确即登录
- 短剧/专题 slug 改为 10 位大小写字母+数字混合
- 本地 app.yaml/web.yaml 保留 HKDJNET_* 模板(不提交生产凭据)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-10-16 12:59:14 +08:00
co-authored by Claude Opus 4.7
parent 85c0071fd8
commit e7179da072
48 changed files with 346 additions and 2933 deletions
+10 -14
View File
@@ -26,26 +26,22 @@ func AccLogin(c *gin.Context) {
return
}
accInfo, err := srv_mwacc.AccLogin(c, req.Acc, req.Pwd, req.Code)
accInfo, err := srv_mwacc.AccLogin(c, req.Acc, req.Pwd)
if err != nil || accInfo == nil {
common.ServerJSON(c, err.Code, err.Msg)
return
}
resp := MainWebLoginResp{}
// 成功保存token
if ok, _ := mwacc.SaveToken(c, accInfo.Id, accInfo.Token); ok != true {
common.ServerJSON(c, srvdef.GenerateTokenFailed, srvdef.GenerateTokenFailed.Msg())
}
if len(accInfo.Qurl) != 0 {
resp.Qurl = accInfo.Qurl
} else {
// 成功保存token
if ok, _ := mwacc.SaveToken(c, accInfo.Id, accInfo.Token); ok != true {
common.ServerJSON(c, srvdef.GenerateTokenFailed, srvdef.GenerateTokenFailed.Msg())
}
resp.AccId = accInfo.Id
resp.Acc = accInfo.Acc
resp.RoleId = accInfo.RoleId
resp.Token = accInfo.Token
resp := MainWebLoginResp{
AccId: accInfo.Id,
Acc: accInfo.Acc,
RoleId: accInfo.RoleId,
Token: accInfo.Token,
}
common.ServerJSON(c, srvdef.Success, resp)
return
-5
View File
@@ -6,7 +6,6 @@ import (
"hkdj-web-server/pub/common/laosiji"
"hkdj-web-server/pub/common/log"
"hkdj-web-server/pub/common/srvversion"
"hkdj-web-server/pub/dataReport"
"hkdj-web-server/pub/esmanager"
"hkdj-web-server/pub/models"
"hkdj-web-server/pub/mongos"
@@ -77,10 +76,6 @@ func Run(args []string) {
mongos.StartLid()
initData()
initSeoPush()
dataReport.Init(dataReport.Config{
ApiUrl: webg.Conf.DataReport.Url,
RunMod: webg.Conf.RunMod,
})
initHttpServer()
+1 -2
View File
@@ -1336,8 +1336,7 @@ func ensureImportedPlayletSlug(ctx context.Context, playlet *playletmod.Playlet)
if playlet == nil {
return srvdef.New(srvdef.ErrParamError, "短剧数据为空", "")
}
source := utils.SlugSourceFromKeywordsOrTitle(playlet.SeoInfo.Keyworld, playlet.Title)
playlet.Slug = utils.MakeUniqueSlug(source, func(slug string) bool {
playlet.Slug = utils.MakeRandomSlug(func(slug string) bool {
exist, _ := playletmod.FindOnePlaylet(ctx, bson.M{
playletmod.FN.Playlet.Slug: slug,
})
+12 -41
View File
@@ -7,13 +7,11 @@ import (
"hkdj-web-server/pub/common/log"
"hkdj-web-server/pub/common/srvdef"
"hkdj-web-server/pub/common/utils"
"hkdj-web-server/pub/google"
"hkdj-web-server/pub/models/mwacc"
"hkdj-web-server/web/webg"
"strings"
"time"
"github.com/skip2/go-qrcode"
"go.mongodb.org/mongo-driver/bson"
)
@@ -78,8 +76,8 @@ func isCustomerServiceRole(ctx context.Context, acc *mwacc.MwAcc) bool {
return strings.Contains(roleName, "客服")
}
// 账号登录
func AccLogin(ctx context.Context, acc string, pwd string, code string) (*mwacc.MwAcc, *srvdef.SrvErr) {
// AccLogin 账号登录(已取消谷歌验证,密码正确即登录)
func AccLogin(ctx context.Context, acc string, pwd string) (*mwacc.MwAcc, *srvdef.SrvErr) {
var data *mwacc.MwAcc
res, dataErr := mwacc.FindOneAccByFilter(ctx, bson.M{
mwacc.FN.MwAcc.Acc: acc,
@@ -93,49 +91,22 @@ func AccLogin(ctx context.Context, acc string, pwd string, code string) (*mwacc.
return data, srvdef.New(srvdef.AccountErrAccessForbid, srvdef.AccountErrAccessForbid.Msg(), "")
}
// 通过验证,再次验证密码是否正确
md5pwd := crypt.StrToMd5(pwd)
if res.Pwd != md5pwd {
return data, srvdef.New(srvdef.AccountErrPasswordError, srvdef.AccountErrPasswordError.Msg(), "")
}
if !res.IsBase32 {
// 谷歌绑定二维码
googleUrl := google.NewGoogleAuth().GetQrcode(acc, res.Base32)
qrCodePNG, _ := qrcode.Encode(googleUrl, qrcode.Medium, 256)
bq := &mwacc.MwAcc{}
bq.Qurl = qrCodePNG
data = bq
} else {
// hf屏蔽
if webg.Conf.RunMod == "prod" && (res.RoleId != 46761 && res.RoleId != 29601) {
if code == "" {
return data, srvdef.New(srvdef.ErrCaptcha, srvdef.ErrCaptcha.Msg(), "")
}
result, Verr := google.NewGoogleAuth().VerifyCode(res.Base32, code)
if Verr != nil || !result {
return data, srvdef.New(srvdef.ErrCaptchaInvalid, srvdef.ErrCaptchaInvalid.Msg(), "")
}
}
// 通过验证,再次验证密码是否正确
pwd := crypt.StrToMd5(pwd)
if res.Pwd != pwd {
return data, srvdef.New(srvdef.AccountErrPasswordError, srvdef.AccountErrPasswordError.Msg(), "")
}
getToken, err := generateToken(res.Id)
if err != nil {
return data, srvdef.New(srvdef.GenerateTokenFailed, srvdef.GenerateTokenFailed.Msg(), "")
}
_ = mwacc.UpOneAccByFilter(ctx, bson.M{
mwacc.FN.MwAcc.Id: res.Id,
}, bson.M{
mwacc.FN.MwAcc.LastTime: time.Now(),
})
// 更新最近登录时间
data = res
data.Token = getToken
getToken, err := generateToken(res.Id)
if err != nil {
return data, srvdef.New(srvdef.GenerateTokenFailed, srvdef.GenerateTokenFailed.Msg(), "")
}
_ = mwacc.UpOneAccByFilter(ctx, bson.M{
mwacc.FN.MwAcc.Id: res.Id,
}, bson.M{
mwacc.FN.MwAcc.LastTime: time.Now(),
})
data = res
data.Token = getToken
return data, nil
}
-22
View File
@@ -2,7 +2,6 @@ package srv_playlet
import (
"context"
"hkdj-web-server/app/service/reportser"
"hkdj-web-server/pub/common/log"
"hkdj-web-server/pub/common/response"
"hkdj-web-server/pub/common/srvdef"
@@ -502,30 +501,9 @@ func SetPlayletStatus(ctx context.Context, req *proto.PlayletStatusSetReq) *srvd
log.Error("短剧状态同步ES失败", log.Any("短剧ID", syncIds), log.Any("状态", syncStatus), log.E(err))
}
}()
if flag := reportser.PlayletStatusFlag(req.Status); flag != 0 {
reportPlayletStatusEvents(ctx, ids, flag)
}
return nil
}
func reportPlayletStatusEvents(ctx context.Context, ids []int64, flag int64) {
if len(ids) == 0 {
return
}
list, err := playletmod.FindManyPlaylet(ctx, bson.M{playletmod.FN.Playlet.Id: bson.M{"$in": ids}}, options.Find().SetProjection(bson.D{
{Key: playletmod.FN.Playlet.Id, Value: 1},
{Key: playletmod.FN.Playlet.Title, Value: 1},
{Key: playletmod.FN.Playlet.MediaCenterId, Value: 1},
}))
if err != nil {
log.Error("短剧状态变更上报查询失败", log.Any("短剧ID", ids), log.E(err))
return
}
for _, item := range list {
reportser.ReportPlayletStatusChange(item, flag)
}
}
// SetPlayletRecommend 单/批量设置短剧是否推荐
func SetPlayletRecommend(ctx context.Context, req *proto.PlayletRecommendSetReq) *srvdef.SrvErr {
if req == nil {
+4 -24
View File
@@ -47,8 +47,7 @@ func ensureThemeSlug(ctx context.Context, ac *playletthememod.PlayletTheme, excl
}
return nil
}
source := utils.SlugSourceFromKeywordsOrTitle(ac.SeoInfo.Keyworld, ac.Name)
ac.Slug = utils.MakeUniqueSlug(source, func(slug string) bool {
ac.Slug = utils.MakeRandomSlug(func(slug string) bool {
filter := bson.M{playletthememod.FN.PlayletTheme.Slug: slug}
if excludeId > 0 {
filter[playletthememod.FN.PlayletTheme.Id] = bson.M{"$ne": excludeId}
@@ -80,16 +79,7 @@ func prepareThemeSlugOnUpdate(ctx context.Context, id int64, info *playletthemem
}
return nil
}
name := info.Name
if req.Name != nil {
name = strings.TrimSpace(*req.Name)
}
keywords := info.SeoInfo.Keyworld
if req.SeoInfo != nil {
keywords = normalizeSeoValue(*req.SeoInfo).Keyworld
}
source := utils.SlugSourceFromKeywordsOrTitle(keywords, name)
newSlug := utils.MakeUniqueSlug(source, func(s string) bool {
newSlug := utils.MakeRandomSlug(func(s string) bool {
exist, _ := playletthememod.FindOnePlayletTheme(ctx, bson.M{
playletthememod.FN.PlayletTheme.Slug: s,
playletthememod.FN.PlayletTheme.Id: bson.M{"$ne": id},
@@ -185,8 +175,7 @@ func ensurePlayletSlug(ctx context.Context, ac *playletmod.Playlet, excludeId in
}
return nil
}
source := utils.SlugSourceFromKeywordsOrTitle(ac.SeoInfo.Keyworld, ac.Title)
ac.Slug = utils.MakeUniqueSlug(source, func(slug string) bool {
ac.Slug = utils.MakeRandomSlug(func(slug string) bool {
filter := bson.M{playletmod.FN.Playlet.Slug: slug}
if excludeId > 0 {
filter[playletmod.FN.Playlet.Id] = bson.M{"$ne": excludeId}
@@ -218,16 +207,7 @@ func preparePlayletSlugOnUpdate(ctx context.Context, id int64, info *playletmod.
}
return nil
}
title := info.Title
if req.Title != nil {
title = strings.TrimSpace(*req.Title)
}
keywords := info.SeoInfo.Keyworld
if req.SeoInfo != nil {
keywords = normalizeSeoValue(*req.SeoInfo).Keyworld
}
source := utils.SlugSourceFromKeywordsOrTitle(keywords, title)
newSlug := utils.MakeUniqueSlug(source, func(s string) bool {
newSlug := utils.MakeRandomSlug(func(s string) bool {
exist, _ := playletmod.FindOnePlaylet(ctx, bson.M{
playletmod.FN.Playlet.Slug: s,
playletmod.FN.Playlet.Id: bson.M{"$ne": id},
+2 -88
View File
@@ -2,22 +2,15 @@ package srv_recharge
import (
"context"
"crypto/md5"
"encoding/hex"
"encoding/json"
"fmt"
"hkdj-web-server/pub/common/log"
"hkdj-web-server/pub/common/srvdef"
"hkdj-web-server/pub/common/useragent"
"hkdj-web-server/pub/dataReport"
"hkdj-web-server/pub/models/cointransmod"
"hkdj-web-server/pub/models/eventmod"
"hkdj-web-server/pub/models/rechargepackagemod"
"hkdj-web-server/pub/models/usermod"
"hkdj-web-server/pub/models/vipordermod"
"hkdj-web-server/pub/payment"
"hkdj-web-server/pub/pubdef"
"strconv"
"time"
"github.com/gin-gonic/gin"
@@ -88,6 +81,7 @@ func OnPayCenterCallback(ctx *gin.Context, param *BillCallbackParam) *srvdef.Srv
func handleVipOrderSuccess(order vipordermod.VipOrder, oid string, realAmount int64) {
ctx := context.Background()
_, _ = oid, realAmount
pkg, err := findVipPackage(ctx, order.CardId)
if err != nil {
@@ -119,12 +113,11 @@ func handleVipOrderSuccess(order vipordermod.VipOrder, oid string, realAmount in
Remark: payment.CoinTransRemark(cointransmod.TranTypeVipGiftCoin, pkg.Name),
})
}
reportVipOrderPaid(ctx, &order, oid, realAmount, expire)
}
func handleCoinOrderSuccess(order vipordermod.VipOrder, oid string, realAmount int64) {
ctx := context.Background()
_, _ = oid, realAmount
if err := addUserCoins(ctx, order.UserId, order.Coin); err != nil {
log.Error("handleCoinOrderSuccess addUserCoins failed, retrying",
@@ -138,8 +131,6 @@ func handleCoinOrderSuccess(order vipordermod.VipOrder, oid string, realAmount i
log.Info("handleCoinOrderSuccess done", log.Any("userId", order.UserId), log.Any("coin", order.Coin))
writeCoinOrderTrans(ctx, order)
reportCoinOrderPaid(ctx, &order, oid, realAmount)
}
func writeCoinOrderTrans(ctx context.Context, order vipordermod.VipOrder) {
@@ -229,80 +220,3 @@ func addUserCoins(ctx context.Context, userId int64, coin int64) *srvdef.SrvErr
},
)
}
func reportVipOrderPaid(ctx context.Context, order *vipordermod.VipOrder, oid string, realAmount int64, vipExpire time.Time) {
user, _ := usermod.FindOneUser(ctx, bson.M{usermod.FN.User.Id: order.UserId})
districtCode, ip := "", order.IPAddr
if user != nil {
districtCode = user.DistrictCode
}
ua := useragent.UA{SysType: order.SysType}
eventId := newEventId(pubdef.TrackerAppId(), order.UserId, order.TradeNo, order.CreatedAt.Unix())
cf := dataReport.NewCommonField(eventId, dataReport.EventTypeOrderPaid, districtCode, ua, strconv.FormatInt(user.Id, 10), ip)
var expireTS int64
if !vipExpire.IsZero() {
expireTS = vipExpire.Unix()
}
cf.Payload = dataReport.JsonRawMessage(&dataReport.OrderPaidEvent{
OrderID: order.TradeNo,
OrderType: "vip_subscription",
ProductID: strconv.FormatInt(order.CardId, 10),
Amount: dataReport.JsonNumber(realAmount),
Currency: "CNY",
VIPExpirationTime: dataReport.JsonNumber(expireTS),
PayType: order.PayMode,
PayChannel: order.PayChannel,
TransactionID: oid,
CreateTime: dataReport.JsonNumber(order.CreatedAt.Unix()),
})
insertEvent(ctx, cf, order.TradeNo)
}
func reportCoinOrderPaid(ctx context.Context, order *vipordermod.VipOrder, oid string, realAmount int64) {
user, _ := usermod.FindOneUser(ctx, bson.M{usermod.FN.User.Id: order.UserId})
districtCode, ip := "", order.IPAddr
if user != nil {
districtCode = user.DistrictCode
}
ua := useragent.UA{SysType: order.SysType}
eventId := newEventId(pubdef.TrackerAppId(), order.UserId, order.TradeNo, order.CreatedAt.Unix())
cf := dataReport.NewCommonField(eventId, dataReport.EventTypeOrderPaid, districtCode, ua, strconv.FormatInt(user.Id, 10), ip)
cf.Payload = dataReport.JsonRawMessage(&dataReport.OrderPaidEvent{
OrderID: order.TradeNo,
OrderType: "coin_purchase",
ProductID: strconv.FormatInt(order.CoinCfgId, 10),
Amount: dataReport.JsonNumber(realAmount),
Currency: "CNY",
CoinQuantity: dataReport.JsonNumber(order.Coin),
PayType: order.PayMode,
PayChannel: order.PayChannel,
TransactionID: oid,
CreateTime: dataReport.JsonNumber(order.CreatedAt.Unix()),
})
insertEvent(ctx, cf, order.TradeNo)
}
func insertEvent(ctx context.Context, cf dataReport.CommonField, tradeNo string) {
data, _ := json.Marshal(cf)
if err := eventmod.InsertOneEvent(ctx, &eventmod.Event{
EventId: cf.EventID,
EventType: cf.Event,
Data: string(data),
Status: eventmod.Default,
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
}); err != nil {
log.Error("insertEvent failed", log.Any("tradeNo", tradeNo), log.E(err))
}
}
func newEventId(appId string, uid int64, orderId interface{}, createTime int64) string {
input := fmt.Sprintf("%v%v%v%v", appId, uid, orderId, createTime)
h := md5.New()
h.Write([]byte(input))
return hex.EncodeToString(h.Sum(nil))
}
-73
View File
@@ -1,73 +0,0 @@
package srv_report
import (
"context"
"encoding/json"
"fmt"
"hkdj-web-server/pub/common/log"
"hkdj-web-server/pub/common/useragent"
"hkdj-web-server/pub/dataReport"
"hkdj-web-server/pub/models/eventmod"
"hkdj-web-server/pub/models/videocategorymod"
"hkdj-web-server/pub/models/videoinformationmod"
"strconv"
"time"
"go.mongodb.org/mongo-driver/bson"
)
// ReportVideoStatusChangeEvent 视频状态变更事件上报
func ReportVideoStatusChangeEvent(media *videoinformationmod.VideoInformation, flag, userId int64, ua useragent.UA) {
if media == nil || media.Id == 0 || flag == 0 {
return
}
var lsjId string
var videoTypeID = "default"
var videoTypeName = "默认分类"
if len(media.CategoryIds) > 0 {
ctx, cancel := context.WithTimeout(context.Background(), time.Second*3)
defer cancel()
category, _ := videocategorymod.FindOneVideoCategory(ctx, bson.M{
videocategorymod.FN.VideoCategory.Id: media.CategoryIds[0],
})
if category != nil {
videoTypeID = fmt.Sprintf("%v", category.Id)
videoTypeName = category.Name
}
}
event := dataReport.NewCommonField("", dataReport.EventTypeVideoStatusChange, "", ua, strconv.FormatInt(userId, 10), "")
event.Payload = dataReport.JsonRawMessage(&dataReport.VideoStatusChangeEvent{
MediaId: lsjId,
VideoID: fmt.Sprintf("%v", media.Id),
VideoTitle: media.Title,
VideoTypeID: videoTypeID,
VideoTypeName: videoTypeName,
Flag: dataReport.JsonNumber(flag),
})
b, _ := json.Marshal(event)
if err := eventmod.InsertOneEvent(context.Background(), &eventmod.Event{
EventId: event.EventID,
EventType: event.Event,
Data: string(b),
Status: eventmod.Default,
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
}); err != nil {
log.Error("ReportVideoStatusChangeEvent fail", log.Any("mediaId", media.Id), log.E(err))
}
}
// VideoStatusFlag 将媒体状态映射为上报flag
func VideoStatusFlag(status videoinformationmod.InformationSatus) int64 {
switch status {
case videoinformationmod.InformationSatusVerifyOK:
return 1 // 上架
case videoinformationmod.InformationSatusVerifyCancel:
return 2 // 未通过
default:
return 0
}
}
-11
View File
@@ -2,7 +2,6 @@ package srv_videoinfo
import (
"context"
"hkdj-web-server/pub/common/godef"
"hkdj-web-server/pub/common/log"
"hkdj-web-server/pub/common/playletcache"
"hkdj-web-server/pub/common/srvdef"
@@ -14,7 +13,6 @@ import (
"hkdj-web-server/pub/seo/sitemapdirty"
"hkdj-web-server/pub/storage"
"hkdj-web-server/pub/storage/proxy"
"hkdj-web-server/web/service/srv_report"
"hkdj-web-server/web/service/srv_search"
"hkdj-web-server/web/service/srv_seopush"
"hkdj-web-server/web/service/srv_videoslug"
@@ -353,15 +351,6 @@ func UpdateVideoInfo(ctx context.Context, id, userId int64, param VideoInfoUpdat
}
}()
}
if param.Status != nil && info.Status != *param.Status {
if flag := srv_report.VideoStatusFlag(*param.Status); flag != 0 {
mediaCopy := *info
mediaCopy.Status = *param.Status
godef.Go(func() {
srv_report.ReportVideoStatusChangeEvent(&mediaCopy, flag, userId, ua)
})
}
}
sitemapdirty.Mark(ctx)
if param.Status != nil {
if *param.Status == videoinformationmod.InformationSatusVerifyOK &&
-124
View File
@@ -1,124 +0,0 @@
package job
import (
"context"
"encoding/json"
"hkdj-web-server/pub/common/log"
"hkdj-web-server/pub/dataReport"
"hkdj-web-server/pub/models/eventmod"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo/options"
)
var isRuining = false
const (
maxRetryCount = 10 // 最大重试次数
maxReportNum = 100 // 最大上报数
)
func Report() {
//防止重入
if isRuining {
return
}
isRuining = true
defer func() {
isRuining = false
}()
ctx := context.Background()
opts := options.Find()
opts = opts.SetSort(bson.D{{Key: "_id", Value: 1}}).SetLimit(1000)
// 查询出一千条记录批量上传
list, stdErr := eventmod.FindManyEvent(ctx, bson.M{
"$or": []bson.M{
bson.M{
"status": eventmod.Default,
},
bson.M{
"status": eventmod.Failure,
"retryCount": bson.M{"$lte": maxRetryCount},
},
},
}, opts)
if stdErr != nil {
log.Error("Get event list error", log.E(stdErr))
return
}
if len(list) == 0 {
return
}
var eventList []*dataReport.CommonField
for _, v := range list {
event := &dataReport.CommonField{}
err := json.Unmarshal([]byte(v.Data), &event)
if err != nil {
log.Error("event report json.Unmarshal fail", log.Any("eventData", v.Data), log.E(err))
continue
}
eventList = append(eventList, event)
if len(eventList) < maxReportNum {
continue
}
// 批量上报
err = dataReport.BatchReport(ctx, eventList)
if err != nil {
log.Error("Batch report error", log.E(err))
// 将这些设置为失败
onReportEventFail(ctx, eventList)
} else {
onReportEventSuccess(ctx, eventList)
}
eventList = []*dataReport.CommonField{} // 重新变成0个
}
// 将剩余的批量上报
err := dataReport.BatchReport(ctx, eventList)
if err != nil {
log.Error("Batch report error", log.E(err))
// 将这些设置为失败
onReportEventFail(ctx, eventList)
} else {
onReportEventSuccess(ctx, eventList)
}
}
func onReportEventSuccess(ctx context.Context, eventList []*dataReport.CommonField) {
eventIds := []string{}
for _, v := range eventList {
eventIds = append(eventIds, v.EventID)
}
if len(eventIds) == 0 {
return
}
err := eventmod.UpdateManyEvent(ctx, bson.M{
"eventId": bson.M{"$in": eventIds},
}, bson.M{
"$set": bson.M{"status": eventmod.Success},
})
if err != nil {
log.Error("Update event fail", log.E(err))
return
}
}
func onReportEventFail(ctx context.Context, eventList []*dataReport.CommonField) {
eventIds := []string{}
for _, v := range eventList {
eventIds = append(eventIds, v.EventID)
}
if len(eventIds) == 0 {
return
}
err := eventmod.UpdateManyEvent(ctx, bson.M{
"eventId": bson.M{"$in": eventIds},
}, bson.M{
"$set": bson.M{"status": eventmod.Failure},
"$inc": bson.M{"retryCount": 1},
})
if err != nil {
log.Error("Update event fail", log.E(err))
return
}
}
-5
View File
@@ -3,7 +3,6 @@ package skd
import (
"hkdj-web-server/pub/common/log"
"hkdj-web-server/web/service/srv_mediaresource"
job "hkdj-web-server/web/skd/job/reportdata"
seopushjob "hkdj-web-server/web/skd/job/seopush"
"hkdj-web-server/web/skd/job/vipexpiry"
"hkdj-web-server/web/skd/playletwatermark"
@@ -60,10 +59,6 @@ func Start() {
}
if webg.Conf.DataReport.Url != "" {
_, _ = skdCron.AddFunc("0/1 * * * * ?", func() { job.Report() })
}
// 每天凌晨 02:00 重置 VIP 已过期用户的 VipType
_, _ = skdCron.AddFunc("0 0 2 * * ?", func() {
vipexpiry.ResetExpiredVip()
-3
View File
@@ -56,9 +56,6 @@ type GlobalCfgEx struct {
Secret string `yaml:"secret"` // 商户密钥
} `yaml:"playletMediaResourceDBCfg"`
NewInnerStatUrl string `yaml:"newInnerStatUrl"`
DataReport struct {
Url string `yaml:"url"`
} `yaml:"dataReport"`
IndexNow struct {
Key string `yaml:"key"` // 与 SEO 站点的 {key}.txt 验证文件对应
} `yaml:"indexNow"`