123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 |
- package main
- import (
- "fmt"
- "github.com/spf13/viper"
- "github.com/wcc4869/common_utils"
- "github.com/xuri/excelize/v2"
- "go.uber.org/zap"
- "jygit.jydev.jianyu360.cn/data_processing/common_utils/log"
- "jygit.jydev.jianyu360.cn/data_processing/common_utils/mongodb"
- "os"
- "path/filepath"
- "strconv"
- "sync"
- "time"
- )
- var (
- MgoS *mongodb.MongodbSim
- GF GlobalConf
- )
- func Init() {
- InitLog()
- err := InitConfig()
- if err != nil {
- }
- MgoS = &mongodb.MongodbSim{
- MongodbAddr: GF.MongoS.Host,
- DbName: GF.MongoS.DB,
- Size: GF.MongoS.Size,
- UserName: GF.MongoS.Username,
- Password: GF.MongoS.Password,
- }
- MgoS.InitPool()
- }
- func InitConfig() (err error) {
- viper.SetConfigFile("config.toml") // 指定配置文件路径
- viper.SetConfigName("config") // 配置文件名称(无扩展名)
- viper.SetConfigType("toml") // 如果配置文件的名称中没有扩展名,则需要配置此项
- viper.AddConfigPath("./")
- viper.AddConfigPath("./conf/") // 还可以在工作目录中查找配置
- viper.AddConfigPath("../conf/") // 还可以在工作目录中查找配置
- err = viper.ReadInConfig() // 查找并读取配置文件
- if err != nil { // 处理读取配置文件的错误
- return
- }
- err = viper.Unmarshal(&GF)
- return err
- }
- func InitLog() {
- err := log.InitLog(
- //log.Path("./logs/log.out"),
- log.Path(""),
- log.Level("info"),
- log.Compress(true),
- log.MaxSize(10),
- log.MaxBackups(10),
- log.MaxAge(7),
- log.Format("json"),
- )
- if err != nil {
- fmt.Printf("InitLog failed: %v\n", err)
- os.Exit(1)
- }
- }
- func main() {
- Init()
- export()
- }
- func export() {
- var xlsx *excelize.File
- currentPwd, _ := os.Getwd()
- path := filepath.Join(currentPwd, "导出数据")
- ex, _ := common_utils.FileExist(path)
- if !ex {
- os.MkdirAll(path, 0777)
- }
- exportFile := filepath.Join(path, fmt.Sprintf("%v-%v.xlsx", "惠普数据", time.Now().Format("2006.01.02 15.04.05")))
- exists, _ := common_utils.FileExist(exportFile)
- // 设置文件
- if exists {
- xlsx, _ = excelize.OpenFile(exportFile)
- } else {
- xlsx = excelize.NewFile()
- }
- styleOne, _ := xlsx.NewStyle(
- &excelize.Style{
- Alignment: &excelize.Alignment{
- Horizontal: "left",
- Vertical: "left",
- },
- },
- )
- if GF.Env.Buyer > 0 {
- xlsx.NewSheet("采购单位")
- xlsx.SetSheetRow("采购单位", fmt.Sprintf("%s%d", "A", 1), &[]interface{}{"采购单位", "联系人", "联系电话", "发布时间"})
- }
- if GF.Env.Winner > 0 {
- xlsx.NewSheet("中标单位")
- xlsx.SetSheetRow("中标单位", fmt.Sprintf("%s%d", "A", 1), &[]interface{}{"中标单位", "联系人", "联系电话", "发布时间"})
- }
- if GF.Env.Agency > 0 {
- xlsx.NewSheet("代理机关")
- xlsx.SetSheetRow("代理机关", fmt.Sprintf("%s%d", "A", 1), &[]interface{}{"代理机关", "联系人", "联系电话", "发布时间"})
- }
- sess := MgoS.GetMgoConn()
- defer MgoS.DestoryMongoConn(sess)
- count := 0
- line := 1
- winnerLine := 1
- agencyLine := 1
- ch := make(chan bool, 18)
- wg := &sync.WaitGroup{}
- query := sess.DB(MgoS.DbName).C(GF.MongoS.Coll).Find(nil).Select(nil).Iter()
- for tmp := make(map[string]interface{}); query.Next(tmp); count++ {
- if count%100 == 0 {
- fmt.Println(fmt.Sprintf("dealTmp current --- %d", count))
- }
- var winner interface{}
- if tmp["company_name"] != nil {
- winner = tmp["company_name"]
- }
- //1.采购单位数据
- if GF.Env.Buyer > 0 {
- if tmp["buyer_contacts"] != nil {
- if contacts, ok := tmp["buyer_contacts"].([]interface{}); ok {
- log.Info("export", zap.Any("开始导采购单位", winner))
- for _, v := range contacts {
- line++
- ch <- true
- wg.Add(1)
- go writeToExcel(xlsx, "采购单位", winner, line, v, styleOne, wg, ch)
- //if data, ok := v.(map[string]interface{}); ok {
- // datas := make([]interface{}, 0)
- // datas = append(datas, winner, data["contact_person"], data["phone"], data["publishtime"])
- // xlsx.SetSheetRow("采购单位", fmt.Sprintf("%s%d", "A", line), &datas)
- // _ = xlsx.SetCellStyle("采购单位", fmt.Sprintf("%s%d", "A", line), "H"+strconv.Itoa(line), styleOne)
- // _ = xlsx.SetColWidth("采购单位", "A", "E", 25)
- //}
- }
- log.Info("export", zap.String("结束 ---", "采购单位数据导出"))
- }
- }
- }
- //2.中标单位
- if GF.Env.Winner > 0 {
- if tmp["winner_contacts"] != nil {
- if contacts, ok := tmp["winner_contacts"].([]interface{}); ok {
- log.Info("export", zap.Any("开始导出中标单位", winner))
- for _, v := range contacts {
- winnerLine++
- ch <- true
- wg.Add(1)
- go writeToExcel(xlsx, "中标单位", winner, winnerLine, v, styleOne, wg, ch)
- //if data, ok := v.(map[string]interface{}); ok {
- // datas := make([]interface{}, 0)
- // datas = append(datas, winner, data["contact_person"], data["phone"], data["publishtime"])
- // xlsx.SetSheetRow("中标单位", fmt.Sprintf("%s%d", "A", line), &datas)
- // _ = xlsx.SetCellStyle("中标单位", fmt.Sprintf("%s%d", "A", line), "H"+strconv.Itoa(line), styleOne)
- // _ = xlsx.SetColWidth("中标单位", "A", "E", 25)
- //}
- }
- log.Info("export", zap.String("结束 ---", "中标单位数据导出"))
- }
- }
- }
- //3.代理机关
- if GF.Env.Agency > 0 {
- if tmp["agency_contacts"] != nil {
- if contacts, ok := tmp["agency_contacts"].([]interface{}); ok {
- log.Info("export", zap.Any("开始导出代理机关", winner))
- for _, v := range contacts {
- agencyLine++
- ch <- true
- wg.Add(1)
- writeToExcel(xlsx, "代理机关", winner, agencyLine, v, styleOne, wg, ch)
- //if data, ok := v.(map[string]interface{}); ok {
- // datas := make([]interface{}, 0)
- // datas = append(datas, winner, data["contact_person"], data["phone"], data["publishtime"])
- // xlsx.SetSheetRow("代理机关", fmt.Sprintf("%s%d", "A", line), &datas)
- // _ = xlsx.SetCellStyle("代理机关", fmt.Sprintf("%s%d", "A", line), "H"+strconv.Itoa(line), styleOne)
- // _ = xlsx.SetColWidth("代理机关", "A", "E", 25)
- //}
- }
- log.Info("export", zap.String("结束 ---", "代理机关数据导出"))
- }
- }
- }
- }
- wg.Wait()
- xlsx.Path = exportFile
- xlsx.DeleteSheet("Sheet1")
- xlsx.Save()
- log.Info("export", zap.String("所有数据导出", "结束 !!!"))
- }
- // writeToExcel 写入Excel
- func writeToExcel(xlsx *excelize.File, sheetName string, winner interface{}, line int, data interface{}, style int, wg *sync.WaitGroup, ch chan bool) {
- defer func() {
- <-ch
- wg.Done()
- }()
- if dataMap, ok := data.(map[string]interface{}); ok {
- datas := make([]interface{}, 0)
- datas = append(datas, winner, dataMap["contact_person"], dataMap["phone"], dataMap["publishtime"])
- xlsx.SetSheetRow(sheetName, fmt.Sprintf("%s%d", "A", line), &datas)
- _ = xlsx.SetCellStyle(sheetName, fmt.Sprintf("%s%d", "A", line), "H"+strconv.Itoa(line), style)
- _ = xlsx.SetColWidth(sheetName, "A", "E", 25)
- }
- }
|