Initial commit

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-15 13:57:10 +08:00
co-authored by Claude Opus 5
commit 8679200f41
1897 changed files with 257900 additions and 0 deletions
+182
View File
@@ -0,0 +1,182 @@
package statrecordmod
import (
"fmt"
"time"
"91porn-server/common/db"
"91porn-server/common/log"
"91porn-server/models"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
var mdb *db.MongoDB
const table = models.StatRecord
func coll(t *db.MongoTool) *db.MongoTool {
if t == nil {
return mdb.Coll(table)
}
return t.Coll(table)
}
// initIndex 初始化索引
func initIndex() {
many := []mongo.IndexModel{
{
Keys: bson.D{{Key: "name", Value: 1}},
Options: options.Index().SetUnique(true),
},
{
Keys: bson.D{{Key: "job", Value: 1}, {Key: "item", Value: 1}},
Options: options.Index().SetSparse(true).SetUnique(true),
},
{
Keys: bson.D{{Key: "createdAt", Value: -1}},
},
{
Keys: bson.D{{Key: "updatedAt", Value: -1}},
},
}
if _, err := coll(nil).CreateIndex(many); err != nil {
panic(fmt.Sprintf("%s model set index err ==>[%+v]", table, err))
}
}
// ChangeStatTrans ChangeStatTrans
func UpsertOneTrans(trans *db.MongoTool, name string, recordTime time.Time) error {
filter := bson.M{
"name": name,
}
update := bson.M{
"$set": bson.M{
"recordTime": recordTime,
"updatedAt": time.Now(),
},
"$setOnInsert": bson.M{
"name": name,
"fristRecordTime": recordTime,
"createdAt": time.Now(),
},
}
if _, err := coll(trans).UpsertOne(filter, update); err != nil {
log.Error("statrecordmod UpsertOneTrans error:%v\n", log.E(err))
return err
}
return nil
}
type ItemRecordAt struct {
Job string
Item string
RecordTime time.Time
}
func MergeName(job string, item string) string {
return fmt.Sprintf("%s.%s", job, item)
}
func UpsertOneItemTrans(trans *db.MongoTool, job string, item string, recordTime time.Time) error {
filter := bson.M{
"job": job,
"item": item,
}
update := bson.M{
"$set": bson.M{
"recordTime": recordTime,
"updatedAt": time.Now(),
},
"$setOnInsert": bson.M{
"name": MergeName(job, item),
"job": job,
"item": item,
"fristRecordTime": recordTime,
"createdAt": time.Now(),
},
}
if _, err := coll(trans).UpsertOne(filter, update); err != nil {
log.Error("statrecordmod UpsertOneItemTrans error:%v\n", log.E(err))
return err
}
return nil
}
// FindOne FindOne
func findOneByName(Name string) (Record, error) {
filter := bson.M{
"name": Name,
}
doc := Record{}
return doc, coll(nil).FindOne(&doc, filter)
}
// LastRecordTime 最后的记录时间,服务器的时区
func LastRecordTime(name string, defaultTime time.Time) (time.Time, error) {
//获取上次记录时间
doc, err := findOneByName(name)
if err != nil {
return time.Time{}, fmt.Errorf("LastRecordTime err:%+v\n", err)
}
//设定为服务器的时区
var tim = defaultTime
if !doc.RecordTime.IsZero() {
tim = doc.RecordTime
}
//不依赖数据库 保证时间是服务器时间
localTime := tim.In(time.Local)
log.Debug("LastRecordTime local Info", log.Any("Local", time.Local), log.Any("time", tim), log.Any("returnTime", localTime))
return localTime, nil
}
func FristRecordTimeByName(name string) (time.Time, error) {
doc, err := findOneByName(name)
if err != nil {
return time.Time{}, fmt.Errorf("FristRecordTimeByName err:%+v\n", err)
}
return doc.FristRecordTime, nil
}
func findOneByJob(job string, item string) (Record, error) {
filter := bson.M{
"job": job,
"item": item,
}
doc := Record{}
return doc, coll(nil).FindOne(&doc, filter)
}
func FristRecordTimeByJob(job string, item string) (time.Time, error) {
doc, err := findOneByJob(job, item)
if err != nil {
return time.Time{}, fmt.Errorf("FristRecordTimeByName err:%+v\n", err)
}
return doc.FristRecordTime, nil
}
func findManyByJob(job string) ([]Record, error) {
filter := bson.M{
"job": job,
}
list := []Record{}
return list, coll(nil).Find(&list, filter)
}
func LastRecordTimeMap(job string, defaultTimeMap map[string]time.Time) (map[string]time.Time, error) {
list, err := findManyByJob(job)
if err != nil {
return nil, err
}
for _, v := range list {
defaultTimeMap[v.Item] = v.RecordTime
}
return defaultTimeMap, nil
}
func DeleteStatRecordByName(name string) error {
_, err := coll(nil).DeleteOne(bson.M{"name": name})
return err
}
+84
View File
@@ -0,0 +1,84 @@
package statrecordmod
import (
"time"
"91porn-server/common/db"
"go.mongodb.org/mongo-driver/bson/primitive"
)
type Record struct {
ID primitive.ObjectID `bson:"_id,omitempty"`
Name string `bson:"name"` //任务名
Job string `bson:"job"` //工作
Item string `bson:"item"` //项目
RecordTime time.Time `bson:"recordTime"` //提交时间
FristRecordTime time.Time `bson:"fristRecordTime"` //第一次提交时间
CreatedAt time.Time `bson:"createdAt"` //创建时间
UpdatedAt time.Time `bson:"updatedAt"` //更新时间
}
const (
OneMinuteScale = 1 //对齐时间(分钟)
FiveMinuteScale = 5 //对齐时间(分钟)
FifteenMinuteScale = 15 //对齐时间(分钟)
ThirtyMinuteScale = 30 //对齐时间(分钟)
OneDayScale = 1440 //对齐时间(分钟)
)
const (
//stat 基本统计
DailyStatJob1 = "dailyStatJob1"
ChannelStatJob = "channelStatJob"
VideoStatJob = "videoStatJob"
VideoTotalStatJob = "videoTotalStatJob"
ChannelRetainStatJob = "channelRetainStatJob"
KeywordStatJob = "keywordStatJob"
KeywordRankStatJob = "keywordRankStatJob"
RechargeOrderStatJob = "rechargeOrderStatJob"
WithdrawOrderStatJob = "withdrawOrderStatJob"
TagPlayStatJob = "tagPlayStatJob"
ADSStatJob = "adsStatJob"
TotalJob = "totalJob"
ChTotalJob = "chTotalJob"
InvitStatJob = "InvitStatJob"
DataPointJob = "dataPointJob"
UserStatJob = "userStatJob"
DiscStatJob = "discStatJob"
DiscTotalStatJob = "discTotalStatJob"
Retain1StatJob = "retainStatJob1"
DicsZoomStatJob = "dicsZoomStatJob"
//act 活动统计,生命周期等于活动时间
ActInvitCountJob_01_17 = "ActInvitCountJob_01_17"
ActInvitCoinsJob_01_17 = "ActInvitCoinsJob_01_17"
LotteryActID = "LotteryActID"
// 数据同步
ElasticSyncVideoJob = "esVideoJob"
ElasticSyncMediaJob = "esMediaJob"
ElasticSyncTagJob = "esTagJob"
ElasticSyncUserJob = "esUserJob"
ElasticSyncKeywordJob = "esKeywordJob"
ElasticSyncSearchLogJob = "esSearchLogJob"
ElasticSyncLoufengJob = "esLouFengJob"
ElasticSyncAudioBookJob = "esAudioBookJob"
SpiderSyncLoufengJob = "spiderLouFengJob"
SpiderSyncfictionJob = "spiderFictionJob"
SpiderSyncAudiobookJob = "spiderAudiobookJob"
SpiderSyncLoufengAgentJob = "spiderSyncLoufengAgentJob"
RedisSyncShortVideoJob = "rdShortVideoJob"
//sql折叠
SqlCollasperVidPageView = "sqlCollasperVidPageView"
SqlCollasperUserTotalWork = "sqlCollasperUserTotalWorks"
)
func Init() {
mdb = db.Init(table)
initIndex()
}