فهرست منبع

新用户标签处理

WH01243 1 سال پیش
والد
کامیت
92562387c3
5فایلهای تغییر یافته به همراه144 افزوده شده و 5 حذف شده
  1. 12 0
      clueSync/config.go
  2. 3 1
      clueSync/config.json
  3. 11 3
      clueSync/job.go
  4. 98 0
      clueSync/jobutil.go
  5. 20 1
      clueSync/main.go

+ 12 - 0
clueSync/config.go

@@ -26,6 +26,8 @@ type (
 		MarketSaleTime     int64   `json:"marketSaleTime"`
 		AllocationTime     string  `json:"allocationTime"`
 		AllocationRatio    float64 `json:"allocationRatio"`
+		ActiveTime         string  `json:"activeTime"`
+		RebindTime         string  `json:"rebindTime"`
 	}
 	DB struct {
 		CornExp1 string `json:"cornexp1"`
@@ -85,6 +87,16 @@ type (
 			MaxIdle     int    `json:"maxidle"`
 			MaxLeftTime int    `json:"maxleft"`
 		} `json:"baseService"`
+		BiService struct {
+			Host        string `json:"host"`
+			Port        int    `json:"port"`
+			Database    string `json:"database"`
+			User        string `json:"user"`
+			Password    string `json:"password"`
+			PollSize    int    `json:"poolsize"`
+			MaxIdle     int    `json:"maxidle"`
+			MaxLeftTime int    `json:"maxleft"`
+		} `json:"biService"`
 		ThirdParty struct {
 			Host        string `json:"host"`
 			Port        int    `json:"port"`

+ 3 - 1
clueSync/config.json

@@ -16,5 +16,7 @@
   "marketSaleTime": 1708160200,
   "allocationTime": "2024-07-01 14:59:37",
   "allocationRatio": 2,
-  "lastXcxUserId": "2024-07-09 14:59:37"
+  "lastXcxUserId": "2024-07-09 14:59:37",
+  "activeTime": "2024-07-01 14:59:37",
+  "rebindTime": "2024-07-01 14:59:37"
 }

+ 11 - 3
clueSync/job.go

@@ -89,6 +89,17 @@ func FormatData(data map[string]interface{}, item string) (bool, bool) {
 			}
 
 		}
