Jianghan 8 månader sedan
förälder
incheckning
2e56cc3647
4 ändrade filer med 135 tillägg och 3 borttagningar
  1. 5 0
      doFreeClueSign/config.yaml
  2. 111 1
      doFreeClueSign/job/job.go
  3. 16 1
      doFreeClueSign/job/mamager.go
  4. 3 1
      doFreeClueSign/main.go

+ 5 - 0
doFreeClueSign/config.yaml

@@ -1,3 +1,4 @@
+lastId: 0
 mongodb:
   default: #qfw
     address: "192.168.3.149:27180"
@@ -32,7 +33,11 @@ database:
   useranaly:
     link: "mysql:root:=PDT49#80Z!RVv52_z@tcp(192.168.3.14:4000)/useranaly"
     debug: true
+  jianyu:
+    link: "mysql:root:=PDT49#80Z!RVv52_z@tcp(192.168.3.14:4000)/jianyu"
+    debug: true
 
 cron:
   activityUser: "*/10 * * * * *" #更新新活跃用户
   bindPhoneAndSubAgain: "*/10 * * * * *" #再次关注&绑定手机号用户
+  newRegisterAndBind: "*/10 * * * * *" #邀请&被邀请注册&新注册

+ 111 - 1
doFreeClueSign/job/job.go

