package main import ( "fmt" "github.com/robfig/cron" "github.com/spf13/cobra" "github.com/tealeg/xlsx" "go.uber.org/zap" util "jygit.jydev.jianyu360.cn/data_processing/common_utils" "jygit.jydev.jianyu360.cn/data_processing/common_utils/log" "net/http" "tieta_data/config" ) func init() { config.Init("./common.toml") InitLog() } func main() { rootCmd := &cobra.Command{Use: "my cmd"} rootCmd.AddCommand(exportB()) rootCmd.AddCommand(exportP()) rootCmd.AddCommand(project()) if err := rootCmd.Execute(); err != nil { fmt.Println("rootCmd.Execute failed", err.Error()) } rootCmd.InitDefaultCompletionCmd() } func exportB() *cobra.Command { cmdClient := &cobra.Command{ Use: "export-bidding", Short: "Start export task", Run: func(cmd *cobra.Command, args []string) { //InitMgo() sess := MongoTool.GetMgoConn() defer MongoTool.DestoryMongoConn(sess) file := xlsx.NewFile() sheet, err := file.AddSheet("sheet1") if err != nil { panic(err) } row := sheet.AddRow() for _, v := range FieldArr1 { row.AddCell().SetValue(v) } query := sess.DB(config.Conf.DB.Mongo.Dbname).C(config.Conf.DB.Mongo.Coll).Find(nil).Select(nil).Iter() count := 0 for tmp := make(map[string]interface{}); query.Next(&tmp); count++ { if count%1000 == 0 { util.Debug("current ---", count) } func(tmp map[string]interface{}) { row := sheet.AddRow() taskExcelB(tmp, row) }(tmp) } util.Debug("over ---", count) fname := fmt.Sprintf("./数据导出-标文%s.xlsx", util.NowFormat(util.DATEFORMAT)) err = file.Save(fname) if err != nil { panic(err) } }, } return cmdClient } func exportP() *cobra.Command { cmdClient := &cobra.Command{ Use: "export-project", Short: "Start export task", Run: func(cmd *cobra.Command, args []string) { //InitMgo() sess := MongoTool.GetMgoConn() defer MongoTool.DestoryMongoConn(sess) file := xlsx.NewFile() sheet, err := file.AddSheet("sheet1") if err != nil { panic(err) } row := sheet.AddRow() for _, v := range FieldArr { row.AddCell().SetValue(v) } query := sess.DB(config.Conf.DB.Mongo.Dbname).C(config.Conf.DB.Mongo.Pcoll).Find(nil).Select(nil).Iter() count := 0 for tmp := make(map[string]interface{}); query.Next(&tmp); count++ { if count%1000 == 0 { util.Debug("current ---", count) } func(tmp map[string]interface{}) { row := sheet.AddRow() taskExcelP(tmp, row) }(tmp) } util.Debug("over ---", count) fname := fmt.Sprintf("./数据导出-捏合%s.xlsx", util.NowFormat(util.DATEFORMAT)) err = file.Save(fname) if err != nil { panic(err) } }, } return cmdClient } func project() *cobra.Command { cmdClient := &cobra.Command{ Use: "project", Short: "Start project task", Run: func(cmd *cobra.Command, args []string) { InitMysql() InitEs() go ApiMethod() loadData() taskProject() crn := cron.New() cronstr := "0 0 10 * * ?" _ = crn.AddFunc(cronstr, func() { taskProject() }) crn.Start() ch := make(chan bool, 1) <-ch }, } return cmdClient } func ApiMethod() { http.HandleFunc("/mergeProject", MergeProject) http.HandleFunc("/updateProject", UpdateInfo) err := http.ListenAndServe(config.Conf.Serve.LocPort, nil) if err != nil { log.Fatal("ListenAndServe: ", zap.Error(err)) } }