|
@@ -374,7 +374,7 @@ func ThreeOpenSea(oneA, oneB, oneC, twoA, twoB, twoC, twoD map[string]bool) map[
|
|
|
if count%5000 == 0 {
|
|
|
log.Println("三级公海加载:", count)
|
|
|
}
|
|
|
- clubId := gconv.String(v["clue_id"])
|
|
|
+ clubId := gconv.String(v["id"])
|
|
|
userid := gconv.String(v["userid"])
|
|
|
// q := fmt.Sprintf("SELECT count(1) FROM dwd_f_userbase_visit_info WHERE createtime > '%s' AND contentnum >0 and userid = '%s'", t.Format(date.Date_Full_Layout), userid)
|
|
|
// if config.JianyuSubjectdb.CountBySql(q) > 0 {
|
|
@@ -394,9 +394,9 @@ func ThreeOpenSea(oneA, oneB, oneC, twoA, twoB, twoC, twoD map[string]bool) map[
|
|
|
whs = append(whs, "?")
|
|
|
}
|
|
|
wh := strings.Join(whs, ",")
|
|
|
- config.JianyuSubjectdb.UpdateOrDeleteBySql(`UPDATE dwd_f_crm_open_sea SET level = 3,clue_level='D' WHERE clue_id in (`+wh+`)`, ids...)
|
|
|
+ config.JianyuSubjectdb.UpdateOrDeleteBySql(`UPDATE dwd_f_crm_clue_info SET level_open = 3,clue_level='D' WHERE id in (`+wh+`)`, ids...)
|
|
|
return true
|
|
|
- }, `SELECT a.clue_id,b.userid FROM dwd_f_crm_open_sea a LEFT JOIN dwd_f_crm_clue_info b ON a.clue_id=b.id`)
|
|
|
+ }, `SELECT id,userid FROM dwd_f_crm_clue_info`)
|
|
|
log.Println("三级公海end")
|
|
|
return m
|
|
|
}
|
|
@@ -420,9 +420,9 @@ func AddOpenSea(m map[string]bool, level int, clue_level string) {
|
|
|
// createtime := time.Now().Format(date.Date_Full_Layout)
|
|
|
if len(m) > 0 {
|
|
|
for k, _ := range m {
|
|
|
- config.JianyuSubjectdb.Update("dwd_f_crm_open_sea", map[string]interface{}{"clue_id": k}, map[string]interface{}{
|
|
|
+ config.JianyuSubjectdb.Update("dwd_f_crm_clue_info", map[string]interface{}{"id": k}, map[string]interface{}{
|
|
|
"clue_level": clue_level,
|
|
|
- "LEVEL": level,
|
|
|
+ "level_open": level,
|
|
|
})
|
|
|
}
|
|
|
}
|
|
@@ -461,182 +461,182 @@ func DeleteOpenSea() {
|
|
|
6.“商机线索”超过2天未更新跟进记录自动退回公海;
|
|
|
7.“无意向客户”自动退回公海;
|
|
|
*/
|
|
|
-func ReturnOpenSea() {
|
|
|
- ctx := gctx.New()
|
|
|
- t := time.Now()
|
|
|
- t = time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, time.Local)
|
|
|
- //高意向客户
|
|
|
- highIntentionCustomer := g.Cfg().MustGet(ctx, "highIntentionCustomer").Int() //30
|
|
|
- //意向客户
|
|
|
- intentionCustomer := g.Cfg().MustGet(ctx, "intentionCustomer").Int() //30
|
|
|
- //潜在客户
|
|
|
- latentCustomer := g.Cfg().MustGet(ctx, "latentCustomer").Int() //60
|
|
|
- //沉睡客户
|
|
|
- sleepCustomer := g.Cfg().MustGet(ctx, "sleepCustomer").Int() //90
|
|
|
- //商机线索
|
|
|
- businessLeads := g.Cfg().MustGet(ctx, "businessLeads").Int() //2
|
|
|
- //无意向客户
|
|
|
- // noIdeaCustomer := g.Cfg().MustGet(ctx, "noIdeaCustomer").Int() //
|
|
|
-
|
|
|
- codeMap := dwd_d_crm_trailstatus_code()
|
|
|
-
|
|
|
- now := time.Now().Format(date.Date_Full_Layout)
|
|
|
-
|
|
|
- //判断节假日
|
|
|
- statusMap := map[string]int{
|
|
|
- "06": highIntentionCustomer,
|
|
|
- "05": intentionCustomer,
|
|
|
- "04": latentCustomer,
|
|
|
- "03": sleepCustomer,
|
|
|
- "01": businessLeads,
|
|
|
- }
|
|
|
- for status, statusInt := range statusMap {
|
|
|
- count, counts := 0, 0
|
|
|
- for {
|
|
|
- count++
|
|
|
- currentTime := t.AddDate(0, 0, -count)
|
|
|
- if currentTime.Weekday() == time.Sunday || currentTime.Weekday() == time.Saturday {
|
|
|
- isok := false
|
|
|
- for k, v := range config.DateMap {
|
|
|
- if currentTime.Format(date.Date_Short_Layout) == k && v == 2 {
|
|
|
- isok = true
|
|
|
- }
|
|
|
- }
|
|
|
- if isok {
|
|
|
- counts++
|
|
|
- }
|
|
|
- } else {
|
|
|
- isok := true
|
|
|
- for k, v := range config.DateMap {
|
|
|
- if currentTime.Format(date.Date_Short_Layout) == k && v == 1 {
|
|
|
- isok = false
|
|
|
- }
|
|
|
- }
|
|
|
- if isok {
|
|
|
- counts++
|
|
|
- }
|
|
|
- }
|
|
|
- if counts >= statusInt {
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
- statusMap[status] = count
|
|
|
- }
|
|
|
- //
|
|
|
-
|
|
|
- //2.“高意向客户”超过30天未更新跟进记录自动退回公海;
|
|
|
- for trailstatus, _ := range map[string]string{
|
|
|
- "06": "",
|
|
|
- "05": "",
|
|
|
- "04": "",
|
|
|
- "03": "",
|
|
|
- "01": "",
|
|
|
- "00": "",
|
|
|
- } {
|
|
|
- sql := `SELECT a.clue_id,a.position_id,a.seatNumber FROM dwd_f_crm_private_sea a
|
|
|
- LEFT JOIN dwd_f_crm_clue_info b ON a.clue_id=b.id
|
|
|
- WHERE a.position_id is not null and b.trailstatus =?`
|
|
|
- argsSelect := []interface{}{trailstatus}
|
|
|
-
|
|
|
- intime := ""
|
|
|
- if trailstatus != "00" {
|
|
|
- sql += " AND a.comeintime <?"
|
|
|
- nt := t.AddDate(0, 0, -statusMap[trailstatus])
|
|
|
- // nt, _ := nexttime.(time.Time)
|
|
|
- intime = nt.Format(date.Date_Full_Layout)
|
|
|
- argsSelect = append(argsSelect, intime)
|
|
|
- }
|
|
|
- log.Println(sql)
|
|
|
- log.Println(argsSelect)
|
|
|
- //
|
|
|
- config.JianyuSubjectdb.SelectByBath(500, func(l *[]map[string]interface{}) bool {
|
|
|
- //1新增 2私海手动退回 3私海高意向客户自动退回 4私海意向客户退回 5私海潜在客户退回 6私海沉睡客户退回 7私海商机线索退回 8私海无意向客户退回
|
|
|
- comeinsource := GetComeSource()[trailstatus]
|
|
|
- ids := []interface{}{}
|
|
|
- args := []interface{}{}
|
|
|
- changeArgs1 := []interface{}{}
|
|
|
- changeArgs2 := []interface{}{}
|
|
|
- changeArgs3 := []interface{}{}
|
|
|
- changeArgs4 := []interface{}{}
|
|
|
- for _, v := range *l {
|
|
|
- id := v["clue_id"] //
|
|
|
- position_id := v["position_id"]
|
|
|
- seatNumber := gconv.String(v["seatNumber"])
|
|
|
-
|
|
|
- args2 := []interface{}{id}
|
|
|
- //获取跟进内容
|
|
|
- sql2 := `SELECT COUNT(1) FROM dwd_f_crm_trail_content WHERE clue_id = ? and position_id = ?`
|
|
|
- if intime != "" {
|
|
|
- sql2 += ` and createtime > ?`
|
|
|
- args2 = append(args2, intime)
|
|
|
- args2 = append(args2, position_id)
|
|
|
- }
|
|
|
- //保留未跟进线索
|
|
|
- if config.JianyuSubjectdb.CountBySql(sql2, args2...) > 0 {
|
|
|
- log.Println("不满足线索过滤", id)
|
|
|
- continue
|
|
|
- }
|
|
|
-
|
|
|
- ids = append(ids, id)
|
|
|
- //
|
|
|
- args = append(args, id, now, comeinsource)
|
|
|
- changeArgs1 = append(changeArgs1, id, position_id, "trailstatus", "线索状态变更", codeMap[trailstatus], "流失", now, -1)
|
|
|
- changeArgs2 = append(changeArgs2, id, position_id, "position_id", "所属人变更", GetPositionName(seatNumber), "/", now, -1)
|
|
|
- changeArgs3 = append(changeArgs3, id, position_id, "退出任务车", "未更新跟进记录自动退回公海", now, -1)
|
|
|
- changeArgs4 = append(changeArgs3, id, position_id, "退回公海", "未更新跟进记录自动退回公海", now, -1)
|
|
|
-
|
|
|
- }
|
|
|
- whs := []string{}
|
|
|
- for i := 0; i < len(ids); i++ {
|
|
|
- whs = append(whs, "?")
|
|
|
- }
|
|
|
- wh := strings.Join(whs, ",")
|
|
|
- //退出私海
|
|
|
- if len(ids) > 0 {
|
|
|
- config.JianyuSubjectdb.UpdateOrDeleteBySql(`delete from dwd_f_crm_private_sea where clue_id in (`+wh+`)`, ids...)
|
|
|
- //改线索表 职位id 坐席号 弄成空 分配状态改成未分配
|
|
|
- up1 := config.JianyuSubjectdb.UpdateOrDeleteBySql(`UPDATE dwd_f_crm_clue_info SET seatNumber ='',position_id=0,is_assign=0 WHERE id in (`+wh+`)`, ids...)
|
|
|
- if up1 == -1 {
|
|
|
- log.Println("修改记录失败", `UPDATE dwd_f_crm_clue_info SET seatNumber ='',position_id=0,is_assign=0 WHERE id in (`+wh+`)`, ids)
|
|
|
- }
|
|
|
- }
|
|
|
- //进入公海
|
|
|
- if len(args) > 0 {
|
|
|
- config.JianyuSubjectdb.InsertIgnoreBatch("dwd_f_crm_open_sea", []string{"clue_id", "comeintime", "comeinsource"}, args)
|
|
|
- }
|
|
|
-
|
|
|
- // 添加线索修改记录
|
|
|
-
|
|
|
- //线索状态变更记录
|
|
|
- if len(changeArgs1) > 0 {
|
|
|
- i1, _ := config.JianyuSubjectdb.InsertBatch("dwd_f_crm_clue_change_record", []string{"clue_id", "position_id", "change_field", "change_type", "old_value", "new_value", "createtime", "operator_id"}, changeArgs1)
|
|
|
- if i1 <= 0 {
|
|
|
- log.Println("i1失败", changeArgs1)
|
|
|
- }
|
|
|
- }
|
|
|
- if len(changeArgs1) > 0 {
|
|
|
- i2, _ := config.JianyuSubjectdb.InsertBatch("dwd_f_crm_clue_change_record", []string{"clue_id", "position_id", "change_field", "change_type", "old_value", "new_value", "createtime", "operator_id"}, changeArgs2)
|
|
|
- if i2 <= 0 {
|
|
|
- log.Println("i2失败", changeArgs2)
|
|
|
- }
|
|
|
- }
|
|
|
- if len(changeArgs1) > 0 {
|
|
|
- i3, _ := config.JianyuSubjectdb.InsertBatch("dwd_f_crm_clue_change_record", []string{"clue_id", "position_id", "change_type", "new_value", "createtime", "operator_id"}, changeArgs3)
|
|
|
- if i3 <= 0 {
|
|
|
- log.Println("i3失败", changeArgs3)
|
|
|
- }
|
|
|
- }
|
|
|
- if len(changeArgs1) > 0 {
|
|
|
- i4, _ := config.JianyuSubjectdb.InsertBatch("dwd_f_crm_clue_change_record", []string{"clue_id", "position_id", "change_type", "new_value", "createtime", "operator_id"}, changeArgs4)
|
|
|
- if i4 <= 0 {
|
|
|
- log.Println("i4失败", changeArgs4)
|
|
|
- }
|
|
|
- }
|
|
|
- return true
|
|
|
- }, sql, argsSelect...)
|
|
|
- }
|
|
|
- log.Println("return sea end")
|
|
|
-}
|
|
|
+// func ReturnOpenSea() {
|
|
|
+// ctx := gctx.New()
|
|
|
+// t := time.Now()
|
|
|
+// t = time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, time.Local)
|
|
|
+// //高意向客户
|
|
|
+// highIntentionCustomer := g.Cfg().MustGet(ctx, "highIntentionCustomer").Int() //30
|
|
|
+// //意向客户
|
|
|
+// intentionCustomer := g.Cfg().MustGet(ctx, "intentionCustomer").Int() //30
|
|
|
+// //潜在客户
|
|
|
+// latentCustomer := g.Cfg().MustGet(ctx, "latentCustomer").Int() //60
|
|
|
+// //沉睡客户
|
|
|
+// sleepCustomer := g.Cfg().MustGet(ctx, "sleepCustomer").Int() //90
|
|
|
+// //商机线索
|
|
|
+// businessLeads := g.Cfg().MustGet(ctx, "businessLeads").Int() //2
|
|
|
+// //无意向客户
|
|
|
+// // noIdeaCustomer := g.Cfg().MustGet(ctx, "noIdeaCustomer").Int() //
|
|
|
+
|
|
|
+// codeMap := dwd_d_crm_trailstatus_code()
|
|
|
+
|
|
|
+// now := time.Now().Format(date.Date_Full_Layout)
|
|
|
+
|
|
|
+// //判断节假日
|
|
|
+// statusMap := map[string]int{
|
|
|
+// "06": highIntentionCustomer,
|
|
|
+// "05": intentionCustomer,
|
|
|
+// "04": latentCustomer,
|
|
|
+// "03": sleepCustomer,
|
|
|
+// "01": businessLeads,
|
|
|
+// }
|
|
|
+// for status, statusInt := range statusMap {
|
|
|
+// count, counts := 0, 0
|
|
|
+// for {
|
|
|
+// count++
|
|
|
+// currentTime := t.AddDate(0, 0, -count)
|
|
|
+// if currentTime.Weekday() == time.Sunday || currentTime.Weekday() == time.Saturday {
|
|
|
+// isok := false
|
|
|
+// for k, v := range config.DateMap {
|
|
|
+// if currentTime.Format(date.Date_Short_Layout) == k && v == 2 {
|
|
|
+// isok = true
|
|
|
+// }
|
|
|
+// }
|
|
|
+// if isok {
|
|
|
+// counts++
|
|
|
+// }
|
|
|
+// } else {
|
|
|
+// isok := true
|
|
|
+// for k, v := range config.DateMap {
|
|
|
+// if currentTime.Format(date.Date_Short_Layout) == k && v == 1 {
|
|
|
+// isok = false
|
|
|
+// }
|
|
|
+// }
|
|
|
+// if isok {
|
|
|
+// counts++
|
|
|
+// }
|
|
|
+// }
|
|
|
+// if counts >= statusInt {
|
|
|
+// break
|
|
|
+// }
|
|
|
+// }
|
|
|
+// statusMap[status] = count
|
|
|
+// }
|
|
|
+// //
|
|
|
+
|
|
|
+// //2.“高意向客户”超过30天未更新跟进记录自动退回公海;
|
|
|
+// for trailstatus, _ := range map[string]string{
|
|
|
+// "06": "",
|
|
|
+// "05": "",
|
|
|
+// "04": "",
|
|
|
+// "03": "",
|
|
|
+// "01": "",
|
|
|
+// "00": "",
|
|
|
+// } {
|
|
|
+// sql := `SELECT a.clue_id,a.position_id,a.seatNumber FROM dwd_f_crm_private_sea a
|
|
|
+// LEFT JOIN dwd_f_crm_clue_info b ON a.clue_id=b.id
|
|
|
+// WHERE a.position_id is not null and b.trailstatus =?`
|
|
|
+// argsSelect := []interface{}{trailstatus}
|
|
|
+
|
|
|
+// intime := ""
|
|
|
+// if trailstatus != "00" {
|
|
|
+// sql += " AND a.comeintime <?"
|
|
|
+// nt := t.AddDate(0, 0, -statusMap[trailstatus])
|
|
|
+// // nt, _ := nexttime.(time.Time)
|
|
|
+// intime = nt.Format(date.Date_Full_Layout)
|
|
|
+// argsSelect = append(argsSelect, intime)
|
|
|
+// }
|
|
|
+// log.Println(sql)
|
|
|
+// log.Println(argsSelect)
|
|
|
+// //
|
|
|
+// config.JianyuSubjectdb.SelectByBath(500, func(l *[]map[string]interface{}) bool {
|
|
|
+// //1新增 2私海手动退回 3私海高意向客户自动退回 4私海意向客户退回 5私海潜在客户退回 6私海沉睡客户退回 7私海商机线索退回 8私海无意向客户退回
|
|
|
+// comeinsource := GetComeSource()[trailstatus]
|
|
|
+// ids := []interface{}{}
|
|
|
+// args := []interface{}{}
|
|
|
+// changeArgs1 := []interface{}{}
|
|
|
+// changeArgs2 := []interface{}{}
|
|
|
+// changeArgs3 := []interface{}{}
|
|
|
+// changeArgs4 := []interface{}{}
|
|
|
+// for _, v := range *l {
|
|
|
+// id := v["clue_id"] //
|
|
|
+// position_id := v["position_id"]
|
|
|
+// seatNumber := gconv.String(v["seatNumber"])
|
|
|
+
|
|
|
+// args2 := []interface{}{id}
|
|
|
+// //获取跟进内容
|
|
|
+// sql2 := `SELECT COUNT(1) FROM dwd_f_crm_trail_content WHERE clue_id = ? and position_id = ?`
|
|
|
+// if intime != "" {
|
|
|
+// sql2 += ` and createtime > ?`
|
|
|
+// args2 = append(args2, intime)
|
|
|
+// args2 = append(args2, position_id)
|
|
|
+// }
|
|
|
+// //保留未跟进线索
|
|
|
+// if config.JianyuSubjectdb.CountBySql(sql2, args2...) > 0 {
|
|
|
+// log.Println("不满足线索过滤", id)
|
|
|
+// continue
|
|
|
+// }
|
|
|
+
|
|
|
+// ids = append(ids, id)
|
|
|
+// //
|
|
|
+// args = append(args, id, now, comeinsource)
|
|
|
+// changeArgs1 = append(changeArgs1, id, position_id, "trailstatus", "线索状态变更", codeMap[trailstatus], "流失", now, -1)
|
|
|
+// changeArgs2 = append(changeArgs2, id, position_id, "position_id", "所属人变更", GetPositionName(seatNumber), "/", now, -1)
|
|
|
+// changeArgs3 = append(changeArgs3, id, position_id, "退出任务车", "未更新跟进记录自动退回公海", now, -1)
|
|
|
+// changeArgs4 = append(changeArgs3, id, position_id, "退回公海", "未更新跟进记录自动退回公海", now, -1)
|
|
|
+
|
|
|
+// }
|
|
|
+// whs := []string{}
|
|
|
+// for i := 0; i < len(ids); i++ {
|
|
|
+// whs = append(whs, "?")
|
|
|
+// }
|
|
|
+// wh := strings.Join(whs, ",")
|
|
|
+// //退出私海
|
|
|
+// if len(ids) > 0 {
|
|
|
+// config.JianyuSubjectdb.UpdateOrDeleteBySql(`delete from dwd_f_crm_private_sea where clue_id in (`+wh+`)`, ids...)
|
|
|
+// //改线索表 职位id 坐席号 弄成空 分配状态改成未分配
|
|
|
+// up1 := config.JianyuSubjectdb.UpdateOrDeleteBySql(`UPDATE dwd_f_crm_clue_info SET seatNumber ='',position_id=0,is_assign=0 WHERE id in (`+wh+`)`, ids...)
|
|
|
+// if up1 == -1 {
|
|
|
+// log.Println("修改记录失败", `UPDATE dwd_f_crm_clue_info SET seatNumber ='',position_id=0,is_assign=0 WHERE id in (`+wh+`)`, ids)
|
|
|
+// }
|
|
|
+// }
|
|
|
+// //进入公海
|
|
|
+// if len(args) > 0 {
|
|
|
+// config.JianyuSubjectdb.InsertIgnoreBatch("dwd_f_crm_clue_info", []string{"clue_id", "comeintime", "comeinsource"}, args)
|
|
|
+// }
|
|
|
+
|
|
|
+// // 添加线索修改记录
|
|
|
+
|
|
|
+// //线索状态变更记录
|
|
|
+// if len(changeArgs1) > 0 {
|
|
|
+// i1, _ := config.JianyuSubjectdb.InsertBatch("dwd_f_crm_clue_change_record", []string{"clue_id", "position_id", "change_field", "change_type", "old_value", "new_value", "createtime", "operator_id"}, changeArgs1)
|
|
|
+// if i1 <= 0 {
|
|
|
+// log.Println("i1失败", changeArgs1)
|
|
|
+// }
|
|
|
+// }
|
|
|
+// if len(changeArgs1) > 0 {
|
|
|
+// i2, _ := config.JianyuSubjectdb.InsertBatch("dwd_f_crm_clue_change_record", []string{"clue_id", "position_id", "change_field", "change_type", "old_value", "new_value", "createtime", "operator_id"}, changeArgs2)
|
|
|
+// if i2 <= 0 {
|
|
|
+// log.Println("i2失败", changeArgs2)
|
|
|
+// }
|
|
|
+// }
|
|
|
+// if len(changeArgs1) > 0 {
|
|
|
+// i3, _ := config.JianyuSubjectdb.InsertBatch("dwd_f_crm_clue_change_record", []string{"clue_id", "position_id", "change_type", "new_value", "createtime", "operator_id"}, changeArgs3)
|
|
|
+// if i3 <= 0 {
|
|
|
+// log.Println("i3失败", changeArgs3)
|
|
|
+// }
|
|
|
+// }
|
|
|
+// if len(changeArgs1) > 0 {
|
|
|
+// i4, _ := config.JianyuSubjectdb.InsertBatch("dwd_f_crm_clue_change_record", []string{"clue_id", "position_id", "change_type", "new_value", "createtime", "operator_id"}, changeArgs4)
|
|
|
+// if i4 <= 0 {
|
|
|
+// log.Println("i4失败", changeArgs4)
|
|
|
+// }
|
|
|
+// }
|
|
|
+// return true
|
|
|
+// }, sql, argsSelect...)
|
|
|
+// }
|
|
|
+// log.Println("return sea end")
|
|
|
+// }
|
|
|
|
|
|
// 2私海手动退回 3私海高意向客户自动退回 4私海意向客户退回 5私海潜在客户退回 6私海沉睡客户退回 7私海商机线索退回 8私海无意向客户退回
|
|
|
func GetComeSource() map[string]int {
|
|
@@ -654,14 +654,14 @@ func GetOneSeaC(oneClassA, oneClassB map[string]bool) map[string]bool {
|
|
|
m := map[string]bool{}
|
|
|
config.JianyuSubjectdb.SelectByBath(500, func(l *[]map[string]interface{}) bool {
|
|
|
for _, v := range *l {
|
|
|
- clueid := gconv.String(v["clue_id"])
|
|
|
+ clueid := gconv.String(v["id"])
|
|
|
if oneClassA[clueid] || oneClassB[clueid] {
|
|
|
continue
|
|
|
}
|
|
|
m[clueid] = true
|
|
|
}
|
|
|
return true
|
|
|
- }, `select clue_id from dwd_f_crm_open_sea where comeinsource in(2,3,4)`)
|
|
|
+ }, `select id from dwd_f_crm_clue_info where comeinsource_open in(2,3,4)`)
|
|
|
return m
|
|
|
}
|
|
|
|
|
@@ -697,7 +697,7 @@ func Recycle() {
|
|
|
recycleB := g.Cfg().MustGet(ctx, "recycleB").Int()
|
|
|
tB := t.AddDate(0, 0, -recycleB)
|
|
|
for sql, clue_level := range map[string]interface{}{
|
|
|
- fmt.Sprintf(`select id from dwd_f_crm_open_sea where comeinsource=%v and comeintime > "%s" ;`, 2, tA.Format(date.Date_Full_Layout)): "A",
|
|
|
+ fmt.Sprintf(`select id from dwd_f_crm_clue_info where comeinsource_open=%v and comeintime_open > "%s" ;`, 2, tA.Format(date.Date_Full_Layout)): "A",
|
|
|
fmt.Sprintf(`SELECT a.uid,b.phone,c.createTime,a.id FROM dwd_f_crm_clue_info a
|
|
|
LEFT JOIN dwd_f_userbase_contacts b ON b.baseinfo_id=a.uid
|
|
|
LEFT JOIN Call_Accounting.voice_record c ON c.CalledNo = b.phone
|