main.go 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  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. ClickhouseConn driver.Conn
  23. TiDbData *mysql.Mysql
  24. TiDbPower *mysql.Mysql
  25. WorkOrder *mysql.Mysql
  26. ThirdParty *mysql.Mysql
  27. Jyactivities *mysql.Mysql
  28. debrisProductMysql *mysql.Mysql
  29. Base *mysql.Mysql
  30. BiService *mysql.Mysql
  31. DataAnalysisService *mysql.Mysql
  32. Es elastic.Es
  33. Mgo *mongodb.MongodbSim
  34. MgoLog *mongodb.MongodbSim
  35. MgoQyxy *mongodb.MongodbSim
  36. mode = flag.Int("m", 1, "")
  37. startTime, endTime = "00:00", "23:59"
  38. Gmail mail.GmailAuth
  39. UserChannel = make(map[string]map[string]interface{})
  40. )
  41. func main() {
  42. flag.Parse()
  43. common.ReadConfig(&cfg)
  44. log.Println("cfg ", cfg)
  45. common.ReadConfig("./db.json", &db)
  46. log.Println("db ", db)
  47. common.ReadConfig("./lable.json", &lableJson)
  48. log.Println("lableJson ", lableJson)
  49. Gmail = mail.GmailAuth{
  50. SmtpHost: db.Mail.SmtpHost,
  51. SmtpPort: db.Mail.SmtpPort,
  52. User: db.Mail.User,
  53. Pwd: db.Mail.Pwd,
  54. }
  55. TiDb = &mysql.Mysql{
  56. Address: db.TiDb.Host + ":" + fmt.Sprint(db.TiDb.Port),
  57. UserName: db.TiDb.User,
  58. PassWord: db.TiDb.Password,
  59. DBName: db.TiDb.Database,
  60. MaxOpenConns: db.TiDb.PollSize,
  61. MaxIdleConns: db.TiDb.MaxIdle,
  62. }
  63. TiDb.Init()
  64. TiDbData = &mysql.Mysql{
  65. Address: db.TiDbData.Host + ":" + fmt.Sprint(db.TiDbData.Port),
  66. UserName: db.TiDbData.User,
  67. PassWord: db.TiDbData.Password,
  68. DBName: db.TiDbData.Database,
  69. MaxOpenConns: db.TiDbData.PollSize,
  70. MaxIdleConns: db.TiDbData.MaxIdle,
  71. }
  72. TiDbData.Init()
  73. TiDbPower = &mysql.Mysql{
  74. Address: db.TiDbPower.Host + ":" + fmt.Sprint(db.TiDbPower.Port),
  75. UserName: db.TiDbPower.User,
  76. PassWord: db.TiDbPower.Password,
  77. DBName: db.TiDbPower.Database,
  78. MaxOpenConns: db.TiDbPower.PollSize,
  79. MaxIdleConns: db.TiDbPower.MaxIdle,
  80. }
  81. TiDbPower.Init()
  82. ThirdParty = &mysql.Mysql{
  83. Address: db.ThirdParty.Host + ":" + fmt.Sprint(db.ThirdParty.Port),
  84. UserName: db.ThirdParty.User,
  85. PassWord: db.ThirdParty.Password,
  86. DBName: db.ThirdParty.Database,
  87. MaxOpenConns: db.ThirdParty.PollSize,
  88. MaxIdleConns: db.ThirdParty.MaxIdle,
  89. }
  90. ThirdParty.Init()
  91. Jyactivities = &mysql.Mysql{
  92. Address: db.Jyactivities.Host + ":" + fmt.Sprint(db.Jyactivities.Port),
  93. UserName: db.Jyactivities.User,
  94. PassWord: db.Jyactivities.Password,
  95. DBName: db.Jyactivities.Database,
  96. MaxOpenConns: db.Jyactivities.PollSize,
  97. MaxIdleConns: db.Jyactivities.MaxIdle,
  98. }
  99. Jyactivities.Init()
  100. debrisProductMysql = &mysql.Mysql{
  101. Address: db.DebrisProduct.Host + ":" + fmt.Sprint(db.DebrisProduct.Port),
  102. UserName: db.DebrisProduct.User,
  103. PassWord: db.DebrisProduct.Password,
  104. DBName: db.DebrisProduct.Database,
  105. }
  106. debrisProductMysql.Init()
  107. WorkOrder = &mysql.Mysql{
  108. Address: db.WorderOrder.Host + ":" + fmt.Sprint(db.WorderOrder.Port),
  109. UserName: db.WorderOrder.User,
  110. PassWord: db.WorderOrder.Password,
  111. DBName: db.WorderOrder.Database,
  112. MaxOpenConns: db.WorderOrder.PollSize,
  113. MaxIdleConns: db.WorderOrder.MaxIdle,
  114. }
  115. WorkOrder.Init()
  116. Mysql = &mysql.Mysql{
  117. Address: db.Mysql.Host + ":" + fmt.Sprint(db.Mysql.Port),
  118. UserName: db.Mysql.User,
  119. PassWord: db.Mysql.Password,
  120. DBName: db.Mysql.Database,
  121. MaxOpenConns: db.Mysql.PollSize,
  122. MaxIdleConns: db.Mysql.MaxIdle,
  123. }
  124. Mysql.Init()
  125. Base = &mysql.Mysql{
  126. Address: db.BaseService.Host + ":" + fmt.Sprint(db.BaseService.Port),
  127. UserName: db.BaseService.User,
  128. PassWord: db.BaseService.Password,
  129. DBName: db.BaseService.Database,
  130. MaxOpenConns: db.BaseService.PollSize,
  131. MaxIdleConns: db.BaseService.MaxIdle,
  132. }
  133. Base.Init()
  134. BiService = &mysql.Mysql{
  135. Address: db.BiService.Host + ":" + fmt.Sprint(db.BiService.Port),
  136. UserName: db.BiService.User,
  137. PassWord: db.BiService.Password,
  138. DBName: db.BiService.Database,
  139. MaxOpenConns: db.BiService.PollSize,
  140. MaxIdleConns: db.BiService.MaxIdle,
  141. }
  142. BiService.Init()
  143. DataAnalysisService = &mysql.Mysql{
  144. Address: db.DataAnalysis.Host + ":" + fmt.Sprint(db.DataAnalysis.Port),
  145. UserName: db.DataAnalysis.User,
  146. PassWord: db.DataAnalysis.Password,
  147. DBName: db.DataAnalysis.Database,
  148. MaxOpenConns: db.DataAnalysis.PollSize,
  149. MaxIdleConns: db.DataAnalysis.MaxIdle,
  150. }
  151. DataAnalysisService.Init()
  152. ConnectClickhouse(&db.Clickhouse)
  153. Es = elastic.NewEs(db.Es.Version, db.Es.Address, db.Es.DbSize, db.Es.UserName, db.Es.Password)
  154. redis.InitRedis(db.RedisServer)
  155. Mgo = mongodb.NewMgo(db.Mgo.Address, db.Mgo.DbName, db.Mgo.DbSize)
  156. MgoLog = mongodb.NewMgoWithUser(db.MgoLog.Address, db.MgoLog.DbName, db.MgoLog.User, db.MgoLog.Password, db.MgoLog.DbSize)
  157. MgoQyxy = mongodb.NewMgoWithUser(db.MgoQyxy.Address, db.MgoQyxy.DbName, db.MgoQyxy.User, db.MgoQyxy.Password, db.MgoQyxy.DbSize)
  158. InitArea()
  159. InitProduct(db.ProductArr)
  160. InitUserChannel()
  161. if *mode == 1 {
  162. go ordersClue() //后台订单进线索
  163. //一秒钟一次
  164. go p.VarTimeTask.RunInSecondTimeLoop("1秒钟定时任务", "", "", db.CornExp8, true, true, nil, func() {
  165. LockHandle() //绑定状态处理
  166. })
  167. //30分钟一次
  168. go p.VarTimeTask.RunInTimeLoop("30分钟定时任务", "", "", db.CornExp1, true, true, nil, func() {
  169. orders() //未支付订单
  170. messageSync() //在线客服聊天记录进线索
  171. userbase() //新绑定手机号进线索
  172. customerButton()
  173. })
  174. //5分钟一次
  175. go p.VarTimeTask.RunInTimeSection("5分钟定时任务1", db.CornExp2Start, db.CornExp2End, db.CornExp2, func(dayFirst bool) {
  176. InitUserChannel()
  177. users() //新注册用户进线索
  178. saleLeads() //留资进线索
  179. eventReg() //渠道
  180. bigCustomer() //大客户线索
  181. MarketCustomer() //市场部线索
  182. AdvisoryCommittee() //咨询组线索
  183. SelectionDepartment() //运营部线索
  184. rebind() //取关重新关注处理
  185. activeUsers() //活跃用户处理
  186. inviteUser() //邀请用户
  187. nextYearActivity() //开年活动
  188. })
  189. //每天8点30
  190. c := cron.New()
  191. c.AddFunc(db.CornExp3, func() {
  192. users() //新注册用户进线索
  193. saleLeads() //留资进线索
  194. activeUsers() //活跃用户处理
  195. })
  196. c.Start()
  197. // 一天一次
  198. // tagAllSync()
  199. d := cron.New()
  200. d.AddFunc(db.CornExp4, func() {
  201. tagAllSync() //用户标签
  202. })
  203. d.Start()
  204. // 5分钟一次
  205. go p.VarTimeTask.RunInTimeLoop("5分钟定时任务2", "", "", db.CornExp5, true, true, nil, func() {
  206. //go p.VarTimeTask.RunInTimeSection("5分钟定时任务2", startTime, endTime, db.CornExp5, func(dayFirst bool) {
  207. InitUserChannel()
  208. everythingSync() //渠道
  209. ordersClue() //后台已支付订单进线索
  210. kcSync() //移交客成
  211. kcAuto() //客成自动加入任务车
  212. tagAddSync() //用户标签增量
  213. autoExitSea() //自动退海
  214. Thaw() //自动解冻处理
  215. subscribeAddSync() //订阅增量
  216. CustomerChange() //客成人员变更
  217. })
  218. //5分钟一次
  219. go p.VarTimeTask.RunInTimeLoop("5分钟定时任务3", "", "", db.CornExp6, true, true, nil, func() {
  220. //go p.VarTimeTask.RunInTimeSection("5分钟定时任务3", startTime, endTime, db.CornExp6, func(dayFirst bool) {
  221. subscribeAddSync() //订阅增量
  222. rderAcceptance() //工单生成
  223. })
  224. //自动进入任务车 1天一次
  225. g := cron.New()
  226. g.AddFunc(db.CornExp7, func() {
  227. readClue() //读取中间表进线索
  228. refundAuto() //客成移交销售
  229. autoTask() //超时未跟进加入任务车
  230. autoTasks() //按照下次跟进时间提前一天加入任务车
  231. ClueToDxTask()
  232. })
  233. f := cron.New()
  234. f.AddFunc(db.CornExp9, func() {
  235. LabelToClue()
  236. })
  237. g.Start()
  238. f.Start()
  239. log.Println("个人邮件告警查询开始")
  240. WarningPerl() // 个人
  241. log.Println("部门邮件告警查询开始")
  242. WarningDm() // 部门
  243. log.Println("个人/部门邮件告警查询结束")
  244. h := cron.New()
  245. h.AddFunc(db.CornMail, func() {
  246. log.Println("个人邮件告警查询开始")
  247. WarningPerl() // 个人
  248. log.Println("部门邮件告警查询开始")
  249. WarningDm() // 部门
  250. log.Println("个人/部门邮件告警查询结束")
  251. UpperLimitAutoExitSea(db.AllocationCap)
  252. })
  253. h.Start()
  254. select {}
  255. } else if *mode == 2 {
  256. LabelToClue()
  257. } else if *mode == 3 {
  258. ClueToDxTask()
  259. } else {
  260. users()
  261. saleLeads()
  262. }
  263. }