main.go 8.3 KB

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