autoTask.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. package main
  2. import (
  3. "log"
  4. "time"
  5. "app.yhyue.com/moapp/jybase/common"
  6. "app.yhyue.com/moapp/jybase/date"
  7. )
  8. func autoTask() {
  9. log.Println("超时未跟进定时任务开始")
  10. t := time.Now()
  11. nowTime := time.Now().Format(date.Date_Full_Layout)
  12. // statusMap := map[string]int{
  13. // "07": 5, //待签署客户
  14. // "06": 3, //高意向客户
  15. // "05": 5, //意向客户
  16. // "04": 7, //潜在客户
  17. // }
  18. // statusMaps := map[string]int{}
  19. //判断节假日
  20. // for status, statusInt := range statusMap {
  21. // count, counts := 0, 0
  22. // for {
  23. // count++
  24. // currentTime := t.AddDate(0, 0, -count)
  25. // if currentTime.Weekday() == time.Sunday || currentTime.Weekday() == time.Saturday {
  26. // isok := false
  27. // for k, v := range DateMap {
  28. // if currentTime.Format(date.Date_Short_Layout) == k && v == 2 {
  29. // isok = true
  30. // }
  31. // }
  32. // if isok {
  33. // counts++
  34. // }
  35. // } else {
  36. // isok := true
  37. // for k, v := range DateMap {
  38. // if currentTime.Format(date.Date_Short_Layout) == k && v == 1 {
  39. // isok = false
  40. // }
  41. // }
  42. // if isok {
  43. // counts++
  44. // }
  45. // }
  46. // if counts >= statusInt {
  47. // break
  48. // }
  49. // }
  50. // statusMap[status] = count
  51. // }
  52. // log.Println(statusMap)
  53. for trailstatus, nexttime := range map[string]interface{}{
  54. "07": t.AddDate(0, 0, -5), //待签署客户
  55. "06": t.AddDate(0, 0, -3), //高意向客户
  56. "05": t.AddDate(0, 0, -5), //意向客户
  57. "04": t.AddDate(0, 0, -7), //潜在客户
  58. } {
  59. sql := `SELECT a.clue_id,a.position_id,a.seatNumber,a.out_task_status FROM dwd_f_crm_private_sea a
  60. LEFT JOIN dwd_f_crm_clue_info b ON a.clue_id=b.id
  61. WHERE b.trailstatus =?`
  62. argsSelect := []interface{}{trailstatus}
  63. intime := ""
  64. sql += " AND a.comeintime <?"
  65. nt := nexttime.(time.Time)
  66. // nt := t.AddDate(0, 0, -statusMap[trailstatus])
  67. intime = nt.Format(date.Date_Full_Layout)
  68. argsSelect = append(argsSelect, intime)
  69. //
  70. TiDb.SelectByBath(100, func(l *[]map[string]interface{}) bool {
  71. for _, v := range *l {
  72. clueId := common.Int64All(v["clue_id"])
  73. position_id := common.Int64All(v["position_id"])
  74. out_task_status := common.IntAll(v["out_task_status"])
  75. args2 := []interface{}{clueId}
  76. //获取跟进内容
  77. // sql1 := `select COUNT(1) FROM dwd_f_crm_trail_content WHERE clue_id =?;`
  78. sql2 := `SELECT COUNT(1) FROM dwd_f_crm_trail_content WHERE clue_id = ? and position_id = ?`
  79. if intime != "" {
  80. sql2 += ` and createtime > ?`
  81. args2 = append(args2, position_id)
  82. args2 = append(args2, intime)
  83. }
  84. //保留未跟进线索
  85. // if c1, c2 := TiDb.CountBySql(sql1, clueId), TiDb.CountBySql(sql2, args2...); (c1 != 0 && c2 > 0) || out_task_status == 1 {
  86. // log.Println("不满足线索过滤", clueId)
  87. // continue
  88. // }
  89. log.Println("intime ", clueId, intime, sql2)
  90. if c2 := TiDb.CountBySql(sql2, args2...); c2 > 0 || out_task_status == 1 {
  91. log.Println("不满足线索过滤", clueId)
  92. continue
  93. }
  94. if TiDb.Update("dwd_f_crm_private_sea", map[string]interface{}{"clue_id": clueId}, map[string]interface{}{
  95. "is_task": 1,
  96. "task_time": nowTime,
  97. "tasktime": time.Now().Format(date.Date_Short_Layout) + " 10:00:00",
  98. "taskstatus": 0,
  99. "tasksource": "超时未跟进自动加车",
  100. }) {
  101. TiDb.Insert("dwd_f_crm_clue_change_record", map[string]interface{}{
  102. "clue_id": clueId,
  103. "position_id": position_id,
  104. "change_type": "加入任务车",
  105. "new_value": "超时未跟进自动加车",
  106. "createtime": nowTime,
  107. "BCPCID": common.GetRandom(32),
  108. "operator_id": -1,
  109. })
  110. }
  111. }
  112. return true
  113. }, sql, argsSelect...)
  114. }
  115. log.Println("超时未跟进定时任务结束")
  116. }
  117. func autoTasks() {
  118. log.Println("按照跟进时间提前一天进入任务车定时任务开始")
  119. nowTime2 := time.Now().Format(date.Date_Full_Layout)
  120. nextTime := time.Now().AddDate(0, 0, 1).Format(date.Date_Full_Layout)
  121. TiDb.SelectByBath(100, func(l *[]map[string]interface{}) bool {
  122. for _, v := range *l {
  123. clueId := common.Int64All(v["clue_id"])
  124. position_id := common.Int64All(v["position_id"])
  125. out_task_status := common.IntAll(v["out_task_status"])
  126. if out_task_status != 1 {
  127. if TiDb.Update("dwd_f_crm_private_sea", map[string]interface{}{"clue_id": clueId}, map[string]interface{}{
  128. "is_task": 1,
  129. "task_time": nowTime2,
  130. "tasktime": nowTime2,
  131. "taskstatus": 0,
  132. "tasksource": "即将到达下次跟进时间",
  133. }) {
  134. TiDb.Insert("dwd_f_crm_clue_change_record", map[string]interface{}{
  135. "clue_id": clueId,
  136. "position_id": position_id,
  137. "change_type": "加入任务车",
  138. "new_value": "即将到达下次跟进时间",
  139. "createtime": nowTime2,
  140. "BCPCID": common.GetRandom(32),
  141. "operator_id": -1,
  142. })
  143. }
  144. }
  145. }
  146. return true
  147. }, `SELECT a.clue_id,a.position_id,a.seatNumber,a.out_task_status FROM dwd_f_crm_private_sea a
  148. LEFT JOIN dwd_f_crm_clue_info b ON a.clue_id=b.id
  149. LEFT JOIN dwd_f_crm_trail_content c ON c.clue_id=b.id
  150. WHERE c.next_time >= "`+nowTime2+`" and c.next_time <= "`+nextTime+`"`)
  151. log.Println("按照跟进时间提前一天进入任务车定时任务结束")
  152. }