Эх сурвалжийг харах

Merge branch 'dev_v1.5.36.6_wh' of jianyu/datatools into hotfix/v1.5.36.6

王浩 1 сар өмнө
parent
commit
e085747e5e

+ 1 - 1
clueSync/config.json

@@ -1 +1 @@
-{"lastOrderId":263043,"lastOrderClueId":"2025-05-16 10:05:24","lastUserId":"2025-04-15 15:20:01","lastXcxUserId":"2025-04-17 15:03:03","lastId":"67f8808952d21982ca5970cb","lastOrderTime":"2025-04-21 10:41:30","lastUserTime":"2025-04-21 13:30:02","lastSubscribeId":"67fcb9c1cdf0004e40e69cba","lastMessageTime":"2025-04-02 10:21:06","lastMessageButtonTime":"2025-05-28 16:59:23","lastkcTime":"2025-05-17 15:18:00","lastEverythingTime":"2024-11-20 13:40:21","lastEventRegTime":"2024-11-20 13:40:21","lastReadClueTime":"2025-03-25 14:43:42","bigSaleTime":1747293636,"bigOrderTime":"2025-04-29 15:18:31","marketSaleTime":1745218148,"advisoryCommitteeTime":1745216244,"selectionDepartmentTime":1745216244,"allocationTime":"2024-11-20 13:40:21","allocationRatio":2,"activeTime":"2025-04-14 22:00:00","rebindTime":"2025-04-09 11:11:56","inviteTime":"2025-04-21 00:00:00","activityTime":"2025-04-03 16:59:23","lastKcChangeTime":"2025-04-14 15:00:27.000"}
+{"lastOrderId":263906,"lastOrderClueId":"2025-06-13 17:47:39","lastUserId":"2025-06-19 09:35:02","lastXcxUserId":"2025-06-18 16:31:01","lastId":"684cef938a04a21118691ba3","lastOrderTime":"2025-04-21 10:41:30","lastUserTime":"2025-04-21 13:30:02","lastSubscribeId":"67fcb9c1cdf0004e40e69cba","lastMessageTime":"2025-05-29 11:16:13","lastMessageButtonTime":"2025-05-28 16:59:23","lastkcTime":"2025-06-07 11:39:31","lastEverythingTime":"2025-06-19 15:13:26","lastEventRegTime":"2024-11-20 13:40:21","lastReadClueTime":"2025-03-25 14:43:42","bigSaleTime":1747293636,"bigOrderTime":"2025-04-29 15:18:31","marketSaleTime":1745218148,"advisoryCommitteeTime":1745216244,"selectionDepartmentTime":1745216244,"allocationTime":"2024-11-20 13:40:21","allocationRatio":2,"activeTime":"2025-04-14 22:00:00","rebindTime":"2025-04-09 11:11:56","inviteTime":"2025-04-21 00:00:00","activityTime":"2025-04-03 16:59:23","lastKcChangeTime":"2025-04-14 15:00:27.000"}

+ 87 - 25
clueSync/everything.go

