package main import ( "app.yhyue.com/moapp/jybase/common" elastic "app.yhyue.com/moapp/jybase/es" "app.yhyue.com/moapp/jybase/mail" "app.yhyue.com/moapp/jybase/mongodb" "app.yhyue.com/moapp/jybase/mysql" "app.yhyue.com/moapp/jybase/redis" "bp.jydev.jianyu360.cn/BaseService/pushpkg/p" "flag" "github.com/ClickHouse/clickhouse-go/v2/lib/driver" "github.com/robfig/cron" "log" ) var ( cfg = new(Config) db = new(DB) lableJson = new(LableJson) Mysql *mysql.Mysql TiDb *mysql.Mysql dataServiceMsql *mysql.Mysql ClickhouseConn driver.Conn TiDbData *mysql.Mysql TiDbPower *mysql.Mysql WorkOrder *mysql.Mysql ThirdParty *mysql.Mysql Jyactivities *mysql.Mysql debrisProductMysql *mysql.Mysql Base *mysql.Mysql BiService *mysql.Mysql DataAnalysisService *mysql.Mysql CrmService *mysql.Mysql Es elastic.Es Mgo *mongodb.MongodbSim MgoLog *mongodb.MongodbSim MgoQyxy *mongodb.MongodbSim mode = flag.Int("m", 1, "") startTime, endTime = "00:00", "23:59" Gmail mail.GmailAuth UserChannel = make(map[string]map[string]interface{}) ) func main() { flag.Parse() common.ReadConfig(&cfg) log.Println("cfg ", cfg) common.ReadConfig("./db.json", &db) log.Println("db ", db) common.ReadConfig("./lable.json", &lableJson) log.Println("lableJson ", lableJson) Gmail = mail.GmailAuth{ SmtpHost: db.Mail.SmtpHost, SmtpPort: db.Mail.SmtpPort, User: db.Mail.User, Pwd: db.Mail.Pwd, } TiDb = MysqlTidbInit(db.TiDb) TiDb.Init() TiDbData = MysqlTidbInit(db.TiDbData) TiDbData.Init() TiDbPower = MysqlTidbInit(db.TiDbPower) TiDbPower.Init() ThirdParty = MysqlTidbInit(db.ThirdParty) ThirdParty.Init() Jyactivities = MysqlTidbInit(db.Jyactivities) Jyactivities.Init() debrisProductMysql = MysqlTidbInit(db.DebrisProduct) debrisProductMysql.Init() WorkOrder = MysqlTidbInit(db.WorderOrder) WorkOrder.Init() Mysql = MysqlTidbInit(db.Mysql) Mysql.Init() Base = MysqlTidbInit(db.BaseService) Base.Init() BiService = MysqlTidbInit(db.BiService) BiService.Init() DataAnalysisService = MysqlTidbInit(db.DataAnalysis) DataAnalysisService.Init() CrmService = MysqlTidbInit(db.Crm) CrmService.Init() ConnectClickhouse(&db.Clickhouse) Es = elastic.NewEs(db.Es.Version, db.Es.Address, db.Es.DbSize, db.Es.UserName, db.Es.Password) redis.InitRedis(db.RedisServer) Mgo = mongodb.NewMgo(db.Mgo.Address, db.Mgo.DbName, db.Mgo.DbSize) MgoLog = mongodb.NewMgoWithUser(db.MgoLog.Address, db.MgoLog.DbName, db.MgoLog.User, db.MgoLog.Password, db.MgoLog.DbSize) MgoQyxy = mongodb.NewMgoWithUser(db.MgoQyxy.Address, db.MgoQyxy.DbName, db.MgoQyxy.User, db.MgoQyxy.Password, db.MgoQyxy.DbSize) InitArea() InitProduct(db.ProductArr) InitUserChannel() /*bigCustomer() return*/ if *mode == 1 { go ordersClue() //后台订单进线索 //一秒钟一次 go p.VarTimeTask.RunInSecondTimeLoop("1秒钟定时任务", "", "", db.CornExp8, true, true, nil, func() { LockHandle() //绑定状态处理 }) //30分钟一次 go p.VarTimeTask.RunInTimeLoop("30分钟定时任务", "", "", db.CornExp1, true, true, nil, func() { orders() //未支付订单 messageSync() //在线客服聊天记录进线索 userbase() //新绑定手机号进线索 customerButton() }) //5分钟一次 go p.VarTimeTask.RunInTimeSection("5分钟定时任务1", db.CornExp2Start, db.CornExp2End, db.CornExp2, func(dayFirst bool) { InitUserChannel() users() //新注册用户进线索 saleLeads() //留资进线索 eventReg() //渠道 bigCustomer() //大客户线索 SpecialSaleLeads() rebind() //取关重新关注处理 activeUsers() //活跃用户处理 inviteUser() //邀请用户 nextYearActivity() //开年活动 }) //每天8点30 c := cron.New() c.AddFunc(db.CornExp3, func() { users() //新注册用户进线索 saleLeads() //留资进线索 activeUsers() //活跃用户处理 }) c.Start() // 一天一次 // tagAllSync() d := cron.New() d.AddFunc(db.CornExp4, func() { tagAllSync() //用户标签 }) d.Start() // 5分钟一次 go p.VarTimeTask.RunInTimeLoop("5分钟定时任务2", "", "", db.CornExp5, true, true, nil, func() { //go p.VarTimeTask.RunInTimeSection("5分钟定时任务2", startTime, endTime, db.CornExp5, func(dayFirst bool) { InitUserChannel() everythingSync() //渠道 ordersClue() //后台已支付订单进线索 kcSync() //移交客成 kcAuto() //客成自动加入任务车 tagAddSync() //用户标签增量 autoExitSea() //自动退海 Thaw() //自动解冻处理 subscribeAddSync() //订阅增量 CustomerChange() //客成人员变更 }) //5分钟一次 go p.VarTimeTask.RunInTimeLoop("5分钟定时任务3", "", "", db.CornExp6, true, true, nil, func() { //go p.VarTimeTask.RunInTimeSection("5分钟定时任务3", startTime, endTime, db.CornExp6, func(dayFirst bool) { subscribeAddSync() //订阅增量 rderAcceptance() //工单生成 }) //自动进入任务车 1天一次 g := cron.New() g.AddFunc(db.CornExp7, func() { readClue() //读取中间表进线索 refundAuto() //客成移交销售 autoTask() //超时未跟进加入任务车 autoTasks() //按照下次跟进时间提前一天加入任务车 ClueToDxTask() }) f := cron.New() f.AddFunc(db.CornExp9, func() { LabelToClue() }) g.Start() f.Start() log.Println("个人邮件告警查询开始") WarningPerl() // 个人 log.Println("部门邮件告警查询开始") WarningDm() // 部门 log.Println("个人/部门邮件告警查询结束") h := cron.New() h.AddFunc(db.CornMail, func() { log.Println("个人邮件告警查询开始") WarningPerl() // 个人 log.Println("部门邮件告警查询开始") WarningDm() // 部门 log.Println("个人/部门邮件告警查询结束") UpperLimitAutoExitSea(db.AllocationCap) }) h.Start() select {} } else if *mode == 2 { LabelToClue() } else if *mode == 3 { ClueToDxTask() } else { users() saleLeads() } }