main.go 43 KB

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