main.go 43 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453
  1. package main
  2. import (
  3. "fmt"
  4. "github.com/spf13/viper"
  5. "github.com/wcc4869/common_utils"
  6. "github.com/wcc4869/common_utils/log"
  7. util "jygit.jydev.jianyu360.cn/data_processing/common_utils"
  8. //mongodb "github.com/wcc4869/common_utils/mongo"
  9. "github.com/xuri/excelize/v2"
  10. "go.mongodb.org/mongo-driver/bson"
  11. "jygit.jydev.jianyu360.cn/data_processing/common_utils/mongodb"
  12. "os"
  13. "reflect"
  14. "sort"
  15. "strconv"
  16. "strings"
  17. "time"
  18. )
  19. var (
  20. GF Conf
  21. noExists = make([]string, 0) //不存在的企业名称
  22. //notables = make([]string, 0) //不存在的表
  23. //companyMap = make(map[string]string, 0) //企业ID=>企业名称
  24. Mgo, MgoQ *mongodb.MongodbSim
  25. //count int
  26. exportFile string
  27. //xlsx *excelize.File
  28. //styleOne, mergeStyle int
  29. saveSize int
  30. //保存临时数据bidding_tmp_cp
  31. savePool chan map[string]interface{}
  32. saveSp chan bool
  33. compares = make([]string, 0) //需要对比,排除不在内的企业
  34. //lock sync.Mutex
  35. LastData = make(map[string][]interface{}, 0) //L0=>[L2]
  36. L0names = make([]string, 0)
  37. links = make([]map[string]string, 0) //存储设置 单元格超链接
  38. lineMap = make(map[string]int, 0)
  39. lastRes = make(map[string][]interface{}, 0) //最后一个sheet
  40. L0, L2 string
  41. )
  42. func init() {
  43. InitConfig()
  44. Mgo = &mongodb.MongodbSim{
  45. MongodbAddr: GF.Mongo.Host,
  46. DbName: GF.Mongo.DB,
  47. Size: 10,
  48. }
  49. Mgo.InitPool()
  50. // 查询省市区使用
  51. MgoQ = &mongodb.MongodbSim{
  52. MongodbAddr: GF.Mongoq.Host,
  53. DbName: GF.Mongoq.DB,
  54. UserName: GF.Mongoq.Username,
  55. Password: GF.Mongoq.Password,
  56. Size: 10,
  57. }
  58. MgoQ.InitPool()
  59. saveSize = 200
  60. saveSp = make(chan bool, 2)
  61. savePool = make(chan map[string]interface{}, 5000)
  62. }
  63. // InitConfig init config
  64. func InitConfig() {
  65. // 优先级
  66. // 1. -d 添加目录
  67. // 2. SERVER_TOML 环境变量
  68. // 3. ./ 添加目录
  69. // 4. ./conf/ 添加目录
  70. viper.SetConfigFile("config.toml") // 指定配置文件路径
  71. viper.SetConfigName("config") // 配置文件名称(无扩展名)
  72. viper.SetConfigType("toml") // 如果配置文件的名称中没有扩展名,则需要配置此项
  73. viper.AddConfigPath("./")
  74. viper.AddConfigPath("./conf/") // 还可以在工作目录中查找配置
  75. viper.AddConfigPath("../conf/") // 还可以在工作目录中查找配置
  76. err := viper.ReadInConfig() // 查找并读取配置文件
  77. if err != nil { // 处理读取配置文件的错误
  78. fmt.Println("ReadInConfig err =>", err)
  79. }
  80. err = viper.Unmarshal(&GF)
  81. if err != nil {
  82. panic(err)
  83. }
  84. }
  85. func main2() {
  86. //setCG()
  87. fmt.Println("啦啦啦啦啦啦啦啦啦啦啦")
  88. }
  89. func main4() {
  90. readCompany()
  91. }
  92. func main() {
  93. rs, _ := common_utils.FileExist(GF.Readfile.Path)
  94. if rs {
  95. readCompany()
  96. //compares = readCompare()
  97. //if GF.Env.Compare > 0 {
  98. // compares = readCompare()
  99. //}
  100. setSheet1(L0names)
  101. //var subLine1 int //公司的光标
  102. //var subLine2 int //公司的光标
  103. //var subLine3 int //公司的光标
  104. //var pline1, pline2, pline3 int //投资上级
  105. //var brline1 int // 记录分支机构写入
  106. //var brpLine1, brpLine2, brpLine3 int
  107. var xlsx *excelize.File
  108. exists, _ := common_utils.FileExist(exportFile)
  109. //设置文件
  110. if exists {
  111. xlsx, _ = excelize.OpenFile(exportFile)
  112. } else {
  113. xlsx = excelize.NewFile()
  114. }
  115. defer func() {
  116. xlsx.Path = exportFile
  117. xlsx.Save()
  118. }()
  119. for i, name := range L0names {
  120. L0 = name
  121. L2 = compares[i]
  122. fmt.Println("iiiii", i)
  123. //1.查询基础表,获取公司信息
  124. name = dealName(name)
  125. company := getCompany(name)
  126. if company == nil {
  127. noExists = append(noExists, name)
  128. xlsx.SetCellValue("公司列表", fmt.Sprintf("%s%d", "F", i+2), "公司不存在")
  129. continue
  130. //company = getHistory(name)
  131. //if company == nil {
  132. // noExists = append(noExists, name)
  133. // xlsx.SetCellValue("公司列表", fmt.Sprintf("%s%d", "F", i+2), "公司不存在")
  134. // continue
  135. //} else {
  136. // xlsx.SetCellValue("公司列表", fmt.Sprintf("%s%d", "F", i+2), "曾用名")
  137. //}
  138. }
  139. subSheet1 := "投资下级1"
  140. subSheet2 := "投资下级2"
  141. subSheet3 := "投资下级3"
  142. subSheet4 := "投资下级4"
  143. subSheet5 := "投资下级5"
  144. //pSheet1 := "投资上级1"
  145. //pSheet2 := "投资上级2"
  146. //pSheet3 := "投资上级3"
  147. brsheet1 := "分支下级1"
  148. brsheet2 := "分支下级2"
  149. brsheet3 := "分支下级3"
  150. //brpSheet1 := "分支上级1"
  151. //brpSheet2 := "分支上级2"
  152. //brpSheet3 := "分支上级3"
  153. fmt.Println("开始投资公司--------------------------------")
  154. //投资下级
  155. if GF.Env.Invesl > 0 {
  156. inves := getInvests(company["company_id"].(string))
  157. var invest1 = make([]map[string]interface{}, 0)
  158. invest1 = dealInves(inves)
  159. if len(invest1) > 0 {
  160. subLine1 := lineMap[subSheet1]
  161. fmt.Println("开始投资公司下级1---------------", name)
  162. now := time.Now()
  163. _, subLine1 = setInvest(xlsx, invest1, name, subSheet1, subLine1)
  164. lineMap[subSheet1] = subLine1
  165. fmt.Printf("%s: setInvest 下级 处理时长为:%v \n", name, time.Since(now))
  166. //公司列表的 下级
  167. linkCell := fmt.Sprintf("B%d", i+2)
  168. linkAddr := fmt.Sprintf("%s!C%d", subSheet1, subLine1-len(invest1)+1)
  169. link := map[string]string{
  170. "sheet": "公司列表",
  171. "cell": linkCell,
  172. "addr": linkAddr,
  173. "value": "下级",
  174. }
  175. links = append(links, link)
  176. //公司列表的 上级
  177. AlinkAddr := fmt.Sprintf("%s!A%d", "公司列表", i+2)
  178. for t := subLine1 - len(invest1) + 1; t <= subLine1; t++ {
  179. AlinkCell := fmt.Sprintf("A%d", t)
  180. Alink := map[string]string{
  181. "sheet": subSheet1,
  182. "cell": AlinkCell,
  183. "addr": AlinkAddr,
  184. "value": "上级",
  185. }
  186. links = append(links, Alink)
  187. }
  188. //traverseDataInvest(xlsx, invest1, 2)
  189. //二级投资公司
  190. if GF.Env.Invesl > 1 {
  191. for k1, v1 := range invest1 {
  192. inves2 := getInvests(v1["company_id"].(string))
  193. var invest2 = make([]map[string]interface{}, 0)
  194. invest2 = dealInves(inves2)
  195. if len(invest2) > 0 {
  196. fmt.Println("开始投资公司下级22---------------", v1["company_name"])
  197. subLine2 := lineMap[subSheet2]
  198. _, subLine2 = setInvest(xlsx, invest2, ObjToString(v1["company_name"]), subSheet2, subLine2)
  199. lineMap[subSheet2] = subLine2
  200. linkCell := fmt.Sprintf("B%d", subLine1-len(invest1)+1+k1)
  201. linkAddr := fmt.Sprintf("%s!C%d", subSheet2, subLine2-len(invest2)+1)
  202. link := map[string]string{
  203. "sheet": subSheet1,
  204. "cell": linkCell,
  205. "addr": linkAddr,
  206. "value": "下级",
  207. }
  208. links = append(links, link)
  209. //
  210. AlinkAddr := fmt.Sprintf("%s!C%d", subSheet1, subLine1-len(invest1)+1+k1)
  211. for t := subLine2 - len(invest2) + 1; t <= subLine2; t++ {
  212. AlinkCell := fmt.Sprintf("A%d", t)
  213. Alink := map[string]string{
  214. "sheet": subSheet2,
  215. "cell": AlinkCell,
  216. "addr": AlinkAddr,
  217. "value": "上级",
  218. }
  219. links = append(links, Alink)
  220. }
  221. // 第三层级
  222. if GF.Env.Invesl > 2 {
  223. for k2, v2 := range invest2 {
  224. inves3 := getInvests(v2["company_id"].(string))
  225. var invest3 = make([]map[string]interface{}, 0)
  226. invest3 = dealInves(inves3)
  227. if len(invest3) > 0 {
  228. fmt.Println("开始投资公司下级333--------------", v2["company_name"])
  229. subLine3 := lineMap[subSheet3]
  230. _, subLine3 = setInvest(xlsx, invest3, ObjToString(v2["company_name"]), subSheet3, subLine3)
  231. lineMap[subSheet3] = subLine3
  232. linkCell := fmt.Sprintf("B%d", subLine2-len(invest2)+1+k2)
  233. linkAddr := fmt.Sprintf("%s!C%d", subSheet3, subLine3-len(invest3)+1)
  234. link := map[string]string{
  235. "sheet": subSheet2,
  236. "cell": linkCell,
  237. "addr": linkAddr,
  238. "value": "下级",
  239. }
  240. links = append(links, link)
  241. AlinkAddr := fmt.Sprintf("%s!C%d", subSheet2, subLine2-len(invest2)+1+k2)
  242. for t := subLine3 - len(invest3) + 1; t <= subLine3; t++ {
  243. AlinkCell := fmt.Sprintf("A%d", t)
  244. Alink := map[string]string{
  245. "sheet": subSheet3,
  246. "cell": AlinkCell,
  247. "addr": AlinkAddr,
  248. "value": "上级",
  249. }
  250. links = append(links, Alink)
  251. }
  252. // 第4层级
  253. if GF.Env.Invesl > 3 {
  254. for k3, v3 := range invest3 {
  255. inves4 := getInvests(v3["company_id"].(string))
  256. var invest4 = make([]map[string]interface{}, 0)
  257. invest4 = dealInves(inves4)
  258. if len(invest4) > 0 {
  259. fmt.Println("开始投资公司下级4444-------------", v3["company_name"])
  260. subLine4 := lineMap[subSheet4]
  261. _, subLine4 = setInvest(xlsx, invest4, ObjToString(v3["company_name"]), subSheet4, subLine4)
  262. lineMap[subSheet4] = subLine4
  263. linkCell := fmt.Sprintf("B%d", subLine3-len(invest3)+1+k3)
  264. linkAddr := fmt.Sprintf("%s!C%d", subSheet4, subLine4-len(invest4)+1)
  265. link := map[string]string{
  266. "sheet": subSheet3,
  267. "cell": linkCell,
  268. "addr": linkAddr,
  269. "value": "下级",
  270. }
  271. links = append(links, link)
  272. AlinkAddr := fmt.Sprintf("%s!C%d", subSheet3, subLine3-len(invest3)+1+k3)
  273. for t := subLine4 - len(invest4) + 1; t <= subLine4; t++ {
  274. AlinkCell := fmt.Sprintf("A%d", t)
  275. Alink := map[string]string{
  276. "sheet": subSheet4,
  277. "cell": AlinkCell,
  278. "addr": AlinkAddr,
  279. "value": "上级",
  280. }
  281. links = append(links, Alink)
  282. }
  283. // 第5层级
  284. if GF.Env.Invesl > 4 {
  285. for k4, v4 := range invest4 {
  286. inves5 := getInvests(v4["company_id"].(string))
  287. var invest5 = make([]map[string]interface{}, 0)
  288. invest5 = dealInves(inves5)
  289. if len(invest5) > 0 {
  290. fmt.Println("开始投资公司下级55555--------------", v4["company_name"])
  291. subLine5 := lineMap[subSheet5]
  292. _, subLine5 = setInvest(xlsx, invest5, ObjToString(v4["company_name"]), subSheet5, subLine5)
  293. lineMap[subSheet5] = subLine5
  294. linkCell := fmt.Sprintf("B%d", subLine4-len(invest4)+1+k4)
  295. linkAddr := fmt.Sprintf("%s!C%d", subSheet5, subLine5-len(invest5)+1)
  296. link := map[string]string{
  297. "sheet": subSheet4,
  298. "cell": linkCell,
  299. "addr": linkAddr,
  300. "value": "下级",
  301. }
  302. links = append(links, link)
  303. AlinkAddr := fmt.Sprintf("%s!C%d", subSheet4, subLine4-len(invest4)+1+k4)
  304. for t := subLine5 - len(invest5) + 1; t <= subLine5; t++ {
  305. AlinkCell := fmt.Sprintf("A%d", t)
  306. Alink := map[string]string{
  307. "sheet": subSheet5,
  308. "cell": AlinkCell,
  309. "addr": AlinkAddr,
  310. "value": "上级",
  311. }
  312. links = append(links, Alink)
  313. }
  314. }
  315. }
  316. }
  317. }
  318. }
  319. }
  320. }
  321. }
  322. }
  323. }
  324. }
  325. }
  326. }
  327. }
  328. //// 投资上级
  329. //if GF.Env.Pinvesl > 0 {
  330. // fmt.Println("开始投资公司上级 1111111111---------------", name)
  331. // //设置上级连接
  332. // pinves1 := getParentsByPartner(company["company_id"].(string))
  333. // if len(pinves1) > 0 {
  334. // var datas = make([]map[string]interface{}, 0)
  335. // datas, isbreak := dealPinves(pinves1, 1)
  336. // if isbreak {
  337. // continue
  338. // }
  339. //
  340. // now := time.Now()
  341. // pline1 := lineMap[pSheet1]
  342. // _, pline1 = setInvestP(xlsx, datas, name, pSheet1, pline1)
  343. // fmt.Printf("%s: setInvest 上级 处理时长为:%v \n", name, time.Since(now))
  344. // lineMap[pSheet1] = pline1
  345. // AlinkAddr := fmt.Sprintf("%s!C%d", pSheet1, pline1-len(datas)+1)
  346. // AlinkCell := fmt.Sprintf("C%d", i+2)
  347. //
  348. // Alink := map[string]string{
  349. // "sheet": "公司列表",
  350. // "cell": AlinkCell,
  351. // "addr": AlinkAddr,
  352. // "value": "上级",
  353. // }
  354. // links = append(links, Alink)
  355. //
  356. // AlinkAddr2 := fmt.Sprintf("%s!A%d", "公司列表", i+2)
  357. //
  358. // for t := pline1 - len(datas) + 1; t <= pline1; t++ {
  359. // AlinkCell2 := fmt.Sprintf("A%d", t)
  360. // Alink2 := map[string]string{
  361. // "sheet": pSheet1,
  362. // "cell": AlinkCell2,
  363. // "addr": AlinkAddr2,
  364. // "value": "下级",
  365. // }
  366. // links = append(links, Alink2)
  367. // }
  368. //
  369. // traverInvestP(xlsx, datas, 2)
  370. // }
  371. //}
  372. //fmt.Println("结束投资公司--------------------------------")
  373. //分支机构下级
  374. if GF.Env.Subl > 0 {
  375. // 查询分支机构子公司
  376. subs := getSubCompany(company["company_id"].(string))
  377. if len(subs) > 0 {
  378. fmt.Println("开始 分支机构 下级 1111111111111----------", name)
  379. now := time.Now()
  380. data := dealSubs(subs)
  381. brline1 := lineMap[brsheet1]
  382. fmt.Printf("%s: setSubCompany 下级 整理数据时长为:%v \n", name, time.Since(now))
  383. _, brline1 = setSubCompany(xlsx, data, name, brsheet1, brline1)
  384. fmt.Printf("%s: setSubCompany 下级 处理时长为:%v \n", name, time.Since(now))
  385. //
  386. linkAddr := fmt.Sprintf("%s!C%d", brsheet1, brline1-len(data)+1)
  387. linkCell := fmt.Sprintf("D%d", i+2)
  388. link := map[string]string{
  389. "sheet": "公司列表",
  390. "cell": linkCell,
  391. "addr": linkAddr,
  392. "value": "下级",
  393. }
  394. links = append(links, link)
  395. //
  396. AlinkAddr := fmt.Sprintf("%s!A%d", "公司列表", i+2)
  397. for t := brline1 - len(data) + 1; t <= brline1; t++ {
  398. AlinkCell := fmt.Sprintf("A%d", t)
  399. Alink := map[string]string{
  400. "sheet": brsheet1,
  401. "cell": AlinkCell,
  402. "addr": AlinkAddr,
  403. "value": "上级",
  404. }
  405. links = append(links, Alink)
  406. }
  407. if GF.Env.Subl > 1 {
  408. //traverseDataSub(xlsx, data, 2)
  409. //二级分支机构
  410. for k1, v := range subs {
  411. if v["branch_company_id"] == nil {
  412. continue
  413. }
  414. subs2 := getSubCompany(v["branch_company_id"].(string))
  415. if len(subs2) > 0 {
  416. fmt.Println("开始 分支机构 下级 2222222222222----------", v["branch_name"])
  417. data := dealSubs(subs2)
  418. brline2 := lineMap[brsheet2]
  419. _, brline2 = setSubCompany(xlsx, data, v["branch_name"].(string), brsheet2, brline2)
  420. lineMap[brsheet2] = brline2
  421. linkCell := fmt.Sprintf("B%d", brline1-len(subs)+1+k1)
  422. linkAddr := fmt.Sprintf("%s!C%d", brsheet2, brline2-len(subs2)+1)
  423. link := map[string]string{
  424. "sheet": brsheet1,
  425. "cell": linkCell,
  426. "addr": linkAddr,
  427. "value": "下级",
  428. }
  429. links = append(links, link)
  430. AlinkAddr := fmt.Sprintf("%s!C%d", brsheet1, brline1-len(subs)+1+k1)
  431. for t := brline2 - len(subs2) + 1; t <= brline2; t++ {
  432. AlinkCell := fmt.Sprintf("A%d", t)
  433. Alink := map[string]string{
  434. "sheet": brsheet2,
  435. "cell": AlinkCell,
  436. "addr": AlinkAddr,
  437. "value": "上级",
  438. }
  439. links = append(links, Alink)
  440. }
  441. //三级层级
  442. if GF.Env.Subl > 2 {
  443. for k2, v2 := range subs2 {
  444. if v2["branch_company_id"] == nil {
  445. continue
  446. }
  447. subs3 := getSubCompany(v2["branch_company_id"].(string))
  448. if len(subs3) > 0 {
  449. fmt.Println("开始 分支机构 下级 333333333333333----------", v2["branch_name"])
  450. data := dealSubs(subs3)
  451. brline3 := lineMap[brsheet3]
  452. _, brline3 = setSubCompany(xlsx, data, v2["branch_name"].(string), brsheet3, brline3)
  453. lineMap[brsheet3] = brline3
  454. linkCell := fmt.Sprintf("B%d", brline2-len(subs2)+1+k2)
  455. linkAddr := fmt.Sprintf("%s!C%d", brsheet3, brline3-len(subs3)+1)
  456. link := map[string]string{
  457. "sheet": brsheet2,
  458. "cell": linkCell,
  459. "addr": linkAddr,
  460. "value": "下级",
  461. }
  462. links = append(links, link)
  463. AlinkAddr := fmt.Sprintf("%s!C%d", brsheet2, brline2-len(subs2)+1+k2)
  464. for t := brline3 - len(subs3) + 1; t <= brline3; t++ {
  465. AlinkCell := fmt.Sprintf("A%d", t)
  466. Alink := map[string]string{
  467. "sheet": brsheet3,
  468. "cell": AlinkCell,
  469. "addr": AlinkAddr,
  470. "value": "上级",
  471. }
  472. links = append(links, Alink)
  473. }
  474. }
  475. }
  476. }
  477. }
  478. }
  479. }
  480. }
  481. }
  482. //// 分支机构上级
  483. //if GF.Env.Psubl > 0 {
  484. // pbranchs1 := getParentsByBranch(company["company_id"].(string))
  485. // if len(pbranchs1) > 0 {
  486. // now := time.Now()
  487. // data := dealPsubs(pbranchs1)
  488. // fmt.Println("开始 分支机构 上级 11111111111111----------", name)
  489. // brpLine1 := lineMap[brpSheet1]
  490. // _, brpLine1 = setSubP(xlsx, data, name, brpSheet1, brpLine1)
  491. // lineMap[brpSheet1] = brpLine1
  492. // fmt.Printf("%s: setSubCompany 上级 处理时长为:%v \n", name, time.Since(now))
  493. // AlinkAddr := fmt.Sprintf("%s!C%d", brpSheet1, brpLine1-len(data)+1)
  494. // AlinkCell := fmt.Sprintf("E%d", i+2)
  495. // Alink := map[string]string{
  496. // "sheet": "公司列表",
  497. // "cell": AlinkCell,
  498. // "addr": AlinkAddr,
  499. // "value": "上级",
  500. // }
  501. // links = append(links, Alink)
  502. //
  503. // AlinkAddr2 := fmt.Sprintf("%s!A%d", "公司列表", i+2)
  504. //
  505. // for t := brpLine1 - len(data) + 1; t <= brpLine1; t++ {
  506. // AlinkCell2 := fmt.Sprintf("A%d", t)
  507. // Alink2 := map[string]string{
  508. // "sheet": brpSheet1,
  509. // "cell": AlinkCell2,
  510. // "addr": AlinkAddr2,
  511. // "value": "下级",
  512. // }
  513. // links = append(links, Alink2)
  514. // }
  515. //
  516. // traverSubP(xlsx, data, 2)
  517. // }
  518. //}
  519. //fmt.Println("结束分支机构--------------------------------")
  520. fmt.Printf("%s -------- 企业数据导出成功\n", name)
  521. }
  522. dealLast(xlsx)
  523. if len(links) > 0 {
  524. setCellContentLink(xlsx, links)
  525. }
  526. fmt.Println("总共企业数量为:", len(L0names), "不存在的企业数量为:", len(noExists))
  527. if len(noExists) > 0 {
  528. fmt.Println("具体不存在的企业名称如下:", noExists)
  529. }
  530. } else {
  531. fmt.Println("读取的企业列表文件不存在,请检查")
  532. }
  533. fmt.Println("所有企业导出结束,")
  534. //c := make(chan bool, 1)
  535. //<-c
  536. }
  537. // setSheet1 设置第一个sheet
  538. func setSheet1(data []string) (err error) {
  539. //导出文件
  540. var xlsx *excelize.File
  541. currentPwd, _ := os.Getwd()
  542. path := fmt.Sprintf("%s/%s", currentPwd, "导出数据")
  543. ex, _ := common_utils.FileExist(path)
  544. if !ex {
  545. os.MkdirAll(path, 0777)
  546. }
  547. exportFile = fmt.Sprintf("%s/%v-%v.xlsx", path, "结果", time.Now().Format("2006.01.02 15.04.05"))
  548. exists, _ := common_utils.FileExist(exportFile)
  549. //设置文件
  550. if exists {
  551. xlsx, _ = excelize.OpenFile(exportFile)
  552. } else {
  553. xlsx = excelize.NewFile()
  554. }
  555. styleOne, _ := xlsx.NewStyle(
  556. &excelize.Style{
  557. Alignment: &excelize.Alignment{
  558. Horizontal: "left",
  559. Vertical: "left",
  560. },
  561. },
  562. )
  563. //合并单元格样式
  564. mergeStyle, _ := xlsx.NewStyle(
  565. &excelize.Style{
  566. Alignment: &excelize.Alignment{
  567. Horizontal: "center",
  568. Vertical: "center",
  569. },
  570. Fill: excelize.Fill{Type: "pattern", Color: []string{"#E0EBF5"}, Pattern: 1},
  571. Font: &excelize.Font{
  572. Bold: true,
  573. Italic: false,
  574. Family: "Times New Roman",
  575. Size: 22,
  576. Color: "#777777",
  577. },
  578. })
  579. line := 0
  580. sheet := "公司列表"
  581. xlsx.NewSheet(sheet)
  582. xlsx.DeleteSheet("Sheet1")
  583. _ = xlsx.SetColWidth(sheet, "A", "E", 25)
  584. _ = xlsx.SetRowHeight(sheet, 1, 30)
  585. subtitles := []interface{}{"公司名称", "投资下级", "投资上级", "分支下级", "分支上级"}
  586. //subkeys := []string{"branch_name", "company_status", "authority", "branch_code", "n_company_status", "branch_credit_no", "establish_date"}
  587. line++
  588. //设置第一行title
  589. _ = xlsx.SetSheetRow(sheet, fmt.Sprintf("%s%d", "A", line), &subtitles)
  590. _ = xlsx.SetCellStyle(sheet, fmt.Sprintf("%s%d", "A", line), "E"+strconv.Itoa(line), mergeStyle)
  591. for k, _ := range data {
  592. line++
  593. val := []interface{}{
  594. data[k],
  595. }
  596. err = xlsx.SetSheetRow(sheet, fmt.Sprintf("%s%d", "A", line), &val)
  597. if err != nil {
  598. log.Debug("set sheetrow line err", log.Any(fmt.Sprintf("%s%d", "A", line), err))
  599. return
  600. }
  601. _ = xlsx.SetCellStyle(sheet, fmt.Sprintf("%s%d", "A", line), "BA"+strconv.Itoa(line), styleOne)
  602. }
  603. xlsx.Path = exportFile
  604. xlsx.Save()
  605. return
  606. }
  607. // setSubCompany 设置子公司
  608. func setSubCompany(xlsx *excelize.File, subs []map[string]interface{}, name, sheet string, li int) (err error, line int) {
  609. line = li
  610. if len(subs) > 0 {
  611. styleOne, _ := xlsx.NewStyle(
  612. &excelize.Style{
  613. Alignment: &excelize.Alignment{
  614. Horizontal: "left",
  615. Vertical: "left",
  616. },
  617. },
  618. )
  619. xlsx.NewSheet(sheet)
  620. _ = xlsx.SetColWidth(sheet, "C", "L", 20)
  621. //subtitles := []interface{}{"分支机构名称", "登记状态", "分支机构登记机关", "分支机构注册号", "处理后的登记状态", "分支机构统一信用代码", "分支机构成立日期", "省份", "城市", "区域/街道"}
  622. //subkeys := []string{"branch_name", "company_status", "authority", "branch_code", "n_company_status", "branch_credit_no", "establish_date", "company_area", "company_city", "company_district"}
  623. subtitles := []interface{}{"L0", "分支机构名称", "登记状态", "分支机构登记机关", "分支机构注册号", "处理后的登记状态", "分支机构统一信用代码", "分支机构成立日期"}
  624. subkeys := []string{"branch_name", "company_status", "authority", "branch_code", "n_company_status", "branch_credit_no", "establish_date"}
  625. if GF.Env.City > 0 {
  626. subtitles = append(subtitles, "省份", "城市", "区域/街道", "来源公司")
  627. subkeys = append(subkeys, "company_area", "company_city", "company_district")
  628. } else {
  629. subtitles = append(subtitles, "来源公司")
  630. }
  631. if line == 0 {
  632. line++
  633. //设置第一行title
  634. _ = xlsx.SetSheetRow(sheet, fmt.Sprintf("%s%d", "C", line), &subtitles)
  635. }
  636. for _, data := range subs {
  637. line++
  638. subvalus := make([]interface{}, 0)
  639. subvalus = append(subvalus, L0)
  640. for _, key := range subkeys {
  641. if data[key] == nil {
  642. subvalus = append(subvalus, "")
  643. } else {
  644. subvalus = append(subvalus, data[key])
  645. }
  646. }
  647. subvalus = append(subvalus, name)
  648. err = xlsx.SetSheetRow(sheet, fmt.Sprintf("%s%d", "C", line), &subvalus)
  649. if err != nil {
  650. log.Debug("set sheetrow line err", log.Any(fmt.Sprintf("%s%d", "A", line), err))
  651. return
  652. }
  653. _ = xlsx.SetCellStyle(sheet, fmt.Sprintf("%s%d", "A", line), "BA"+strconv.Itoa(line), styleOne)
  654. }
  655. //xlsx.Path = exportFile
  656. //xlsx.Save()
  657. }
  658. return
  659. }
  660. // setSubP 设置分支上级
  661. func setSubP(xlsx *excelize.File, subs []map[string]interface{}, name, sheet string, li int) (err error, line int) {
  662. line = li
  663. if len(subs) > 0 {
  664. styleOne, _ := xlsx.NewStyle(
  665. &excelize.Style{
  666. Alignment: &excelize.Alignment{
  667. Horizontal: "left",
  668. Vertical: "left",
  669. },
  670. },
  671. )
  672. xlsx.NewSheet(sheet)
  673. _ = xlsx.SetColWidth(sheet, "C", "L", 20)
  674. subtitles := []interface{}{"L2", "机构名称", "登记状态", "机构登记机关", "机构注册号", "处理后的登记状态", "机构统一信用代码", "机构成立日期"}
  675. subkeys := []string{"company_name", "company_status", "authority", "branch_code", "n_company_status", "branch_credit_no", "establish_date"}
  676. if GF.Env.City > 0 {
  677. subtitles = append(subtitles, "省份", "城市", "区域/街道", "来源公司")
  678. subkeys = append(subkeys, "company_area", "company_city", "company_district")
  679. } else {
  680. subtitles = append(subtitles, "来源公司")
  681. }
  682. if line == 0 {
  683. line++
  684. //设置第一行title
  685. _ = xlsx.SetSheetRow(sheet, fmt.Sprintf("%s%d", "C", line), &subtitles)
  686. }
  687. for _, data := range subs {
  688. line++
  689. subvalus := make([]interface{}, 0)
  690. subvalus = append(subvalus, L0)
  691. for _, key := range subkeys {
  692. if data[key] == nil {
  693. subvalus = append(subvalus, "")
  694. } else {
  695. subvalus = append(subvalus, data[key])
  696. }
  697. }
  698. subvalus = append(subvalus, name)
  699. err = xlsx.SetSheetRow(sheet, fmt.Sprintf("%s%d", "C", line), &subvalus)
  700. if err != nil {
  701. log.Debug("set sheetrow line err", log.Any(fmt.Sprintf("%s%d", "A", line), err))
  702. return
  703. }
  704. _ = xlsx.SetCellStyle(sheet, fmt.Sprintf("%s%d", "A", line), "BA"+strconv.Itoa(line), styleOne)
  705. }
  706. //xlsx.Path = exportFile
  707. //xlsx.Save()
  708. }
  709. return
  710. }
  711. // setInvest 设置投资公司
  712. func setInvest(xlsx *excelize.File, subs []map[string]interface{}, name, sheet string, li int) (err error, line int) {
  713. line = li
  714. if len(subs) > 0 {
  715. styleOne, _ := xlsx.NewStyle(
  716. &excelize.Style{
  717. Alignment: &excelize.Alignment{
  718. Horizontal: "left",
  719. Vertical: "left",
  720. },
  721. },
  722. )
  723. xlsx.NewSheet(sheet)
  724. xlsx.DeleteSheet("Sheet1")
  725. _ = xlsx.SetColWidth(sheet, "C", "G", 20)
  726. _ = xlsx.SetRowHeight(sheet, line, 20)
  727. //subtitles := []interface{}{"企业名称", "企业注册号", "股东类型", "股东名称", "占股比例", "省份", "城市", "区域/街道", "来源公司"}
  728. //subkeys := []string{"company_name", "credit_no", "stock_type", "stock_name", "stock_proportion", "company_area", "company_city", "company_district"}
  729. subtitles := []interface{}{"L0", "企业名称", "统一社会信用代码", "股东类型", "股东名称", "占股比例"}
  730. subkeys := []string{"company_name", "credit_no", "stock_type", "stock_name", "stock_proportion"}
  731. if GF.Env.City > 0 {
  732. subtitles = append(subtitles, "省份", "城市", "区域/街道", "来源公司")
  733. subkeys = append(subkeys, "company_area", "company_city", "company_district")
  734. } else {
  735. subtitles = append(subtitles, "来源公司")
  736. }
  737. // 设置一次表头
  738. if line == 0 {
  739. line++
  740. //设置第一行title
  741. err = xlsx.SetSheetRow(sheet, fmt.Sprintf("%s%d", "C", line), &subtitles)
  742. if err != nil {
  743. log.Error("setInvest ", log.Any("SetSheetRow", err))
  744. return
  745. }
  746. }
  747. for _, data := range subs {
  748. line++
  749. subvalus := make([]interface{}, 0)
  750. subvalus = append(subvalus, L0)
  751. for _, key := range subkeys {
  752. subvalus = append(subvalus, data[key])
  753. }
  754. subvalus = append(subvalus, name)
  755. err = xlsx.SetSheetRow(sheet, fmt.Sprintf("%s%d", "C", line), &subvalus)
  756. if err != nil {
  757. log.Debug("set sheetrow line err", log.Any(fmt.Sprintf("%s%d", "A", line), err))
  758. return
  759. }
  760. _ = xlsx.SetCellStyle(sheet, fmt.Sprintf("%s%d", "C", line), "BA"+strconv.Itoa(line), styleOne)
  761. }
  762. //
  763. //xlsx.Path = exportFile
  764. //xlsx.Save()
  765. }
  766. return
  767. }
  768. func setInvestP(xlsx *excelize.File, subs []map[string]interface{}, name, sheet string, li int) (err error, line int) {
  769. line = li
  770. if len(subs) > 0 {
  771. styleOne, _ := xlsx.NewStyle(
  772. &excelize.Style{
  773. Alignment: &excelize.Alignment{
  774. Horizontal: "left",
  775. Vertical: "left",
  776. },
  777. },
  778. )
  779. xlsx.NewSheet(sheet)
  780. xlsx.DeleteSheet("Sheet1")
  781. _ = xlsx.SetColWidth(sheet, "C", "G", 20)
  782. _ = xlsx.SetRowHeight(sheet, line, 20)
  783. subtitles := []interface{}{"L2", "企业名称", "统一社会信用代码", "股东类型", "股东名称", "占股比例"}
  784. subkeys := []string{"company_name", "credit_no", "stock_type", "stock_name", "stock_proportion"}
  785. if GF.Env.City > 0 {
  786. subtitles = append(subtitles, "省份", "城市", "区域/街道", "来源公司")
  787. subkeys = append(subkeys, "company_area", "company_city", "company_district")
  788. } else {
  789. subtitles = append(subtitles, "来源公司")
  790. }
  791. // 设置一次表头
  792. if line == 0 {
  793. line++
  794. //设置第一行title
  795. err = xlsx.SetSheetRow(sheet, fmt.Sprintf("%s%d", "C", line), &subtitles)
  796. if err != nil {
  797. log.Error("setInvest ", log.Any("SetSheetRow", err))
  798. return
  799. }
  800. }
  801. for _, data := range subs {
  802. line++
  803. subvalus := make([]interface{}, 0)
  804. subvalus = append(subvalus, L0)
  805. for _, key := range subkeys {
  806. var value interface{}
  807. if key == "credit_no" {
  808. base := getCompany(name)
  809. value = base["credit_no"]
  810. } else {
  811. value = data[key]
  812. }
  813. subvalus = append(subvalus, value)
  814. }
  815. subvalus = append(subvalus, name)
  816. err = xlsx.SetSheetRow(sheet, fmt.Sprintf("%s%d", "C", line), &subvalus)
  817. if err != nil {
  818. log.Debug("set sheetrow line err", log.Any(fmt.Sprintf("%s%d", "A", line), err))
  819. return
  820. }
  821. _ = xlsx.SetCellStyle(sheet, fmt.Sprintf("%s%d", "C", line), "BA"+strconv.Itoa(line), styleOne)
  822. }
  823. }
  824. return
  825. }
  826. // getSubCompany 获取分支机构
  827. func getSubCompany(companyId string) (res []map[string]interface{}) {
  828. q := map[string]interface{}{"company_id": companyId, "use_flag": 0}
  829. info, _ := Mgo.Find("company_branch", q, nil, nil, false, -1, -1)
  830. return *info
  831. }
  832. // getInvests 获取对外投资公司
  833. func getInvests(companyId string) []map[string]interface{} {
  834. q := map[string]interface{}{"stock_name_id": companyId, "use_flag": 0, "is_history": 0}
  835. info, _ := Mgo.Find("company_partner", q, nil, nil, false, -1, -1)
  836. return *info
  837. }
  838. // getParents 获取母公司
  839. func getParentsByBranch(companyId string) (res []map[string]interface{}) {
  840. q := map[string]interface{}{"branch_company_id": companyId, "use_flag": 0}
  841. info, _ := Mgo.Find("company_branch", q, nil, nil, false, -1, -1)
  842. return *info
  843. }
  844. // getParentsByPartner 获取母公司
  845. func getParentsByPartner(companyId string) (res []map[string]interface{}) {
  846. q := map[string]interface{}{"company_id": companyId, "use_flag": 0, "is_history": 0}
  847. info, _ := Mgo.Find("company_partner", q, nil, nil, false, -1, -1)
  848. return *info
  849. }
  850. // getCompany 获取公司基本信息
  851. func getCompany(name string) (res map[string]interface{}) {
  852. info, _ := Mgo.FindOne("company_base", map[string]interface{}{"company_name": name})
  853. return *info
  854. }
  855. // getHistory 根据曾用名查看历史
  856. func getHistory(historyName string) (res map[string]interface{}) {
  857. info, _ := Mgo.Find("company_history_name", map[string]interface{}{"history_name": historyName}, map[string]interface{}{"update_time": -1}, nil, true, -1, 1)
  858. for _, v := range *info {
  859. res = v
  860. }
  861. return
  862. }
  863. func dealName(name string) string {
  864. name = strings.Replace(name, "(", "(", -1)
  865. name = strings.Replace(name, ")", ")", -1)
  866. return name
  867. }
  868. // getCompanyById 获取公司
  869. func getCompanyById(id string) (res map[string]interface{}) {
  870. info, _ := Mgo.FindOne("company_base", map[string]interface{}{"company_id": id, "use_flag": 0})
  871. return *info
  872. }
  873. // readCompany 读取文件获取企业名称
  874. func readCompany() {
  875. //读取文件
  876. f, err := excelize.OpenFile(GF.Readfile.Path)
  877. if err != nil {
  878. fmt.Println(err)
  879. return
  880. }
  881. defer func() {
  882. if err := f.Close(); err != nil {
  883. fmt.Println(err)
  884. }
  885. }()
  886. rows, err := f.GetRows("Sheet1")
  887. if err != nil {
  888. fmt.Println(err)
  889. return
  890. }
  891. seen := make(map[string]bool)
  892. for i := 1; i < len(rows); i++ {
  893. if len(rows[i]) > 0 {
  894. name := rows[i][0]
  895. if !seen[name] {
  896. seen[name] = true
  897. L0names = append(L0names, name)
  898. }
  899. l2name := rows[i][1]
  900. compares = append(compares, l2name)
  901. datas := LastData[name]
  902. datas = append(datas, []interface{}{name, l2name})
  903. LastData[name] = datas
  904. }
  905. }
  906. //for _, v := range L0names {
  907. // //fmt.Println(v, "->", LastData[v])
  908. // fmt.Println(v, "->", len(LastData[v]))
  909. // //oldData := LastData[v]
  910. //
  911. // //for _, v2 := range oldData {
  912. // // if v2d, ok := v2.([]interface{}); ok {
  913. // // fmt.Println(v2d)
  914. // // }
  915. // //}
  916. //
  917. //}
  918. return
  919. }
  920. // readCompare 读取排除企业名单
  921. func readCompare() (names []string) {
  922. //读取文件
  923. f, err := excelize.OpenFile(GF.Readfile.Path)
  924. if err != nil {
  925. fmt.Println(err)
  926. return
  927. }
  928. defer func() {
  929. if err := f.Close(); err != nil {
  930. fmt.Println(err)
  931. }
  932. }()
  933. rows, err := f.GetRows("Sheet1")
  934. if err != nil {
  935. fmt.Println(err)
  936. return
  937. }
  938. //seen := make(map[string]bool)
  939. for i := 1; i < len(rows); i++ {
  940. if len(rows[i]) > 0 {
  941. name := rows[i][1]
  942. names = append(names, dealName(name))
  943. }
  944. }
  945. return
  946. }
  947. // setCellContentLink 设置单元格内容和超链接
  948. func setCellContentLink(xlsx *excelize.File, data []map[string]string) {
  949. for _, v := range data {
  950. //fmt.Println(v)
  951. xlsx.SetCellValue(ObjToString(v["sheet"]), ObjToString(v["cell"]), ObjToString(v["value"]))
  952. style, _ := xlsx.NewStyle(&excelize.Style{
  953. Font: &excelize.Font{Color: "1265BE", Underline: "single"},
  954. })
  955. xlsx.SetCellStyle(ObjToString(v["sheet"]), ObjToString(v["cell"]), ObjToString(v["cell"]), style)
  956. xlsx.SetCellHyperLink(ObjToString(v["sheet"]), ObjToString(v["cell"]), ObjToString(v["addr"]), "Location")
  957. //setCellContentLink(v["sheet"], v["cell"], v["addr"], v["value"])
  958. }
  959. }
  960. // parsePartner 处理 投资公司,添加省市区字段
  961. func getStd(id string) (res map[string]interface{}) {
  962. filter := bson.M{"_id": id}
  963. info, _ := MgoQ.FindOne("qyxy_std", filter)
  964. return *info
  965. }
  966. func getStdByName(name string) (res map[string]interface{}) {
  967. filter := bson.M{"company_name": name}
  968. info, _ := MgoQ.FindOne("qyxy_std", filter)
  969. return *info
  970. }
  971. // dealInves 针对 投资公司下级,做排序,过滤处理
  972. func dealInves(ss []map[string]interface{}) []map[string]interface{} {
  973. data := dealProportion(ss)
  974. if len(data) > 0 {
  975. var invest1 = make([]map[string]interface{}, 0)
  976. for _, v := range data {
  977. v["wcc_type"] = 1
  978. //需要排除右侧企业时
  979. //if GF.Env.Compare > 0 && len(compares) > 0 {
  980. // if IsInStringArray(v["company_name"].(string), compares) {
  981. // continue
  982. // }
  983. //}
  984. proportion, _ := v["stock_proportion"].(float64)
  985. //1.大于0.5
  986. if proportion >= GF.Env.Proportion {
  987. if GF.Env.City > 0 {
  988. std := getStd(ObjToString(v["company_id"]))
  989. v["company_city"] = std["company_city"]
  990. v["company_area"] = std["company_area"]
  991. v["company_district"] = std["company_district"]
  992. v["company_status"] = std["company_status"]
  993. v["credit_no"] = std["credit_no"]
  994. }
  995. if !isInMapArray(v, invest1) {
  996. invest1 = append(invest1, v)
  997. }
  998. }
  999. //else {
  1000. // //2.小于0.34 直接过滤
  1001. // if proportion < 0.34 {
  1002. // continue
  1003. // }
  1004. // //3. 找到所有上级,判断是否是最大投资股东
  1005. // pars := getParentsByPartner(v["company_id"].(string))
  1006. // if len(pars) > 0 {
  1007. // pares := dealProportion(pars)
  1008. // if pares[0]["stock_name_id"] != v["company_id"] {
  1009. // continue
  1010. // }
  1011. // }
  1012. // //3.投资比例大于0.34,并且是最大股东,才展示
  1013. // if GF.Env.City > 0 {
  1014. // std := getStd(ObjToString(v["company_id"]))
  1015. // v["company_city"] = std["company_city"]
  1016. // v["company_area"] = std["company_area"]
  1017. // v["company_district"] = std["company_district"]
  1018. // v["company_status"] = std["company_status"]
  1019. // v["credit_no"] = std["credit_no"]
  1020. // }
  1021. // if !isInMapArray(v, invest1) {
  1022. // invest1 = append(invest1, v)
  1023. // }
  1024. //}
  1025. }
  1026. for _, v := range invest1 {
  1027. var company_name, company_status, credit_no, company_area, company_city, company_district string
  1028. if v["company_name"] != nil {
  1029. company_name = v["company_name"].(string)
  1030. }
  1031. if v["company_status"] != nil {
  1032. company_status = v["company_status"].(string)
  1033. }
  1034. if v["credit_no"] != nil {
  1035. credit_no = v["credit_no"].(string)
  1036. }
  1037. if v["company_area"] != nil {
  1038. company_area = v["company_area"].(string)
  1039. }
  1040. if v["company_city"] != nil {
  1041. company_city = v["company_city"].(string)
  1042. }
  1043. if v["company_district"] != nil {
  1044. company_district = v["company_district"].(string)
  1045. }
  1046. tmp := []interface{}{L0, company_name, v["stock_proportion"], company_status, credit_no, company_area, company_city, company_district}
  1047. if !IsContained(tmp, lastRes[L0]) {
  1048. lastRes[L0] = append(lastRes[L0], tmp)
  1049. }
  1050. if GF.Env.Savecoll != "" {
  1051. delete(v, "_id")
  1052. Mgo.Save(GF.Env.Savecoll, v)
  1053. }
  1054. }
  1055. return invest1
  1056. }
  1057. return []map[string]interface{}{}
  1058. }
  1059. // dealPinves 处理投资上级数据
  1060. func dealPinves(ss []map[string]interface{}, level int) ([]map[string]interface{}, bool) {
  1061. var data = make([]map[string]interface{}, 0)
  1062. var res = make([]map[string]interface{}, 0)
  1063. isbreak := false
  1064. for _, v := range ss {
  1065. if v["stock_name"] == nil {
  1066. continue
  1067. }
  1068. if proportion, ok := v["stock_proportion"]; ok {
  1069. va := reflect.ValueOf(proportion)
  1070. switch va.Kind() {
  1071. case reflect.String:
  1072. proportionD, _ := strconv.ParseFloat(proportion.(string), 64)
  1073. v["stock_proportion"] = proportionD
  1074. data = append(data, v)
  1075. case reflect.Float64:
  1076. v["stock_proportion"] = proportion
  1077. data = append(data, v)
  1078. }
  1079. }
  1080. }
  1081. if len(data) > 0 {
  1082. sort.Slice(data, func(i, j int) bool {
  1083. proportion, _ := data[i]["stock_proportion"].(float64)
  1084. proportion2, _ := data[j]["stock_proportion"].(float64)
  1085. return proportion > proportion2
  1086. })
  1087. for _, v := range data {
  1088. v["wcc_type"] = 2
  1089. if v["stock_name"] == nil {
  1090. continue
  1091. }
  1092. if v["stock_name_id"] == nil {
  1093. isbreak = true
  1094. }
  1095. if GF.Env.Compare > 0 && len(compares) > 0 {
  1096. if IsInStringArray(v["company_name"].(string), compares) {
  1097. continue
  1098. }
  1099. }
  1100. proportion, _ := v["stock_proportion"].(float64)
  1101. if proportion >= GF.Env.Proportion {
  1102. if GF.Env.City > 0 {
  1103. std := getStd(ObjToString(v["stock_name_id"]))
  1104. v["company_city"] = std["company_city"]
  1105. v["company_area"] = std["company_area"]
  1106. v["company_district"] = std["company_district"]
  1107. v["company_status"] = std["company_status"]
  1108. v["credit_no"] = std["credit_no"]
  1109. }
  1110. //投资公司是他本身时,停止
  1111. if v["stock_name"] == L0 {
  1112. isbreak = true
  1113. }
  1114. res = append(res, v)
  1115. break
  1116. } else {
  1117. isbreak = true
  1118. v["is_break"] = true
  1119. if level == 1 {
  1120. break
  1121. }
  1122. if GF.Env.City > 0 {
  1123. std := getStd(ObjToString(v["stock_name_id"]))
  1124. v["company_city"] = std["company_city"]
  1125. v["company_area"] = std["company_area"]
  1126. v["company_district"] = std["company_district"]
  1127. v["company_status"] = std["company_status"]
  1128. v["credit_no"] = std["credit_no"]
  1129. }
  1130. res = append(res, v)
  1131. if GF.Env.Savecoll != "" {
  1132. //savePool <- v
  1133. delete(v, "_id")
  1134. Mgo.Save(GF.Env.Savecoll, v)
  1135. }
  1136. break
  1137. }
  1138. }
  1139. // 最后一个sheet
  1140. if len(res) > 0 {
  1141. for _, v := range res {
  1142. 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 {
  1143. var company_name, company_status, credit_no, company_area, company_city, company_district string
  1144. if v["company_name"] != nil {
  1145. company_name = v["company_name"].(string)
  1146. }
  1147. if v["company_status"] != nil {
  1148. company_status = v["company_status"].(string)
  1149. }
  1150. if v["credit_no"] != nil {
  1151. credit_no = v["credit_no"].(string)
  1152. }
  1153. if v["company_area"] != nil {
  1154. company_area = v["company_area"].(string)
  1155. }
  1156. if v["company_city"] != nil {
  1157. company_city = v["company_city"].(string)
  1158. }
  1159. if v["company_district"] != nil {
  1160. company_district = v["company_district"].(string)
  1161. }
  1162. tmp := []interface{}{L0, company_name, company_status, credit_no, company_area, company_city, company_district}
  1163. if !IsContained(tmp, lastRes[L0]) {
  1164. if level > 1 {
  1165. lastRes[L0] = append(lastRes[L0], tmp)
  1166. }
  1167. }
  1168. }
  1169. }
  1170. }
  1171. }
  1172. return res, isbreak
  1173. }
  1174. // dealSubs 处理分支机构下级数据
  1175. func dealSubs(ss []map[string]interface{}) []map[string]interface{} {
  1176. var data = make([]map[string]interface{}, 0)
  1177. for _, s := range ss {
  1178. if s["branch_name"] == nil || s["branch_name"] == "" {
  1179. continue
  1180. }
  1181. if GF.Env.Compare > 0 && len(compares) > 0 {
  1182. if IsInStringArray(s["branch_name"].(string), compares) {
  1183. continue
  1184. }
  1185. }
  1186. if util.ObjToString(s["company_status"]) == "已吊销" || util.ObjToString(s["company_status"]) == "吊销" || util.ObjToString(s["company_status"]) == "注销" {
  1187. continue
  1188. }
  1189. s["wcc_type"] = 3
  1190. if GF.Env.City > 0 {
  1191. std := getStd(ObjToString(s["branch_company_id"]))
  1192. s["company_city"] = std["company_city"]
  1193. s["company_area"] = std["company_area"]
  1194. s["company_district"] = std["company_district"]
  1195. s["credit_no"] = std["credit_no"]
  1196. s["company_status"] = std["company_status"]
  1197. data = append(data, s)
  1198. } else {
  1199. data = append(data, s)
  1200. }
  1201. // 最后一个sheet
  1202. tmp := []interface{}{L0, s["branch_name"], 1, s["company_status"], s["credit_no"], s["company_area"], s["company_city"], s["company_district"]}
  1203. if !IsContained(tmp, lastRes[L0]) {
  1204. lastRes[L0] = append(lastRes[L0], tmp)
  1205. }
  1206. if GF.Env.Savecoll != "" {
  1207. //savePool <- s
  1208. delete(s, "_id")
  1209. Mgo.Save(GF.Env.Savecoll, s)
  1210. }
  1211. }
  1212. return data
  1213. }
  1214. // dealPsub 处理分支机构上级数据
  1215. func dealPsubs(ss []map[string]interface{}) []map[string]interface{} {
  1216. var data = make([]map[string]interface{}, 0)
  1217. for _, s := range ss {
  1218. if s["company_id"] == nil || s["company_id"] == "" {
  1219. continue
  1220. }
  1221. std := getStd(ObjToString(s["company_id"]))
  1222. s["company_name"] = std["company_name"]
  1223. if GF.Env.City > 0 {
  1224. s["company_city"] = std["company_city"]
  1225. s["company_area"] = std["company_area"]
  1226. s["company_district"] = std["company_district"]
  1227. s["company_status"] = std["company_status"]
  1228. s["credit_no"] = std["credit_no"]
  1229. s["wcc_type"] = 4
  1230. data = append(data, s)
  1231. } else {
  1232. s["wcc_type"] = 4
  1233. data = append(data, s)
  1234. }
  1235. if GF.Env.Savecoll != "" {
  1236. //savePool <- s
  1237. delete(s, "_id")
  1238. Mgo.Save(GF.Env.Savecoll, s)
  1239. }
  1240. var company_name, company_status, credit_no, company_area, company_city, company_district string
  1241. if s["company_name"] != nil {
  1242. company_name = s["company_name"].(string)
  1243. }
  1244. if s["company_status"] != nil {
  1245. company_status = s["company_status"].(string)
  1246. }
  1247. if s["credit_no"] != nil {
  1248. credit_no = s["credit_no"].(string)
  1249. }
  1250. if s["company_area"] != nil {
  1251. company_area = s["company_area"].(string)
  1252. }
  1253. if s["company_city"] != nil {
  1254. company_city = s["company_city"].(string)
  1255. }
  1256. if s["company_district"] != nil {
  1257. company_district = s["company_district"].(string)
  1258. }
  1259. tmp := []interface{}{L0, company_name, company_status, credit_no, company_area, company_city, company_district}
  1260. if !IsContained(tmp, lastRes[L0]) {
  1261. lastRes[L0] = append(lastRes[L0], tmp)
  1262. }
  1263. }
  1264. return data
  1265. }
  1266. // dealProportion 处理投资比例,并倒序排序
  1267. func dealProportion(ss []map[string]interface{}) []map[string]interface{} {
  1268. var data = make([]map[string]interface{}, 0)
  1269. //1.转换成float
  1270. for _, v := range ss {
  1271. if v["company_name"] == nil {
  1272. continue
  1273. }
  1274. if proportion, ok := v["stock_proportion"]; ok {
  1275. va := reflect.ValueOf(proportion)
  1276. switch va.Kind() {
  1277. case reflect.String:
  1278. proportionD, _ := strconv.ParseFloat(proportion.(string), 64)
  1279. v["stock_proportion"] = proportionD
  1280. data = append(data, v)
  1281. case reflect.Float64:
  1282. v["stock_proportion"] = proportion
  1283. data = append(data, v)
  1284. }
  1285. }
  1286. }
  1287. //2. 排序,倒序排序
  1288. sort.Slice(data, func(i, j int) bool {
  1289. proportion, _ := data[i]["stock_proportion"].(float64)
  1290. proportion2, _ := data[j]["stock_proportion"].(float64)
  1291. return proportion > proportion2
  1292. })
  1293. return data
  1294. }