12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448 |
- package main
- import (
- "fmt"
- "github.com/spf13/viper"
- "github.com/wcc4869/common_utils"
- "github.com/wcc4869/common_utils/log"
- //mongodb "github.com/wcc4869/common_utils/mongo"
- "github.com/xuri/excelize/v2"
- "go.mongodb.org/mongo-driver/bson"
- "jygit.jydev.jianyu360.cn/data_processing/common_utils/mongodb"
- "os"
- "reflect"
- "sort"
- "strconv"
- "strings"
- "time"
- )
- var (
- GF Conf
- noExists = make([]string, 0) //不存在的企业名称
- //notables = make([]string, 0) //不存在的表
- //companyMap = make(map[string]string, 0) //企业ID=>企业名称
- Mgo, MgoQ *mongodb.MongodbSim
- //count int
- exportFile string
- //xlsx *excelize.File
- //styleOne, mergeStyle int
- saveSize int
- //保存临时数据bidding_tmp_cp
- savePool chan map[string]interface{}
- saveSp chan bool
- compares = make([]string, 0) //需要对比,排除不在内的企业
- //lock sync.Mutex
- LastData = make(map[string][]interface{}, 0) //L0=>[L2]
- L0names = make([]string, 0)
- links = make([]map[string]string, 0) //存储设置 单元格超链接
- lineMap = make(map[string]int, 0)
- lastRes = make(map[string][]interface{}, 0) //最后一个sheet
- L0, L2 string
- )
- func init() {
- InitConfig()
- Mgo = &mongodb.MongodbSim{
- MongodbAddr: GF.Mongo.Host,
- DbName: GF.Mongo.DB,
- Size: 10,
- }
- Mgo.InitPool()
- // 查询省市区使用
- MgoQ = &mongodb.MongodbSim{
- MongodbAddr: GF.Mongoq.Host,
- DbName: GF.Mongoq.DB,
- UserName: GF.Mongoq.Username,
- Password: GF.Mongoq.Password,
- Size: 10,
- }
- MgoQ.InitPool()
- saveSize = 200
- saveSp = make(chan bool, 2)
- savePool = make(chan map[string]interface{}, 5000)
- }
- // InitConfig init config
- func InitConfig() {
- // 优先级
- // 1. -d 添加目录
- // 2. SERVER_TOML 环境变量
- // 3. ./ 添加目录
- // 4. ./conf/ 添加目录
- viper.SetConfigFile("config.toml") // 指定配置文件路径
- viper.SetConfigName("config") // 配置文件名称(无扩展名)
- viper.SetConfigType("toml") // 如果配置文件的名称中没有扩展名,则需要配置此项
- viper.AddConfigPath("./")
- viper.AddConfigPath("./conf/") // 还可以在工作目录中查找配置
- viper.AddConfigPath("../conf/") // 还可以在工作目录中查找配置
- err := viper.ReadInConfig() // 查找并读取配置文件
- if err != nil { // 处理读取配置文件的错误
- fmt.Println("ReadInConfig err =>", err)
- }
- err = viper.Unmarshal(&GF)
- if err != nil {
- panic(err)
- }
- }
- func main2() {
- //setCG()
- fmt.Println("啦啦啦啦啦啦啦啦啦啦啦")
- }
- func main4() {
- readCompany()
- }
- func main() {
- rs, _ := common_utils.FileExist(GF.Readfile.Path)
- if rs {
- readCompany()
- //compares = readCompare()
- //if GF.Env.Compare > 0 {
- // compares = readCompare()
- //}
- setSheet1(L0names)
- //var subLine1 int //公司的光标
- //var subLine2 int //公司的光标
- //var subLine3 int //公司的光标
- //var pline1, pline2, pline3 int //投资上级
- //var brline1 int // 记录分支机构写入
- //var brpLine1, brpLine2, brpLine3 int
- var xlsx *excelize.File
- exists, _ := common_utils.FileExist(exportFile)
- //设置文件
- if exists {
- xlsx, _ = excelize.OpenFile(exportFile)
- } else {
- xlsx = excelize.NewFile()
- }
- defer func() {
- xlsx.Path = exportFile
- xlsx.Save()
- }()
- for i, name := range L0names {
- L0 = name
- L2 = compares[i]
- fmt.Println("iiiii", i)
- //1.查询基础表,获取公司信息
- name = dealName(name)
- company := getCompany(name)
- if company == nil {
- noExists = append(noExists, name)
- xlsx.SetCellValue("公司列表", fmt.Sprintf("%s%d", "F", i+2), "公司不存在")
- continue
- //company = getHistory(name)
- //if company == nil {
- // noExists = append(noExists, name)
- // xlsx.SetCellValue("公司列表", fmt.Sprintf("%s%d", "F", i+2), "公司不存在")
- // continue
- //} else {
- // xlsx.SetCellValue("公司列表", fmt.Sprintf("%s%d", "F", i+2), "曾用名")
- //}
- }
- subSheet1 := "投资下级1"
- subSheet2 := "投资下级2"
- subSheet3 := "投资下级3"
- subSheet4 := "投资下级4"
- subSheet5 := "投资下级5"
- //pSheet1 := "投资上级1"
- //pSheet2 := "投资上级2"
- //pSheet3 := "投资上级3"
- brsheet1 := "分支下级1"
- brsheet2 := "分支下级2"
- brsheet3 := "分支下级3"
- //brpSheet1 := "分支上级1"
- //brpSheet2 := "分支上级2"
- //brpSheet3 := "分支上级3"
- fmt.Println("开始投资公司--------------------------------")
- //投资下级
- if GF.Env.Invesl > 0 {
- inves := getInvests(company["company_id"].(string))
- var invest1 = make([]map[string]interface{}, 0)
- invest1 = dealInves(inves)
- if len(invest1) > 0 {
- subLine1 := lineMap[subSheet1]
- fmt.Println("开始投资公司下级1---------------", name)
- now := time.Now()
- _, subLine1 = setInvest(xlsx, invest1, name, subSheet1, subLine1)
- lineMap[subSheet1] = subLine1
- fmt.Printf("%s: setInvest 下级 处理时长为:%v \n", name, time.Since(now))
- //公司列表的 下级
- linkCell := fmt.Sprintf("B%d", i+2)
- linkAddr := fmt.Sprintf("%s!C%d", subSheet1, subLine1-len(invest1)+1)
- link := map[string]string{
- "sheet": "公司列表",
- "cell": linkCell,
- "addr": linkAddr,
- "value": "下级",
- }
- links = append(links, link)
- //公司列表的 上级
- AlinkAddr := fmt.Sprintf("%s!A%d", "公司列表", i+2)
- for t := subLine1 - len(invest1) + 1; t <= subLine1; t++ {
- AlinkCell := fmt.Sprintf("A%d", t)
- Alink := map[string]string{
- "sheet": subSheet1,
- "cell": AlinkCell,
- "addr": AlinkAddr,
- "value": "上级",
- }
- links = append(links, Alink)
- }
- //traverseDataInvest(xlsx, invest1, 2)
- //二级投资公司
- if GF.Env.Invesl > 1 {
- for k1, v1 := range invest1 {
- inves2 := getInvests(v1["company_id"].(string))
- var invest2 = make([]map[string]interface{}, 0)
- invest2 = dealInves(inves2)
- if len(invest2) > 0 {
- fmt.Println("开始投资公司下级22---------------", v1["company_name"])
- subLine2 := lineMap[subSheet2]
- _, subLine2 = setInvest(xlsx, invest2, ObjToString(v1["company_name"]), subSheet2, subLine2)
- lineMap[subSheet2] = subLine2
- linkCell := fmt.Sprintf("B%d", subLine1-len(invest1)+1+k1)
- linkAddr := fmt.Sprintf("%s!C%d", subSheet2, subLine2-len(invest2)+1)
- link := map[string]string{
- "sheet": subSheet1,
- "cell": linkCell,
- "addr": linkAddr,
- "value": "下级",
- }
- links = append(links, link)
- //
- AlinkAddr := fmt.Sprintf("%s!C%d", subSheet1, subLine1-len(invest1)+1+k1)
- for t := subLine2 - len(invest2) + 1; t <= subLine2; t++ {
- AlinkCell := fmt.Sprintf("A%d", t)
- Alink := map[string]string{
- "sheet": subSheet2,
- "cell": AlinkCell,
- "addr": AlinkAddr,
- "value": "上级",
- }
- links = append(links, Alink)
- }
- // 第三层级
- if GF.Env.Invesl > 2 {
- for k2, v2 := range invest2 {
- inves3 := getInvests(v2["company_id"].(string))
- var invest3 = make([]map[string]interface{}, 0)
- invest3 = dealInves(inves3)
- if len(invest3) > 0 {
- fmt.Println("开始投资公司下级333--------------", v2["company_name"])
- subLine3 := lineMap[subSheet3]
- _, subLine3 = setInvest(xlsx, invest3, ObjToString(v2["company_name"]), subSheet3, subLine3)
- lineMap[subSheet3] = subLine3
- linkCell := fmt.Sprintf("B%d", subLine2-len(invest2)+1+k2)
- linkAddr := fmt.Sprintf("%s!C%d", subSheet3, subLine3-len(invest3)+1)
- link := map[string]string{
- "sheet": subSheet2,
- "cell": linkCell,
- "addr": linkAddr,
- "value": "下级",
- }
- links = append(links, link)
- AlinkAddr := fmt.Sprintf("%s!C%d", subSheet2, subLine2-len(invest2)+1+k2)
- for t := subLine3 - len(invest3) + 1; t <= subLine3; t++ {
- AlinkCell := fmt.Sprintf("A%d", t)
- Alink := map[string]string{
- "sheet": subSheet3,
- "cell": AlinkCell,
- "addr": AlinkAddr,
- "value": "上级",
- }
- links = append(links, Alink)
- }
- // 第4层级
- if GF.Env.Invesl > 3 {
- for k3, v3 := range invest3 {
- inves4 := getInvests(v3["company_id"].(string))
- var invest4 = make([]map[string]interface{}, 0)
- invest4 = dealInves(inves4)
- if len(invest4) > 0 {
- fmt.Println("开始投资公司下级4444-------------", v3["company_name"])
- subLine4 := lineMap[subSheet4]
- _, subLine4 = setInvest(xlsx, invest4, ObjToString(v3["company_name"]), subSheet4, subLine4)
- lineMap[subSheet4] = subLine4
- linkCell := fmt.Sprintf("B%d", subLine3-len(invest3)+1+k3)
- linkAddr := fmt.Sprintf("%s!C%d", subSheet4, subLine4-len(invest4)+1)
- link := map[string]string{
- "sheet": subSheet3,
- "cell": linkCell,
- "addr": linkAddr,
- "value": "下级",
- }
- links = append(links, link)
- AlinkAddr := fmt.Sprintf("%s!C%d", subSheet3, subLine3-len(invest3)+1+k3)
- for t := subLine4 - len(invest4) + 1; t <= subLine4; t++ {
- AlinkCell := fmt.Sprintf("A%d", t)
- Alink := map[string]string{
- "sheet": subSheet4,
- "cell": AlinkCell,
- "addr": AlinkAddr,
- "value": "上级",
- }
- links = append(links, Alink)
- }
- // 第5层级
- if GF.Env.Invesl > 4 {
- for k4, v4 := range invest4 {
- inves5 := getInvests(v4["company_id"].(string))
- var invest5 = make([]map[string]interface{}, 0)
- invest5 = dealInves(inves5)
- if len(invest5) > 0 {
- fmt.Println("开始投资公司下级55555--------------", v4["company_name"])
- subLine5 := lineMap[subSheet5]
- _, subLine5 = setInvest(xlsx, invest5, ObjToString(v4["company_name"]), subSheet5, subLine5)
- lineMap[subSheet5] = subLine5
- linkCell := fmt.Sprintf("B%d", subLine4-len(invest4)+1+k4)
- linkAddr := fmt.Sprintf("%s!C%d", subSheet5, subLine5-len(invest5)+1)
- link := map[string]string{
- "sheet": subSheet4,
- "cell": linkCell,
- "addr": linkAddr,
- "value": "下级",
- }
- links = append(links, link)
- AlinkAddr := fmt.Sprintf("%s!C%d", subSheet4, subLine4-len(invest4)+1+k4)
- for t := subLine5 - len(invest5) + 1; t <= subLine5; t++ {
- AlinkCell := fmt.Sprintf("A%d", t)
- Alink := map[string]string{
- "sheet": subSheet5,
- "cell": AlinkCell,
- "addr": AlinkAddr,
- "value": "上级",
- }
- links = append(links, Alink)
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- //// 投资上级
- //if GF.Env.Pinvesl > 0 {
- // fmt.Println("开始投资公司上级 1111111111---------------", name)
- // //设置上级连接
- // pinves1 := getParentsByPartner(company["company_id"].(string))
- // if len(pinves1) > 0 {
- // var datas = make([]map[string]interface{}, 0)
- // datas, isbreak := dealPinves(pinves1, 1)
- // if isbreak {
- // continue
- // }
- //
- // now := time.Now()
- // pline1 := lineMap[pSheet1]
- // _, pline1 = setInvestP(xlsx, datas, name, pSheet1, pline1)
- // fmt.Printf("%s: setInvest 上级 处理时长为:%v \n", name, time.Since(now))
- // lineMap[pSheet1] = pline1
- // AlinkAddr := fmt.Sprintf("%s!C%d", pSheet1, pline1-len(datas)+1)
- // AlinkCell := fmt.Sprintf("C%d", i+2)
- //
- // Alink := map[string]string{
- // "sheet": "公司列表",
- // "cell": AlinkCell,
- // "addr": AlinkAddr,
- // "value": "上级",
- // }
- // links = append(links, Alink)
- //
- // AlinkAddr2 := fmt.Sprintf("%s!A%d", "公司列表", i+2)
- //
- // for t := pline1 - len(datas) + 1; t <= pline1; t++ {
- // AlinkCell2 := fmt.Sprintf("A%d", t)
- // Alink2 := map[string]string{
- // "sheet": pSheet1,
- // "cell": AlinkCell2,
- // "addr": AlinkAddr2,
- // "value": "下级",
- // }
- // links = append(links, Alink2)
- // }
- //
- // traverInvestP(xlsx, datas, 2)
- // }
- //}
- //fmt.Println("结束投资公司--------------------------------")
- //分支机构下级
- if GF.Env.Subl > 0 {
- // 查询分支机构子公司
- subs := getSubCompany(company["company_id"].(string))
- if len(subs) > 0 {
- fmt.Println("开始 分支机构 下级 1111111111111----------", name)
- now := time.Now()
- data := dealSubs(subs)
- brline1 := lineMap[brsheet1]
- fmt.Printf("%s: setSubCompany 下级 整理数据时长为:%v \n", name, time.Since(now))
- _, brline1 = setSubCompany(xlsx, data, name, brsheet1, brline1)
- fmt.Printf("%s: setSubCompany 下级 处理时长为:%v \n", name, time.Since(now))
- //
- linkAddr := fmt.Sprintf("%s!C%d", brsheet1, brline1-len(data)+1)
- linkCell := fmt.Sprintf("D%d", i+2)
- link := map[string]string{
- "sheet": "公司列表",
- "cell": linkCell,
- "addr": linkAddr,
- "value": "下级",
- }
- links = append(links, link)
- //
- AlinkAddr := fmt.Sprintf("%s!A%d", "公司列表", i+2)
- for t := brline1 - len(data) + 1; t <= brline1; t++ {
- AlinkCell := fmt.Sprintf("A%d", t)
- Alink := map[string]string{
- "sheet": brsheet1,
- "cell": AlinkCell,
- "addr": AlinkAddr,
- "value": "上级",
- }
- links = append(links, Alink)
- }
- if GF.Env.Subl > 1 {
- //traverseDataSub(xlsx, data, 2)
- //二级分支机构
- for k1, v := range subs {
- if v["branch_company_id"] == nil {
- continue
- }
- subs2 := getSubCompany(v["branch_company_id"].(string))
- if len(subs2) > 0 {
- fmt.Println("开始 分支机构 下级 2222222222222----------", v["branch_name"])
- data := dealSubs(subs2)
- brline2 := lineMap[brsheet2]
- _, brline2 = setSubCompany(xlsx, data, v["branch_name"].(string), brsheet2, brline2)
- lineMap[brsheet2] = brline2
- linkCell := fmt.Sprintf("B%d", brline1-len(subs)+1+k1)
- linkAddr := fmt.Sprintf("%s!C%d", brsheet2, brline2-len(subs2)+1)
- link := map[string]string{
- "sheet": brsheet1,
- "cell": linkCell,
- "addr": linkAddr,
- "value": "下级",
- }
- links = append(links, link)
- AlinkAddr := fmt.Sprintf("%s!C%d", brsheet1, brline1-len(subs)+1+k1)
- for t := brline2 - len(subs2) + 1; t <= brline2; t++ {
- AlinkCell := fmt.Sprintf("A%d", t)
- Alink := map[string]string{
- "sheet": brsheet2,
- "cell": AlinkCell,
- "addr": AlinkAddr,
- "value": "上级",
- }
- links = append(links, Alink)
- }
- //三级层级
- if GF.Env.Subl > 2 {
- for k2, v2 := range subs2 {
- if v2["branch_company_id"] == nil {
- continue
- }
- subs3 := getSubCompany(v2["branch_company_id"].(string))
- if len(subs3) > 0 {
- fmt.Println("开始 分支机构 下级 333333333333333----------", v2["branch_name"])
- data := dealSubs(subs3)
- brline3 := lineMap[brsheet3]
- _, brline3 = setSubCompany(xlsx, data, v2["branch_name"].(string), brsheet3, brline3)
- lineMap[brsheet3] = brline3
- linkCell := fmt.Sprintf("B%d", brline2-len(subs2)+1+k2)
- linkAddr := fmt.Sprintf("%s!C%d", brsheet3, brline3-len(subs3)+1)
- link := map[string]string{
- "sheet": brsheet2,
- "cell": linkCell,
- "addr": linkAddr,
- "value": "下级",
- }
- links = append(links, link)
- AlinkAddr := fmt.Sprintf("%s!C%d", brsheet2, brline2-len(subs2)+1+k2)
- for t := brline3 - len(subs3) + 1; t <= brline3; t++ {
- AlinkCell := fmt.Sprintf("A%d", t)
- Alink := map[string]string{
- "sheet": brsheet3,
- "cell": AlinkCell,
- "addr": AlinkAddr,
- "value": "上级",
- }
- links = append(links, Alink)
- }
- }
- }
- }
- }
- }
- }
- }
- }
- //// 分支机构上级
- //if GF.Env.Psubl > 0 {
- // pbranchs1 := getParentsByBranch(company["company_id"].(string))
- // if len(pbranchs1) > 0 {
- // now := time.Now()
- // data := dealPsubs(pbranchs1)
- // fmt.Println("开始 分支机构 上级 11111111111111----------", name)
- // brpLine1 := lineMap[brpSheet1]
- // _, brpLine1 = setSubP(xlsx, data, name, brpSheet1, brpLine1)
- // lineMap[brpSheet1] = brpLine1
- // fmt.Printf("%s: setSubCompany 上级 处理时长为:%v \n", name, time.Since(now))
- // AlinkAddr := fmt.Sprintf("%s!C%d", brpSheet1, brpLine1-len(data)+1)
- // AlinkCell := fmt.Sprintf("E%d", i+2)
- // Alink := map[string]string{
- // "sheet": "公司列表",
- // "cell": AlinkCell,
- // "addr": AlinkAddr,
- // "value": "上级",
- // }
- // links = append(links, Alink)
- //
- // AlinkAddr2 := fmt.Sprintf("%s!A%d", "公司列表", i+2)
- //
- // for t := brpLine1 - len(data) + 1; t <= brpLine1; t++ {
- // AlinkCell2 := fmt.Sprintf("A%d", t)
- // Alink2 := map[string]string{
- // "sheet": brpSheet1,
- // "cell": AlinkCell2,
- // "addr": AlinkAddr2,
- // "value": "下级",
- // }
- // links = append(links, Alink2)
- // }
- //
- // traverSubP(xlsx, data, 2)
- // }
- //}
- //fmt.Println("结束分支机构--------------------------------")
- fmt.Printf("%s -------- 企业数据导出成功\n", name)
- }
- dealLast(xlsx)
- if len(links) > 0 {
- setCellContentLink(xlsx, links)
- }
- fmt.Println("总共企业数量为:", len(L0names), "不存在的企业数量为:", len(noExists))
- if len(noExists) > 0 {
- fmt.Println("具体不存在的企业名称如下:", noExists)
- }
- } else {
- fmt.Println("读取的企业列表文件不存在,请检查")
- }
- fmt.Println("所有企业导出结束,")
- //c := make(chan bool, 1)
- //<-c
- }
- // setSheet1 设置第一个sheet
- func setSheet1(data []string) (err error) {
- //导出文件
- var xlsx *excelize.File
- currentPwd, _ := os.Getwd()
- path := fmt.Sprintf("%s/%s", currentPwd, "导出数据")
- ex, _ := common_utils.FileExist(path)
- if !ex {
- os.MkdirAll(path, 0777)
- }
- exportFile = fmt.Sprintf("%s/%v-%v.xlsx", path, "结果", 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",
- },
- },
- )
- //合并单元格样式
- mergeStyle, _ := xlsx.NewStyle(
- &excelize.Style{
- Alignment: &excelize.Alignment{
- Horizontal: "center",
- Vertical: "center",
- },
- Fill: excelize.Fill{Type: "pattern", Color: []string{"#E0EBF5"}, Pattern: 1},
- Font: &excelize.Font{
- Bold: true,
- Italic: false,
- Family: "Times New Roman",
- Size: 22,
- Color: "#777777",
- },
- })
- line := 0
- sheet := "公司列表"
- xlsx.NewSheet(sheet)
- xlsx.DeleteSheet("Sheet1")
- _ = xlsx.SetColWidth(sheet, "A", "E", 25)
- _ = xlsx.SetRowHeight(sheet, 1, 30)
- subtitles := []interface{}{"公司名称", "投资下级", "投资上级", "分支下级", "分支上级"}
- //subkeys := []string{"branch_name", "company_status", "authority", "branch_code", "n_company_status", "branch_credit_no", "establish_date"}
- line++
- //设置第一行title
- _ = xlsx.SetSheetRow(sheet, fmt.Sprintf("%s%d", "A", line), &subtitles)
- _ = xlsx.SetCellStyle(sheet, fmt.Sprintf("%s%d", "A", line), "E"+strconv.Itoa(line), mergeStyle)
- for k, _ := range data {
- line++
- val := []interface{}{
- data[k],
- }
- err = xlsx.SetSheetRow(sheet, fmt.Sprintf("%s%d", "A", line), &val)
- if err != nil {
- log.Debug("set sheetrow line err", log.Any(fmt.Sprintf("%s%d", "A", line), err))
- return
- }
- _ = xlsx.SetCellStyle(sheet, fmt.Sprintf("%s%d", "A", line), "BA"+strconv.Itoa(line), styleOne)
- }
- xlsx.Path = exportFile
- xlsx.Save()
- return
- }
- // setSubCompany 设置子公司
- func setSubCompany(xlsx *excelize.File, subs []map[string]interface{}, name, sheet string, li int) (err error, line int) {
- line = li
- if len(subs) > 0 {
- styleOne, _ := xlsx.NewStyle(
- &excelize.Style{
- Alignment: &excelize.Alignment{
- Horizontal: "left",
- Vertical: "left",
- },
- },
- )
- xlsx.NewSheet(sheet)
- _ = xlsx.SetColWidth(sheet, "C", "L", 20)
- //subtitles := []interface{}{"分支机构名称", "登记状态", "分支机构登记机关", "分支机构注册号", "处理后的登记状态", "分支机构统一信用代码", "分支机构成立日期", "省份", "城市", "区域/街道"}
- //subkeys := []string{"branch_name", "company_status", "authority", "branch_code", "n_company_status", "branch_credit_no", "establish_date", "company_area", "company_city", "company_district"}
- subtitles := []interface{}{"L0", "分支机构名称", "登记状态", "分支机构登记机关", "分支机构注册号", "处理后的登记状态", "分支机构统一信用代码", "分支机构成立日期"}
- subkeys := []string{"branch_name", "company_status", "authority", "branch_code", "n_company_status", "branch_credit_no", "establish_date"}
- if GF.Env.City > 0 {
- subtitles = append(subtitles, "省份", "城市", "区域/街道", "来源公司")
- subkeys = append(subkeys, "company_area", "company_city", "company_district")
- } else {
- subtitles = append(subtitles, "来源公司")
- }
- if line == 0 {
- line++
- //设置第一行title
- _ = xlsx.SetSheetRow(sheet, fmt.Sprintf("%s%d", "C", line), &subtitles)
- }
- for _, data := range subs {
- line++
- subvalus := make([]interface{}, 0)
- subvalus = append(subvalus, L0)
- for _, key := range subkeys {
- if data[key] == nil {
- subvalus = append(subvalus, "")
- } else {
- subvalus = append(subvalus, data[key])
- }
- }
- subvalus = append(subvalus, name)
- err = xlsx.SetSheetRow(sheet, fmt.Sprintf("%s%d", "C", line), &subvalus)
- if err != nil {
- log.Debug("set sheetrow line err", log.Any(fmt.Sprintf("%s%d", "A", line), err))
- return
- }
- _ = xlsx.SetCellStyle(sheet, fmt.Sprintf("%s%d", "A", line), "BA"+strconv.Itoa(line), styleOne)
- }
- //xlsx.Path = exportFile
- //xlsx.Save()
- }
- return
- }
- // setSubP 设置分支上级
- func setSubP(xlsx *excelize.File, subs []map[string]interface{}, name, sheet string, li int) (err error, line int) {
- line = li
- if len(subs) > 0 {
- styleOne, _ := xlsx.NewStyle(
- &excelize.Style{
- Alignment: &excelize.Alignment{
- Horizontal: "left",
- Vertical: "left",
- },
- },
- )
- xlsx.NewSheet(sheet)
- _ = xlsx.SetColWidth(sheet, "C", "L", 20)
- subtitles := []interface{}{"L2", "机构名称", "登记状态", "机构登记机关", "机构注册号", "处理后的登记状态", "机构统一信用代码", "机构成立日期"}
- subkeys := []string{"company_name", "company_status", "authority", "branch_code", "n_company_status", "branch_credit_no", "establish_date"}
- if GF.Env.City > 0 {
- subtitles = append(subtitles, "省份", "城市", "区域/街道", "来源公司")
- subkeys = append(subkeys, "company_area", "company_city", "company_district")
- } else {
- subtitles = append(subtitles, "来源公司")
- }
- if line == 0 {
- line++
- //设置第一行title
- _ = xlsx.SetSheetRow(sheet, fmt.Sprintf("%s%d", "C", line), &subtitles)
- }
- for _, data := range subs {
- line++
- subvalus := make([]interface{}, 0)
- subvalus = append(subvalus, L0)
- for _, key := range subkeys {
- if data[key] == nil {
- subvalus = append(subvalus, "")
- } else {
- subvalus = append(subvalus, data[key])
- }
- }
- subvalus = append(subvalus, name)
- err = xlsx.SetSheetRow(sheet, fmt.Sprintf("%s%d", "C", line), &subvalus)
- if err != nil {
- log.Debug("set sheetrow line err", log.Any(fmt.Sprintf("%s%d", "A", line), err))
- return
- }
- _ = xlsx.SetCellStyle(sheet, fmt.Sprintf("%s%d", "A", line), "BA"+strconv.Itoa(line), styleOne)
- }
- //xlsx.Path = exportFile
- //xlsx.Save()
- }
- return
- }
- // setInvest 设置投资公司
- func setInvest(xlsx *excelize.File, subs []map[string]interface{}, name, sheet string, li int) (err error, line int) {
- line = li
- if len(subs) > 0 {
- styleOne, _ := xlsx.NewStyle(
- &excelize.Style{
- Alignment: &excelize.Alignment{
- Horizontal: "left",
- Vertical: "left",
- },
- },
- )
- xlsx.NewSheet(sheet)
- xlsx.DeleteSheet("Sheet1")
- _ = xlsx.SetColWidth(sheet, "C", "G", 20)
- _ = xlsx.SetRowHeight(sheet, line, 20)
- //subtitles := []interface{}{"企业名称", "企业注册号", "股东类型", "股东名称", "占股比例", "省份", "城市", "区域/街道", "来源公司"}
- //subkeys := []string{"company_name", "credit_no", "stock_type", "stock_name", "stock_proportion", "company_area", "company_city", "company_district"}
- subtitles := []interface{}{"L0", "企业名称", "统一社会信用代码", "股东类型", "股东名称", "占股比例"}
- subkeys := []string{"company_name", "credit_no", "stock_type", "stock_name", "stock_proportion"}
- if GF.Env.City > 0 {
- subtitles = append(subtitles, "省份", "城市", "区域/街道", "来源公司")
- subkeys = append(subkeys, "company_area", "company_city", "company_district")
- } else {
- subtitles = append(subtitles, "来源公司")
- }
- // 设置一次表头
- if line == 0 {
- line++
- //设置第一行title
- err = xlsx.SetSheetRow(sheet, fmt.Sprintf("%s%d", "C", line), &subtitles)
- if err != nil {
- log.Error("setInvest ", log.Any("SetSheetRow", err))
- return
- }
- }
- for _, data := range subs {
- line++
- subvalus := make([]interface{}, 0)
- subvalus = append(subvalus, L0)
- for _, key := range subkeys {
- subvalus = append(subvalus, data[key])
- }
- subvalus = append(subvalus, name)
- err = xlsx.SetSheetRow(sheet, fmt.Sprintf("%s%d", "C", line), &subvalus)
- if err != nil {
- log.Debug("set sheetrow line err", log.Any(fmt.Sprintf("%s%d", "A", line), err))
- return
- }
- _ = xlsx.SetCellStyle(sheet, fmt.Sprintf("%s%d", "C", line), "BA"+strconv.Itoa(line), styleOne)
- }
- //
- //xlsx.Path = exportFile
- //xlsx.Save()
- }
- return
- }
- func setInvestP(xlsx *excelize.File, subs []map[string]interface{}, name, sheet string, li int) (err error, line int) {
- line = li
- if len(subs) > 0 {
- styleOne, _ := xlsx.NewStyle(
- &excelize.Style{
- Alignment: &excelize.Alignment{
- Horizontal: "left",
- Vertical: "left",
- },
- },
- )
- xlsx.NewSheet(sheet)
- xlsx.DeleteSheet("Sheet1")
- _ = xlsx.SetColWidth(sheet, "C", "G", 20)
- _ = xlsx.SetRowHeight(sheet, line, 20)
- subtitles := []interface{}{"L2", "企业名称", "统一社会信用代码", "股东类型", "股东名称", "占股比例"}
- subkeys := []string{"company_name", "credit_no", "stock_type", "stock_name", "stock_proportion"}
- if GF.Env.City > 0 {
- subtitles = append(subtitles, "省份", "城市", "区域/街道", "来源公司")
- subkeys = append(subkeys, "company_area", "company_city", "company_district")
- } else {
- subtitles = append(subtitles, "来源公司")
- }
- // 设置一次表头
- if line == 0 {
- line++
- //设置第一行title
- err = xlsx.SetSheetRow(sheet, fmt.Sprintf("%s%d", "C", line), &subtitles)
- if err != nil {
- log.Error("setInvest ", log.Any("SetSheetRow", err))
- return
- }
- }
- for _, data := range subs {
- line++
- subvalus := make([]interface{}, 0)
- subvalus = append(subvalus, L0)
- for _, key := range subkeys {
- var value interface{}
- if key == "credit_no" {
- base := getCompany(name)
- value = base["credit_no"]
- } else {
- value = data[key]
- }
- subvalus = append(subvalus, value)
- }
- subvalus = append(subvalus, name)
- err = xlsx.SetSheetRow(sheet, fmt.Sprintf("%s%d", "C", line), &subvalus)
- if err != nil {
- log.Debug("set sheetrow line err", log.Any(fmt.Sprintf("%s%d", "A", line), err))
- return
- }
- _ = xlsx.SetCellStyle(sheet, fmt.Sprintf("%s%d", "C", line), "BA"+strconv.Itoa(line), styleOne)
- }
- }
- return
- }
- // getSubCompany 获取分支机构
- func getSubCompany(companyId string) (res []map[string]interface{}) {
- q := map[string]interface{}{"company_id": companyId, "use_flag": 0}
- info, _ := Mgo.Find("company_branch", q, nil, nil, false, -1, -1)
- return *info
- }
- // getInvests 获取对外投资公司
- func getInvests(companyId string) []map[string]interface{} {
- q := map[string]interface{}{"stock_name_id": companyId, "use_flag": 0, "is_history": 0}
- info, _ := Mgo.Find("company_partner", q, nil, nil, false, -1, -1)
- return *info
- }
- // getParents 获取母公司
- func getParentsByBranch(companyId string) (res []map[string]interface{}) {
- q := map[string]interface{}{"branch_company_id": companyId, "use_flag": 0}
- info, _ := Mgo.Find("company_branch", q, nil, nil, false, -1, -1)
- return *info
- }
- // getParentsByPartner 获取母公司
- func getParentsByPartner(companyId string) (res []map[string]interface{}) {
- q := map[string]interface{}{"company_id": companyId, "use_flag": 0, "is_history": 0}
- info, _ := Mgo.Find("company_partner", q, nil, nil, false, -1, -1)
- return *info
- }
- // getCompany 获取公司基本信息
- func getCompany(name string) (res map[string]interface{}) {
- info, _ := Mgo.FindOne("company_base", map[string]interface{}{"company_name": name})
- return *info
- }
- // getHistory 根据曾用名查看历史
- func getHistory(historyName string) (res map[string]interface{}) {
- info, _ := Mgo.Find("company_history_name", map[string]interface{}{"history_name": historyName}, map[string]interface{}{"update_time": -1}, nil, true, -1, 1)
- for _, v := range *info {
- res = v
- }
- return
- }
- func dealName(name string) string {
- name = strings.Replace(name, "(", "(", -1)
- name = strings.Replace(name, ")", ")", -1)
- return name
- }
- // getCompanyById 获取公司
- func getCompanyById(id string) (res map[string]interface{}) {
- info, _ := Mgo.FindOne("company_base", map[string]interface{}{"company_id": id, "use_flag": 0})
- return *info
- }
- // readCompany 读取文件获取企业名称
- func readCompany() {
- //读取文件
- f, err := excelize.OpenFile(GF.Readfile.Path)
- if err != nil {
- fmt.Println(err)
- return
- }
- defer func() {
- if err := f.Close(); err != nil {
- fmt.Println(err)
- }
- }()
- rows, err := f.GetRows("Sheet1")
- if err != nil {
- fmt.Println(err)
- return
- }
- seen := make(map[string]bool)
- for i := 1; i < len(rows); i++ {
- if len(rows[i]) > 0 {
- name := rows[i][0]
- if !seen[name] {
- seen[name] = true
- L0names = append(L0names, name)
- }
- l2name := rows[i][1]
- compares = append(compares, l2name)
- datas := LastData[name]
- datas = append(datas, []interface{}{name, l2name})
- LastData[name] = datas
- }
- }
- //for _, v := range L0names {
- // //fmt.Println(v, "->", LastData[v])
- // fmt.Println(v, "->", len(LastData[v]))
- // //oldData := LastData[v]
- //
- // //for _, v2 := range oldData {
- // // if v2d, ok := v2.([]interface{}); ok {
- // // fmt.Println(v2d)
- // // }
- // //}
- //
- //}
- return
- }
- // readCompare 读取排除企业名单
- func readCompare() (names []string) {
- //读取文件
- f, err := excelize.OpenFile(GF.Readfile.Path)
- if err != nil {
- fmt.Println(err)
- return
- }
- defer func() {
- if err := f.Close(); err != nil {
- fmt.Println(err)
- }
- }()
- rows, err := f.GetRows("Sheet1")
- if err != nil {
- fmt.Println(err)
- return
- }
- //seen := make(map[string]bool)
- for i := 1; i < len(rows); i++ {
- if len(rows[i]) > 0 {
- name := rows[i][1]
- names = append(names, dealName(name))
- }
- }
- return
- }
- // setCellContentLink 设置单元格内容和超链接
- func setCellContentLink(xlsx *excelize.File, data []map[string]string) {
- for _, v := range data {
- //fmt.Println(v)
- xlsx.SetCellValue(ObjToString(v["sheet"]), ObjToString(v["cell"]), ObjToString(v["value"]))
- style, _ := xlsx.NewStyle(&excelize.Style{
- Font: &excelize.Font{Color: "1265BE", Underline: "single"},
- })
- xlsx.SetCellStyle(ObjToString(v["sheet"]), ObjToString(v["cell"]), ObjToString(v["cell"]), style)
- xlsx.SetCellHyperLink(ObjToString(v["sheet"]), ObjToString(v["cell"]), ObjToString(v["addr"]), "Location")
- //setCellContentLink(v["sheet"], v["cell"], v["addr"], v["value"])
- }
- }
- // parsePartner 处理 投资公司,添加省市区字段
- func getStd(id string) (res map[string]interface{}) {
- filter := bson.M{"_id": id}
- info, _ := MgoQ.FindOne("qyxy_std", filter)
- return *info
- }
- func getStdByName(name string) (res map[string]interface{}) {
- filter := bson.M{"company_name": name}
- info, _ := MgoQ.FindOne("qyxy_std", filter)
- return *info
- }
- // dealInves 针对 投资公司下级,做排序,过滤处理
- func dealInves(ss []map[string]interface{}) []map[string]interface{} {
- data := dealProportion(ss)
- if len(data) > 0 {
- var invest1 = make([]map[string]interface{}, 0)
- for _, v := range data {
- v["wcc_type"] = 1
- //需要排除右侧企业时
- //if GF.Env.Compare > 0 && len(compares) > 0 {
- // if IsInStringArray(v["company_name"].(string), compares) {
- // continue
- // }
- //}
- proportion, _ := v["stock_proportion"].(float64)
- //1.大于0.5
- if proportion >= GF.Env.Proportion {
- if GF.Env.City > 0 {
- std := getStd(ObjToString(v["company_id"]))
- v["company_city"] = std["company_city"]
- v["company_area"] = std["company_area"]
- v["company_district"] = std["company_district"]
- v["company_status"] = std["company_status"]
- v["credit_no"] = std["credit_no"]
- }
- if !isInMapArray(v, invest1) {
- invest1 = append(invest1, v)
- }
- }
- //else {
- // //2.小于0.34 直接过滤
- // if proportion < 0.34 {
- // continue
- // }
- // //3. 找到所有上级,判断是否是最大投资股东
- // pars := getParentsByPartner(v["company_id"].(string))
- // if len(pars) > 0 {
- // pares := dealProportion(pars)
- // if pares[0]["stock_name_id"] != v["company_id"] {
- // continue
- // }
- // }
- // //3.投资比例大于0.34,并且是最大股东,才展示
- // if GF.Env.City > 0 {
- // std := getStd(ObjToString(v["company_id"]))
- // v["company_city"] = std["company_city"]
- // v["company_area"] = std["company_area"]
- // v["company_district"] = std["company_district"]
- // v["company_status"] = std["company_status"]
- // v["credit_no"] = std["credit_no"]
- // }
- // if !isInMapArray(v, invest1) {
- // invest1 = append(invest1, v)
- // }
- //}
- }
- for _, v := range invest1 {
- var company_name, company_status, credit_no, company_area, company_city, company_district string
- if v["company_name"] != nil {
- company_name = v["company_name"].(string)
- }
- if v["company_status"] != nil {
- company_status = v["company_status"].(string)
- }
- if v["credit_no"] != nil {
- credit_no = v["credit_no"].(string)
- }
- if v["company_area"] != nil {
- company_area = v["company_area"].(string)
- }
- if v["company_city"] != nil {
- company_city = v["company_city"].(string)
- }
- if v["company_district"] != nil {
- company_district = v["company_district"].(string)
- }
- tmp := []interface{}{L0, company_name, v["stock_proportion"], company_status, credit_no, company_area, company_city, company_district}
- if !IsContained(tmp, lastRes[L0]) {
- lastRes[L0] = append(lastRes[L0], tmp)
- }
- if GF.Env.Savecoll != "" {
- delete(v, "_id")
- Mgo.Save(GF.Env.Savecoll, v)
- }
- }
- return invest1
- }
- return []map[string]interface{}{}
- }
- // dealPinves 处理投资上级数据
- func dealPinves(ss []map[string]interface{}, level int) ([]map[string]interface{}, bool) {
- var data = make([]map[string]interface{}, 0)
- var res = make([]map[string]interface{}, 0)
- isbreak := false
- for _, v := range ss {
- if v["stock_name"] == nil {
- continue
- }
- if proportion, ok := v["stock_proportion"]; ok {
- va := reflect.ValueOf(proportion)
- switch va.Kind() {
- case reflect.String:
- proportionD, _ := strconv.ParseFloat(proportion.(string), 64)
- v["stock_proportion"] = proportionD
- data = append(data, v)
- case reflect.Float64:
- v["stock_proportion"] = proportion
- data = append(data, v)
- }
- }
- }
- if len(data) > 0 {
- sort.Slice(data, func(i, j int) bool {
- proportion, _ := data[i]["stock_proportion"].(float64)
- proportion2, _ := data[j]["stock_proportion"].(float64)
- return proportion > proportion2
- })
- for _, v := range data {
- v["wcc_type"] = 2
- if v["stock_name"] == nil {
- continue
- }
- if v["stock_name_id"] == nil {
- isbreak = true
- }
- if GF.Env.Compare > 0 && len(compares) > 0 {
- if IsInStringArray(v["company_name"].(string), compares) {
- continue
- }
- }
- proportion, _ := v["stock_proportion"].(float64)
- if proportion >= GF.Env.Proportion {
- if GF.Env.City > 0 {
- std := getStd(ObjToString(v["stock_name_id"]))
- v["company_city"] = std["company_city"]
- v["company_area"] = std["company_area"]
- v["company_district"] = std["company_district"]
- v["company_status"] = std["company_status"]
- v["credit_no"] = std["credit_no"]
- }
- //投资公司是他本身时,停止
- if v["stock_name"] == L0 {
- isbreak = true
- }
- res = append(res, v)
- break
- } else {
- isbreak = true
- v["is_break"] = true
- if level == 1 {
- break
- }
- if GF.Env.City > 0 {
- std := getStd(ObjToString(v["stock_name_id"]))
- v["company_city"] = std["company_city"]
- v["company_area"] = std["company_area"]
- v["company_district"] = std["company_district"]
- v["company_status"] = std["company_status"]
- v["credit_no"] = std["credit_no"]
- }
- res = append(res, v)
- if GF.Env.Savecoll != "" {
- //savePool <- v
- delete(v, "_id")
- Mgo.Save(GF.Env.Savecoll, v)
- }
- break
- }
- }
- // 最后一个sheet
- if len(res) > 0 {
- for _, v := range res {
- if v["stock_type"] == "自然人股东" || v["stock_type"] == "外国(地区)企业" && (v["company_area"] == "" || v["company_area"] == nil) || strings.HasSuffix(v["stock_name"].(string), "国务院") || strings.HasSuffix(v["stock_name"].(string), "国资委") || strings.HasSuffix(v["stock_name"].(string), "国有资产监督管理委员会") || strings.Contains(v["stock_name"].(string), "财政厅") || v["is_break"] == true {
- var company_name, company_status, credit_no, company_area, company_city, company_district string
- if v["company_name"] != nil {
- company_name = v["company_name"].(string)
- }
- if v["company_status"] != nil {
- company_status = v["company_status"].(string)
- }
- if v["credit_no"] != nil {
- credit_no = v["credit_no"].(string)
- }
- if v["company_area"] != nil {
- company_area = v["company_area"].(string)
- }
- if v["company_city"] != nil {
- company_city = v["company_city"].(string)
- }
- if v["company_district"] != nil {
- company_district = v["company_district"].(string)
- }
- tmp := []interface{}{L0, company_name, company_status, credit_no, company_area, company_city, company_district}
- if !IsContained(tmp, lastRes[L0]) {
- if level > 1 {
- lastRes[L0] = append(lastRes[L0], tmp)
- }
- }
- }
- }
- }
- }
- return res, isbreak
- }
- // dealSubs 处理分支机构下级数据
- func dealSubs(ss []map[string]interface{}) []map[string]interface{} {
- var data = make([]map[string]interface{}, 0)
- for _, s := range ss {
- if s["branch_name"] == nil || s["branch_name"] == "" {
- continue
- }
- if GF.Env.Compare > 0 && len(compares) > 0 {
- if IsInStringArray(s["branch_name"].(string), compares) {
- continue
- }
- }
- s["wcc_type"] = 3
- if GF.Env.City > 0 {
- std := getStd(ObjToString(s["branch_company_id"]))
- s["company_city"] = std["company_city"]
- s["company_area"] = std["company_area"]
- s["company_district"] = std["company_district"]
- s["credit_no"] = std["credit_no"]
- s["company_status"] = std["company_status"]
- data = append(data, s)
- } else {
- data = append(data, s)
- }
- // 最后一个sheet
- tmp := []interface{}{L0, s["branch_name"], 1, s["company_status"], s["credit_no"], s["company_area"], s["company_city"], s["company_district"]}
- if !IsContained(tmp, lastRes[L0]) {
- lastRes[L0] = append(lastRes[L0], tmp)
- }
- if GF.Env.Savecoll != "" {
- //savePool <- s
- delete(s, "_id")
- Mgo.Save(GF.Env.Savecoll, s)
- }
- }
- return data
- }
- // dealPsub 处理分支机构上级数据
- func dealPsubs(ss []map[string]interface{}) []map[string]interface{} {
- var data = make([]map[string]interface{}, 0)
- for _, s := range ss {
- if s["company_id"] == nil || s["company_id"] == "" {
- continue
- }
- std := getStd(ObjToString(s["company_id"]))
- s["company_name"] = std["company_name"]
- if GF.Env.City > 0 {
- s["company_city"] = std["company_city"]
- s["company_area"] = std["company_area"]
- s["company_district"] = std["company_district"]
- s["company_status"] = std["company_status"]
- s["credit_no"] = std["credit_no"]
- s["wcc_type"] = 4
- data = append(data, s)
- } else {
- s["wcc_type"] = 4
- data = append(data, s)
- }
- if GF.Env.Savecoll != "" {
- //savePool <- s
- delete(s, "_id")
- Mgo.Save(GF.Env.Savecoll, s)
- }
- var company_name, company_status, credit_no, company_area, company_city, company_district string
- if s["company_name"] != nil {
- company_name = s["company_name"].(string)
- }
- if s["company_status"] != nil {
- company_status = s["company_status"].(string)
- }
- if s["credit_no"] != nil {
- credit_no = s["credit_no"].(string)
- }
- if s["company_area"] != nil {
- company_area = s["company_area"].(string)
- }
- if s["company_city"] != nil {
- company_city = s["company_city"].(string)
- }
- if s["company_district"] != nil {
- company_district = s["company_district"].(string)
- }
- tmp := []interface{}{L0, company_name, company_status, credit_no, company_area, company_city, company_district}
- if !IsContained(tmp, lastRes[L0]) {
- lastRes[L0] = append(lastRes[L0], tmp)
- }
- }
- return data
- }
- // dealProportion 处理投资比例,并倒序排序
- func dealProportion(ss []map[string]interface{}) []map[string]interface{} {
- var data = make([]map[string]interface{}, 0)
- //1.转换成float
- for _, v := range ss {
- if v["company_name"] == nil {
- continue
- }
- if proportion, ok := v["stock_proportion"]; ok {
- va := reflect.ValueOf(proportion)
- switch va.Kind() {
- case reflect.String:
- proportionD, _ := strconv.ParseFloat(proportion.(string), 64)
- v["stock_proportion"] = proportionD
- data = append(data, v)
- case reflect.Float64:
- v["stock_proportion"] = proportion
- data = append(data, v)
- }
- }
- }
- //2. 排序,倒序排序
- sort.Slice(data, func(i, j int) bool {
- proportion, _ := data[i]["stock_proportion"].(float64)
- proportion2, _ := data[j]["stock_proportion"].(float64)
- return proportion > proportion2
- })
- return data
- }
|