main.go 43 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457
  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. subtitles = append(subtitles, "法人代表", "注册资金")
  735. subkeys = append(subkeys, "legal_person", "capital")
  736. } else {
  737. subtitles = append(subtitles, "来源公司")
  738. }
  739. // 设置一次表头
  740. if line == 0 {
  741. line++
  742. //设置第一行title
  743. err = xlsx.SetSheetRow(sheet, fmt.Sprintf("%s%d", "C", line), &subtitles)
  744. if err != nil {
  745. log.Error("setInvest ", log.Any("SetSheetRow", err))
  746. return
  747. }
  748. }
  749. for _, data := range subs {
  750. line++
  751. subvalus := make([]interface{}, 0)
  752. subvalus = append(subvalus, L0)
  753. for _, key := range subkeys {
  754. subvalus = append(subvalus, data[key])
  755. }
  756. subvalus = append(subvalus, name)
  757. err = xlsx.SetSheetRow(sheet, fmt.Sprintf("%s%d", "C", line), &subvalus)
  758. if err != nil {
  759. log.Debug("set sheetrow line err", log.Any(fmt.Sprintf("%s%d", "A", line), err))
  760. return
  761. }
  762. _ = xlsx.SetCellStyle(sheet, fmt.Sprintf("%s%d", "C", line), "BA"+strconv.Itoa(line), styleOne)
  763. }
  764. //
  765. //xlsx.Path = exportFile
  766. //xlsx.Save()
  767. }
  768. return
  769. }
  770. func setInvestP(xlsx *excelize.File, subs []map[string]interface{}, name, sheet string, li int) (err error, line int) {
  771. line = li
  772. if len(subs) > 0 {
  773. styleOne, _ := xlsx.NewStyle(
  774. &excelize.Style{
  775. Alignment: &excelize.Alignment{
  776. Horizontal: "left",
  777. Vertical: "left",
  778. },
  779. },
  780. )
  781. xlsx.NewSheet(sheet)
  782. xlsx.DeleteSheet("Sheet1")
  783. _ = xlsx.SetColWidth(sheet, "C", "G", 20)
  784. _ = xlsx.SetRowHeight(sheet, line, 20)
  785. subtitles := []interface{}{"L2", "企业名称", "统一社会信用代码", "股东类型", "股东名称", "占股比例"}
  786. subkeys := []string{"company_name", "credit_no", "stock_type", "stock_name", "stock_proportion"}
  787. if GF.Env.City > 0 {
  788. subtitles = append(subtitles, "省份", "城市", "区域/街道", "来源公司")
  789. subkeys = append(subkeys, "company_area", "company_city", "company_district")
  790. } else {
  791. subtitles = append(subtitles, "来源公司")
  792. }
  793. // 设置一次表头
  794. if line == 0 {
  795. line++
  796. //设置第一行title
  797. err = xlsx.SetSheetRow(sheet, fmt.Sprintf("%s%d", "C", line), &subtitles)
  798. if err != nil {
  799. log.Error("setInvest ", log.Any("SetSheetRow", err))
  800. return
  801. }
  802. }
  803. for _, data := range subs {
  804. line++
  805. subvalus := make([]interface{}, 0)
  806. subvalus = append(subvalus, L0)
  807. for _, key := range subkeys {
  808. var value interface{}
  809. if key == "credit_no" {
  810. base := getCompany(name)
  811. value = base["credit_no"]
  812. } else {
  813. value = data[key]
  814. }
  815. subvalus = append(subvalus, value)
  816. }
  817. subvalus = append(subvalus, name)
  818. err = xlsx.SetSheetRow(sheet, fmt.Sprintf("%s%d", "C", line), &subvalus)
  819. if err != nil {
  820. log.Debug("set sheetrow line err", log.Any(fmt.Sprintf("%s%d", "A", line), err))
  821. return
  822. }
  823. _ = xlsx.SetCellStyle(sheet, fmt.Sprintf("%s%d", "C", line), "BA"+strconv.Itoa(line), styleOne)
  824. }
  825. }
  826. return
  827. }
  828. // getSubCompany 获取分支机构
  829. func getSubCompany(companyId string) (res []map[string]interface{}) {
  830. q := map[string]interface{}{"company_id": companyId, "use_flag": 0}
  831. info, _ := Mgo.Find("company_branch", q, nil, nil, false, -1, -1)
  832. return *info
  833. }
  834. // getInvests 获取对外投资公司
  835. func getInvests(companyId string) []map[string]interface{} {
  836. q := map[string]interface{}{"stock_name_id": companyId, "use_flag": 0, "is_history": 0}
  837. info, _ := Mgo.Find("company_partner", q, nil, nil, false, -1, -1)
  838. return *info
  839. }
  840. // getParents 获取母公司
  841. func getParentsByBranch(companyId string) (res []map[string]interface{}) {
  842. q := map[string]interface{}{"branch_company_id": companyId, "use_flag": 0}
  843. info, _ := Mgo.Find("company_branch", q, nil, nil, false, -1, -1)
  844. return *info
  845. }
  846. // getParentsByPartner 获取母公司
  847. func getParentsByPartner(companyId string) (res []map[string]interface{}) {
  848. q := map[string]interface{}{"company_id": companyId, "use_flag": 0, "is_history": 0}
  849. info, _ := Mgo.Find("company_partner", q, nil, nil, false, -1, -1)
  850. return *info
  851. }
  852. // getCompany 获取公司基本信息
  853. func getCompany(name string) (res map[string]interface{}) {
  854. info, _ := Mgo.FindOne("company_base", map[string]interface{}{"company_name": name})
  855. return *info
  856. }
  857. // getHistory 根据曾用名查看历史
  858. func getHistory(historyName string) (res map[string]interface{}) {
  859. info, _ := Mgo.Find("company_history_name", map[string]interface{}{"history_name": historyName}, map[string]interface{}{"update_time": -1}, nil, true, -1, 1)
  860. for _, v := range *info {
  861. res = v
  862. }
  863. return
  864. }
  865. func dealName(name string) string {
  866. name = strings.Replace(name, "(", "(", -1)
  867. name = strings.Replace(name, ")", ")", -1)
  868. return name
  869. }
  870. // getCompanyById 获取公司
  871. func getCompanyById(id string) (res map[string]interface{}) {
  872. info, _ := Mgo.FindOne("company_base", map[string]interface{}{"company_id": id, "use_flag": 0})
  873. return *info
  874. }
  875. // readCompany 读取文件获取企业名称
  876. func readCompany() {
  877. //读取文件
  878. f, err := excelize.OpenFile(GF.Readfile.Path)
  879. if err != nil {
  880. fmt.Println(err)
  881. return
  882. }
  883. defer func() {
  884. if err := f.Close(); err != nil {
  885. fmt.Println(err)
  886. }
  887. }()
  888. rows, err := f.GetRows("Sheet1")
  889. if err != nil {
  890. fmt.Println(err)
  891. return
  892. }
  893. seen := make(map[string]bool)
  894. for i := 1; i < len(rows); i++ {
  895. if len(rows[i]) > 0 {
  896. name := rows[i][0]
  897. if !seen[name] {
  898. seen[name] = true
  899. L0names = append(L0names, name)
  900. }
  901. l2name := rows[i][1]
  902. compares = append(compares, l2name)
  903. datas := LastData[name]
  904. datas = append(datas, []interface{}{name, l2name})
  905. LastData[name] = datas
  906. }
  907. }
  908. //for _, v := range L0names {
  909. // //fmt.Println(v, "->", LastData[v])
  910. // fmt.Println(v, "->", len(LastData[v]))
  911. // //oldData := LastData[v]
  912. //
  913. // //for _, v2 := range oldData {
  914. // // if v2d, ok := v2.([]interface{}); ok {
  915. // // fmt.Println(v2d)
  916. // // }
  917. // //}
  918. //
  919. //}
  920. return
  921. }
  922. // readCompare 读取排除企业名单
  923. func readCompare() (names []string) {
  924. //读取文件
  925. f, err := excelize.OpenFile(GF.Readfile.Path)
  926. if err != nil {
  927. fmt.Println(err)
  928. return
  929. }
  930. defer func() {
  931. if err := f.Close(); err != nil {
  932. fmt.Println(err)
  933. }
  934. }()
  935. rows, err := f.GetRows("Sheet1")
  936. if err != nil {
  937. fmt.Println(err)
  938. return
  939. }
  940. //seen := make(map[string]bool)
  941. for i := 1; i < len(rows); i++ {
  942. if len(rows[i]) > 0 {
  943. name := rows[i][1]
  944. names = append(names, dealName(name))
  945. }
  946. }
  947. return
  948. }
  949. // setCellContentLink 设置单元格内容和超链接
  950. func setCellContentLink(xlsx *excelize.File, data []map[string]string) {
  951. for _, v := range data {
  952. //fmt.Println(v)
  953. xlsx.SetCellValue(ObjToString(v["sheet"]), ObjToString(v["cell"]), ObjToString(v["value"]))
  954. style, _ := xlsx.NewStyle(&excelize.Style{
  955. Font: &excelize.Font{Color: "1265BE", Underline: "single"},
  956. })
  957. xlsx.SetCellStyle(ObjToString(v["sheet"]), ObjToString(v["cell"]), ObjToString(v["cell"]), style)
  958. xlsx.SetCellHyperLink(ObjToString(v["sheet"]), ObjToString(v["cell"]), ObjToString(v["addr"]), "Location")
  959. //setCellContentLink(v["sheet"], v["cell"], v["addr"], v["value"])
  960. }
  961. }
  962. // parsePartner 处理 投资公司,添加省市区字段
  963. func getStd(id string) (res map[string]interface{}) {
  964. filter := bson.M{"_id": id}
  965. info, _ := MgoQ.FindOne("qyxy_std", filter)
  966. return *info
  967. }
  968. func getStdByName(name string) (res map[string]interface{}) {
  969. filter := bson.M{"company_name": name}
  970. info, _ := MgoQ.FindOne("qyxy_std", filter)
  971. return *info
  972. }
  973. // dealInves 针对 投资公司下级,做排序,过滤处理
  974. func dealInves(ss []map[string]interface{}) []map[string]interface{} {
  975. data := dealProportion(ss)
  976. if len(data) > 0 {
  977. var invest1 = make([]map[string]interface{}, 0)
  978. for _, v := range data {
  979. v["wcc_type"] = 1
  980. //需要排除右侧企业时
  981. //if GF.Env.Compare > 0 && len(compares) > 0 {
  982. // if IsInStringArray(v["company_name"].(string), compares) {
  983. // continue
  984. // }
  985. //}
  986. proportion, _ := v["stock_proportion"].(float64)
  987. //1.大于0.5
  988. if proportion >= GF.Env.Proportion {
  989. if GF.Env.City > 0 {
  990. std := getStd(ObjToString(v["company_id"]))
  991. v["company_city"] = std["company_city"]
  992. v["company_area"] = std["company_area"]
  993. v["company_district"] = std["company_district"]
  994. v["company_status"] = std["company_status"]
  995. v["credit_no"] = std["credit_no"]
  996. v["legal_person"] = std["legal_person"] //法人代表
  997. v["capital"] = std["capital"] // 注册资金
  998. }
  999. if !isInMapArray(v, invest1) {
  1000. invest1 = append(invest1, v)
  1001. }
  1002. }
  1003. //else {
  1004. // //2.小于0.34 直接过滤
  1005. // if proportion < 0.34 {
  1006. // continue
  1007. // }
  1008. // //3. 找到所有上级,判断是否是最大投资股东
  1009. // pars := getParentsByPartner(v["company_id"].(string))
  1010. // if len(pars) > 0 {
  1011. // pares := dealProportion(pars)
  1012. // if pares[0]["stock_name_id"] != v["company_id"] {
  1013. // continue
  1014. // }
  1015. // }
  1016. // //3.投资比例大于0.34,并且是最大股东,才展示
  1017. // if GF.Env.City > 0 {
  1018. // std := getStd(ObjToString(v["company_id"]))
  1019. // v["company_city"] = std["company_city"]
  1020. // v["company_area"] = std["company_area"]
  1021. // v["company_district"] = std["company_district"]
  1022. // v["company_status"] = std["company_status"]
  1023. // v["credit_no"] = std["credit_no"]
  1024. // }
  1025. // if !isInMapArray(v, invest1) {
  1026. // invest1 = append(invest1, v)
  1027. // }
  1028. //}
  1029. }
  1030. for _, v := range invest1 {
  1031. var company_name, company_status, credit_no, company_area, company_city, company_district string
  1032. if v["company_name"] != nil {
  1033. company_name = v["company_name"].(string)
  1034. }
  1035. if v["company_status"] != nil {
  1036. company_status = v["company_status"].(string)
  1037. }
  1038. if v["credit_no"] != nil {
  1039. credit_no = v["credit_no"].(string)
  1040. }
  1041. if v["company_area"] != nil {
  1042. company_area = v["company_area"].(string)
  1043. }
  1044. if v["company_city"] != nil {
  1045. company_city = v["company_city"].(string)
  1046. }
  1047. if v["company_district"] != nil {
  1048. company_district = v["company_district"].(string)
  1049. }
  1050. tmp := []interface{}{L0, company_name, v["stock_proportion"], company_status, credit_no, company_area, company_city, company_district, v["legal_person"], v["capital"]}
  1051. if !IsContained(tmp, lastRes[L0]) {
  1052. lastRes[L0] = append(lastRes[L0], tmp)
  1053. }
  1054. if GF.Env.Savecoll != "" {
  1055. delete(v, "_id")
  1056. Mgo.Save(GF.Env.Savecoll, v)
  1057. }
  1058. }
  1059. return invest1
  1060. }
  1061. return []map[string]interface{}{}
  1062. }
  1063. // dealPinves 处理投资上级数据
  1064. func dealPinves(ss []map[string]interface{}, level int) ([]map[string]interface{}, bool) {
  1065. var data = make([]map[string]interface{}, 0)
  1066. var res = make([]map[string]interface{}, 0)
  1067. isbreak := false
  1068. for _, v := range ss {
  1069. if v["stock_name"] == nil {
  1070. continue
  1071. }
  1072. if proportion, ok := v["stock_proportion"]; ok {
  1073. va := reflect.ValueOf(proportion)
  1074. switch va.Kind() {
  1075. case reflect.String:
  1076. proportionD, _ := strconv.ParseFloat(proportion.(string), 64)
  1077. v["stock_proportion"] = proportionD
  1078. data = append(data, v)
  1079. case reflect.Float64:
  1080. v["stock_proportion"] = proportion
  1081. data = append(data, v)
  1082. }
  1083. }
  1084. }
  1085. if len(data) > 0 {
  1086. sort.Slice(data, func(i, j int) bool {
  1087. proportion, _ := data[i]["stock_proportion"].(float64)
  1088. proportion2, _ := data[j]["stock_proportion"].(float64)
  1089. return proportion > proportion2
  1090. })
  1091. for _, v := range data {
  1092. v["wcc_type"] = 2
  1093. if v["stock_name"] == nil {
  1094. continue
  1095. }
  1096. if v["stock_name_id"] == nil {
  1097. isbreak = true
  1098. }
  1099. if GF.Env.Compare > 0 && len(compares) > 0 {
  1100. if IsInStringArray(v["company_name"].(string), compares) {
  1101. continue
  1102. }
  1103. }
  1104. proportion, _ := v["stock_proportion"].(float64)
  1105. if proportion >= GF.Env.Proportion {
  1106. if GF.Env.City > 0 {
  1107. std := getStd(ObjToString(v["stock_name_id"]))
  1108. v["company_city"] = std["company_city"]
  1109. v["company_area"] = std["company_area"]
  1110. v["company_district"] = std["company_district"]
  1111. v["company_status"] = std["company_status"]
  1112. v["credit_no"] = std["credit_no"]
  1113. }
  1114. //投资公司是他本身时,停止
  1115. if v["stock_name"] == L0 {
  1116. isbreak = true
  1117. }
  1118. res = append(res, v)
  1119. break
  1120. } else {
  1121. isbreak = true
  1122. v["is_break"] = true
  1123. if level == 1 {
  1124. break
  1125. }
  1126. if GF.Env.City > 0 {
  1127. std := getStd(ObjToString(v["stock_name_id"]))
  1128. v["company_city"] = std["company_city"]
  1129. v["company_area"] = std["company_area"]
  1130. v["company_district"] = std["company_district"]
  1131. v["company_status"] = std["company_status"]
  1132. v["credit_no"] = std["credit_no"]
  1133. }
  1134. res = append(res, v)
  1135. if GF.Env.Savecoll != "" {
  1136. //savePool <- v
  1137. delete(v, "_id")
  1138. Mgo.Save(GF.Env.Savecoll, v)
  1139. }
  1140. break
  1141. }
  1142. }
  1143. // 最后一个sheet
  1144. if len(res) > 0 {
  1145. for _, v := range res {
  1146. 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 {
  1147. var company_name, company_status, credit_no, company_area, company_city, company_district string
  1148. if v["company_name"] != nil {
  1149. company_name = v["company_name"].(string)
  1150. }
  1151. if v["company_status"] != nil {
  1152. company_status = v["company_status"].(string)
  1153. }
  1154. if v["credit_no"] != nil {
  1155. credit_no = v["credit_no"].(string)
  1156. }
  1157. if v["company_area"] != nil {
  1158. company_area = v["company_area"].(string)
  1159. }
  1160. if v["company_city"] != nil {
  1161. company_city = v["company_city"].(string)
  1162. }
  1163. if v["company_district"] != nil {
  1164. company_district = v["company_district"].(string)
  1165. }
  1166. tmp := []interface{}{L0, company_name, company_status, credit_no, company_area, company_city, company_district}
  1167. if !IsContained(tmp, lastRes[L0]) {
  1168. if level > 1 {
  1169. lastRes[L0] = append(lastRes[L0], tmp)
  1170. }
  1171. }
  1172. }
  1173. }
  1174. }
  1175. }
  1176. return res, isbreak
  1177. }
  1178. // dealSubs 处理分支机构下级数据
  1179. func dealSubs(ss []map[string]interface{}) []map[string]interface{} {
  1180. var data = make([]map[string]interface{}, 0)
  1181. for _, s := range ss {
  1182. if s["branch_name"] == nil || s["branch_name"] == "" {
  1183. continue
  1184. }
  1185. if GF.Env.Compare > 0 && len(compares) > 0 {
  1186. if IsInStringArray(s["branch_name"].(string), compares) {
  1187. continue
  1188. }
  1189. }
  1190. if util.ObjToString(s["company_status"]) == "已吊销" || util.ObjToString(s["company_status"]) == "吊销" || util.ObjToString(s["company_status"]) == "注销" {
  1191. continue
  1192. }
  1193. s["wcc_type"] = 3
  1194. if GF.Env.City > 0 {
  1195. std := getStd(ObjToString(s["branch_company_id"]))
  1196. s["company_city"] = std["company_city"]
  1197. s["company_area"] = std["company_area"]
  1198. s["company_district"] = std["company_district"]
  1199. s["credit_no"] = std["credit_no"]
  1200. s["company_status"] = std["company_status"]
  1201. data = append(data, s)
  1202. } else {
  1203. data = append(data, s)
  1204. }
  1205. // 最后一个sheet
  1206. tmp := []interface{}{L0, s["branch_name"], 1, s["company_status"], s["credit_no"], s["company_area"], s["company_city"], s["company_district"]}
  1207. if !IsContained(tmp, lastRes[L0]) {
  1208. lastRes[L0] = append(lastRes[L0], tmp)
  1209. }
  1210. if GF.Env.Savecoll != "" {
  1211. //savePool <- s
  1212. delete(s, "_id")
  1213. Mgo.Save(GF.Env.Savecoll, s)
  1214. }
  1215. }
  1216. return data
  1217. }
  1218. // dealPsub 处理分支机构上级数据
  1219. func dealPsubs(ss []map[string]interface{}) []map[string]interface{} {
  1220. var data = make([]map[string]interface{}, 0)
  1221. for _, s := range ss {
  1222. if s["company_id"] == nil || s["company_id"] == "" {
  1223. continue
  1224. }
  1225. std := getStd(ObjToString(s["company_id"]))
  1226. s["company_name"] = std["company_name"]
  1227. if GF.Env.City > 0 {
  1228. s["company_city"] = std["company_city"]
  1229. s["company_area"] = std["company_area"]
  1230. s["company_district"] = std["company_district"]
  1231. s["company_status"] = std["company_status"]
  1232. s["credit_no"] = std["credit_no"]
  1233. s["wcc_type"] = 4
  1234. data = append(data, s)
  1235. } else {
  1236. s["wcc_type"] = 4
  1237. data = append(data, s)
  1238. }
  1239. if GF.Env.Savecoll != "" {
  1240. //savePool <- s
  1241. delete(s, "_id")
  1242. Mgo.Save(GF.Env.Savecoll, s)
  1243. }
  1244. var company_name, company_status, credit_no, company_area, company_city, company_district string
  1245. if s["company_name"] != nil {
  1246. company_name = s["company_name"].(string)
  1247. }
  1248. if s["company_status"] != nil {
  1249. company_status = s["company_status"].(string)
  1250. }
  1251. if s["credit_no"] != nil {
  1252. credit_no = s["credit_no"].(string)
  1253. }
  1254. if s["company_area"] != nil {
  1255. company_area = s["company_area"].(string)
  1256. }
  1257. if s["company_city"] != nil {
  1258. company_city = s["company_city"].(string)
  1259. }
  1260. if s["company_district"] != nil {
  1261. company_district = s["company_district"].(string)
  1262. }
  1263. tmp := []interface{}{L0, company_name, company_status, credit_no, company_area, company_city, company_district}
  1264. if !IsContained(tmp, lastRes[L0]) {
  1265. lastRes[L0] = append(lastRes[L0], tmp)
  1266. }
  1267. }
  1268. return data
  1269. }
  1270. // dealProportion 处理投资比例,并倒序排序
  1271. func dealProportion(ss []map[string]interface{}) []map[string]interface{} {
  1272. var data = make([]map[string]interface{}, 0)
  1273. //1.转换成float
  1274. for _, v := range ss {
  1275. if v["company_name"] == nil {
  1276. continue
  1277. }
  1278. if proportion, ok := v["stock_proportion"]; ok {
  1279. va := reflect.ValueOf(proportion)
  1280. switch va.Kind() {
  1281. case reflect.String:
  1282. proportionD, _ := strconv.ParseFloat(proportion.(string), 64)
  1283. v["stock_proportion"] = proportionD
  1284. data = append(data, v)
  1285. case reflect.Float64:
  1286. v["stock_proportion"] = proportion
  1287. data = append(data, v)
  1288. }
  1289. }
  1290. }
  1291. //2. 排序,倒序排序
  1292. sort.Slice(data, func(i, j int) bool {
  1293. proportion, _ := data[i]["stock_proportion"].(float64)
  1294. proportion2, _ := data[j]["stock_proportion"].(float64)
  1295. return proportion > proportion2
  1296. })
  1297. return data
  1298. }