@@ -2,7 +2,9 @@ package job
 
 import (
 	"context"
+	"doFreeClueSign/db"
 	"doFreeClueSign/public"
+	"github.com/gogf/gf/v2/encoding/gjson"
 	"github.com/gogf/gf/v2/frame/g"
 	"github.com/gogf/gf/v2/util/gconv"
 	"time"
@@ -36,7 +38,6 @@ func (jm *JobManager) LoadActivityUser() {
 func (jm *JobManager) LoadBindPhoneUser() {
 	var (
 		runNow = time.Now()
-		ctx    = context.TODO()
 	)
 	start, _ := time.ParseInLocation(time.DateTime, jm.lastRun.BindPhone, time.Local)
 	val := public.GetBidPhoneUser(start, runNow)
@@ -81,3 +82,112 @@ func (jm *JobManager) LoadAgainSubUser() {
 		g.Log().Errorf(ctx, "LoadAgainSubUser error %v", err)
 	}
 }
+
+// @Author jianghan
+// @Description 过滤订单 筛选活动注册用户
+// @Date 2024/11/18
+func loadOrder() {
+	var (
+		ctx = context.Background()
+		sql = `SELECT id, filter, order_code, product_type, user_id, user_phone, vip_starttime, vip_endtime FROM jianyu.dataexport_order WHERE id > ? ORDER BY id ASC`
+	)
+
+	res, err := g.DB("jianyu").Query(ctx, sql, LastId)
+	if err == nil && !res.IsEmpty() {
+		for _, m := range res.List() {
+			id := gconv.Int(m["id"])
+			if id > LastId {
+				LastId = id
+			}
+			jsonObj, err := gjson.DecodeToJson([]byte(gconv.String(m["filter"])))
+			if err != nil {
+				g.Log().Errorf(ctx, "loadOrder error %v", err)
+				continue
+			}
+			filter := jsonObj.Map()
+			userid := gconv.String(m["user_id"])
+			now := time.Now().Format(time.DateTime)
+			vipEndTime := gconv.Time(m["vip_endtime"]).Unix()
+			if remark := gconv.String(filter["remark"]); remark != "" {
+				switch remark {
+				case "邀请好友成功":
+					g.DB("bi_service").Exec(ctx, `INSERT INTO user_statistics (userId, createTime, event) SELECT ?, ?, 1 WHERE NOT EXISTS ( SELECT 1 FROM user_statistics WHERE userId = ? AND event = 1)`, userid, now, userid)
+				case "被邀请注册成功":
+					g.DB("bi_service").Exec(ctx, `INSERT INTO user_statistics (userId, createTime, event) SELECT ?, ?, 2 WHERE NOT EXISTS ( SELECT 1 FROM user_statistics WHERE userId = ? AND event = 2)`, userid, now, userid)
+
+					// 被邀请成功注册 送7天超级订阅订单
+					res, _ := db.MG.DB().FindById("user", userid, `{"l_vip_endtime":1}`)
+					userVEndtime := gconv.Int64((*res)["l_vip_endtime"])
+					if userVEndtime == vipEndTime && verifyDate(vipEndTime) {
+						g.DB("bi_service").Exec(ctx, `INSERT INTO user_statistics (userId, createTime, event) SELECT ?, ?, 3 WHERE NOT EXISTS ( SELECT 1 FROM user_statistics WHERE userId = ? AND event = 3)`, userid, now, userid)
+					}
+				case "2024年新用户注册赠送7天超级订阅":
+					res, _ := db.MG.DB().FindById("user", userid, `{"l_vip_endtime":1}`)
+					userVEndtime := gconv.Int64((*res)["l_vip_endtime"])
+					if userVEndtime == vipEndTime && verifyDate(vipEndTime) {
+						g.DB("bi_service").Exec(ctx, `INSERT INTO user_statistics (userId, createTime, event) SELECT ?, ?, 3 WHERE NOT EXISTS ( SELECT 1 FROM user_statistics WHERE userId = ? AND event = 3)`, userid, now, userid)
+					} else {
+
+					}
+				}
+			}
+		}
+	}
+}
+
+// 验证vip到期时间一天内到期
+func verifyDate(v int64) bool {
+	if (v - time.Now().Unix()) < 24*60*60 {
+		return true
+	}
+	return false
+}
+
+// @Author jianghan
+// @Description 历史数据
+// @Date 2024/11/19
+func LoadOrderHis() {
+	var (
+		sql = `SELECT id, filter, order_code, product_type, user_id, user_phone, vip_starttime, vip_endtime FROM jianyu.dataexport_order WHERE id < 258763 AND ORDER BY id DESC`
+	)
+
+	res, err := g.DB("jianyu").Query(ctx, sql)
+	if err == nil && !res.IsEmpty() {
+		for _, m := range res.List() {
+			id := gconv.Int(m["id"])
+			if id > LastId {
+				LastId = id
+			}
+			jsonObj, err := gjson.DecodeToJson([]byte(gconv.String(m["filter"])))
+			if err != nil {
+				g.Log().Errorf(ctx, "order_code: %s, loadOrder error %v", gconv.String(m["order_code"]), err)
+				continue
+			}
+			filter := jsonObj.Map()
+			userid := gconv.String(m["user_id"])
+			now := time.Now().Format(time.DateTime)
+			vipEndTime := gconv.Time(m["vip_endtime"]).Unix()
+			if remark := gconv.String(filter["remark"]); remark != "" {
+				switch remark {
+				case "邀请好友成功":
+					g.DB("bi_service").Exec(ctx, `INSERT INTO user_statistics (userId, createTime, event) SELECT ?, ?, 1 WHERE NOT EXISTS ( SELECT 1 FROM user_statistics WHERE userId = ? AND event = 1)`, userid, now, userid)
+				case "被邀请注册成功":
+					g.DB("bi_service").Exec(ctx, `INSERT INTO user_statistics (userId, createTime, event) SELECT ?, ?, 2 WHERE NOT EXISTS ( SELECT 1 FROM user_statistics WHERE userId = ? AND event = 2)`, userid, now, userid)
+
+					// 被邀请成功注册 送7天超级订阅订单
+					res, _ := db.MG.DB().FindById("user", userid, `{"l_vip_endtime":1}`)
+					userVEndtime := gconv.Int64((*res)["l_vip_endtime"])
+					if userVEndtime == vipEndTime && verifyDate(vipEndTime) {
+						g.DB("bi_service").Exec(ctx, `INSERT INTO user_statistics (userId, createTime, event) SELECT ?, ?, 3 WHERE NOT EXISTS ( SELECT 1 FROM user_statistics WHERE userId = ? AND event = 3)`, userid, now, userid)
+					}
+				case "2024年新用户注册赠送7天超级订阅":
+					res, _ := db.MG.DB().FindById("user", userid, `{"l_vip_endtime":1}`)
+					userVEndtime := gconv.Int64((*res)["l_vip_endtime"])
+					if userVEndtime == vipEndTime && verifyDate(vipEndTime) {
+						g.DB("bi_service").Exec(ctx, `INSERT INTO user_statistics (userId, createTime, event) SELECT ?, ?, 3 WHERE NOT EXISTS ( SELECT 1 FROM user_statistics WHERE userId = ? AND event = 3)`, userid, now, userid)
+					}
+				}
+			}
+		}
+	}
+}

+ 16 - 1
doFreeClueSign/job/mamager.go

@@ -28,14 +28,17 @@ type JobManager struct {
 var (
 	activityUserJobRunning         bool
 	bindPhoneAndSubAgainJobRunning bool
+
+	ctx    = gctx.New()
+	LastId = g.Cfg().MustGet(ctx, "lastId").Int()
 )
 
 func InitJobManager() *JobManager {
 	var (
 		err                         error
-		ctx                         = gctx.New()
 		bindPhoneAndSubAgainCronStr = g.Cfg().MustGet(ctx, "cron.bindPhoneAndSubAgain").String()
 		//activityUserCronStr         = g.Cfg().MustGet(ctx, "cron.activityUser").String()
+		newRegisterCronStr = g.Cfg().MustGet(ctx, "cron.newRegisterAndBind").String()
 	)
 
 	job := &JobManager{
@@ -86,6 +89,18 @@ func InitJobManager() *JobManager {
 	// 	gcron.Start("activityUser")
 	// }
 
+	if newRegisterCronStr != "" {
+		_, err = gcron.Add(ctx, newRegisterCronStr, func(ctx context.Context) {
+			g.Log().Infof(ctx, "newister start %v", activityUserJobRunning)
+			loadOrder()
+
+		}, "newister")
+		if err != nil {
+			panic(err)
+		}
+		gcron.Start("newister")
+	}
+
 	return job
 }
 

+ 3 - 1
doFreeClueSign/main.go

@@ -6,6 +6,8 @@ import (
 )
 
 func main() {
-	job.InitJobManager()
+	//job.InitJobManager()
+
+	job.LoadOrderHis()
 	select {}
 }