main.go 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. package main
  2. import (
  3. "app.yhyue.com/moapp/jybase/common"
  4. elastic "app.yhyue.com/moapp/jybase/es"
  5. "app.yhyue.com/moapp/jybase/mail"
  6. "app.yhyue.com/moapp/jybase/mongodb"
  7. "app.yhyue.com/moapp/jybase/mysql"
  8. "app.yhyue.com/moapp/jybase/redis"
  9. "bp.jydev.jianyu360.cn/BaseService/pushpkg/p"
  10. "flag"
  11. "fmt"
  12. "github.com/ClickHouse/clickhouse-go/v2/lib/driver"
  13. "github.com/robfig/cron"
  14. "log"
  15. )
  16. var (
  17. cfg = new(Config)
  18. db = new(DB)
  19. lableJson = new(LableJson)
  20. Mysql *mysql.Mysql
  21. TiDb *mysql.Mysql
  22. dataServiceMsql *mysql.Mysql
  23. ClickhouseConn driver.Conn
  24. TiDbData *mysql.Mysql
  25. TiDbPower *mysql.Mysql
  26. WorkOrder *mysql.Mysql
  27. ThirdParty *mysql.Mysql
  28. Jyactivities *mysql.Mysql
  29. debrisProductMysql *mysql.Mysql
  30. Base *mysql.Mysql
  31. BiService *mysql.Mysql
  32. DataAnalysisService *mysql.Mysql
  33. CrmService *mysql.Mysql
  34. Es elastic.Es
  35. Mgo *mongodb.MongodbSim
  36. MgoLog *mongodb.MongodbSim
  37. MgoQyxy *mongodb.MongodbSim
  38. mode = flag.Int("m", 1, "")
  39. startTime, endTime = "00:00", "23:59"
  40. Gmail mail.GmailAuth
  41. UserChannel = make(map[string]map[string]interface{})
  42. )
  43. func main() {
  44. flag.Parse()
  45. common.ReadConfig(&cfg)
  46. log.Println("cfg ", cfg)
  47. common.ReadConfig("./db.json", &db)
  48. log.Println("db ", db)
  49. common.ReadConfig("./lable.json", &lableJson)
  50. log.Println("lableJson ", lableJson)
  51. Gmail = mail.GmailAuth{
  52. SmtpHost: db.Mail.SmtpHost,
  53. SmtpPort: db.Mail.SmtpPort,
  54. User: db.Mail.User,
  55. Pwd: db.Mail.Pwd,
  56. }
  57. TiDb = MysqlTidbInit(db.TiDb)
  58. TiDb.Init()
  59. TiDbData = MysqlTidbInit(db.TiDbData)
  60. TiDbData.Init()
  61. TiDbPower = MysqlTidbInit(db.TiDbPower)
  62. TiDbPower.Init()
  63. ThirdParty = MysqlTidbInit(db.ThirdParty)
  64. ThirdParty.Init()
  65. Jyactivities = MysqlTidbInit(db.Jyactivities)
  66. Jyactivities.Init()
  67. debrisProductMysql = MysqlTidbInit(db.DebrisProduct)
  68. debrisProductMysql.Init()
  69. WorkOrder = MysqlTidbInit(db.WorderOrder)
  70. WorkOrder.Init()
  71. Mysql = MysqlTidbInit(db.Mysql)
  72. Mysql.Init()
  73. Base = MysqlTidbInit(db.BaseService)
  74. Base.Init()
  75. BiService = MysqlTidbInit(db.BiService)
  76. BiService.Init()
  77. DataAnalysisService = MysqlTidbInit(db.DataAnalysis)
  78. DataAnalysisService.Init()
  79. CrmService = MysqlTidbInit(db.Crm)
  80. CrmService.Init()
  81. ConnectClickhouse(&db.Clickhouse)
  82. Es = elastic.NewEs(db.Es.Version, db.Es.Address, db.Es.DbSize, db.Es.UserName, db.Es.Password)
  83. redis.InitRedis(db.RedisServer)
  84. Mgo = mongodb.NewMgo(db.Mgo.Address, db.Mgo.DbName, db.Mgo.DbSize)
  85. MgoLog = mongodb.NewMgoWithUser(db.MgoLog.Address, db.MgoLog.DbName, db.MgoLog.User, db.MgoLog.Password, db.MgoLog.DbSize)
  86. MgoQyxy = mongodb.NewMgoWithUser(db.MgoQyxy.Address, db.MgoQyxy.DbName, db.MgoQyxy.User, db.MgoQyxy.Password, db.MgoQyxy.DbSize)
  87. InitArea()
  88. InitProduct(db.ProductArr)
  89. InitUserChannel()
  90. r := setupRouter()
  91. go func() {
  92. if err := r.Run(fmt.Sprintf(":%s", db.ApiPort)); err != nil {
  93. log.Fatalf("HTTP服务启动失败: %v", err)
  94. }
  95. }()
  96. if *mode == 1 {
  97. go ordersClue() //后台订单进线索
  98. //一秒钟一次
  99. go p.VarTimeTask.RunInSecondTimeLoop("1秒钟定时任务", "", "", db.CornExp8, true, true, nil, func() {
  100. LockHandle() //绑定状态处理
  101. })
  102. //30分钟一次
  103. go p.VarTimeTask.RunInTimeLoop("30分钟定时任务", "", "", db.CornExp1, true, true, nil, func() {
  104. orders() //未支付订单
  105. messageSync() //在线客服聊天记录进线索
  106. userbase() //新绑定手机号进线索
  107. customerButton()
  108. })
  109. //5分钟一次
  110. go p.VarTimeTask.RunInTimeSection("5分钟定时任务1", db.CornExp2Start, db.CornExp2End, db.CornExp2, func(dayFirst bool) {
  111. InitUserChannel()
  112. users() //新注册用户进线索
  113. saleLeads() //留资进线索
  114. eventReg() //渠道
  115. bigCustomer() //大客户线索
  116. SpecialSaleLeads()
  117. rebind() //取关重新关注处理
  118. activeUsers() //活跃用户处理
  119. inviteUser() //邀请用户
  120. nextYearActivity() //开年活动
  121. })
  122. //每天8点30
  123. c := cron.New()
  124. c.AddFunc(db.CornExp3, func() {
  125. users() //新注册用户进线索
  126. saleLeads() //留资进线索
  127. activeUsers() //活跃用户处理
  128. })
  129. c.Start()
  130. // 一天一次
  131. // tagAllSync()
  132. d := cron.New()
  133. d.AddFunc(db.CornExp4, func() {
  134. tagAllSync() //用户标签
  135. })
  136. d.Start()
  137. // 5分钟一次
  138. go p.VarTimeTask.RunInTimeLoop("5分钟定时任务2", "", "", db.CornExp5, true, true, nil, func() {
  139. //go p.VarTimeTask.RunInTimeSection("5分钟定时任务2", startTime, endTime, db.CornExp5, func(dayFirst bool) {
  140. InitUserChannel()
  141. everythingSync() //渠道
  142. ordersClue() //后台已支付订单进线索
  143. kcSync() //移交客成
  144. kcAuto() //客成自动加入任务车
  145. tagAddSync() //用户标签增量
  146. autoExitSea() //自动退海
  147. Thaw() //自动解冻处理
  148. subscribeAddSync() //订阅增量
  149. CustomerChange() //客成人员变更
  150. })
  151. //5分钟一次
  152. go p.VarTimeTask.RunInTimeLoop("5分钟定时任务3", "", "", db.CornExp6, true, true, nil, func() {
  153. //go p.VarTimeTask.RunInTimeSection("5分钟定时任务3", startTime, endTime, db.CornExp6, func(dayFirst bool) {
  154. subscribeAddSync() //订阅增量
  155. rderAcceptance() //工单生成
  156. })
  157. //自动进入任务车 1天一次
  158. g := cron.New()
  159. g.AddFunc(db.CornExp7, func() {
  160. readClue() //读取中间表进线索
  161. refundAuto() //客成移交销售
  162. autoTask() //超时未跟进加入任务车
  163. autoTasks() //按照下次跟进时间提前一天加入任务车
  164. ClueToDxTask()
  165. })
  166. f := cron.New()
  167. f.AddFunc(db.CornExp9, func() {
  168. LabelToClue()
  169. })
  170. g.Start()
  171. f.Start()
  172. log.Println("个人邮件告警查询开始")
  173. WarningPerl() // 个人
  174. log.Println("部门邮件告警查询开始")
  175. WarningDm() // 部门
  176. log.Println("个人/部门邮件告警查询结束")
  177. h := cron.New()
  178. h.AddFunc(db.CornMail, func() {
  179. log.Println("个人邮件告警查询开始")
  180. WarningPerl() // 个人
  181. log.Println("部门邮件告警查询开始")
  182. WarningDm() // 部门
  183. log.Println("个人/部门邮件告警查询结束")
  184. UpperLimitAutoExitSea(db.AllocationCap)
  185. })
  186. h.Start()
  187. select {}
  188. } else if *mode == 2 {
  189. LabelToClue()
  190. } else if *mode == 3 {
  191. ClueToDxTask()
  192. } else {
  193. users()
  194. saleLeads()
  195. }
  196. }