yuelujie 1 月之前
父节点
当前提交
fc520d9475
共有 9 个文件被更改,包括 536 次插入317 次删除
  1. 49 44
      clueSync/everything.go
  2. 0 4
      clueSync/job.go
  3. 21 19
      clueSync/jobutil.go
  4. 390 230
      clueSync/kc.go
  5. 14 4
      clueSync/tag.go
  6. 52 0
      clueSync/util.go
  7. 0 5
      csrSync/go.sum
  8. 0 1
      csrSync/job.go
  9. 10 10
      telemarketingEtl/config.yaml

+ 49 - 44
clueSync/everything.go

@@ -460,13 +460,16 @@ func bigCustomer() {
 		}
 	}
 	cfg.BigSaleTime = bigSaleTime
-	orderData := Mysql.SelectBySql(`SELECT * FROM dataexport_order WHERE create_time > "` + bigOrderTime + `" AND (product_type = '历史数据' or product_type = '数据流量包') AND order_status IN (0,1) AND salesperson IS NULL AND is_backstage_order = 0`)
+	orderDataSql := `select a.*,b.product_type as  productType,b.filter as  productFilter,b.final_price  from  dataexport_order  a   INNER JOIN  
+    jy_order_detail   b    on a.order_code=b.order_code
+	and   a.create_time>?  and  b.product_type in  ("数据流量包","历史数据") and  a.order_status IN (0,1) AND a.salesperson IS NULL AND a.is_backstage_order = 0 `
+	orderData := Mysql.SelectBySql(orderDataSql, bigOrderTime)
 	if orderData != nil && len(*orderData) > 0 {
 		for _, v := range *orderData {
 			bigOrderTime = gconv.Time(gconv.String(v["create_time"])).Format(date.Date_Full_Layout)
 			phone := common.ObjToString(v["user_phone"])
 			order_status := common.IntAll(v["order_status"])
-			product_type := common.ObjToString(v["product_type"])
+			product_type := common.ObjToString(v["productType"])
 			orderUserId := gconv.String(v["user_id"])
 			query := map[string]interface{}{}
 			if !mongodb.IsObjectIdHex(orderUserId) {
@@ -502,7 +505,7 @@ func bigCustomer() {
 					unpayorderinfo = "历史数据"
 				} else {
 					source = "线上历史数据导出已支付订单"
-					payorderinfo = "历史数据" + fmt.Sprint(common.IntAll(v["pay_money"])/100)
+					payorderinfo = "历史数据" + fmt.Sprint(common.IntAll(v["final_price"])/100)
 				}
 			} else {
 				if order_status == 0 {
@@ -510,7 +513,7 @@ func bigCustomer() {
 					unpayorderinfo = "数据流量包"
 				} else {
 					source = "线上数据流量包已支付订单"
-					payorderinfo = "数据流量包" + fmt.Sprint(common.IntAll(v["pay_money"])/100)
+					payorderinfo = "数据流量包" + fmt.Sprint(common.IntAll(v["final_price"])/100)
 				}
 			}
 			key := fmt.Sprintf("%s_%s", source, phone)
@@ -518,6 +521,8 @@ func bigCustomer() {
 				continue
 			}
 			data[key] = true
+			productFilterMap := gconv.Map(v["productFilter"])
+			data_count := productFilterMap["pNum"]
 			dataArr = append(dataArr, map[string]interface{}{
 				"createTime":     nowTime,
 				"lastUpdateTime": nowTime,
@@ -530,7 +535,7 @@ func bigCustomer() {
 				"email":          v["user_mail"],
 				"belongTo":       "大客户",
 				"source":         source,
-				"data_count":     v["data_count"],
+				"data_count":     data_count,
 				"unpayorderinfo": unpayorderinfo,
 				"payorderinfo":   payorderinfo, //增加客户需求
 				"appoint_email":  "",
@@ -571,18 +576,18 @@ func bigCustomer() {
 			}
 			for _, v := range vb {
 				row := sh.AddRow()
-				row.AddCell().SetString(common.ObjToString(v["usernickname"]))
-				row.AddCell().SetString(common.ObjToString(v["username"]))
-				row.AddCell().SetString(common.ObjToString(v["company"]))
-				row.AddCell().SetString(common.ObjToString(v["job"]))
-				row.AddCell().SetString(common.ObjToString(v["phone"]))
-				row.AddCell().SetValue(common.IntAll(v["data_count"]))
-				row.AddCell().SetString(common.ObjToString(v["email"]))
-				row.AddCell().SetString(common.ObjToString(v["payorderinfo"]))
-				row.AddCell().SetString(common.ObjToString(v["unpayorderinfo"]))
-				row.AddCell().SetString(common.ObjToString(v["source"]))
-				row.AddCell().SetString(common.ObjToString(v["interest"]))
-				row.AddCell().SetString(common.ObjToString(v["data_requirement"]))
+				row.AddCell().SetString(gconv.String(v["usernickname"]))
+				row.AddCell().SetString(gconv.String(v["username"]))
+				row.AddCell().SetString(gconv.String(v["company"]))
+				row.AddCell().SetString(gconv.String(v["job"]))
+				row.AddCell().SetString(gconv.String(v["phone"]))
+				row.AddCell().SetValue(gconv.Int64(v["data_count"]))
+				row.AddCell().SetString(gconv.String(v["email"]))
+				row.AddCell().SetString(gconv.String(v["payorderinfo"]))
+				row.AddCell().SetString(gconv.String(v["unpayorderinfo"]))
+				row.AddCell().SetString(gconv.String(v["source"]))
+				row.AddCell().SetString(gconv.String(v["interest"]))
+				row.AddCell().SetString(gconv.String(v["data_requirement"]))
 				//增加客户需求
 			}
 			email := k
@@ -630,7 +635,7 @@ func eventReg() {
 					common.WriteSysConfig(&cfg)
 				}
 			}
-			cfg.LastEventRegTime = common.ObjToString(v["update_time"])
+			cfg.LastEventRegTime = gconv.String(v["update_time"])
 		}
 	}
 	common.WriteSysConfig(&cfg)
@@ -741,10 +746,10 @@ func buildSourceMap(department string) map[string]map[string]interface{} {
 	saleSource := TiDb.SelectBySql(fmt.Sprintf(`SELECT source,name,appoint_email FROM d_saleleads_code WHERE department LIKE '%%%s%%' AND is_delete = 1`, department))
 	if saleSource != nil {
 		for _, v := range *saleSource {
-			source := common.ObjToString(v["source"])
-			name := common.ObjToString(v["name"])
+			source := gconv.String(v["source"])
+			name := gconv.String(v["name"])
 			name = filterSourceName(name)
-			appointEmail := common.ObjToString(v["appoint_email"])
+			appointEmail := gconv.String(v["appoint_email"])
 			sourceMap[source] = map[string]interface{}{
 				"name":         name,
 				"appointEmail": appointEmail,
@@ -793,10 +798,10 @@ func processLeads(saleLeadsMap map[string]interface{}, sourceMap map[string]map[
 	return dataArr, endtime
 }
 
-// 处理单个留资信息
+// 处理单个线索
 func processLead(v map[string]interface{}, sourceMap map[string]map[string]interface{}, lastTime int64, data map[string]interface{}) (map[string]interface{}, int64) {
+	sources := gconv.String(v["source"])
 	nowTime := time.Now().Format(date.Date_Full_Layout)
-	sources := common.ObjToString(v["source"])
 	// 更新最后会时间
 	if gconv.Int64(v["createtime"]) > lastTime {
 		lastTime = gconv.Int64(v["createtime"])
@@ -805,7 +810,7 @@ func processLead(v map[string]interface{}, sourceMap map[string]map[string]inter
 	if !exist {
 		return nil, lastTime
 	}
-	phone := common.ObjToString(v["phone"])
+	phone := gconv.String(v["phone"])
 	if IsInternal(phone) {
 		return nil, lastTime
 	}
@@ -819,26 +824,26 @@ func processLead(v map[string]interface{}, sourceMap map[string]map[string]inter
 		return nil, lastTime
 	}
 	data[key] = true
-
 	return map[string]interface{}{
 		"createTime":       nowTime,
 		"createtime":       v["createtime"],
-		"username":         common.ObjToString(v["name"]),
-		"company":          common.ObjToString(v["company"]),
+		"username":         gconv.String(v["name"]),
+		"company":          gconv.String(v["company"]),
 		"phone":            phone,
 		"source":           gconv.String(sourceData["name"]),
-		"interest":         common.ObjToString(v["interest"]),
-		"data_requirement": common.ObjToString(v["data_requirement"]),
+		"belongTo":         "咨询组/市场组", // 根据需要修改
+		"interest":         gconv.String(v["interest"]),
+		"data_requirement": gconv.String(v["data_requirement"]),
 		"branch":           v["branch"],
 		"job":              v["position"],
-		"email":            common.ObjToString(v["mail"]),
+		"email":            gconv.String(v["mail"]),
 		"appointEmail":     gconv.String(sourceData["appointEmail"]),
 	}, lastTime
 }
 
 // 获取用户数据
 func getUserData(v map[string]interface{}) map[string]interface{} {
-	userid := common.ObjToString(v["userid"])
+	userid := gconv.String(v["userid"])
 	userMapping := &map[string]interface{}{}
 	if !mongodb.IsObjectIdHex(userid) {
 		userMapping = TiDb.FindOne("dwd_f_userbase_id_mapping", map[string]interface{}{"position_id": userid}, "", "")
@@ -854,13 +859,13 @@ func getUserData(v map[string]interface{}) map[string]interface{} {
 
 // 判断用户是否在黑名单
 func isUserInBlackList(userData map[string]interface{}) bool {
-	bt := common.ObjToString(userData["belong_to"])
+	bt := gconv.String(userData["belong_to"])
 	return strings.HasPrefix(bt, "03") || bt == "0102"
 }
 
 // 判断是否是安博会线索
 func isABHLead(lead map[string]interface{}) bool {
-	s_sourceid := common.ObjToString(lead["s_sourceid"])
+	s_sourceid := gconv.String(lead["s_sourceid"])
 	return s_sourceid == db.Sourceid
 }
 
@@ -897,15 +902,15 @@ func exportToExcel(dataArr []map[string]interface{}, title, batch, mails string)
 
 		for _, v := range arr {
 			row := sh.AddRow()
-			row.AddCell().SetString(common.ObjToString(v["username"]))
-			row.AddCell().SetString(common.ObjToString(v["phone"]))
-			row.AddCell().SetString(common.ObjToString(v["job"]))
-			row.AddCell().SetString(common.ObjToString(v["branch"]))
-			row.AddCell().SetString(common.ObjToString(v["email"]))
-			row.AddCell().SetString(common.ObjToString(v["company"]))
-			row.AddCell().SetString(common.ObjToString(v["data_requirement"]))
-			row.AddCell().SetString(common.ObjToString(v["source"]))
-			row.AddCell().SetString(common.ObjToString(v["interest"]))
+			row.AddCell().SetString(gconv.String(v["username"]))
+			row.AddCell().SetString(gconv.String(v["phone"]))
+			row.AddCell().SetString(gconv.String(v["job"]))
+			row.AddCell().SetString(gconv.String(v["branch"]))
+			row.AddCell().SetString(gconv.String(v["email"]))
+			row.AddCell().SetString(gconv.String(v["company"]))
+			row.AddCell().SetString(gconv.String(v["data_requirement"]))
+			row.AddCell().SetString(gconv.String(v["source"]))
+			row.AddCell().SetString(gconv.String(v["interest"]))
 			row.AddCell().SetString(gconv.Time(gconv.Int64(v["createtime"])).Format(date.Date_Full_Layout))
 		}
 		dir := fmt.Sprintf("./xlsx/%s/%s.xlsx", batch, fileName)
@@ -985,8 +990,8 @@ func EmailSelect(batch, mailStr string) (string, string) {
 		mincount := common.IntAll((*bigData)[0]["count"])
 		for _, vv := range *bigData {
 			vcount := common.IntAll(vv["count"])
-			vemail := common.ObjToString(vv["email"])
-			vName := common.ObjToString(vv["name"])
+			vemail := gconv.String(vv["email"])
+			vName := gconv.String(vv["name"])
 			if vcount <= mincount {
 				mincount = vcount
 				minemail = vemail

+ 0 - 4
clueSync/job.go

@@ -290,10 +290,6 @@ func FormatData(data map[string]interface{}, item string) (bool, bool, bool) {
 		//saveHlyj(belong_to, item, phone, name, sourceName, cluename, position, nowTime, isGroup, isCommerce)
 		return true, true, true
 	}
-	//安博会
-	/*if s_sourceid == db.Sourceid {
-		return true, true, false
-	}*/
 	if uId == "" { //没有进用户归集,等待进入,结束任务,放在下次继续执行
 		if isExists, _ := redis.Exists("bidx", "bidx_userId_"+userId); isExists {
 			redisInt := redis.GetInt("bidx", "bidx_userId_"+userId)

+ 21 - 19
clueSync/jobutil.go

@@ -117,6 +117,7 @@ func WorkDataHandle(company, phone, demand, name, product string, acceptanceData
 				"operator_id": -1,
 			})
 		} else {
+			log.Println("工单分配程序:", positionId)
 			if positionId == 0 {
 				//线索变更
 				isNewScore = true
@@ -125,6 +126,7 @@ func WorkDataHandle(company, phone, demand, name, product string, acceptanceData
 					log.Println(positionId, "用户查询失败")
 					return false
 				}
+				log.Println("按照比例抽取人数:", gconv.Int64(data["position_id"]), gconv.String(data["name"]))
 				WorkUpdateClue(*uCount, saleData, "", "", uId, "5", "169", "新增线索", "主动咨询客服留资客户", cluename, name, gconv.String(data["name"]), phone, "", "", "", "", "", "", gconv.String(data["seat_number"]), "", gconv.Int64(data["position_id"]), "", "", "", []string{}, "", isGroup, isCommerce, true, demand)
 			} else {
 				ok, data, saleData = FindPosition(positionId, trailstatus, gconv.String(acceptanceData["creator_time"]))
@@ -264,7 +266,7 @@ func GetPerson(positionId string) map[string]interface{} {
 	positionArrMap := Base.SelectBySql(fmt.Sprintf(`select  a.phone,b.id,b.ent_id from  
                          base_user  a  
                              INNER JOIN   base_position  b     
-                                 on     b.id=%s  and  b.user_id=a.id and   b.type=1`,
+                                 on     b.id= %s  and  b.user_id=a.id and   b.type=1`,
 		positionId))
 	if positionArrMap == nil || len(*positionArrMap) == 0 {
 		return map[string]interface{}{}
@@ -338,6 +340,7 @@ func FindNumber(moudle string) string {
 }
 
 // 人员查询
+
 func GetAllocation(proportion1, proportion3 float64, deptCount1, deptCount3 int64, administrators1, administrators3 map[string]interface{}) map[string]interface{} {
 	log.Println("分配比例查询", cfg.AllocationTime, cfg.AllocationRatio, proportion1, proportion3, deptCount1, deptCount3)
 	if deptCount1 == 0 {
@@ -347,6 +350,7 @@ func GetAllocation(proportion1, proportion3 float64, deptCount1, deptCount3 int6
 		return administrators3
 	}
 	nowAllocationRatio := math.Round(gconv.Float64(deptCount1 / deptCount3))
+	log.Println("分配比例查询", proportion1, proportion3, deptCount1, deptCount3, nowAllocationRatio, cfg.AllocationRatio)
 	if cfg.AllocationRatio == 0 {
 		//重新计算
 		cfg.AllocationRatio = math.Round(proportion1 / proportion3)
@@ -498,25 +502,23 @@ func orders() {
 	lastOrderId := cfg.LastOrderId
 	selectTimeStart := time.Unix(time.Now().Unix()-7200, 0).Format(date.Date_Full_Layout)
 	selectTimeEnd := time.Unix(time.Now().Unix()-3600, 0).Format(date.Date_Full_Layout)
-	sql := fmt.Sprintf(`select * from dataexport_order where create_time <= "%s" and create_time >= "%s" and id > %s`, selectTimeEnd, selectTimeStart, fmt.Sprint(lastOrderId))
-	//sql := fmt.Sprintf(`select * from dataexport_order where id=260265`)
-	data := Mysql.SelectBySql(sql)
-	if data != nil && *data != nil && len(*data) > 0 {
-		for _, v := range *data {
-			order_status := common.IntAll(v["order_status"])
-			is_backstage_order := common.IntAll(v["is_backstage_order"])
-			product_type_str1 := `"大会员","VIP订阅","数据流量包","历史数据"`
-			product_type := common.ObjToString(v["product_type"])
-			if order_status == 0 && is_backstage_order == 0 && strings.Contains(product_type_str1, product_type) {
-				ok1, ok2, _ := FormatData(v, "orders")
-				if !ok1 {
+	product_type_str1 := `"大会员","VIP订阅","数据流量包","历史数据"`
+	DataSql := fmt.Sprintf(`select a.*,b.product_type as productType ,b.service_starttime,b.service_endtime,b.filter AS productFilter     from  dataexport_order  a  
+    INNER JOIN   jy_order_detail   b    on   a.order_code=b.order_code
+    and    a.create_time<="%s" and a.create_time>="%s" and b.product_type in  (%s) 
+    and a.order_status = 0 and   a.is_backstage_order = 0  and    a.id> %s`,
+		selectTimeEnd, selectTimeStart, product_type_str1, gconv.String(lastOrderId))
+	data, _ := getOrderData(DataSql)
+	if data != nil && data != nil && len(data) > 0 {
+		for _, v := range data {
+			ok1, ok2, _ := FormatData(v, "orders")
+			if !ok1 {
+				common.WriteSysConfig(&cfg)
+				log.Println("线索卡点", "orders", v, selectTimeEnd, selectTimeStart)
+			} else {
+				if !ok2 {
+					log.Println("用户分配已达上限", "orders", v, selectTimeEnd, selectTimeStart)
 					common.WriteSysConfig(&cfg)
-					log.Println("线索卡点", "orders", v, selectTimeEnd, selectTimeStart)
-				} else {
-					if !ok2 {
-						log.Println("用户分配已达上限", "orders", v, selectTimeEnd, selectTimeStart)
-						common.WriteSysConfig(&cfg)
-					}
 				}
 			}
 			cfg.LastOrderId = common.IntAll(v["id"])

+ 390 - 230
clueSync/kc.go

@@ -4,7 +4,6 @@ import (
 	"app.yhyue.com/moapp/jybase/mail"
 	"app.yhyue.com/moapp/jybase/redis"
 	"database/sql"
-	"encoding/json"
 	"fmt"
 	"log"
 	"strings"
@@ -19,22 +18,49 @@ import (
 
 func kcSync() {
 	log.Println("客户成功系统移交定时任务开始")
-	sql := `select * from dwd_f_userbase_order_info where (payable_money > 0 or  (payable_money=0 and  ( filter  like "%分期付款补充权益%"  or   filter  like "%原订单不支持开通多项权益%"  or    filter  like "%权益码兑换%")))
-	  and  data_spec!="dhy4" and phone not   like "9%" and  order_status=1  and (refund_status!=1  or  refund_status is null  ) and  vip_starttime<"2099-01-01"
-	  and vip_endtime > "` + time.Now().Format(date.Date_Full_Layout) + `" and autoUpdate > "` + cfg.LastkcTime + `" order by autoUpdate asc`
-	//sql := `select * from dwd_f_userbase_order_info where order_code="173943424276"  `
-	data := TiDb.SelectBySql(sql)
+	//商品查询
+	productArr, _ := KcProduct()
+	if len(productArr) == 0 {
+		log.Println("查询不到进客成商品类型")
+		return
+	}
+	sql := `SELECT
+	a.*,b.product_type,b.service_starttime,b.service_endtime,b.service_type,b.filter as  productFilter,TIMESTAMPDIFF(DAY, b.service_starttime, b.service_endtime)  as  difference,b.update_time
+FROM
+	dataexport_order a
+	INNER JOIN jy_order_detail b ON a.order_code = b.order_code 
+	and  b.product_type  in  (%s)
+	AND (
+		a.pay_money > 0 
+		OR (
+			a.pay_money = 0 
+	AND ( a.zero_type = "分期付款权益补充" OR a.zero_type = "原订单不支持开通多项权益" OR a.zero_type = "权益码兑换" ))) 
+	AND a.user_phone NOT LIKE "%s" 
+	and  a.user_id  !="" 
+	AND a.order_status = 1 
+	AND ( a.refund_status != 1 OR a.refund_status IS NULL ) 
+	AND b.service_starttime < "2099-01-01" AND b.service_endtime > now() 
+	AND b.update_time > "%s"
+
+ORDER BY
+	a.order_code ASC,
+	difference desc ,
+	b.final_price DESC `
+	sql = fmt.Sprintf(sql, strings.Join(productArr, ","), "9%", cfg.LastkcTime)
+	//sql = fmt.Sprintf(sql, strings.Join(productArr, ","), "9%", "2025-01-02", "103557341197")
+	data := Mysql.SelectBySql(sql)
+	fmt.Println("客成查询到的数量:", len(*data))
 	customList := gconv.Strings(redis.Get("newother", "customList"))
 	if data != nil && *data != nil && len(*data) > 0 {
-		arr := []string{}
+		orderMap := map[string]map[string]interface{}{}
 		for _, v := range *data {
-			product_type := common.ObjToString(v["product_type"])
-			vip_starttime := common.ObjToString(v["vip_starttime"])
-			vip_endtime := common.ObjToString(v["vip_endtime"])
-			order_change := gconv.Int64(v["order_change"])
-			if (product_type == "大会员" || product_type == "企业商机管理") && ((order_change != 0) || (order_change == 0 && TimeStrcount(vip_starttime, vip_endtime) > 95)) {
-				orderCode := gconv.String(v["order_code"])
-				arr = append(arr, orderCode)
+			orderCode := gconv.String(v["order_code"])
+			productType := gconv.String(v["product_type"])
+			vipStarttime := gconv.String(v["service_starttime"])
+			vipEndtime := gconv.String(v["service_endtime"])
+			service_type := gconv.Int64(v["service_type"])
+			difference := gconv.Int(v["difference"])
+			if (service_type != 4) || (service_type == 4 && difference > 95) {
 				isExit := false
 				for _, v := range customList {
 					if v == orderCode {
@@ -45,25 +71,66 @@ func kcSync() {
 				if isExit {
 					continue
 				}
+				//判断一下服务周期
+				_, productInt64, _ := GetOrderProduct(productType, gconv.String(v["productFilter"]))
+				if productInt64 == 0 {
+					continue
+				}
+				if _, exists := orderMap[orderCode]; exists {
+					//判断服务周期
+					data := orderMap[orderCode]
+					//商品类型获取
+					oldDifference := gconv.Int(data["difference"])
+					if oldDifference < difference {
+						//需要更换
+						v["difference"] = difference
+						v["product"] = productInt64
+						v["service_endtime"] = vipEndtime
+						v["service_starttime"] = vipStarttime
+						orderMap[orderCode] = v
+					}
+				} else {
+					v["difference"] = difference
+					v["product"] = productInt64
+					orderMap[orderCode] = v
+				}
+			}
+
+		}
+		for _, v := range *data {
+			orderCode := gconv.String(v["order_code"])
+			if _, exists := orderMap[orderCode]; exists {
 				status := kcJob(v)
 				log.Println("订单进客成打印", orderCode, status)
 				if status == 0 {
 					break
 				}
+				cfg.LastkcTime = gconv.String(v["update_time"])
 				customList = append(customList, orderCode)
+				delete(orderMap, orderCode)
 			}
-			cfg.LastkcTime = common.ObjToString(v["autoUpdate"])
 		}
-		redis.Put("newother", "customList", customList, 0)
-		log.Println(strings.Join(arr, "`,`"))
 	}
+	redis.Put("newother", "customList", customList, 0)
 	common.WriteSysConfig(&cfg)
 	log.Println("客户成功系统移交定时任务结束")
 }
 
 func kcJob(data map[string]interface{}) int {
 	nowTime := time.Now().Format(date.Date_Full_Layout)
-	uId, entId, clueId, saveMap, status := common.ObjToString(data["uid"]), fmt.Sprint(data["ent_id"]), int64(0), map[string]interface{}{}, 1
+	uId, entId, clueId, saveMap, status := "", gconv.String(data["ent_id"]), int64(0), map[string]interface{}{}, 1
+	userId, cluename, phone := "", "", ""
+	phone = gconv.String(data["user_phone"])
+	uId, userId = GetUidToUserId(gconv.String(data["user_id"]), "")
+	log.Println("用户信息获取", data["user_id"], uId, userId)
+	if uId == "" {
+		log.Println("移交客成缺少基本信息,缺少用户信息", uId)
+		return 0
+	}
+	buy_subject := common.IntAll(data["buy_subject"])
+	if buy_subject == 1 || buy_subject == 0 {
+		entId = gconv.String(data["user_id"])
+	}
 	clueData := TiDb.FindOne("dwd_f_crm_clue_info", map[string]interface{}{"uid": uId}, "", "")
 	orderCode := gconv.String(data["order_code"])
 	saleDep, orderPositionId, salesperson := FindSaleRecord(orderCode)
@@ -73,30 +140,18 @@ func kcJob(data map[string]interface{}) int {
 			log.Println("移交客成缺少基本信息", uId)
 			return 0
 		}
-		//创建线索
 		//原始订单获取
 		position_id := int64(0)
-		orderData := Mysql.FindOne("dataexport_order", map[string]interface{}{
-			"order_code": orderCode,
-		}, "", "")
-		if orderData == nil {
-			log.Println("原始订单查询不到:", orderCode)
-		}
-		userId, cluename, phone := common.ObjToString((*orderData)["user_id"]), "", ""
 		seatNumber := ""
-		if saleDep == "客户成功" {
+		if saleDep == "客户成功部" {
 			//新增线索
 			position_id = 0
-		} else if saleDep == "销售部" {
-			log.Println("该订单数据销售部业绩,不会创建线索")
-			return 0
 		} else {
 			position_id = orderPositionId
 			//其他信息
 			seatNumber = "0000"
 		}
-		cluename = common.ObjToString(data["company_name"])
-		phone = common.ObjToString(data["phone"])
+		cluename = gconv.String(data["company_name"])
 		if cluename == "" {
 			cluename = phone
 		}
@@ -142,53 +197,12 @@ func kcJob(data map[string]interface{}) int {
 		}
 	}
 	clueId = common.Int64All((*clueData)["id"])
-	starttime := common.ObjToString(data["vip_starttime"])
-	endtime := common.ObjToString(data["vip_endtime"])
-	buy_subject := common.IntAll(data["buy_subject"])
-	product_type := common.ObjToString(data["product_type"])
-	data_spec := common.ObjToString(data["data_spec"])
-	userName := common.ObjToString((*clueData)["name"])
-	product, company_name := 0, common.ObjToString(data["company_name"])
-	productMap := map[string]int{
-		"dhy6":   1,
-		"dhy7":   2,
-		"dhy3":   4,
-		"dhy1":   5,
-		"dhy2":   6,
-		"dhy5":   7,
-		"企业商机管理": 8,
-	}
-	if buy_subject == 1 || buy_subject == 0 {
-		entId = common.ObjToString(data["userid"])
-	}
-	if product_type == "企业商机管理" {
-		product = productMap[product_type]
-		powerData := TiDb.FindOne("dwd_f_data_equity_info", map[string]interface{}{"uid": uId, "product_type": "商机管理"}, "", "comeintime desc")
-		if powerData != nil {
-			starttime = common.ObjToString((*powerData)["starttime"])
-			endtime = common.ObjToString((*powerData)["endtime"])
-		} else {
-			log.Println("客成移交权限未查到--", uId)
-			return 0
-		}
-	} else {
-		if data_spec == "dhy6" {
-			product = 1
-			filter := common.ObjToString(data["filter"])
-			filterMap := map[string]interface{}{}
-			json.Unmarshal([]byte(filter), &filterMap)
-			if len(filterMap) > 0 {
-				areaCount := common.IntAll(filterMap["areaCount"])
-				if areaCount == 1 {
-					product = 3
-				}
-			}
-		} else {
-			product = productMap[data_spec]
-		}
-	}
+	starttime := gconv.String(data["service_starttime"])
+	endtime := gconv.String(data["service_endtime"])
+	//product_type := gconv.String(data["product_type"])
+	userName := gconv.String((*clueData)["name"])
+	product, company_name := gconv.String(data["product"]), gconv.String(data["company_name"])
 	//同一公司名称(以客户详情-组织机构-公司名称)下的线索需分配给同1人
-
 	saveMap = map[string]interface{}{
 		"clue_id":                   clueId,
 		"transfertime":              nowTime,
@@ -285,8 +299,7 @@ func kcJob(data map[string]interface{}) int {
 			TiDb.Update("dwd_f_crm_clue_info", map[string]interface{}{"id": clueId}, map[string]interface{}{"is_transfer": 1, "updatetime": nowTime, "name": userName})
 		}
 	} else {
-		entIds := common.IntAll(data["ent_id"])
-		customerPositionId, customerName := cAutoDraw(entIds, orderPositionId, salesperson, saleDep, false, nil)
+		customerPositionId, customerName := cAutoDraw(gconv.Int(entId), orderPositionId, salesperson, saleDep, false, nil)
 		log.Println("移交客成positionId", customerPositionId, customerName, saleDep, orderPositionId, salesperson, false)
 		cId, ok, updateId1, updateId2, updateId3 := int64(0), false, int64(0), int64(0), int64(0)
 		if TiDb.ExecTx("保存客户", func(tx *sql.Tx) bool {
@@ -328,7 +341,6 @@ func kcJob(data map[string]interface{}) int {
 			})
 			return cId > -1 && ok && updateId1 > -1 && updateId2 > -1 && updateId3 > -1
 		}) {
-			//TiDb.UpdateOrDeleteBySql(`update dwd_f_csm_customer_autodraw_record set count = count + 1 where name = ?`, name)
 			if customerName == db.KeCheng.Admin {
 				TiDb.UpdateOrDeleteBySql(`update dwd_f_csm_customer_autodraw_record set count = count + 2 where name = ?`, customerName)
 			} else {
@@ -343,7 +355,7 @@ func kcJob(data map[string]interface{}) int {
 }
 
 func cAutoDraw(entId int, orderPositionId int64, salesperson, saleDep string, isExist bool, csmdata *map[string]interface{}) (positionId int64, name string) {
-	query := `SELECT name,position_id FROM dwd_d_crm_department_level_succbi WHERE bi_pcode = (SELECT bi_code FROM dwd_d_crm_department_level_succbi WHERE name = "客户成功部" and resign=0 and  ent_id=?) and resign = 0 `
+	query := `SELECT name,position_id FROM dwd_d_crm_department_level_succbi WHERE bi_pcode = (SELECT bi_code FROM dwd_d_crm_department_level_succbi WHERE name = "客户成功部" and resign=0 and  ent_id=?) and resign = 0 and   position_id   is  not  null `
 	data := TiDb.SelectBySql(query, db.EntId)
 	if data == nil || len(*data) == 0 {
 		return
@@ -365,13 +377,13 @@ func findKcOldPerson(entId int, orderPositionId int64, salesperson, saleDep stri
 				deptPositionId := gconv.Int64(v["position_id"])
 				if deptPositionId == positionid {
 					positionId = positionid
-					name = common.ObjToString((*csmdata)["name"])
+					name = gconv.String((*csmdata)["name"])
 					return
 				}
 			}
 		}
 		//原始用户已离职 查看订单是否有合适的订单
-		if saleDep == "客户成功" {
+		if saleDep == "客户成功" {
 			positionId = orderPositionId
 			name = salesperson
 			return
@@ -384,19 +396,19 @@ func findKcOldPerson(entId int, orderPositionId int64, salesperson, saleDep stri
 		if entdata != nil && len(*entdata) > 0 {
 			for _, v := range *entdata {
 				positionid := common.Int64All(v["position_id"])
-				name = common.ObjToString(v["name"])
+				name = gconv.String(v["name"])
 				for _, v := range *data {
 					deptPositionId := gconv.Int64(v["position_id"])
 					if deptPositionId == positionId {
 						positionId = positionid
-						name = common.ObjToString((*csmdata)["name"])
+						name = gconv.String((*csmdata)["name"])
 						return
 					}
 				}
 			}
 		}
 		//原始用户已离职 或者没有查找相关企业客成信息    以订单信息为主
-		if saleDep == "客户成功" {
+		if saleDep == "客户成功" {
 			positionId = orderPositionId
 			name = salesperson
 		}
@@ -404,7 +416,7 @@ func findKcOldPerson(entId int, orderPositionId int64, salesperson, saleDep stri
 		//没有相同企业的客成信息
 	} else {
 		//没有人  分配给自己
-		if saleDep == "客户成功" {
+		if saleDep == "客户成功" {
 			positionId = orderPositionId
 			name = salesperson
 			return
@@ -417,7 +429,7 @@ func findKcNewPerson(entId int, data *[]map[string]interface{}) (positionId int6
 		entdata := TiDb.FindOne("dwd_f_csm_customer_info", map[string]interface{}{"ent_id": entId}, "", "")
 		if entdata != nil && len(*entdata) > 0 {
 			positionId = common.Int64All((*entdata)["position_id"])
-			name = common.ObjToString((*entdata)["name"])
+			name = gconv.String((*entdata)["name"])
 			return
 		}
 	}
@@ -428,13 +440,13 @@ func findKcNewPerson(entId int, data *[]map[string]interface{}) (positionId int6
 			//判断是否有新员工
 			isOk := false
 			for _, vv := range *countData {
-				if common.ObjToString(v["name"]) == common.ObjToString(vv["name"]) {
+				if gconv.String(v["name"]) == gconv.String(vv["name"]) {
 					isOk = true
 				}
 			}
 			//有新员工直接分给新员工
 			if !isOk {
-				name = common.ObjToString(v["name"])
+				name = gconv.String(v["name"])
 				rData := TiDb.FindOne("dwd_f_csm_customer_autodraw_record", map[string]interface{}{}, "", "count desc")
 				TiDb.Insert("dwd_f_csm_customer_autodraw_record", map[string]interface{}{
 					"name":  name,
@@ -448,18 +460,18 @@ func findKcNewPerson(entId int, data *[]map[string]interface{}) (positionId int6
 		for _, v := range *countData {
 			if countres == 0 {
 				res = common.Int64All(v["count"])
-				name = common.ObjToString(v["name"])
+				name = gconv.String(v["name"])
 			} else {
 				if common.Int64All(v["count"]) <= res {
 					res = common.Int64All(v["count"])
-					name = common.ObjToString(v["name"])
+					name = gconv.String(v["name"])
 				}
 			}
 			countres++
 		}
 	}
 	for _, v := range *data {
-		if name == common.ObjToString(v["name"]) {
+		if name == gconv.String(v["name"]) {
 			positionId = common.Int64All(v["position_id"])
 		}
 	}
@@ -477,7 +489,7 @@ func kcAuto() {
 			training_way := common.IntAll(v["training_way"])
 			positionId := common.Int64All(v["position_id"])
 			clueId := common.Int64All(v["clue_id"])
-			tasksource, tasksources := common.ObjToString(v["tasksource"]), ""
+			tasksource, tasksources := gconv.String(v["tasksource"]), ""
 			taskstatus := common.IntAll(v["taskstatus"])
 			if relationship_building_way != 1 && inventory_way == 1 {
 				tasksources = "2"
@@ -527,66 +539,60 @@ func kcAuto() {
 func ordersClue() {
 	lastOrderClueId := cfg.LastOrderClueId
 	nowTime := time.Now().Format(date.Date_Full_Layout)
+<<<<<<< HEAD
 	sql := fmt.Sprintf(`select order_code,order_status,is_backstage_order,pay_money,saleDep,salesperson,user_phone,create_person,saleMoney,user_id,product_type,company_name,autoUpdate from dataexport_order where autoUpdate >= "%s" order by autoUpdate asc`, lastOrderClueId)
 	log.Println("后台订单线索定时任务开始:", sql)
 	data := Mysql.SelectBySql(sql)
 	log.Println("后台订单线索定时任务开始:", len(*data))
+=======
+	product_type_str2 := `"大会员","企业商机管理","VIP订阅"`
+	sql := fmt.Sprintf(`select a.*,b.product_type as productType ,b.service_starttime,b.service_endtime,b.filter AS productFilter,b.update_time     from  dataexport_order  a  
+    INNER JOIN   jy_order_detail   b    on   a.order_code=b.order_code
+    and    b.update_time>="%s"  AND a.user_phone NOT LIKE "%s"   and   a.user_id  !=""
+    and b.product_type in  (%s) and a.order_status = 1 and   a.is_backstage_order = 1  order by b.update_time asc`, lastOrderClueId, "9%", product_type_str2)
+	log.Println("后台订单线索定时任务", sql)
+	data := Mysql.SelectBySql(sql)
+	log.Println("后台订单线索定时任务", len(*data))
+>>>>>>> master
 	if data != nil && *data != nil && len(*data) > 0 {
 		for _, v := range *data {
-			order_status := common.IntAll(v["order_status"])
-			is_backstage_order := common.IntAll(v["is_backstage_order"])
-			pay_money := common.IntAll(v["pay_money"])
+			payMoney := common.IntAll(v["pay_money"])
 			orderCode := gconv.String(v["order_code"])
 			saleDep, _, salesperson := FindSaleRecord(orderCode)
-			user_phone := common.ObjToString(v["user_phone"])
-			createperson := common.ObjToString(v["create_person"])
-			userId, uId, cluename, seatNumber, positionId, trailstatus, clueId := common.ObjToString(v["user_id"]), "", "", "", int64(0), "", int64(0)
-			product_type_str2 := `"大会员","企业商机管理","VIP订阅"`
-			product_type := common.ObjToString(v["product_type"])
-			if order_status == 1 && is_backstage_order == 1 && saleDep != "" && !strings.HasPrefix(user_phone, "9") && strings.Contains(product_type_str2, product_type) {
+			userPhone := gconv.String(v["user_phone"])
+			createperson := gconv.String(v["create_person"])
+			userId, uId, cluename, seatNumber, positionId, trailstatus, clueId := gconv.String(v["user_id"]), "", "", "", int64(0), "", int64(0)
+			if saleDep != "" {
 				//销售部
 				query := map[string]interface{}{}
 				source := ""
-				if product_type == "企业商机管理" {
-					query["phone"] = user_phone
-					userInfo := TiDb.FindOne("dwd_f_userbase_baseinfo", query, "", "")
-					if userInfo != nil && len(*userInfo) > 0 {
-						uId = common.ObjToString((*userInfo)["uid"])
-						userId = common.ObjToString((*userInfo)["userid"])
-						source = common.ObjToString((*userInfo)["source"])
+				if !mongodb.IsObjectIdHex(userId) {
+					userMapping := TiDb.FindOne("dwd_f_userbase_id_mapping", map[string]interface{}{"position_id": userId}, "", "")
+					if userMapping != nil && len(*userMapping) > 0 {
+						userId = gconv.String((*userMapping)["userid"])
 					} else {
-						log.Println("后台订单--未查询到 ", user_phone)
+						log.Println("后台订单--未查询到 ", userPhone)
 						break
 					}
+				}
+				query["userid"] = userId
+				userInfo := TiDb.FindOne("dwd_f_userbase_baseinfo", query, "", "")
+				if userInfo != nil && len(*userInfo) > 0 {
+					uId = gconv.String((*userInfo)["uid"])
+					source = gconv.String((*userInfo)["source"])
 				} else {
-					if !mongodb.IsObjectIdHex(userId) {
-						userMapping := TiDb.FindOne("dwd_f_userbase_id_mapping", map[string]interface{}{"position_id": userId}, "", "")
-						if userMapping != nil && len(*userMapping) > 0 {
-							userId = common.ObjToString((*userMapping)["userid"])
-						} else {
-							log.Println("后台订单--未查询到 ", user_phone)
-							break
-						}
-					}
-					query["userid"] = userId
-					userInfo := TiDb.FindOne("dwd_f_userbase_baseinfo", query, "", "")
-					if userInfo != nil && len(*userInfo) > 0 {
-						uId = common.ObjToString((*userInfo)["uid"])
-						source = common.ObjToString((*userInfo)["source"])
-					} else {
-						log.Println("后台订单--未查询到 ", query, user_phone)
-						break
-					}
+					log.Println("后台订单--未查询到 ", query, userPhone)
+					break
 				}
 				is_assign := 1
 				mailContent := ""
-				cluename = common.ObjToString(v["company_name"])
-				mailContent = fmt.Sprintf("%s(%s)", cluename, user_phone)
+				cluename = gconv.String(v["company_name"])
+				mailContent = fmt.Sprintf("%s(%s)", cluename, userPhone)
 				if cluename == "" {
-					cluename = user_phone
-					mailContent = user_phone
+					cluename = userPhone
+					mailContent = userPhone
 				}
-				if pay_money > 0 {
+				if payMoney > 0 {
 					trailstatus = "08"
 				} else {
 					trailstatus = "01"
@@ -607,10 +613,10 @@ func ordersClue() {
 						log.Println("销售部订单salesperson", salesperson)
 						saleData := TiDb.FindOne("dwd_f_crm_personnel_management", map[string]interface{}{"name": salesperson}, "", "")
 						if saleData != nil {
-							seatNumber = common.ObjToString((*saleData)["seat_number"])
+							seatNumber = gconv.String((*saleData)["seat_number"])
 							positionId = common.Int64All((*saleData)["position_id"])
 						}
-						if IsFreeze(source, pay_money, gconv.String(positionId), trailstatus) {
+						if IsFreeze(source, payMoney, gconv.String(positionId), trailstatus) {
 							//线索需要冻结
 							is_assign = -3
 						}
@@ -627,8 +633,8 @@ func ordersClue() {
 							"top_cluetype":         "4",
 							"sub_cluetype":         "154",
 							"trailstatus":          trailstatus,
-							"name":                 user_phone,
-							"phone":                user_phone,
+							"name":                 userPhone,
+							"phone":                userPhone,
 							"comeinsource_private": 2,
 							"is_task":              0,
 							"taskstatus":           0,
@@ -648,8 +654,8 @@ func ordersClue() {
 							"top_cluetype":         "4",
 							"sub_cluetype":         "154",
 							"trailstatus":          trailstatus,
-							"name":                 user_phone,
-							"phone":                user_phone,
+							"name":                 userPhone,
+							"phone":                userPhone,
 							"is_task":              0,
 							"taskstatus":           0,
 							"company_nature":       isGroup,
@@ -679,7 +685,7 @@ func ordersClue() {
 								"operator_id": -1,
 							})
 							//移交失败发送消息
-							if IsFreeze(source, pay_money, gconv.String(positionId), trailstatus) {
+							if IsFreeze(source, payMoney, gconv.String(positionId), trailstatus) {
 								//发送邮件信息
 								OrderCreateFail(positionId, mailContent)
 							}
@@ -687,7 +693,7 @@ func ordersClue() {
 					}
 				}
 			}
-			cfg.LastOrderClueId = common.ObjToString(v["autoUpdate"])
+			cfg.LastOrderClueId = gconv.String(v["update_time"])
 		}
 	}
 	common.WriteSysConfig(&cfg)
@@ -706,31 +712,38 @@ func refundAuto() {
 			saleId, newSeatNumber, newPerson := int64(0), "", ""
 			clueId := common.Int64All(v["clue_id"])
 			company_name := gconv.String(v["company_name"])
-			name := common.ObjToString(v["name"])
+			name := gconv.String(v["name"])
 			kcposition_id := common.Int64All(v["position_id"])
 			isRenewalProtection := common.IntAll(v["is_renewal_protection"])
 			clueData := TiDb.FindOne("dwd_f_crm_clue_info", map[string]interface{}{"id": clueId}, "name,phone,company_nature,company_verification,cluename,userid,position_id,uid", "")
 			if clueData != nil && len(*clueData) > 0 {
-				saleId, newPerson, newSeatNumber = FindPositionIdClueId(clueId)
+				uid = gconv.String((*clueData)["uid"])
+				saleId, newPerson, newSeatNumber = FindPositionIdClueId(uid)
 				oldSaleId = common.Int64All((*clueData)["position_id"])
 				oldPersonData := FindPersonOne(oldSaleId)
 				if oldSaleId != 0 {
 					oldsaleName = gconv.String(oldPersonData["name"])
 				}
-				cluename = common.ObjToString((*clueData)["cluename"])
+				cluename = gconv.String((*clueData)["cluename"])
 				userName = gconv.String((*clueData)["name"])
 				company_nature = common.IntAll((*clueData)["company_nature"])
 				company_verification = common.IntAll((*clueData)["company_verification"])
-				uid = common.ObjToString((*clueData)["uid"])
-				phone = common.ObjToString((*clueData)["phone"])
+				phone = gconv.String((*clueData)["phone"])
+			}
+			personArr := getUserIdToUid(uid)
+			productArr, _ := KcProduct()
+			if len(productArr) == 0 || len(personArr) == 0 {
+				log.Println("查询不到进客成商品类型或查询不到用户信息")
+				continue
 			}
 			//查询即将到期数据
 			if isRenewalProtection == 0 {
-				orderData := TiDb.SelectBySql(`select * from dwd_f_userbase_order_info where uid=?   and (product_type = "企业商机管理" or product_type = "大会员") and order_status = 1  and  refund_status!=1 ORDER BY   vip_endtime  desc  `, uid)
-				if orderData != nil && len(*orderData) > 0 {
+				sqlStr := fmt.Sprintf(`select  a.*,b.product_type as productType,b.service_starttime,b.service_endtime,b.filter AS productFilter from  dataexport_order  a   INNER JOIN   jy_order_detail   b    on   a.order_code=b.order_code and    a.user_id    in   (%s) and    b.product_type in (%s)  ORDER BY  b.service_endtime  desc     `, strings.Join(personArr, ","), strings.Join(productArr, ","))
+				_, vipEndDateStr := getOrderData(sqlStr)
+				if vipEndDateStr != "" {
 					endDate := time.Now().AddDate(0, 0, -db.ExpirationPeriod+3).Unix()
 					startDate := time.Now().AddDate(0, 0, -db.ExpirationPeriod+2).Unix()
-					vipEndDate, _ := time.ParseInLocation(time.DateTime, gconv.String((*orderData)[0]["vip_endtime"]), time.Local)
+					vipEndDate, _ := time.ParseInLocation(time.DateTime, vipEndDateStr, time.Local)
 					log.Println(vipEndDate.Unix() > startDate, vipEndDate.Unix() < endDate)
 					log.Println(vipEndDate.Unix(), startDate, endDate)
 					if vipEndDate.Unix() > startDate && vipEndDate.Unix() < endDate {
@@ -749,15 +762,16 @@ func refundAuto() {
 			}
 			isFull := false
 			isAllRefund := false
-			myOrders := TiDb.SelectBySql(`select refund_status from dwd_f_userbase_order_info where uid=? and (product_type = "企业商机管理" or product_type = "大会员") and order_status = 1 `, uid)
-			if myOrders != nil {
+			orderSql := fmt.Sprintf(`  select  a.*,b.product_type as productType,b.service_starttime,b.service_endtime,b.filter AS productFilter from  dataexport_order  a   INNER JOIN   jy_order_detail   b    on   a.order_code=b.order_code and    a.user_id    in   (%s) and    b.product_type in (%s)  and   order_status = 1  ORDER BY  b.service_endtime  desc   `, strings.Join(personArr, ","), strings.Join(productArr, ","))
+			myOrders, _ := getOrderData(orderSql)
+			if myOrders != nil || len(myOrders) > 0 {
 				refundCount := 0
-				for _, v := range *myOrders {
+				for _, v := range myOrders {
 					if common.IntAll(v["refund_status"]) == 1 {
 						refundCount++
 					}
 				}
-				if len(*myOrders) > 0 && len(*myOrders) == refundCount {
+				if len(myOrders) > 0 && len(myOrders) == refundCount {
 					isAllRefund = true
 				}
 			}
@@ -813,15 +827,22 @@ func refundAuto() {
 				})
 				TiDb.UpdateOrDeleteBySql(`UPDATE dwd_f_csm_customer_info SET is_transfer=1 WHERE clue_id = ?`, clueId)
 			} else {
-				order1 := TiDb.SelectBySql(`select id from dwd_f_userbase_order_info where uid=? and (product_type = "企业商机管理" or product_type = "大会员") and vip_endtime > ? and order_status = 1 `, uid, findNowTime)
+				log.Println("客成到期处理")
+				order1Sql := fmt.Sprintf(`select  a.id from  dataexport_order  a   INNER JOIN   jy_order_detail   b    on   a.order_code=b.order_code and    a.user_id    in   (%s) and    b.product_type in (%s)  and   order_status = 1  and  b.service_endtime>"%s" ORDER BY  b.service_endtime  desc  `, strings.Join(personArr, ","), strings.Join(productArr, ","), findNowTime)
+				log.Println("有效订单查询", order1Sql)
+				order1 := Mysql.SelectBySql(order1Sql)
 				if order1 == nil || len(*order1) == 0 {
 					isOk := false
-					order3 := TiDb.SelectBySql(`select vip_endtime from dwd_f_userbase_order_info where uid=? and (product_type = "企业商机管理" or product_type = "大会员") and vip_endtime < ? and order_status = 1 ORDER BY   vip_endtime  desc limit 1  `, uid, findNowTime)
-					if order3 != nil && len(*order3) > 0 {
+					order3Sql := fmt.Sprintf(`select  a.* ,	b.product_type AS productType,b.service_starttime,b.service_endtime ,b.filter AS productFilter
+					from  dataexport_order  a   INNER JOIN   jy_order_detail   b   
+    				on   a.order_code=b.order_code and    a.user_id    in   (%s) and    b.product_type in (%s) 
+             		and   order_status = 1  and  b.service_endtime<"%s" ORDER BY  b.service_endtime  desc  `,
+						strings.Join(personArr, ","), strings.Join(productArr, ","), findNowTime)
+					log.Println("有效订单查询1", order3Sql)
+					_, vip_endtime := getOrderData(order3Sql)
+					if vip_endtime != "" {
 						//获取最后一个订单信息
-						vv := (*order3)[0]
 						if isRenewalProtection == 1 {
-							vip_endtime := common.ObjToString(vv["vip_endtime"])
 							vip_endtimes, _ := time.ParseInLocation(date.Date_Full_Layout, vip_endtime, time.Local)
 							//查询申请保护时间
 							renewalTime := time.Now()
@@ -868,7 +889,7 @@ func refundAuto() {
 										isOks := false
 										for _, vv := range *adata {
 											position_ids := common.Int64All(vv["position_id"])
-											newSeatNumber = common.ObjToString(vv["seatNumber"])
+											newSeatNumber = gconv.String(vv["seatNumber"])
 											saleDatas := TiDb.FindOne("dwd_f_crm_personnel_management", map[string]interface{}{"position_id": position_ids, "resign": 0}, "", "")
 											if saleDatas != nil && len(*saleDatas) > 0 {
 												saleId = position_ids
@@ -884,7 +905,7 @@ func refundAuto() {
 											}
 											if sdata != nil && len(*sdata) > 0 {
 												saleId = common.Int64All((*sdata)[0]["position_id"])
-												newSeatNumber = common.ObjToString((*sdata)[0]["seat_number"])
+												newSeatNumber = gconv.String((*sdata)[0]["seat_number"])
 												newPerson = gconv.String((*sdata)[0]["name"])
 											}
 										}
@@ -906,8 +927,8 @@ func refundAuto() {
 									}
 									if sdata != nil && len(*sdata) > 0 {
 										saleId = common.Int64All((*sdata)[0]["position_id"])
-										newSeatNumber = common.ObjToString((*sdata)[0]["seat_number"])
-										newPerson = common.ObjToString((*sdata)[0]["name"])
+										newSeatNumber = gconv.String((*sdata)[0]["seat_number"])
+										newPerson = gconv.String((*sdata)[0]["name"])
 									}
 								}
 							}
@@ -1053,7 +1074,7 @@ func refundAuto() {
 		}
 		return true
 	}, `select ent_id,clue_id,position_id,name,is_renewal_protection,company_name from dwd_f_csm_customer_info where is_transfer = 0`)
-	//}, `select ent_id,clue_id,position_id,name,is_renewal_protection,company_name from dwd_f_csm_customer_info where clue_id =1189082`)
+	//}, `select ent_id,clue_id,position_id,name,is_renewal_protection,company_name from dwd_f_csm_customer_info where clue_id =1892234`)
 
 	//移交电销提醒
 	for i, v := range mailData {
@@ -1287,7 +1308,7 @@ func CustomerChange() {
 		}
 		return true
 	}, `select operator_id, clue_id,position_id,old_value,new_value,createtime from   dwd_f_crm_clue_change_record  where    createtime>?  and change_type="客户成功经理"   order by  createtime`, startTime)
-	//}, `select operator_id, clue_id,position_id,old_value,new_value,createtime from   dwd_f_crm_clue_change_record  where   id=?   order by  createtime`, 57876741)
+	//}, `select operator_id, clue_id,position_id,old_value,new_value,createtime from   dwd_f_crm_clue_change_record  where   id=?   order by  createtime`, 22170775)
 	if len(customMap1) > 0 {
 		ChangeSendKc(customMap1, 1)
 	}
@@ -1388,10 +1409,11 @@ func CustomerChangeHandle(data map[string]interface{}) map[string]interface{} {
 	if clueData == nil || len(*clueData) == 0 {
 		return nil
 	}
-	phone = common.ObjToString((*clueData)["phone"])
+	uid := gconv.String((*clueData)["uid"])
+	phone = gconv.String((*clueData)["phone"])
 	userName = gconv.String((*clueData)["name"])
 	//positionId := gconv.Int64((*clueData)["position_id"])
-	positionId, _, _ := FindPositionIdClueId(clueId)
+	positionId, _, _ := FindPositionIdClueId(uid)
 	clueName = gconv.String((*clueData)["cluename"])
 	customData := TiDb.FindOne("dwd_f_csm_customer_info", map[string]interface{}{
 		"clue_id": clueId,
@@ -1412,36 +1434,43 @@ func CustomerChangeHandle(data map[string]interface{}) map[string]interface{} {
 }
 
 // 查找订单实际业绩归属
-func FindPositionIdClueId(clueId int64) (int64, string, string) {
-	querySql := `
-	SELECT
-		e.username as salesperson ,c.position_id,f.dept_name,c.seat_number
+func FindPositionIdClueId(uid string) (int64, string, string) {
+	personArr := getUserIdToUid(uid)
+	productArr, _ := KcProduct()
+	querySql := fmt.Sprintf(`	SELECT
+		d.saler_name as salesperson ,c.position_id,f.dept_name,c.seat_number,b.product_type as   productType,b.filter 
 	FROM
-		dwd_f_crm_clue_info a
-INNER JOIN dwd_f_userbase_order_info b ON a.id = ?
-		AND a.uid = b.uid 
+   jianyu.dataexport_order  a INNER JOIN   jianyu.jy_order_detail   b     on  
+	 a.order_code=b.order_code  and    a.user_id    in   (%s)  
 		AND (
-			b.payable_money > 0 
+			b.final_price > 0 
 			OR (
-				b.payable_money = 0 
-			AND ( b.filter LIKE "%分期付款补充权益%" OR b.filter LIKE "%原订单不支持开通多项权益%" OR b.filter LIKE "%权益码兑换%" ))) 
-		AND b.data_spec != "dhy4" 
-		AND b.order_status = 1 and b.phone not   like "9%"
-		AND ( b.refund_status != 1 OR b.refund_status IS NULL ) 
-		AND b.vip_starttime < "2099-01-01" 
-		AND b.product_type IN ( "大会员", "企业商机管理" ) 
-		AND ( b.order_change != 0 or  b.order_change  is  NULL OR ( b.order_change = 0 AND DATEDIFF( b.vip_endtime, b.vip_starttime )> 90 ) ) 
+				b.final_price = 0 
+			AND ( a.zero_type= "分期付款权益补充" OR a.zero_type=  "原订单不支持开通多项权益" OR a.zero_type=  "权益码兑换" ))) 
+		AND a.order_status = 1 and a.user_phone not   like "%s"
+		AND ( a.refund_status != 1 OR a.refund_status IS NULL ) 
+		AND b.service_starttime < "2099-01-01" 
+		AND b.product_type IN (%s ) 
+		AND ( b.service_type != 4 or  b.service_type  is  NULL OR ( b.service_type = 4 AND TIMESTAMPDIFF(DAY, b.service_starttime, b.service_endtime )> 90 ) ) 
 		inner JOIN  jianyu.order_sale_record d on  b.order_code=d.ordercode and  d.state=1 
-		INNER JOIN cadmin.admin_user e   on  d.saler_Id = e.id
-		INNER JOIN   dwd_f_crm_personnel_management c   on c.ent_id =?  and    e.username=c.name 
+		INNER JOIN jianyu.entniche_user e   on  d.ent_userId = e.id
+		INNER JOIN   dwd_f_crm_personnel_management c   on c.ent_id =?  and    e.name=c.name 
 		inner  join dwd_d_crm_department_level_succbi  f  on   c.position_id=f.position_id
 	ORDER BY
-		b.vip_endtime desc ,b.payable_money DESC `
-	clueData := TiDb.SelectBySql(querySql, clueId, db.EntId)
+		b.service_endtime desc ,b.final_price DESC `, strings.Join(personArr, ","), "9%", strings.Join(productArr, ","))
+	log.Println("业绩归属查询:", querySql)
+	clueData := TiDb.SelectBySql(querySql, db.EntId)
 	if clueData == nil || len(*clueData) == 0 {
 		return 0, "", ""
 	}
 	for _, m := range *clueData {
+		productType := gconv.String(m["productType"])
+		if productType == "大会员" {
+			level := gconv.Int(m["service_type"])
+			if level == 4 {
+				continue
+			}
+		}
 		deptName := gconv.String(m["dept_name"])
 		if strings.Contains(deptName, "一部") || strings.Contains(deptName, "三部") {
 			return gconv.Int64(m["position_id"]), gconv.String(m["salesperson"]), gconv.String(m["seat_number"])
@@ -1453,7 +1482,7 @@ func refundAutoHistory() {
 	data := TiDb.Find("dwd_f_crm_clue_autodraw_record", nil, "", "", -1, -1)
 	if data != nil {
 		for _, v := range *data {
-			seatNumber := common.ObjToString(v["seatNumber"])
+			seatNumber := gconv.String(v["seatNumber"])
 			adata := TiDb.Find("dwd_f_crm_personnel_management", map[string]interface{}{"seat_number": seatNumber}, "", "", -1, -1)
 			if adata != nil {
 				for _, vv := range *adata {
@@ -1479,20 +1508,22 @@ func IsFreeze(source string, pay_money int, positionId, trailstatus string) bool
 	}
 	return false
 }
+
+// 业绩归属查询
 func FindSaleRecord(orderCode string) (dept string, positionId int64, position string) {
 	recordList := Mysql.SelectBySql(`
-			SELECT
+		SELECT DISTINCT
 			a.saler_dept,
 			a.saler_name,
-			b.phone 
+			b.phone
 		FROM
 			order_sale_record a
-			INNER JOIN cadmin.admin_user b 
+			INNER JOIN entniche_user  b 
 		on 
-			a.ordercode = ? and  a.saler_Id = b.id 
+			a.ordercode = ? and  a.ent_userId = b.id 
 		ORDER BY
 			a.state,
-			a.money
+			a.money desc 
 	`, orderCode)
 	if recordList != nil && len(*recordList) > 0 {
 		saler_dept := gconv.String((*recordList)[0]["saler_dept"])
@@ -1500,8 +1531,8 @@ func FindSaleRecord(orderCode string) (dept string, positionId int64, position s
 			saler_dept = "销售部"
 		} else if strings.Contains(saler_dept, "市场") {
 			saler_dept = "市场部"
-		} else if strings.Contains(saler_dept, "客户成功") {
-			saler_dept = "客户成功"
+		} else if strings.Contains(saler_dept, "客户成功") && !strings.Contains(saler_dept, "客服") {
+			saler_dept = "客户成功"
 		} else {
 			saler_dept = ""
 		}
@@ -1659,17 +1690,7 @@ type OrderInfo struct {
 // 客成发送邮箱
 func KcSend(orderCode, personName string) {
 	log.Println("客成发邮件", orderCode)
-	bigmemberService := map[int64]string{}
-	combo := map[int64]string{}
-	Mysql.SelectByBath(1, func(l *[]map[string]interface{}) bool {
-		bigmemberService[common.Int64All((*l)[0]["id"])] = common.ObjToString((*l)[0]["s_name"])
-		return true
-	}, `select id,s_name from jianyu.bigmember_service`)
-	Mysql.SelectByBath(1, func(l *[]map[string]interface{}) bool {
-		combo[common.Int64All((*l)[0]["id"])] = common.ObjToString((*l)[0]["s_name"])
-		return true
-	}, `select id,s_name from jianyu.bigmember_combo`)
-	orderInfo := KcOrderFormat(orderCode, bigmemberService, combo)
+	orderInfo := KcOrderFormat(orderCode)
 	if orderInfo != nil {
 		tableAppend := ""
 		if len(orderInfo.SeriveList) > 0 {
@@ -1800,31 +1821,61 @@ func ExitKcSend(personName string, infoList []map[string]interface{}) {
 }
 
 // 客成邮件   订单信息初始化
-func KcOrderFormat(orderCode string, bigmemberService, combo map[int64]string) *OrderInfo {
-	orderData := Mysql.SelectBySql(`SELECT a.id,a.order_code,a.pay_money,a.user_phone,a.vip_starttime,a.vip_endtime,a.product_type,a.filter,a.user_id,a.ent_id,a.company_name,a.create_person,SUM(b.return_money) AS return_money
-		FROM jianyu.dataexport_order a
-	LEFT JOIN return_money_record b ON (a.order_code=b.order_code)
-	WHERE a.order_code=? AND a.order_status=1 AND (a.product_type='大会员' OR a.product_type='大会员-子账号' or  a.product_type = "企业商机管理")
-	GROUP BY a.id ORDER BY a.autoUpdate`, orderCode)
+func KcOrderFormat(orderCode string) *OrderInfo {
+	productArr, _ := KcProduct()
+	bigmemberService := map[int64]string{}
+	Mysql.SelectByBath(1, func(l *[]map[string]interface{}) bool {
+		bigmemberService[common.Int64All((*l)[0]["id"])] = gconv.String((*l)[0]["s_name"])
+		return true
+	}, `select id,s_name from jianyu.bigmember_service`)
+	orderData := Mysql.SelectBySql(fmt.Sprintf(`
+	SELECT
+	d.*,
+	SUM( c.return_money ) AS return_money 
+FROM
+	(
+	SELECT
+		a.order_code,
+		a.pay_money,
+		a.user_phone,
+		b.service_starttime,
+		b.service_endtime,
+		b.product_type,
+		a.filter,
+		a.user_id,
+		a.ent_id,
+		a.company_name,
+		a.create_person,
+		b.filter AS productFilter,
+		TIMESTAMPDIFF( DAY, b.service_starttime, b.service_endtime ) AS difference 
+	FROM
+		jianyu.dataexport_order a
+		INNER JOIN jy_order_detail b ON a.order_code = "%s" 
+		AND a.order_code = b.order_code 
+		AND a.order_status = 1 
+		AND b.product_type IN ( %s ) 
+	ORDER BY
+		difference DESC  LIMIT 1 
+	) d
+	LEFT JOIN return_money_record c ON d.order_code = c.order_code  
+	`, orderCode, strings.Join(productArr, ",")))
 	data := &OrderInfo{}
 	if orderData != nil && len(*orderData) > 0 {
-		id := common.Int64All((*orderData)[0]["id"])
-		user_phone := common.ObjToString((*orderData)[0]["user_phone"])
-		user_id := common.ObjToString((*orderData)[0]["user_id"])
-		product_type := common.ObjToString((*orderData)[0]["product_type"])
+		orderData := (*orderData)[0]
+		id := common.Int64All(orderData["id"])
+		user_phone := gconv.String(orderData["user_phone"])
+		user_id := gconv.String(orderData["user_id"])
+		product_type := gconv.String(orderData["product_type"])
 		serviceList := []string{}
-		if filter := common.ObjToString((*orderData)[0]["filter"]); filter != "" {
-			filterMap := map[string]interface{}{}
-			json.Unmarshal([]byte(filter), &filterMap)
-			if level := common.Int64All(filterMap["level"]); level == 5 {
-				product_type += "自定义版"
-				for _, serversId := range strings.Split(common.ObjToString(filterMap["serversId"]), ",") {
+		if product_type == "大会员" {
+			product_type_name, _, level := GetOrderProduct(product_type, gconv.String(orderData["productFilter"]))
+			product_type = product_type_name
+			if level == 0 {
+				for _, serversId := range strings.Split(gconv.String(gconv.Map(orderData["serversId"])), ",") {
 					if serviceName := bigmemberService[common.Int64All(serversId)]; serviceName != "" {
 						serviceList = append(serviceList, serviceName)
 					}
 				}
-			} else {
-				product_type += combo[common.Int64All(filterMap["comboId"])]
 			}
 		}
 		//联系人姓名
@@ -1844,16 +1895,16 @@ func KcOrderFormat(orderCode string, bigmemberService, combo map[int64]string) *
 		}
 		data = &OrderInfo{
 			Id:          id,
-			CompanyName: common.ObjToString((*orderData)[0]["company_name"]),
+			CompanyName: gconv.String(orderData["company_name"]),
 			UserId:      user_id,
 			ProductType: product_type,
 			OrderCode:   orderCode,
-			PayMoney:    common.Float64All((*orderData)[0]["pay_money"]) / 100,
-			ReturnMoney: common.Float64All((*orderData)[0]["return_money"]) / 100,
+			PayMoney:    common.Float64All(orderData["pay_money"]) / 100,
+			ReturnMoney: common.Float64All(orderData["return_money"]) / 100,
 			UserPhone:   user_phone,
-			StartEnd:    fmt.Sprintf("%s--%s", strings.Split(common.ObjToString((*orderData)[0]["vip_starttime"]), " ")[0], strings.Split(common.ObjToString((*orderData)[0]["vip_endtime"]), " ")[0]),
+			StartEnd:    fmt.Sprintf("%s--%s", strings.Split(gconv.String(orderData["service_starttime"]), " ")[0], strings.Split(gconv.String(orderData["service_endtime"]), " ")[0]),
 			SeriveList:  serviceList,
-			SaleName:    common.ObjToString((*orderData)[0]["create_person"]),
+			SaleName:    gconv.String(orderData["create_person"]),
 			UserName:    userName,
 		}
 	}
@@ -1920,3 +1971,112 @@ func FindPersonOne(positionId int64) map[string]interface{} {
 	}
 	return (*personData)[0]
 }
+
+// 进客成商品查询
+func KcProduct() ([]string, map[string]bool) {
+	var strArr []string
+	strMap := map[string]bool{}
+	productData := Mysql.SelectBySql(`SELECT id , 
+	CONCAT( '"', class_name,'"' )  as   product   
+FROM
+	jy_product_class 
+WHERE
+	s_service = 1`)
+	if productData == nil && len(*productData) == 0 {
+		return strArr, strMap
+	}
+	for _, m := range *productData {
+		strMap[gconv.String(m["product"])] = true
+		strArr = append(strArr, gconv.String(m["product"]))
+	}
+	return strArr, strMap
+}
+func GetOrderProduct(productType string, file string) (string, int64, int64) {
+	fileJson := gconv.Map(file)
+	if fileJson == nil || len(fileJson) == 0 {
+		return "", 0, 0
+	}
+	productName := ""
+	level := int64(0)
+	switch productType {
+	case "大会员":
+		level = gconv.Int64(fileJson["comboId"])
+		if level == 0 {
+			level = gconv.Int64(fileJson["level"])
+		}
+		switch level {
+		case 0:
+			productName = "大会员自定义"
+		case 30190:
+			productName = "大会员商机版2.0(单省版)"
+		case 6:
+			productName = "大会员商机版2.0"
+		case 7:
+			productName = "大会员专家版2.0"
+		}
+	default:
+		productName = productType
+	}
+	productData := TiDb.FindOne("dwd_d_csm_product_access_code", map[string]interface{}{
+		"name": productName,
+	}, "", "")
+	if productData == nil || len(*productData) == 0 {
+		return productName, 0, level
+	}
+	return productName, gconv.Int64((*productData)["code"]), level
+}
+
+func GetTimeDifference(timeStr1, timeStr2 string) int {
+	// 解析时间字符串
+	t1, err1 := time.Parse(time.DateTime, timeStr1)
+	t2, err2 := time.Parse(time.DateTime, timeStr2)
+	if err1 != nil || err2 != nil {
+		fmt.Println("时间格式错误:", err1, err2)
+		return 0
+	}
+	// 计算时间差
+	daysDiff := gconv.Int(t2.Sub(t1).Hours() / 24)
+	fmt.Printf("两个时间相差 %.0f 天\n", daysDiff)
+	return daysDiff
+}
+func getOrderData(sql string) (map[string]map[string]interface{}, string) {
+	data := Mysql.SelectBySql(sql)
+	orderMap := map[string]map[string]interface{}{}
+	lastEndTime := ""
+	for _, v := range *data {
+		orderCode := gconv.String(v["order_code"])
+		product_type := gconv.String(v["productType"])
+		vip_starttime := gconv.String(v["service_starttime"])
+		vip_endtime := gconv.String(v["service_endtime"])
+		//判断一下服务周期
+		difference := GetTimeDifference(vip_starttime, vip_endtime)
+		_, productInt64, _ := GetOrderProduct(product_type, gconv.String(v["productFilter"]))
+		if productInt64 == 0 {
+			continue
+		}
+		if _, exists := orderMap[orderCode]; exists {
+			//判断服务周期
+			data := orderMap[orderCode]
+			//商品类型获取
+			oldDifference := gconv.Int(data["difference"])
+			if oldDifference >= difference {
+				//需要更换
+				lastEndTime = vip_endtime
+				v["difference"] = difference
+				v["product"] = productInt64
+				v["service_endtime"] = vip_endtime
+				v["service_starttime"] = vip_starttime
+				v["product_type"] = product_type
+				orderMap[orderCode] = v
+			}
+		} else {
+			lastEndTime = vip_endtime
+			v["difference"] = difference
+			v["product"] = productInt64
+			v["product_type"] = product_type
+			orderMap[orderCode] = v
+		}
+	}
+
+	return orderMap, lastEndTime
+}

+ 14 - 4
clueSync/tag.go

@@ -113,8 +113,13 @@ func FormatTag(data map[string]interface{}, count int) {
 		search_wordss = strings.Join(search_words_arr, ",")
 	}
 	//订单购买的服务
-	orderData := TiDb.Find("dwd_f_userbase_order_info", map[string]interface{}{"userid": userId, "order_status": 1, "delete_status": 0}, "", "", -1, -1)
+	//orderData := TiDb.Find("dwd_f_userbase_order_info", map[string]interface{}{"userid": userId, "order_status": 1, "delete_status": 0}, "", "", -1, -1)
 	//orderData := TiDb.SelectBySql("select  *  from  dwd_f_userbase_order_info where   userid=? and  order_status=1 and  delete_status=0 and  payable_money > 0", userId)
+	orderSql := fmt.Sprintf(`select  a.*,b.product_type as  productType from  dataexport_order  a   
+    INNER JOIN   jy_order_detail   b    on   a.order_code=b.order_code and    a.user_id    = "%s"   and 
+    a.order_status = 1  and  a.del_status =0 
+    ORDER BY  b.service_endtime  desc `, userId)
+	orderData := Mysql.SelectBySql(orderSql)
 	if orderData != nil && len(*orderData) > 0 {
 		product_type_arr, product_type_arrs := []string{}, []string{}
 		for _, v := range *orderData {
@@ -263,15 +268,20 @@ func tagAddSync() {
 			if k == 0 {
 				cfg.LastOrderTime = autoUpdate
 			}
-			orderDatas := TiDb.Find("dwd_f_userbase_order_info", map[string]interface{}{"uid": uId, "order_status": 1, "delete_status": 0}, "", "", -1, -1)
+			personArr := getUserIdToUid(uId)
+			orderDataSql := fmt.Sprintf(`select  a.*,b.product_type as  productType from  dataexport_order  a   
+    INNER JOIN   jy_order_detail   b    on   a.order_code=b.order_code and    a.user_id    in   (%s) and 
+    a.order_status = 1  and  a.del_status =0 
+    ORDER BY  b.service_endtime  desc  `, strings.Join(personArr, ","))
+			orderDatas := Mysql.SelectBySql(orderDataSql)
 			if orderDatas != nil && len(*orderDatas) > 0 {
 				product_type_arr, product_type_arrs := []string{}, []string{}
 				for _, v := range *orderDatas {
-					payable_money := gconv.Int64(v["payable_money"])
+					payable_money := gconv.Int64(v["pay_money"])
 					if payable_money <= 0 {
 						continue
 					}
-					product_type := common.ObjToString(v["product_type"])
+					product_type := common.ObjToString(v["productType"])
 					log.Println("product_type ", product_type)
 					if product_type != "" {
 						product_type_arr = append(product_type_arr, product_type)

+ 52 - 0
clueSync/util.go

@@ -1,7 +1,10 @@
 package main
 
 import (
+	"app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/mongodb"
 	"fmt"
+	"github.com/gogf/gf/v2/util/gconv"
 	"time"
 )
 
@@ -26,3 +29,52 @@ func TimeStrcount(start, end string) int64 {
 	fmt.Printf("相差的天数: %d 天\n", days)
 	return days
 }
+
+// 用户信息转uid查询
+func GetUidToUserId(userId string, phone string) (string, string) {
+	uId := ""
+	query := map[string]interface{}{}
+	if userId == "" {
+		query["phone"] = phone
+		userInfo := TiDb.FindOne("dwd_f_userbase_baseinfo", query, "", "")
+		if userInfo != nil && len(*userInfo) > 0 {
+			uId = gconv.String((*userInfo)["uid"])
+			userId = gconv.String((*userInfo)["userid"])
+		}
+	} else {
+		if !mongodb.IsObjectIdHex(userId) {
+			userMapping := TiDb.FindOne("dwd_f_userbase_id_mapping", map[string]interface{}{"position_id": userId}, "", "")
+			if userMapping != nil && len(*userMapping) > 0 {
+				userId = common.ObjToString((*userMapping)["userid"])
+			} else {
+				return uId, userId
+			}
+		}
+		query["userid"] = userId
+		userInfo := TiDb.FindOne("dwd_f_userbase_baseinfo", query, "", "")
+		if userInfo != nil && len(*userInfo) > 0 {
+			uId = common.ObjToString((*userInfo)["uid"])
+		} else {
+			return uId, userId
+		}
+	}
+	return uId, userId
+}
+func getUserIdToUid(uid string) []string {
+	personData := TiDb.SelectBySql(`SELECT  
+	IF(type=0,userid,position_id)  as   positionId   
+FROM
+	dwd_f_userbase_id_mapping 
+WHERE
+	uid = ?       group by  positionId    `, uid)
+	if personData == nil || len(*personData) == 0 {
+		return []string{}
+	}
+	var personArr []string
+	for _, v := range *personData {
+		personArr = append(personArr, fmt.Sprintf(`"%s"`,
+			gconv.String(v["positionId"])))
+	}
+	return personArr
+
+}

+ 0 - 5
csrSync/go.sum

@@ -1,4 +1,3 @@
-app.yhyue.com/moapp/esv1 v0.0.0-20220414031211-3da4123e648d h1:WPsYuuptAd3UEgN+jPzpnsDe/OvcshDUUtOTZPYGSJ8=
 app.yhyue.com/moapp/esv1 v0.0.0-20220414031211-3da4123e648d/go.mod h1:91/lSD/hS+ckMVP3WdidRzDhC60lLMdyce9QHy0cSMA=
 app.yhyue.com/moapp/jybase v0.0.0-20230405040249-a36a23595798 h1:seczpucZNVIcwMpHN/tr1t9l7Qf533nm69FqJLq24qs=
 app.yhyue.com/moapp/jybase v0.0.0-20230405040249-a36a23595798/go.mod h1:zB47XTeJvpcbtBRYgkQuxOICWNexiZfbUO+7aUf6mNs=
@@ -114,7 +113,6 @@ github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQL
 github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
 github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
 github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
-github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
 github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
 github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k=
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
@@ -256,7 +254,6 @@ github.com/jinzhu/now v1.1.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/
 github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
 github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
 github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
-github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
 github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
 github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
 github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
@@ -288,7 +285,6 @@ github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
 github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
-github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
 github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
 github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
 github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
@@ -316,7 +312,6 @@ github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLA
 github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
 github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
 github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
-github.com/olivere/elastic v6.2.37+incompatible h1:UfSGJem5czY+x/LqxgeCBgjDn6St+z8OnsCuxwD3L0U=
 github.com/olivere/elastic v6.2.37+incompatible/go.mod h1:J+q1zQJTgAz9woqsbVRqGeB5G1iqDKVBWLNSYW8yfJ8=
 github.com/olivere/elastic/v7 v7.0.22/go.mod h1:VDexNy9NjmtAkrjNoI7tImv7FR4tf5zUA3ickqu5Pc8=
 github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=

+ 0 - 1
csrSync/job.go

@@ -114,7 +114,6 @@ L:
 			requestsss.ResTextFormat = common.Uint64Ptr(0)
 			requestsss.SourceType = common.Uint64Ptr(0)
 			requestsss.Url = common.StringPtr(util.ObjToString(data["MonitorFilename"]))
-
 			responses, errss := client.CreateRecTask(requestsss)
 			if _, ok := errss.(*errors.TencentCloudSDKError); ok {
 				<-ch

+ 10 - 10
telemarketingEtl/config.yaml

@@ -1,22 +1,22 @@
 tidb:
   jianyuSubjectdb:
     dbName: jianyu_subjectdb_test
-    address: 192.168.3.149:4000
-    userName: root
-    password: 'Tibi#20211222'
+    address: 172.17.162.27:14000
+    userName: datagroup
+    password: Dgrpdb#2024@36
     maxOpenConns: 80
     maxIdleConns: 5
   callAccount:
     dbName: Call_Accounting
-    address: 192.168.3.149:4000
+    address: 172.20.45.129:4000
     userName: root
-    password: 'Tibi#20211222'
+    password: '=PDT49#80Z!RVv52_z'
     maxOpenConns: 80
     maxIdleConns: 5
 mysql:
   main:
     dbName: jianyu
-    address: 192.168.3.14:4000
+    address: 172.20.45.129:4000
     userName: root
     password: '=PDT49#80Z!RVv52_z'
     maxOpenConns: 80
@@ -25,23 +25,23 @@ mongo:
   main:
     dbName: qfw
     size: 50
-    address: 192.168.3.149:27180
+    address: 172.20.45.129:27002
   log:
     dbName: qfw
     size: 50
-    address: 192.168.3.149:27190
+    address: 172.20.45.129:27002
     userName: admin
     password: 123456
   ent:
     dbName: mixdata
     size: 50
-    address: 192.168.3.149:27102
+    address: 172.20.45.129:27002
     collection: qyxy
     collectionChange: qyxy_change
     userName: jyDevGroup
     password: jy@DevGroup
   bidding:
-    address: 192.168.3.149:27102
+    address: 172.20.45.129:27002
     size: 50
     dbName: qfw_data
     collection: bidding