+	} else if item == "allocation" || item == "rebind" {
+		userId = mongodb.BsonIdToSId(data["mogUserId"])
+		userInfo := TiDb.FindOne("dwd_f_userbase_baseinfo", map[string]interface{}{
+			"userid": userId,
+		}, "", "")
+		if userInfo != nil && len(*userInfo) > 0 {
+			phone = common.ObjToString((*userInfo)["phone"])
+			uId = common.ObjToString((*userInfo)["uid"])
+			source = common.ObjToString((*userInfo)["source"])
+			belong_to = common.ObjToString((*userInfo)["belong_to"])
+		}
 	} else if item == "saleLeads" { //留资
 		userId = common.ObjToString(data["userid"])
 		if !mongodb.IsObjectIdHex(userId) {
@@ -98,7 +109,6 @@ func FormatData(data map[string]interface{}, item string) (bool, bool) {
 				userId = common.ObjToString((*userMapping)["userid"])
 			}
 		}
-
 		cluename = common.ObjToString(data["company"])
 		phone = common.ObjToString(data["phone"])
 		role = common.ObjToString(data["companyType"])
@@ -792,7 +802,6 @@ func WorkUpdateClue(data map[string]interface{}, saleData []map[string]interface
 			clueUpdateData["comeinsource_open"] = nil
 			clueUpdateData["level_open"] = nil
 			clueUpdateData["clue_level"] = nil
-
 		}
 	} else if is_assign == 1 && positionId != old_position_id {
 		clueUpdateData["seatNumber"] = seatNumber
@@ -873,7 +882,6 @@ func WorkUpdateClue(data map[string]interface{}, saleData []map[string]interface
 		//变更记录
 		if (trailstatus == "00" || old_position_id == 0 || (pIsOk && old_cluename != cluename && cluename != "")) && is_assign == 1 {
 			if trailstatus == "00" && trailstatusTime != "" && time.Now().Unix()-trailstatusTimes.Unix() < 86400 {
-
 			} else if old_position_id == 0 {
 				updateId1 = TiDb.InsertByTx(tx, "dwd_f_crm_clue_change_record", map[string]interface{}{
 					"clue_id":      clueId,

+ 98 - 0
clueSync/jobutil.go

@@ -957,6 +957,32 @@ func getClueType(item string, data map[string]interface{}, sourceCode string, so
 				}
 			}
 		}
+	} else if item == "allocation" {
+		pcode = "532"
+		code = "671"
+		level = "C"
+		pcodeData := TiDb.FindOne("dwd_d_crm_cluetype_code", map[string]interface{}{"code": pcode}, "", "")
+		if pcodeData != nil && len(*pcodeData) > 0 {
+			topname = common.ObjToString((*pcodeData)["name"])
+		}
+		pcodeData = TiDb.FindOne("dwd_d_crm_cluetype_code", map[string]interface{}{"code": code}, "", "")
+		if pcodeData != nil && len(*pcodeData) > 0 {
+			subname = common.ObjToString((*pcodeData)["name"])
+		}
+	} else if item == "rebind" {
+		pcode = "532"
+		code = "670"
+		level = "C"
+		pcodeData := TiDb.FindOne("dwd_d_crm_cluetype_code", map[string]interface{}{"code": pcode}, "", "")
+		if pcodeData != nil && len(*pcodeData) > 0 {
+
+			topname = common.ObjToString((*pcodeData)["name"])
+
+		}
+		pcodeData = TiDb.FindOne("dwd_d_crm_cluetype_code", map[string]interface{}{"code": code}, "", "")
+		if pcodeData != nil && len(*pcodeData) > 0 {
+			subname = common.ObjToString((*pcodeData)["name"])
+		}
 	} else {
 		if sourceCode != "" {
 			codeData := TiDb.FindOne("dwd_d_crm_cluetype_code", map[string]interface{}{"source": sourceCode}, "", "")
@@ -1170,3 +1196,75 @@ func getSeatNumberPositionId(seatNumber string) (positionId int64) {
 	}
 	return
 }
+
+// 重新关注用户处理
+
+func rebind() {
+	//判断节假日
+	runOk := getRunOk()
+	if !runOk {
+		log.Println("不是工作日,任务暂停")
+		return
+	}
+	rebindTimeEnd := cfg.RebindTime
+	sql := fmt.Sprintf(`select * from freeClubSign where sub_again_date > "%s" order by  sub_again_date asc`, rebindTimeEnd)
+	data := BiService.SelectBySql(sql)
+	if data != nil && *data != nil && len(*data) > 0 {
+		for k, v := range *data {
+			//
+			registedates, _ := time.Parse(date.Date_Full_Layout, gconv.String(v["register_time"]))
+			if time.Now().Unix()-registedates.Unix() < int64(db.RegTimes)*86400 {
+				//七天以内注册的
+				continue
+			}
+			ok1, ok2 := FormatData(v, "rebind")
+			if !ok1 {
+				log.Println("线索卡点", "allocation", v, rebindTimeEnd)
+				continue
+			} else {
+				if !ok2 {
+					log.Println("用户分配已达上限", "allocation", v, rebindTimeEnd)
+					continue
+				}
+			}
+			rebindTimeEnd = common.ObjToString(v["act_again_date"])
+			if k == len(*data)-1 {
+				cfg.AllocationTime = rebindTimeEnd
+			}
+		}
+	}
+}
+
+// 活跃用户处理
+
+func activeUsers() {
+	//判断节假日
+	runOk := getRunOk()
+	if !runOk {
+		log.Println("不是工作日,任务暂停")
+		return
+	}
+	//活跃用户查询
+	activeTimeEnd := cfg.ActiveTime
+	sql := fmt.Sprintf(`select * from freeClubSign where act_again_date > "%s" order by  act_again_date asc`, activeTimeEnd)
+	data := BiService.SelectBySql(sql)
+	if data != nil && *data != nil && len(*data) > 0 {
+		for k, v := range *data {
+			ok1, ok2 := FormatData(v, "allocation")
+			log.Println(v, "allocation", ok1, ok2)
+			if !ok1 {
+				log.Println("线索卡点", "allocation", v, activeTimeEnd)
+				continue
+			} else {
+				if !ok2 {
+					log.Println("用户分配已达上限", "allocation", v, activeTimeEnd)
+					continue
+				}
+			}
+			activeTimeEnd = common.ObjToString(v["act_again_date"])
+			if k == len(*data)-1 {
+				cfg.ActiveTime = activeTimeEnd
+			}
+		}
+	}
+}

+ 20 - 1
clueSync/main.go

@@ -25,6 +25,7 @@ var (
 	ThirdParty   *mysql.Mysql
 	Jyactivities *mysql.Mysql
 	Base         *mysql.Mysql
+	BiService    *mysql.Mysql
 	Es           elastic.Es
 	Mgo          *mongodb.MongodbSim
 	MgoLog       *mongodb.MongodbSim
@@ -110,6 +111,21 @@ func main() {
 		MaxIdleConns: db.BaseService.MaxIdle,
 	}
 	Base.Init()
+	BiService = &mysql.Mysql{
+
+		Address: db.BiService.Host + ":" + fmt.Sprint(db.BiService.Port),
+
+		UserName: db.BiService.User,
+
+		PassWord: db.BiService.Password,
+
+		DBName: db.BiService.Database,
+
+		MaxOpenConns: db.BiService.PollSize,
+
+		MaxIdleConns: db.BiService.MaxIdle,
+	}
+	BiService.Init()
 	Es = elastic.NewEs(db.Es.Version, db.Es.Address, db.Es.DbSize, db.Es.UserName, db.Es.Password)
 	redis.InitRedis(db.RedisServer)
 	Mgo = mongodb.NewMgo(db.Mgo.Address, db.Mgo.DbName, db.Mgo.DbSize)
@@ -117,6 +133,7 @@ func main() {
 	MgoQyxy = mongodb.NewMgoWithUser(db.MgoQyxy.Address, db.MgoQyxy.DbName, db.MgoQyxy.User, db.MgoQyxy.Password, db.MgoQyxy.DbSize)
 	InitArea()
 	InitProduct(db.ProductArr)
+	activeUsers() //取关重新关注处理
 	if *mode == 1 {
 		//30分钟一次
 		a := cron.New()
@@ -134,6 +151,7 @@ func main() {
 			eventReg()       //渠道
 			bigCustomer()    //大客户线索
 			marketCustomer() //市场部线索
+			rebind()         //取关重新关注处理
 		})
 		b.Start()
 		//每天8点30
@@ -147,7 +165,8 @@ func main() {
 		// tagAllSync()
 		d := cron.New()
 		d.AddFunc(db.CornExp4, func() {
-			tagAllSync() //用户标签
+			tagAllSync()  //用户标签
+			activeUsers() //活跃用户处理
 		})
 		d.Start()
 		// 5分钟一次