package main import ( "fmt" "github.com/spf13/viper" "github.com/xuri/excelize/v2" util "jygit.jydev.jianyu360.cn/data_processing/common_utils" "jygit.jydev.jianyu360.cn/data_processing/common_utils/mongodb" "log" "strings" ) var ( Mgo *mongodb.MongodbSim LMap = make(map[string]string, 0) // 企业人数 存储 CMap = make(map[string]string, 0) // 参保人数 存储 filename string GF GlobalConf ) 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 InitMgo() { Mgo = &mongodb.MongodbSim{ MongodbAddr: GF.Mongo.Host, DbName: GF.Mongo.DB, Size: 10, UserName: GF.Mongo.Username, Password: GF.Mongo.Password, Direct: GF.Mongo.Direct, } Mgo.InitPool() } func Init() { InitConfig() InitMgo() filename = GF.Env.File } func main() { Init() f, err := excelize.OpenFile(filename) if err != nil { fmt.Println(err) return } defer func() { f.Save() if err := f.Close(); err != nil { fmt.Println(err) } }() //L0Num := 0// rows, err := f.GetRows(GF.Env.Sheet) for i := 1; i < len(rows); i++ { if i%100 == 0 { log.Println("current: ", i, rows[i][0]) } //var member_no, employee_no, l_no, can_no string if len(rows[i]) <= 0 { continue } //1. 处理L0 企业人数人数 name := strings.TrimSpace(dealName(rows[i][0])) if _, ok := LMap[name]; !ok { base, _ := Mgo.FindOne("company_base", map[string]interface{}{"company_name": name}) baseInfo := *base if len(baseInfo) == 0 || baseInfo == nil { continue } company_id := util.ObjToString(baseInfo["company_id"]) l_no, can_no := getQn(company_id, name) LMap[name] = l_no CMap[name] = can_no f.SetCellValue(GF.Env.Sheet, fmt.Sprintf("D%v", i+1), l_no) f.SetCellValue(GF.Env.Sheet, fmt.Sprintf("C%v", i+1), can_no) //where := map[string]interface{}{ // "company_id": company_id, //} //reports, _ := Mgo.Find("annual_report_base", where, `{"_id":-1}`, nil, false, -1, -1) //reportsData := *reports // //if len(reportsData) > 0 { // for _, da := range reportsData { // if mo, ok := da["member_no"]; ok && mo != nil { // if moStr, ok := mo.(string); ok { // member_no = moStr // } // } // if eo, ok := da["employee_no"]; ok && eo != nil { // if eoStr, ok := eo.(string); ok { // employee_no = eoStr // } // } // if member_no != "" || employee_no != "" { // if strings.Contains(member_no, "不公示") && strings.Contains(employee_no, "不公示") { // continue // } else { // if strings.Contains(member_no, "不公示") { // l_no = employee_no // } else if strings.Contains(employee_no, "不公示") { // l_no = member_no // } else { // if member_no > employee_no { // l_no = employee_no // } else { // l_no = member_no // } // } // } // } // } //} //LMap[name] = l_no // ////2. 处理参保人数 //socials, _ := Mgo.Find("annual_report_social_security", where, `{"_id":-1}`, nil, false, -1, -1) //socialData := *socials //if len(socialData) > 0 { // for _, da := range socialData { // if ia, ok := da["insurance_amount"]; ok && ia != nil { // if iaStr, ok := ia.(string); ok { // if strings.Contains(iaStr, "不公示") || iaStr == "" { // continue // } else { // can_no = strings.Replace(iaStr, "人", "", -1) // } // } // } // } //} //CMap[name] = can_no } else { f.SetCellValue(GF.Env.Sheet, fmt.Sprintf("D%v", i+1), LMap[name]) f.SetCellValue(GF.Env.Sheet, fmt.Sprintf("C%v", i+1), CMap[name]) } //2. 二级数据L2 if len(rows[i]) >= 2 { name2 := strings.TrimSpace(dealName(rows[i][1])) base, _ := Mgo.FindOne("company_base", map[string]interface{}{"company_name": name2}) baseInfo := *base if len(baseInfo) == 0 || baseInfo == nil { continue } company_id := util.ObjToString(baseInfo["company_id"]) l_no, can_no := getQn(company_id, name2) f.SetCellValue(GF.Env.Sheet, fmt.Sprintf("F%v", i+1), l_no) f.SetCellValue(GF.Env.Sheet, fmt.Sprintf("E%v", i+1), can_no) } //LastL0 = name //base, _ := Mgo.FindOne("company_base", map[string]interface{}{"company_name": name}) //baseInfo := *base //if len(baseInfo) == 0 || baseInfo == nil { // //f.SetCellValue("企业名单", fmt.Sprintf("B%v", i+1), "无") // continue //} //company_id := baseInfo["company_id"] //where := map[string]interface{}{ // "company_id": company_id, //} } log.Println("over ------") } //getQn 获取企业人数,参保人数 func getQn(company_id, name string) (string, string) { var member_no, employee_no, l_no, can_no string where := map[string]interface{}{ "company_id": company_id, } reports, _ := Mgo.Find("annual_report_base", where, `{"_id":-1}`, nil, false, -1, -1) reportsData := *reports if len(reportsData) > 0 { for _, da := range reportsData { if mo, ok := da["member_no"]; ok && mo != nil { if moStr, ok := mo.(string); ok { member_no = strings.Replace(moStr, "人", "", -1) } } if eo, ok := da["employee_no"]; ok && eo != nil { if eoStr, ok := eo.(string); ok { employee_no = strings.Replace(eoStr, "人", "", -1) } } if member_no != "" && employee_no != "" { continue } if member_no != "" || employee_no != "" { if strings.Contains(member_no, "不公示") && strings.Contains(employee_no, "不公示") { continue } else { if strings.Contains(member_no, "不公示") { l_no = employee_no } else if strings.Contains(employee_no, "不公示") { l_no = member_no } else { if member_no == "" && employee_no != "" { l_no = employee_no } else if employee_no == "" && member_no != "" { l_no = member_no } else { if member_no > employee_no { l_no = employee_no } else { l_no = member_no } } break } } } } } LMap[name] = l_no //2. 处理参保人数 socials, _ := Mgo.Find("annual_report_social_security", where, `{"_id":-1}`, nil, false, -1, -1) socialData := *socials if len(socialData) > 0 { for _, da := range socialData { if ia, ok := da["insurance_amount"]; ok && ia != nil { if iaStr, ok := ia.(string); ok { if strings.Contains(iaStr, "不公示") || iaStr == "" { continue } else { can_no = strings.Replace(iaStr, "人", "", -1) break } } } } } CMap[name] = can_no return l_no, can_no } //dealName 处理name func dealName(name string) string { if strings.ContainsAny(name, "()()") { name = strings.Replace(name, "(", "(", -1) name = strings.Replace(name, ")", ")", -1) } return name }