@@ -526,7 +526,7 @@ func bigCustomer() {
 		for _, v := range dataArr {
 			minemail := ""
 			if gconv.String(v["appoint_email"]) == "" {
-				minemail, _ = EmailSelect("dk")
+				minemail, _ = EmailSelect("dk", "")
 			} else {
 				minemail = gconv.String(v["appoint_email"])
 			}
@@ -681,7 +681,7 @@ func FindBatchData(moudle string) map[string]interface{} {
 
 // 咨询组线索
 func AdvisoryCommittee() {
-	if !isRunning() {
+	/*if !isRunning() {
 		log.Println("不是工作日,任务暂停")
 		return
 	}
@@ -695,11 +695,11 @@ func AdvisoryCommittee() {
 	cfg.AdvisoryCommitteeTime = endtime
 	exportToExcel(dataArr, "咨询服务销售线索", "zx")
 	log.Println("咨询部线索定时任务结束")
-	common.WriteSysConfig(&cfg)
+	common.WriteSysConfig(&cfg)*/
 }
 
 // 运营部线索
-func SelectionDepartment() {
+/*func SelectionDepartment() {
 	if !isRunning() {
 		log.Println("不是工作日,任务暂停")
 		return
@@ -715,10 +715,37 @@ func SelectionDepartment() {
 	log.Println("运营部线索定时任务结束")
 	common.WriteSysConfig(&cfg)
 }
+*/
+// 特殊留资
+func SpecialSaleLeads() {
+	/*if !isRunning() {
+		log.Println("不是工作日,任务暂停")
+		return
+	}*/
+	saleLeadsConfig := TiDb.Find("saleLeads_config", map[string]interface{}{
+		"status": 0,
+	}, "", "", -1, -1)
+	log.Println("特殊留资线索定时任务开始")
+	for _, v := range *saleLeadsConfig {
+		log.Println(fmt.Sprintf("%s留资线索定时任务开始", gconv.String(v["groupName"])))
+		//留来源获取
+		sourceMap := buildSourceMap(gconv.String(v["groupName"]))
+		dataArr, endtime := processLeads(v, sourceMap)
+		//最后一次数据修改
+		TiDb.Update("saleLeads_config", map[string]interface{}{
+			"id": gconv.Int64(v["id"]),
+		}, map[string]interface{}{
+			"lastTime": endtime,
+		})
+		exportToExcel(dataArr, gconv.String(v["title"]), gconv.String(v["groupCode"]), gconv.String(v["mail"]))
+		log.Println(fmt.Sprintf("%s留资线索定时任务结束", gconv.String(v["groupName"])))
+	}
+	log.Println("特殊留资线索定时任务结束")
+}
 
 // 市场部线索
 func MarketCustomer() {
-	if !isRunning() {
+	/*if !isRunning() {
 		log.Println("不是工作日,任务暂停")
 		return
 	}
@@ -731,7 +758,7 @@ func MarketCustomer() {
 	cfg.MarketSaleTime = endtime
 	exportToExcel(dataArr, "商务合作销售线索", "sc")
 	common.WriteSysConfig(&cfg)
-	log.Println("市场部线索定时任务结束")
+	log.Println("市场部线索定时任务结束")*/
 }
 
 // 判断是否在工作日
@@ -775,17 +802,18 @@ func getCommitteeTime(cfgTime int64) int64 {
 	return cfgTime
 }
 
-// 处理线索
-func processLeads(batch string, committeeTime int64, sourceMap map[string]map[string]interface{}, nowTime string) ([]map[string]interface{}, int64) {
+// 处理留资信息
+func processLeads(saleLeadsMap map[string]interface{}, sourceMap map[string]map[string]interface{}) ([]map[string]interface{}, int64) {
+	batch := gconv.String(saleLeadsMap["groupCode"])
+	lastTime := gconv.Int64(saleLeadsMap["lastTime"])
 	dataArr := []map[string]interface{}{}
 	endtime := int64(0)
-	saleleadsData, ok := Mgo.Find("saleLeads", map[string]interface{}{"createtime": map[string]interface{}{"$gt": committeeTime}}, `{"phone":1,"createtime":1}`, nil, false, -1, -1)
-	//saleleadsData, ok := Mgo.Find("saleLeads", map[string]interface{}{"createtime": committeeTime}, `{"phone":1,"createtime":1}`, nil, false, -1, -1)
+	saleleadsData, ok := Mgo.Find("saleLeads", map[string]interface{}{"createtime": map[string]interface{}{"$gt": lastTime}}, `{"phone":1,"createtime":1}`, nil, false, -1, -1)
 	if ok && saleleadsData != nil {
 		data := FindBatchData(batch)
 		for _, v := range *saleleadsData {
 			lead := map[string]interface{}{}
-			lead, endtime = processLead(v, sourceMap, nowTime, committeeTime, data)
+			lead, endtime = processLead(v, sourceMap, lastTime, data)
 			if lead != nil {
 				dataArr = append(dataArr, lead)
 			}
@@ -796,29 +824,30 @@ func processLeads(batch string, committeeTime int64, sourceMap map[string]map[st
 	return dataArr, endtime
 }
 
-// 处理单个线索
-func processLead(v map[string]interface{}, sourceMap map[string]map[string]interface{}, nowTime string, committeeTime int64, data map[string]interface{}) (map[string]interface{}, int64) {
+// 处理单个留资信息
+func processLead(v map[string]interface{}, sourceMap map[string]map[string]interface{}, lastTime int64, data map[string]interface{}) (map[string]interface{}, int64) {
+	nowTime := time.Now().Format(date.Date_Full_Layout)
 	sources := common.ObjToString(v["source"])
-	// 更新委员会时间
-	if gconv.Int64(v["createtime"]) > committeeTime {
-		committeeTime = gconv.Int64(v["createtime"])
+	// 更新最后会时间
+	if gconv.Int64(v["createtime"]) > lastTime {
+		lastTime = gconv.Int64(v["createtime"])
 	}
 	sourceData, exist := sourceMap[sources]
 	if !exist {
-		return nil, committeeTime
+		return nil, lastTime
 	}
 	phone := common.ObjToString(v["phone"])
 	if IsInternal(phone) {
-		return nil, committeeTime
+		return nil, lastTime
 	}
 	// 获取用户信息
 	userData := getUserData(v)
 	if userData == nil || isUserInBlackList(userData) {
-		return nil, committeeTime
+		return nil, lastTime
 	}
 	key := fmt.Sprintf("%s_%s_%s", sourceMap[sources], phone, common.ObjToString(v["interest"]))
 	if _, exists := data[key]; exists {
-		return nil, committeeTime
+		return nil, lastTime
 	}
 	data[key] = true
 
@@ -829,14 +858,13 @@ func processLead(v map[string]interface{}, sourceMap map[string]map[string]inter
 		"company":          common.ObjToString(v["company"]),
 		"phone":            phone,
 		"source":           gconv.String(sourceData["name"]),
-		"belongTo":         "咨询组/市场组", // 根据需要修改
 		"interest":         common.ObjToString(v["interest"]),
 		"data_requirement": common.ObjToString(v["data_requirement"]),
 		"branch":           v["branch"],
 		"job":              v["position"],
 		"email":            common.ObjToString(v["mail"]),
 		"appointEmail":     gconv.String(sourceData["appointEmail"]),
-	}, committeeTime
+	}, lastTime
 }
 
 // 获取用户数据
@@ -868,7 +896,7 @@ func isABHLead(lead map[string]interface{}) bool {
 }
 
 // 导出到 Excel
-func exportToExcel(dataArr []map[string]interface{}, title, batch string) {
+func exportToExcel(dataArr []map[string]interface{}, title, batch, mails string) {
 	if len(dataArr) == 0 {
 		return
 	}
@@ -876,7 +904,7 @@ func exportToExcel(dataArr []map[string]interface{}, title, batch string) {
 	for _, v := range dataArr {
 		appointEmail := gconv.String(v["appointEmail"])
 		if appointEmail == "" {
-			appointEmail, _ = EmailSelect(batch)
+			appointEmail, _ = EmailSelect(batch, mails)
 		}
 		bigArr[appointEmail] = append(bigArr[appointEmail], v)
 	}
@@ -940,11 +968,45 @@ func saveDataToRedis(data map[string]interface{}, batch string) {
 }
 
 // 邮箱选择处理
-func EmailSelect(batch string) (string, string) {
+func EmailSelect(batch, mailStr string) (string, string) {
 	name := ""
 	minemail := ""
 	bigData := TiDb.SelectBySql("select * from dwd_f_crm_clue_big_autodraw_record where   type =?  ", batch)
 	if bigData != nil && len(*bigData) > 0 {
+		//查看有没有新增人员 人名-邮箱,邮箱|人名-邮箱,
+		mailMap := map[string]string{}
+		if mailStr != "" {
+			for _, s := range strings.Split(mailStr, "|") {
+				if len(strings.Split(s, "-")) > 1 {
+					arr := strings.Split(s, "-")
+					personName := arr[0]
+					mailMap[personName] = arr[1]
+				}
+			}
+			for personName, mailStr := range mailMap {
+				isOk := false
+				for _, m := range *bigData {
+					tablePersonName := gconv.String(m["name"])
+					if tablePersonName == personName {
+						isOk = true
+					}
+				}
+				if !isOk {
+					rData := TiDb.FindOne("dwd_f_crm_clue_big_autodraw_record", map[string]interface{}{
+						"type": batch,
+					}, "", "count desc")
+					//这是一个新人
+					TiDb.Insert("dwd_f_crm_clue_big_autodraw_record", map[string]interface{}{
+						"name":  personName,
+						"count": common.Int64All((*rData)["count"]),
+						"email": mailStr,
+						"type":  batch,
+					})
+					return minemail, name
+				}
+
+			}
+		}
 		mincount := common.IntAll((*bigData)[0]["count"])
 		for _, vv := range *bigData {
 			vcount := common.IntAll(vv["count"])