xlsx_test.go 74 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630
  1. package main
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. "github.com/olivere/elastic/v7"
  7. "github.com/xuri/excelize/v2"
  8. "go.mongodb.org/mongo-driver/bson"
  9. "go.mongodb.org/mongo-driver/mongo"
  10. "go.mongodb.org/mongo-driver/mongo/options"
  11. util "jygit.jydev.jianyu360.cn/data_processing/common_utils"
  12. "jygit.jydev.jianyu360.cn/data_processing/common_utils/mongodb"
  13. "log"
  14. "os"
  15. "regexp"
  16. "strconv"
  17. "strings"
  18. "testing"
  19. "time"
  20. )
  21. var (
  22. // 正则表达式
  23. provinceRe = regexp.MustCompile(`(?P<province>[^省自治区特别行政区]+省|[^省自治区特别行政区]+自治区|[^省自治区特别行政区]+特别行政区|北京|天津|上海|重庆)`)
  24. cityRe = regexp.MustCompile(`(?P<city>[^市州盟地区]+市|[^市州盟地区]+州|[^市州盟地区]+盟|[^市州盟地区]+地区|[^市州盟地区]+自治州)`)
  25. countyRe = regexp.MustCompile(`(?P<county>[^县区旗]+县|[^县区旗]+区|[^县区旗]+旗|[^县区旗]+自治县|[^县区旗]+自治旗)`)
  26. )
  27. func Test2222(T *testing.T) {
  28. filePath := "大气-企业类型程序抽取全为民企-实际核查有非民企0714.xlsx"
  29. // 打开文件
  30. f, err := excelize.OpenFile(filePath)
  31. if err != nil {
  32. panic(err)
  33. }
  34. // 遍历 Sheet1,每行拿 B/C 列去匹配
  35. sheet1Rows, err := f.GetRows("Sheet1")
  36. if err != nil {
  37. panic(err)
  38. }
  39. //181 凭安库
  40. Mgo181 := &mongodb.MongodbSim{
  41. //MongodbAddr: "172.17.4.181:27001",
  42. MongodbAddr: "127.0.0.1:27001",
  43. DbName: "mixdata",
  44. Size: 10,
  45. UserName: "",
  46. Password: "",
  47. Direct: true,
  48. }
  49. Mgo181.InitPool()
  50. for i, row := range sheet1Rows {
  51. if i < 1 {
  52. continue
  53. }
  54. name := row[0]
  55. log.Println(name)
  56. where := map[string]interface{}{
  57. "company_name": name,
  58. "use_flag": 0,
  59. }
  60. base, _ := Mgo181.FindOne("company_base", where)
  61. }
  62. }
  63. func TestXlsx2(T *testing.T) {
  64. filePath := "中国政府机构目录树0425.xlsx"
  65. // 打开文件
  66. f, err := excelize.OpenFile(filePath)
  67. if err != nil {
  68. panic(err)
  69. }
  70. // 读取 Sheet2 所有行数据
  71. sheet2Rows, err := f.GetRows("爬取网站清单")
  72. if err != nil {
  73. panic(err)
  74. }
  75. // 提取 Sheet2 中每行的 B/F/G 字段组合为字符串数组
  76. var sheet2Lines []string
  77. domains := make([]string, 0)
  78. for k, row := range sheet2Rows {
  79. if k == 0 {
  80. continue
  81. }
  82. var parts []string
  83. if len(row) > 0 && row[0] != "" { // A 列
  84. parts = append(parts, row[0])
  85. }
  86. if len(row) > 1 && row[1] != "" { // B 列
  87. parts = append(parts, row[1])
  88. }
  89. if len(row) > 5 && row[5] != "" { // F 列
  90. parts = append(parts, row[5])
  91. }
  92. if len(row) > 6 && row[6] != "" { // G 列(可能没有)
  93. parts = append(parts, row[6])
  94. }
  95. sheet2Lines = append(sheet2Lines, strings.Join(parts, " "))
  96. domains = append(domains, row[4])
  97. }
  98. // 遍历 Sheet1,每行拿 B/C 列去匹配
  99. sheet1Rows, err := f.GetRows("组织架构带层级")
  100. if err != nil {
  101. panic(err)
  102. }
  103. for i, row := range sheet1Rows {
  104. if i <= 3 {
  105. continue // 跳过标题行
  106. }
  107. if i%100 == 0 {
  108. log.Println("current", i)
  109. }
  110. var match bool
  111. province, city, county, mainPart := row[4], row[5], row[6], row[7]
  112. if mainPart == "" {
  113. continue
  114. }
  115. domain := ""
  116. for k, line := range sheet2Lines {
  117. if !strings.Contains(line, mainPart) {
  118. continue
  119. }
  120. if strings.Contains(mainPart, "社保中心") {
  121. mainPart = strings.ReplaceAll(mainPart, "社保中心", "人力资源和社会保障局")
  122. }
  123. if !strings.Contains(line, mainPart) {
  124. continue
  125. }
  126. //区县不为空
  127. if county != "" {
  128. if strings.Contains(line, county) {
  129. match = true
  130. domain = domains[k]
  131. break
  132. }
  133. } else {
  134. if city != "" {
  135. if strings.Contains(line, city) {
  136. match = true
  137. domain = domains[k]
  138. break
  139. }
  140. } else {
  141. if province != "" {
  142. if strings.Contains(line, province) {
  143. match = true
  144. domain = domains[k]
  145. break
  146. }
  147. } else {
  148. match = true
  149. domain = domains[k]
  150. break
  151. }
  152. }
  153. }
  154. }
  155. // 如果匹配成功,在 H 列写入 “是”
  156. if match {
  157. f.SetCellValue("组织架构带层级", fmt.Sprintf("I%d", i+1), "是")
  158. f.SetCellValue("组织架构带层级", fmt.Sprintf("J%d", i+1), domain)
  159. }
  160. }
  161. // 保存文件
  162. if err := f.Save(); err != nil {
  163. panic(err)
  164. }
  165. fmt.Println("TestXlsx2 匹配完成")
  166. }
  167. // 提取行政区划信息
  168. func extractRegionInfo1(name string) (province, city, county, mainPart string) {
  169. original := name
  170. // 提取省
  171. provinceMatch := provinceRe.FindString(name)
  172. if provinceMatch != "" {
  173. province = provinceMatch
  174. name = strings.Replace(name, provinceMatch, "", 1)
  175. }
  176. // 提取市
  177. cityMatch := cityRe.FindString(name)
  178. if cityMatch != "" {
  179. city = cityMatch
  180. name = strings.Replace(name, cityMatch, "", 1)
  181. }
  182. // 提取区县
  183. countyMatch := countyRe.FindString(name)
  184. if countyMatch != "" {
  185. county = countyMatch
  186. name = strings.Replace(name, countyMatch, "", 1)
  187. }
  188. mainPart = strings.TrimSpace(name)
  189. // 若全部都没提取到,则主干就是原始内容
  190. if province == "" && city == "" && county == "" {
  191. mainPart = original
  192. }
  193. return
  194. }
  195. func extractRegionInfo(name string) (province, city, county, mainPart string) {
  196. //original := name
  197. // 提取省
  198. provinceMatch := provinceRe.FindString(name)
  199. if provinceMatch != "" {
  200. province = provinceMatch
  201. name = strings.Replace(name, provinceMatch, "", 1)
  202. }
  203. // 提取市
  204. cityMatch := cityRe.FindString(name)
  205. if cityMatch != "" {
  206. city = cityMatch
  207. name = strings.Replace(name, cityMatch, "", 1)
  208. }
  209. // 提取区县
  210. countyMatch := countyRe.FindString(name)
  211. if countyMatch != "" {
  212. county = countyMatch
  213. name = strings.Replace(name, countyMatch, "", 1)
  214. }
  215. mainPart = strings.TrimSpace(name)
  216. // 若没有省市县,尝试去掉国家级前缀
  217. if province == "" && city == "" && county == "" {
  218. prefixes := []string{
  219. "中华人民共和国",
  220. "中国",
  221. "国家",
  222. "国务院",
  223. }
  224. for _, prefix := range prefixes {
  225. if strings.HasPrefix(mainPart, prefix) {
  226. mainPart = strings.TrimPrefix(mainPart, prefix)
  227. break
  228. }
  229. }
  230. mainPart = strings.TrimSpace(mainPart)
  231. }
  232. return
  233. }
  234. func TestXlsx(T *testing.T) {
  235. filePath := "中国政府机构目录树0425.xlsx"
  236. // 打开文件
  237. f, err := excelize.OpenFile(filePath)
  238. if err != nil {
  239. panic(err)
  240. }
  241. // 遍历 Sheet1,每行拿 B/C 列去匹配
  242. sheet1Rows, err := f.GetRows("组织架构带层级")
  243. if err != nil {
  244. panic(err)
  245. }
  246. for i, row := range sheet1Rows {
  247. if i <= 1 {
  248. continue // 跳过标题行
  249. }
  250. if i%100 == 0 {
  251. log.Println("current", i)
  252. }
  253. if len(row) < 4 || row[3] == "" {
  254. continue
  255. }
  256. name := row[3]
  257. province, city, county, mainPart := extractRegionInfo(name)
  258. if province != "" && row[4] == "" {
  259. cell := fmt.Sprintf("E%d", i+1)
  260. f.SetCellValue("组织架构带层级", cell, strings.ReplaceAll(province, "省", ""))
  261. }
  262. if city != "" && row[5] == "" {
  263. cell := fmt.Sprintf("F%d", i+1)
  264. f.SetCellValue("组织架构带层级", cell, city)
  265. }
  266. if county != "" && row[6] == "" {
  267. cell := fmt.Sprintf("G%d", i+1)
  268. f.SetCellValue("组织架构带层级", cell, county)
  269. }
  270. if mainPart != "" {
  271. cell := fmt.Sprintf("H%d", i+1)
  272. f.SetCellValue("组织架构带层级", cell, mainPart)
  273. }
  274. }
  275. // 保存文件
  276. if err := f.Save(); err != nil {
  277. panic(err)
  278. }
  279. }
  280. func TestMatchWeb(T *testing.T) {
  281. filePath := "政府机构--网站碰撞.xlsx"
  282. // 打开文件
  283. f, err := excelize.OpenFile(filePath)
  284. if err != nil {
  285. panic(err)
  286. }
  287. // 读取 Sheet2 所有行数据
  288. sheet2Rows, err := f.GetRows("爬取网站清单")
  289. if err != nil {
  290. panic(err)
  291. }
  292. // 提取 Sheet2 中每行的 B/F/G 字段组合为字符串数组
  293. var sheet2Lines []string
  294. for k, row := range sheet2Rows {
  295. if k == 0 {
  296. continue
  297. }
  298. var parts []string
  299. if len(row) > 1 && row[1] != "" { // B 列
  300. parts = append(parts, row[1])
  301. }
  302. if len(row) > 5 && row[5] != "" { // F 列
  303. parts = append(parts, row[5])
  304. }
  305. if len(row) > 6 && row[6] != "" { // G 列(可能没有)
  306. parts = append(parts, row[6])
  307. }
  308. sheet2Lines = append(sheet2Lines, strings.Join(parts, " "))
  309. }
  310. // 遍历 Sheet1,每行拿 B/C 列去匹配
  311. sheet1Rows, err := f.GetRows("政府机构")
  312. if err != nil {
  313. panic(err)
  314. }
  315. for i, row := range sheet1Rows {
  316. if i <= 1 {
  317. continue // 跳过标题行
  318. }
  319. if i%100 == 0 {
  320. log.Println("current", i)
  321. }
  322. var match bool
  323. var bVal, cVal string
  324. if len(row) > 1 {
  325. bVal = strings.TrimSpace(row[1]) // B列
  326. }
  327. if len(row) > 2 {
  328. cVal = strings.TrimSpace(row[2]) // C列
  329. }
  330. // 用 B 列匹配 Sheet2 所有行
  331. if bVal != "" {
  332. for _, line := range sheet2Lines {
  333. if strings.Contains(line, bVal) {
  334. match = true
  335. break
  336. }
  337. }
  338. }
  339. // 如果 B 匹配失败且 C 有值,再用 C 匹配
  340. if !match && cVal != "" {
  341. for _, line := range sheet2Lines {
  342. if strings.Contains(line, cVal) {
  343. match = true
  344. break
  345. }
  346. if strings.Contains(cVal, "社保中心") {
  347. val2 := strings.ReplaceAll(cVal, "社保中心", "人力资源和社会保障局")
  348. if strings.Contains(line, val2) {
  349. match = true
  350. break
  351. }
  352. }
  353. }
  354. }
  355. // 如果匹配成功,在 H 列写入 “是”
  356. if match {
  357. cell := fmt.Sprintf("H%d", i+1)
  358. f.SetCellValue("政府机构", cell, "是")
  359. }
  360. }
  361. // 保存文件
  362. if err := f.Save(); err != nil {
  363. panic(err)
  364. }
  365. fmt.Println("匹配完成,结果已写入 Sheet1 的 H 列")
  366. }
  367. func TestExportCompanyType(T *testing.T) {
  368. ctx := context.Background()
  369. // MongoDB 连接字符串
  370. username := ""
  371. password := ""
  372. //hosts := []string{"172.17.4.181:27001"}
  373. hosts := []string{"127.0.0.1:27001"}
  374. uri, err := BuildMongoURI(username, password, hosts, nil)
  375. if err != nil {
  376. panic(err)
  377. }
  378. // MongoDB连接
  379. clientOptions := options.Client().ApplyURI(uri)
  380. clientOptions.SetDirect(true)
  381. client, err := mongo.Connect(ctx, clientOptions)
  382. if err != nil {
  383. log.Fatal(err)
  384. }
  385. defer client.Disconnect(ctx)
  386. db := client.Database("mixdata")
  387. collection := db.Collection("company_base")
  388. filter := bson.M{
  389. "company_status": bson.M{"$nin": []string{"注销", "吊销", "已吊销", "已注销"}},
  390. "use_flag": 0,
  391. }
  392. // 查询 distinct company_type
  393. types, err := collection.Distinct(ctx, "company_type", filter)
  394. if err != nil {
  395. log.Fatalf("查询 distinct 失败: %v", err)
  396. }
  397. fmt.Printf("共找到 %d 个 company_type\n", len(types))
  398. // 创建 Excel 文件
  399. f := excelize.NewFile()
  400. sheet := "Sheet1"
  401. // 设置第一行标题
  402. f.SetCellValue(sheet, "A1", "company_type")
  403. // 填写数据
  404. for i, t := range types {
  405. // 强制转成字符串
  406. str, ok := t.(string)
  407. if !ok {
  408. // 如果不是字符串,跳过
  409. continue
  410. }
  411. // Excel 行号从 2 开始
  412. cell := fmt.Sprintf("A%d", i+2)
  413. f.SetCellValue(sheet, cell, str)
  414. }
  415. // 保存 Excel 文件
  416. if err := f.SaveAs("company_types.xlsx"); err != nil {
  417. log.Fatalf("保存 Excel 失败: %v", err)
  418. }
  419. fmt.Println("导出完成,文件名:company_types0711.xlsx")
  420. }
  421. func TestA(T *testing.T) {
  422. Mgo := &mongodb.MongodbSim{
  423. //MongodbAddr: "172.17.189.140:27080",
  424. MongodbAddr: "127.0.0.1:27017",
  425. Size: 10,
  426. DbName: "wcc",
  427. //UserName: "SJZY_RWbid_ES",
  428. //Password: "SJZY@B4i4D5e6S",
  429. //Direct: true,
  430. }
  431. Mgo.InitPool()
  432. f, err := excelize.OpenFile("./拼数据.xlsx")
  433. if err != nil {
  434. fmt.Println(err)
  435. return
  436. }
  437. defer func() {
  438. if err := f.Close(); err != nil {
  439. fmt.Println(err)
  440. }
  441. }()
  442. rows, err := f.GetRows("Sheet1")
  443. if err != nil {
  444. fmt.Println(err)
  445. return
  446. }
  447. cells, _ := f.GetCols("Sheet2")
  448. for i := 1; i < len(rows); i++ {
  449. log.Print(rows[i][3])
  450. if rows[i][2] == "省级" {
  451. for k, v := range cells[0] {
  452. if k == 0 || v == "" {
  453. continue
  454. }
  455. insert := make(map[string]interface{})
  456. insert["top"] = rows[i][0]
  457. insert["area"] = rows[i][3]
  458. insert["level"] = rows[i][2]
  459. insert["sub"] = v
  460. insert["name"] = rows[i][3] + v
  461. Mgo.InsertOrUpdate("wcc", "wcc_0313", insert)
  462. }
  463. }
  464. if rows[i][2] == "市级" {
  465. for k, v := range cells[1] {
  466. if k == 0 || v == "" {
  467. continue
  468. }
  469. insert := make(map[string]interface{})
  470. insert["top"] = rows[i][0]
  471. insert["area"] = rows[i][3]
  472. insert["city"] = rows[i][4]
  473. insert["level"] = rows[i][2]
  474. insert["sub"] = v
  475. insert["name"] = rows[i][4] + v
  476. Mgo.InsertOrUpdate("wcc", "wcc_0313", insert)
  477. }
  478. }
  479. if rows[i][2] == "县级" {
  480. for k, v := range cells[2] {
  481. if k == 0 || v == "" {
  482. continue
  483. }
  484. insert := make(map[string]interface{})
  485. insert["top"] = rows[i][0]
  486. insert["area"] = rows[i][3]
  487. insert["city"] = rows[i][4]
  488. insert["district"] = rows[i][5]
  489. insert["level"] = rows[i][2]
  490. insert["sub"] = v
  491. insert["name"] = rows[i][4] + rows[i][5] + v
  492. Mgo.InsertOrUpdate("wcc", "wcc_0313", insert)
  493. }
  494. }
  495. }
  496. fmt.Println("over")
  497. }
  498. func TestA2(T *testing.T) {
  499. Mgo := &mongodb.MongodbSim{
  500. MongodbAddr: "127.0.0.1:27017",
  501. Size: 10,
  502. DbName: "wcc",
  503. }
  504. Mgo.InitPool()
  505. f, err := excelize.OpenFile("./主体代码表.xlsx")
  506. if err != nil {
  507. fmt.Println(err)
  508. return
  509. }
  510. defer func() {
  511. if err := f.Close(); err != nil {
  512. fmt.Println(err)
  513. }
  514. }()
  515. rows, err := f.GetRows("国民经济行业分类")
  516. if err != nil {
  517. fmt.Println(err)
  518. return
  519. }
  520. for i := 2; i < len(rows); i++ {
  521. log.Print("iii", i)
  522. var top1, top2, top3, top4, name string
  523. if len(rows[i]) <= 0 {
  524. continue
  525. }
  526. if len(rows[i]) > 0 {
  527. top1 = rows[i][0]
  528. }
  529. /**
  530. top2 := rows[i][1]
  531. top3 := rows[i][2]
  532. top4 := rows[i][3]
  533. name := rows[i][4]
  534. */
  535. insert := map[string]interface{}{
  536. "top1": top1,
  537. }
  538. if len(rows[i]) > 1 {
  539. top2 = rows[i][1]
  540. insert["top2"] = top2
  541. }
  542. if len(rows[i]) > 2 {
  543. top3 = rows[i][2]
  544. insert["top2"] = top3
  545. }
  546. if len(rows[i]) > 3 {
  547. top4 = rows[i][3]
  548. insert["top2"] = top4
  549. }
  550. if len(rows[i]) > 4 {
  551. name = rows[i][4]
  552. insert["name"] = name
  553. }
  554. if len(rows[i]) > 5 {
  555. insert["desc"] = rows[i][5]
  556. }
  557. if top4 != "" {
  558. insert["level"] = 4
  559. insert["code"] = top1 + top4
  560. } else if top3 != "" {
  561. insert["level"] = 3
  562. insert["code"] = top1 + top3
  563. } else if top2 != "" {
  564. insert["level"] = 2
  565. insert["code"] = top1 + top2
  566. } else {
  567. insert["level"] = 1
  568. insert["code"] = top1
  569. }
  570. //insert := map[string]interface{}{
  571. // "company_name": rows[i][2],
  572. // "organizer": rows[i][1],
  573. //}
  574. err = Mgo.InsertOrUpdate("wcc", "wcc_national_industries_classification", insert)
  575. if err != nil {
  576. log.Println("err", err)
  577. }
  578. }
  579. fmt.Println("over")
  580. }
  581. func TestB(T *testing.T) {
  582. Mgo := &mongodb.MongodbSim{
  583. //MongodbAddr: "172.17.189.140:27080",
  584. MongodbAddr: "127.0.0.1:27083",
  585. Size: 10,
  586. DbName: "qfw",
  587. UserName: "SJZY_RWbid_ES",
  588. Password: "SJZY@B4i4D5e6S",
  589. Direct: true,
  590. }
  591. Mgo.InitPool()
  592. f, err := excelize.OpenFile("./剑鱼标讯_数据导出.xlsx")
  593. if err != nil {
  594. fmt.Println(err)
  595. return
  596. }
  597. defer func() {
  598. if err := f.Close(); err != nil {
  599. fmt.Println(err)
  600. }
  601. }()
  602. rows, err := f.GetRows("Sheet1")
  603. if err != nil {
  604. fmt.Println(err)
  605. return
  606. }
  607. for i := 1; i < len(rows); i++ {
  608. url := rows[i][2]
  609. log.Println(rows[i][1])
  610. id := GetIdByURL(url)
  611. re, _ := Mgo.FindById("bidding", id, nil)
  612. (*re)["wcc_id"] = i
  613. (*re)["toptype_old"] = (*re)["toptype"]
  614. (*re)["subtype_old"] = (*re)["subtype"]
  615. delete(*re, "toptype")
  616. delete(*re, "subtype")
  617. Mgo.SaveByOriID("wcc_bidding_0518", re)
  618. }
  619. log.Println("over")
  620. }
  621. // TestAAA 处理专项债券数据,导出专项债详情
  622. func TestAAA(t *testing.T) {
  623. //87 竞品
  624. Mgo := &mongodb.MongodbSim{
  625. //MongodbAddr: "172.17.4.87:27080",
  626. MongodbAddr: "127.0.0.1:27081",
  627. Size: 10,
  628. DbName: "py_theme",
  629. UserName: "",
  630. Password: "",
  631. Direct: true,
  632. }
  633. Mgo.InitPool()
  634. sess := Mgo.GetMgoConn()
  635. defer Mgo.DestoryMongoConn(sess)
  636. //f, err := excelize.OpenFile("./山东2024专项债.xlsx")
  637. f, err := excelize.OpenFile("./天津专项债.xlsx")
  638. //detailName := "specialbond_detail_202412" //专项债详细表
  639. detailName := "specialbond_detail" //专项债详细表
  640. if err != nil {
  641. fmt.Println(err)
  642. return
  643. }
  644. defer func() {
  645. f.Save()
  646. if err := f.Close(); err != nil {
  647. fmt.Println(err)
  648. }
  649. }()
  650. rows, err := f.GetRows("项目列表")
  651. if err != nil {
  652. fmt.Println(err)
  653. return
  654. }
  655. keys := []string{"projectName", "totalInvestment", "regionName", "cityName", "countyName", "capital", "applyDebt", "portfolioFinancing", "specialDebtAsCapital",
  656. "expectedReturn", "projectCost", "projectTypeName3", "projectSubject", "startDate", "endDate", "operationStartDate",
  657. "operationEndDate", "sourceIncome", "constructionContent", "remarks", "portfolioFinancingSource", "costIncomePercent", "coverageMultiple", "implementingAgency",
  658. "accountingFirm", "lawFirm", "createTime", "updateTime"}
  659. titles := []string{"项目名称", "总投资(万元)", "省份", "地市", "区县", "不含专项债资本金(万元)", "申请专项债总额(万元)", "其他债务融资(万元)", "专项债作资本金(万元)", "预期收入(万元)", "成本",
  660. "项目领域", "项目业主", "建设期开始", "建设期结束", "运营期开始", "运营期结束", "收入来源", "建设内容", "特殊情况备注", "其他债务融资来源", "成本/收入(%)", "覆盖倍数", "主管部门", "会计所", "律所", "入库时间", "更新时间"}
  661. keys2 := []string{"bondName", "bondShortName", "bondNo", "regionName", "bondType1Name", "bondType2Name", "projectType1Name", "totalAmount", "issueDate", "issuePlaceName", "issueTerm", "issueInterestRate", "issuePhase", "payInterestMethodName",
  662. "newBondAmount", "counterBondAmount", "refinancingBondAmount", "redemptionMethod", "valueDate", "expiryDate", "payInterestDate", "latelyPayInterestDate", "lastPayInterest", "cumulativePayInterest"}
  663. titles2 := []string{"项目名称", "债券名称", "债券简称", "债券编码", "省份", "债券性质", "债券类型", "官方项目类型", "发行金额(万元)", "发行日期", "发行场所", "发行期限(年)", "发行利率(%)", "发行期数", "付息方式", "新增债券(亿元)", "置换债券(亿元)", "再融资债券(亿元)", "赎回方式",
  664. "起息日", "到息日", "付息日", "最近付息日", "上期已付息(亿元)", "累计付息(亿元)"}
  665. line := 0
  666. line++
  667. f.NewSheet("项目详情")
  668. f.NewSheet("债券详情")
  669. bondLine := 0
  670. //设置第一行title
  671. _ = f.SetSheetRow("项目详情", fmt.Sprintf("%s%d", "A", line), &titles)
  672. _ = f.SetSheetRow("债券详情", fmt.Sprintf("%s%d", "A", line), &titles2)
  673. //
  674. for i := 1; i < len(rows); i++ {
  675. projectName := rows[i][0]
  676. //projectName := "新建南通至宁波高速铁路(海盐段)"
  677. if i%10 == 0 {
  678. log.Println("iiii", i, projectName)
  679. }
  680. line++
  681. where := map[string]interface{}{
  682. "project.jcxx.projectName": projectName,
  683. }
  684. detail, _ := Mgo.FindOne(detailName, where)
  685. if len(*detail) == 0 {
  686. continue
  687. }
  688. insert := make([]interface{}, 0)
  689. if project, ok := (*detail)["project"].(map[string]interface{}); ok {
  690. if jcxx, ok := project["jcxx"].(map[string]interface{}); ok {
  691. for _, v := range keys {
  692. insert = append(insert, jcxx[v])
  693. }
  694. }
  695. }
  696. err := f.SetSheetRow("项目详情", fmt.Sprintf("%s%d", "A", line), &insert)
  697. if err != nil {
  698. log.Println(err)
  699. return
  700. }
  701. // 债券基本信息
  702. if bonds, ok := (*detail)["bond"].([]interface{}); ok {
  703. for _, bond := range bonds {
  704. if bondData, ok := bond.(map[string]interface{}); ok {
  705. if jcxx, ok := bondData["jbxx"].(map[string]interface{}); ok {
  706. //if strings.Contains(util.ObjToString(jcxx["bondName"]), "2024") {
  707. bondInsert := make([]interface{}, 0)
  708. bondInsert = append(bondInsert, projectName)
  709. for _, v := range keys2 {
  710. bondInsert = append(bondInsert, jcxx[v])
  711. }
  712. bondLine++
  713. f.SetSheetRow("债券详情", fmt.Sprintf("%s%d", "A", line), &bondInsert)
  714. //}
  715. }
  716. }
  717. }
  718. }
  719. }
  720. }
  721. // TestZZ 获取项目列表相关数据
  722. func TestZZ(t *testing.T) {
  723. //87 竞品
  724. Mgo := &mongodb.MongodbSim{
  725. //MongodbAddr: "172.17.4.87:27080",
  726. MongodbAddr: "127.0.0.1:27081",
  727. Size: 10,
  728. DbName: "py_theme",
  729. UserName: "",
  730. Password: "",
  731. Direct: true,
  732. }
  733. Mgo.InitPool()
  734. sess := Mgo.GetMgoConn()
  735. defer Mgo.DestoryMongoConn(sess)
  736. //f, err := excelize.OpenFile("./山东2024专项债.xlsx")
  737. f, err := excelize.OpenFile("./青岛市20250324专项债数据.xlsx")
  738. //detailName := "specialbond_detail_202412" //专项债详细表
  739. listName := "specialbond_list,specialbond_list_history,specialbond_list_202503" //专项债详细表
  740. if err != nil {
  741. fmt.Println(err)
  742. return
  743. }
  744. defer func() {
  745. f.Save()
  746. if err := f.Close(); err != nil {
  747. fmt.Println(err)
  748. }
  749. }()
  750. rows, err := f.GetRows("项目列表")
  751. if err != nil {
  752. fmt.Println(err)
  753. return
  754. }
  755. keys := []string{"projectName", "presentIssueAmount", "issueTerm", "regionName", "cityName", "countyName", "totalInvestment", "issueDate"}
  756. titles := []string{"项目名称", "累计发行额(亿元)", "发行期限(年)", "省份", "城市", "区县", "总投资(亿元)", "发行时间"}
  757. line := 0
  758. line++
  759. _ = f.SetSheetRow("项目列表", fmt.Sprintf("%s%d", "A", line), &titles)
  760. for i := 1; i < len(rows); i++ {
  761. projectName := rows[i][0]
  762. if i%10 == 0 {
  763. log.Println("iiii", i, projectName)
  764. }
  765. line++
  766. where := map[string]interface{}{
  767. "projectName": projectName,
  768. }
  769. tables := strings.Split(listName, ",")
  770. insert := make([]interface{}, 0)
  771. for _, table := range tables {
  772. list, _ := Mgo.FindOne(table, where)
  773. if len(*list) == 0 {
  774. continue
  775. }
  776. for _, v := range keys {
  777. insert = append(insert, (*list)[v])
  778. }
  779. break
  780. }
  781. if len(insert) > 0 {
  782. err = f.SetSheetRow("项目列表", fmt.Sprintf("%s%d", "A", line), &insert)
  783. if err != nil {
  784. log.Println(err)
  785. return
  786. }
  787. }
  788. }
  789. log.Println("数据处理完毕")
  790. }
  791. func TestGetIdByURL(t *testing.T) {
  792. url := "https://www.jianyu360.cn/article/content/AHnY1xBfikoAjYsNGd4cE8JIzAvFj1jcXNlKDhROC4eWlFwA15UCZQ%3D.html"
  793. fmt.Println(GetIdByURL(url))
  794. }
  795. // TestArea 中国行政区划数据-民政部
  796. func TestArea(t *testing.T) {
  797. Mgo := &mongodb.MongodbSim{
  798. //MongodbAddr: "172.17.189.140:27080",
  799. MongodbAddr: "127.0.0.1:27083",
  800. Size: 10,
  801. DbName: "qfw",
  802. UserName: "SJZY_RWbid_ES",
  803. Password: "SJZY@B4i4D5e6S",
  804. Direct: true,
  805. }
  806. Mgo.InitPool()
  807. f, err := excelize.OpenFile("./20240530_民政部统计数据.xlsx")
  808. if err != nil {
  809. fmt.Println(err)
  810. return
  811. }
  812. defer func() {
  813. if err := f.Close(); err != nil {
  814. fmt.Println(err)
  815. }
  816. }()
  817. rows, err := f.GetRows("2023")
  818. if err != nil {
  819. fmt.Println(err)
  820. return
  821. }
  822. for i := 1; i < len(rows); i++ {
  823. data := map[string]interface{}{}
  824. if rows[i][0] == "省份" {
  825. data["level"] = 1
  826. } else if rows[i][0] == "城市" {
  827. data["level"] = 2
  828. } else {
  829. data["level"] = 3
  830. }
  831. log.Println(rows[i][1])
  832. parts := strings.Split(rows[i][1], "(")
  833. data["province"] = parts[0]
  834. data["province_code"] = rows[i][2]
  835. if len(rows[i]) > 3 {
  836. data["city"] = rows[i][3]
  837. }
  838. if len(rows[i]) > 4 {
  839. data["city_code"] = rows[i][4]
  840. }
  841. if len(rows[i]) > 5 {
  842. data["area"] = rows[i][5]
  843. }
  844. if len(rows[i]) > 6 {
  845. data["area_code"] = rows[i][6]
  846. }
  847. Mgo.Save("wcc_area_minzhengbu", data)
  848. }
  849. }
  850. // TestArea2 中国行政区划数据-统计局
  851. func TestArea2(t *testing.T) {
  852. Mgo := &mongodb.MongodbSim{
  853. //MongodbAddr: "172.17.189.140:27080",
  854. MongodbAddr: "127.0.0.1:27083",
  855. Size: 10,
  856. DbName: "qfw",
  857. UserName: "SJZY_RWbid_ES",
  858. Password: "SJZY@B4i4D5e6S",
  859. Direct: true,
  860. }
  861. Mgo.InitPool()
  862. f, err := excelize.OpenFile("./20240530_统计局统计数据.xlsx")
  863. if err != nil {
  864. fmt.Println(err)
  865. return
  866. }
  867. defer func() {
  868. if err := f.Close(); err != nil {
  869. fmt.Println(err)
  870. }
  871. }()
  872. rows, err := f.GetRows("2023")
  873. if err != nil {
  874. fmt.Println(err)
  875. return
  876. }
  877. for i := 1; i < len(rows); i++ {
  878. data := map[string]interface{}{}
  879. data["level"] = rows[i][0]
  880. log.Println(rows[i][1], rows[3])
  881. data["province"] = rows[i][1]
  882. data["province_code"] = rows[i][2]
  883. if len(rows[i]) > 3 {
  884. data["city"] = rows[i][3]
  885. }
  886. if len(rows[i]) > 4 {
  887. data["city_code"] = rows[i][4]
  888. }
  889. if len(rows[i]) > 5 {
  890. data["area"] = rows[i][5]
  891. }
  892. if len(rows[i]) > 6 {
  893. data["area_code"] = rows[i][6]
  894. }
  895. Mgo.Save("wcc_area_tongjiju", data)
  896. }
  897. }
  898. func TestHN(t *testing.T) {
  899. Mgo := &mongodb.MongodbSim{
  900. //MongodbAddr: "172.17.189.140:27080",
  901. MongodbAddr: "127.0.0.1:27083",
  902. Size: 10,
  903. DbName: "qfw",
  904. UserName: "SJZY_RWbid_ES",
  905. Password: "SJZY@B4i4D5e6S",
  906. Direct: true,
  907. }
  908. Mgo.InitPool()
  909. //181
  910. Mgo2 := &mongodb.MongodbSim{
  911. //MongodbAddr: "172.17.4.181:27001",
  912. MongodbAddr: "127.0.0.1:27001",
  913. DbName: "mixdata",
  914. Size: 10,
  915. UserName: "",
  916. Password: "",
  917. Direct: true,
  918. }
  919. Mgo2.InitPool()
  920. f, err := excelize.OpenFile("./河南单位.xlsx")
  921. if err != nil {
  922. fmt.Println(err)
  923. return
  924. }
  925. defer func() {
  926. if err := f.Close(); err != nil {
  927. fmt.Println(err)
  928. }
  929. }()
  930. sheet := "单位"
  931. rows, err := f.GetRows(sheet)
  932. if err != nil {
  933. fmt.Println(err)
  934. return
  935. }
  936. for i := 1; i < len(rows); i++ {
  937. name := rows[i][0]
  938. log.Println(i, "----", name)
  939. //res, _ := Mgo2.FindOne("special_enterprise", map[string]interface{}{"company_name": name})
  940. //if res != nil && len(*res) > 0 {
  941. // f.SetCellValue(sheet, fmt.Sprintf("%s%d", "E", i+1), "special_enterprise")
  942. // f.SetCellValue(sheet, fmt.Sprintf("%s%d", "F", i+1), (*res)["company_status"])
  943. // f.SetCellValue(sheet, fmt.Sprintf("%s%d", "G", i+1), (*res)["company_type"])
  944. //} else {
  945. // ra, _ := Mgo2.FindOne("special_gov_unit", map[string]interface{}{"company_name": name})
  946. // if ra != nil && len(*ra) > 0 {
  947. // f.SetCellValue(sheet, fmt.Sprintf("%s%d", "E", i+1), "special_gov_unit")
  948. // f.SetCellValue(sheet, fmt.Sprintf("%s%d", "G", i+1), (*ra)["company_type"])
  949. // if util.ObjToString((*ra)["company_status"]) != "" {
  950. // f.SetCellValue(sheet, fmt.Sprintf("%s%d", "F", i+1), (*ra)["company_status"])
  951. // } else {
  952. // if util.IntAll((*ra)["use_flag"]) < 5 {
  953. // f.SetCellValue(sheet, fmt.Sprintf("%s%d", "F", i+1), "正常")
  954. // } else {
  955. // f.SetCellValue(sheet, fmt.Sprintf("%s%d", "F", i+1), "废弃")
  956. // }
  957. // }
  958. // }
  959. //}
  960. //
  961. data := map[string]interface{}{
  962. "detail": name,
  963. }
  964. res := getAreaInfo(data)
  965. if res != nil {
  966. city := res["city"]
  967. district := res["district"]
  968. f.SetCellValue("单位", fmt.Sprintf("%s%d", "B", i+1), city)
  969. f.SetCellValue("单位", fmt.Sprintf("%s%d", "C", i+1), district)
  970. }
  971. }
  972. f.Save()
  973. log.Println("结束")
  974. }
  975. // TestExportBidding 导出bidding数据
  976. func TestExportBidding(t *testing.T) {
  977. Mgo := &mongodb.MongodbSim{
  978. //MongodbAddr: "172.17.189.140:27080",
  979. MongodbAddr: "127.0.0.1:27083",
  980. Size: 10,
  981. DbName: "qfw",
  982. UserName: "SJZY_RWbid_ES",
  983. Password: "SJZY@B4i4D5e6S",
  984. Direct: true,
  985. }
  986. Mgo.InitPool()
  987. sess := Mgo.GetMgoConn()
  988. defer Mgo.DestoryMongoConn(sess)
  989. //start, _ := time.Parse("2006-01-02 15:04:05", "2023-09-06 21:00:00")
  990. //end, _ := time.Parse("2006-01-02 15:04:05", "2023-09-07 09:00:00")
  991. //////
  992. //q := map[string]interface{}{
  993. // "publish": map[string]interface{}{
  994. // "$gte": 1701360000,
  995. // "$lte": 1706716800,
  996. // },
  997. // //"modifyinfo.toptype": map[string]interface{}{
  998. // // "$exists": 1,
  999. // //},
  1000. // "toptype": "拟建",
  1001. // //"title": map[string]interface{}{
  1002. // // "$regex": "充电",
  1003. // //},
  1004. //}
  1005. q := map[string]interface{}{
  1006. "s_classid": "57a189cbd368081d70e185cf",
  1007. "s_name": map[string]interface{}{
  1008. "$in": []string{"废标", "流标", "结果变更", "中标", "成交", "中选", "其它"},
  1009. },
  1010. }
  1011. query := sess.DB("qfw").C("rc_rule").Find(q).Select(nil).Iter()
  1012. count := 0
  1013. file := time.Now().Format("20060102") + "导出数据.xlsx"
  1014. currentPwd, _ := os.Getwd()
  1015. exportFile := fmt.Sprintf("%s/%s", currentPwd, file)
  1016. xlsx := excelize.NewFile(excelize.Options{ShortDatePattern: "yyyy/m/dd"})
  1017. styleOne, _ := xlsx.NewStyle(
  1018. &excelize.Style{
  1019. Alignment: &excelize.Alignment{
  1020. Horizontal: "left",
  1021. Vertical: "left",
  1022. },
  1023. },
  1024. )
  1025. line := 0
  1026. sheet := "Sheet1"
  1027. subtitles := []string{"s_name", "s_rule"}
  1028. //subtitles := []string{"bidding_id", "title", "detail", "href", "jyhref", "toptype", "new_toptype", "new_subtype"}
  1029. line++
  1030. //设置第一行title
  1031. _ = xlsx.SetSheetRow(sheet, fmt.Sprintf("%s%d", "A", line), &subtitles)
  1032. for tmp := make(map[string]interface{}); query.Next(tmp); count++ {
  1033. if count%1000 == 0 {
  1034. log.Println("current --- ", count)
  1035. }
  1036. //company_phone := util.ObjToString(tmp["company_phone"])
  1037. //if len(company_phone) != 11 {
  1038. // continue
  1039. //}
  1040. //if !validateMobileNumber(company_phone) {
  1041. // continue
  1042. //}
  1043. //if util.ObjToString(tmp["employee_name"]) == "" {
  1044. // continue
  1045. //}
  1046. //id := mongodb.BsonIdToSId(tmp["_id"])
  1047. line++
  1048. val := []interface{}{}
  1049. for _, v := range subtitles {
  1050. if v == "employee_name" {
  1051. val = append(val, strings.Split(util.ObjToString(tmp["employee_name"]), ",")[0])
  1052. } else {
  1053. val = append(val, tmp[v])
  1054. }
  1055. }
  1056. err := xlsx.SetSheetRow(sheet, fmt.Sprintf("%s%d", "A", line), &val)
  1057. if err != nil {
  1058. log.Println(err)
  1059. return
  1060. }
  1061. _ = xlsx.SetCellStyle(sheet, fmt.Sprintf("%s%d", "A", line), "BA"+strconv.Itoa(line), styleOne)
  1062. tmp = make(map[string]interface{})
  1063. }
  1064. xlsx.Path = exportFile
  1065. xlsx.Save()
  1066. log.Println("dealTmp over ", count)
  1067. }
  1068. // TestZXZ 专项债数据
  1069. //func TestZXZ(t *testing.T) {
  1070. // //87 竞品
  1071. // Mgo := &mongodb.MongodbSim{
  1072. // //MongodbAddr: "172.17.4.87:27080",
  1073. // MongodbAddr: "127.0.0.1:27081",
  1074. // Size: 10,
  1075. // DbName: "py_theme",
  1076. // UserName: "",
  1077. // Password: "",
  1078. // Direct: true,
  1079. // }
  1080. // Mgo.InitPool()
  1081. // sess := Mgo.GetMgoConn()
  1082. // defer Mgo.DestoryMongoConn(sess)
  1083. //
  1084. // //1.项目列表,查询条件
  1085. // //where := map[string]interface{}{
  1086. // // "regionName": "安徽", //地区
  1087. // // "issueDate": map[string]interface{}{
  1088. // // "issueDate": map[string]interface{}{
  1089. // // "$gt": "2024",
  1090. // // },
  1091. // // },
  1092. // //}
  1093. //
  1094. // //tables := []string{"specialbond_list", "specialbond_list_202406", "specialbond_list_202407", "specialbond_list_202408"}
  1095. //
  1096. // //for _, table := range tables {
  1097. // // datas, _ := Mgo.Find(table, where, nil, nil, false, -1, -1)
  1098. // //
  1099. // //}
  1100. //
  1101. // f, err := excelize.OpenFile("./anhui-06.xlsx")
  1102. // if err != nil {
  1103. // fmt.Println(err)
  1104. // return
  1105. // }
  1106. // defer func() {
  1107. // f.Save()
  1108. // if err := f.Close(); err != nil {
  1109. // fmt.Println(err)
  1110. // }
  1111. // }()
  1112. //
  1113. // //2.专项债详情
  1114. // rows, err := f.GetRows("项目列表")
  1115. // if err != nil {
  1116. // fmt.Println(err)
  1117. // return
  1118. // }
  1119. //
  1120. // keys := []string{"projectName", "totalInvestment", "regionName", "cityName", "countyName", "capital", "applyDebt", "portfolioFinancing", "specialDebtAsCapital",
  1121. // "expectedReturn", "projectCost", "projectTypeName3", "projectSubject", "startDate", "endDate", "operationStartDate",
  1122. // "operationEndDate", "sourceIncome", "constructionContent", "remarks", "portfolioFinancingSource", "costIncomePercent", "coverageMultiple", "implementingAgency",
  1123. // "accountingFirm", "lawFirm", "createTime", "updateTime"}
  1124. // titles := []string{"项目名称", "总投资(万元)", "省份", "地市", "区县", "不含专项债资本金(万元)", "申请专项债总额(万元)", "其他债务融资(万元)", "专项债作资本金(万元)", "预期收入(万元)", "成本",
  1125. // "项目领域", "项目业主", "建设期开始", "建设期结束", "运营期开始", "运营期结束", "收入来源", "建设内容", "特殊情况备注", "其他债务融资来源", "成本/收入(%)", "覆盖倍数", "主管部门", "会计所", "律所", "入库时间", "更新时间"}
  1126. //
  1127. // keys2 := []string{"bondName", "bondShortName", "bondNo", "regionName", "bondType1Name", "bondType2Name", "projectType1Name", "totalAmount", "issueDate", "issuePlaceName", "issueTerm", "issueInterestRate", "issuePhase", "payInterestMethodName",
  1128. // "newBondAmount", "counterBondAmount", "refinancingBondAmount", "redemptionMethod", "valueDate", "expiryDate", "payInterestDate", "latelyPayInterestDate", "lastPayInterest", "cumulativePayInterest"}
  1129. //
  1130. // titles2 := []string{"项目名称", "债券名称", "债券简称", "债券编码", "省份", "债券性质", "债券类型", "官方项目类型", "发行金额(万元)", "发行日期", "发行场所", "发行期限(年)", "发行利率(%)", "发行期数", "付息方式", "新增债券(亿元)", "置换债券(亿元)", "再融资债券(亿元)", "赎回方式",
  1131. // "起息日", "到息日", "付息日", "最近付息日", "上期已付息(亿元)", "累计付息(亿元)"}
  1132. // line := 0
  1133. // line++
  1134. // f.NewSheet("项目详情")
  1135. // f.NewSheet("债券详情")
  1136. // bondLine := 0
  1137. // //设置第一行title
  1138. // _ = f.SetSheetRow("项目详情", fmt.Sprintf("%s%d", "A", line), &titles)
  1139. // _ = f.SetSheetRow("债券详情", fmt.Sprintf("%s%d", "A", line), &titles2)
  1140. // //
  1141. // for i := 1; i < len(rows); i++ {
  1142. // projectName := rows[i][0]
  1143. // //projectName := "新建南通至宁波高速铁路(海盐段)"
  1144. // log.Println(projectName)
  1145. // line++
  1146. // where := map[string]interface{}{
  1147. // "project.jcxx.projectName": projectName,
  1148. // }
  1149. // detail, _ := Mgo.FindOne("specialbond_detail_202406", where)
  1150. // if len(*detail) == 0 {
  1151. // continue
  1152. // }
  1153. // insert := make([]interface{}, 0)
  1154. // if project, ok := (*detail)["project"].(map[string]interface{}); ok {
  1155. // if jcxx, ok := project["jcxx"].(map[string]interface{}); ok {
  1156. // for _, v := range keys {
  1157. // insert = append(insert, jcxx[v])
  1158. // }
  1159. // }
  1160. // }
  1161. //
  1162. // err := f.SetSheetRow("项目详情", fmt.Sprintf("%s%d", "A", line), &insert)
  1163. // if err != nil {
  1164. // log.Println(err)
  1165. // return
  1166. // }
  1167. //
  1168. // // 债券基本信息
  1169. // if bonds, ok := (*detail)["bond"].([]interface{}); ok {
  1170. // for _, bond := range bonds {
  1171. // if bondData, ok := bond.(map[string]interface{}); ok {
  1172. // if jcxx, ok := bondData["jbxx"].(map[string]interface{}); ok {
  1173. // //if strings.Contains(util.ObjToString(jcxx["bondName"]), "2024") {
  1174. // bondInsert := make([]interface{}, 0)
  1175. // bondInsert = append(bondInsert, projectName)
  1176. // for _, v := range keys2 {
  1177. // bondInsert = append(bondInsert, jcxx[v])
  1178. // }
  1179. // bondLine++
  1180. // f.SetSheetRow("债券详情", fmt.Sprintf("%s%d", "A", line), &bondInsert)
  1181. // }
  1182. // }
  1183. // }
  1184. // }
  1185. // }
  1186. //}
  1187. // TestLianTong 7月非运营商中标数据比对缺失数据 -- 闫天磊
  1188. func TestLianTong(t *testing.T) {
  1189. f, err := excelize.OpenFile("./7月非运营商中标数据比对缺失数据V1.xlsx")
  1190. if err != nil {
  1191. fmt.Println(err)
  1192. return
  1193. }
  1194. defer func() {
  1195. f.Save()
  1196. if err := f.Close(); err != nil {
  1197. fmt.Println(err)
  1198. }
  1199. }()
  1200. //2.专项债详情
  1201. rows, err := f.GetRows("基础数据")
  1202. if err != nil {
  1203. fmt.Println(err)
  1204. return
  1205. }
  1206. // 86 mongo
  1207. Mgo := &mongodb.MongodbSim{
  1208. //MongodbAddr: "172.17.4.86:27080",
  1209. MongodbAddr: "127.0.0.1:27082",
  1210. Size: 10,
  1211. DbName: "jyqyfw",
  1212. UserName: "SJZY_RWbid_ES",
  1213. Password: "SJZY@B4i4D5e6S",
  1214. Direct: true,
  1215. }
  1216. Mgo.InitPool()
  1217. //url := "http://172.17.4.184:19908"
  1218. url := "http://127.0.0.1:19908"
  1219. username := "jybid"
  1220. password := "Top2023_JEB01i@31"
  1221. index := "bidding" //索引名称
  1222. // 创建 Elasticsearch 客户端
  1223. client, err := elastic.NewClient(
  1224. elastic.SetURL(url),
  1225. elastic.SetBasicAuth(username, password),
  1226. elastic.SetSniff(false),
  1227. )
  1228. if err != nil {
  1229. log.Fatalf("创建 Elasticsearch 客户端失败:%s", err)
  1230. }
  1231. for i := 2; i < len(rows); i++ {
  1232. area := rows[i][1]
  1233. title := rows[i][2]
  1234. buyer := rows[i][4]
  1235. timeStr := rows[i][3]
  1236. layout := "2006/01/02"
  1237. t, err := time.Parse(layout, timeStr)
  1238. if err != nil {
  1239. fmt.Println(err)
  1240. return
  1241. }
  1242. timestamp := t.Unix()
  1243. if i%10 == 0 {
  1244. log.Println("i", i, title)
  1245. f.Save()
  1246. }
  1247. query := elastic.NewBoolQuery().
  1248. Must(elastic.NewBoolQuery().Should(elastic.NewMatchQuery("title", title), elastic.NewMatchQuery("projectname", title))).
  1249. //Must(elastic.NewTermQuery("title", title)).
  1250. Must(elastic.NewTermQuery("area", area)).
  1251. Must(elastic.NewTermQuery("buyer", buyer))
  1252. // 执行查询
  1253. searchResult, err := client.Search().
  1254. Index(index).
  1255. Query(query).
  1256. Do(context.Background())
  1257. if err != nil {
  1258. log.Fatalf("Error executing search: %s", err)
  1259. }
  1260. if searchResult.TotalHits() > 0 {
  1261. hit := searchResult.Hits.Hits[0]
  1262. var doc map[string]interface{}
  1263. err := json.Unmarshal(hit.Source, &doc)
  1264. if err != nil {
  1265. log.Printf("解析文档失败:%s", err)
  1266. continue
  1267. }
  1268. publishTile := util.Int64All(doc["publishtime"])
  1269. if publishTile < timestamp+3*24*3600 && publishTile > timestamp-3*24*3600 {
  1270. id := util.ObjToString(doc["id"])
  1271. jyurl := GetJyURLByID(id)
  1272. f.SetCellValue("基础数据", fmt.Sprintf("%s%d", "L", i+1), jyurl)
  1273. f.SetCellValue("基础数据", fmt.Sprintf("%s%d", "M", i+1), id)
  1274. where2 := map[string]interface{}{
  1275. "id": id,
  1276. "appid": "jyGQ1XQQsEAwNeSENOFR9D",
  1277. }
  1278. da, _ := Mgo.FindOne("usermail", where2)
  1279. if len(*da) > 0 {
  1280. f.SetCellValue("基础数据", fmt.Sprintf("%s%d", "J", i+1), "是")
  1281. } else {
  1282. f.SetCellValue("基础数据", fmt.Sprintf("%s%d", "J", i+1), "否")
  1283. }
  1284. } else {
  1285. f.SetCellValue("基础数据", fmt.Sprintf("%s%d", "I", i+1), "否")
  1286. }
  1287. //for _, hit := range searchResult.Hits.Hits {
  1288. //
  1289. //}
  1290. } else {
  1291. f.SetCellValue("基础数据", fmt.Sprintf("%s%d", "I", i+1), "否")
  1292. }
  1293. f.Save()
  1294. }
  1295. log.Println("数据处理完毕")
  1296. }
  1297. func TestTaskFuc2(t *testing.T) {
  1298. matchArr := make([]TagMatching, 0)
  1299. //军队类
  1300. jundui := "智慧,管护,办公,服务,维护,运维,代维,维保,改造,管理,监管,监控,安全,集成,开发,建设,疫情防控,公益诉讼,社会治理,市域治理,基层治理,警务调度,信访联防,陆军,空军,战支,联勤保障,军民融合,融通军产,军分区武装部,某部,营区安防,公安,交警,交通警察,出入境,边防,特勤,检察,法院,司法,政法,看守所,监狱,退役,双拥,优抚,军转干部,民政,养老,公共交通,交通,驾驶,驾校,运输,供应链,物流,机场,航空,港,公交,信息,数字,后勤管理,示教,远程,医共体,健康管理,人力资源,社会保障,现代农业产业园,医疗保障,畜牧一体化,工会,体育,税务,财政,煤田,纪委,红十字会,海关,统战,老干部,组织,科学技术厅,广播电视台,广播电视局,新华通讯社,长城新媒体集团,日报,宣传部,人民代表大会,科学技术协会,广电信息网络集团股份有限公司,智库,科学,统计局,审计局,省委办公厅,溯源,干部人事,健身,场馆,赛事,红十字,纪检委,红会,电子口岸,血站,港口,科技局,科学技术局,广电,新闻网,报社,媒体,报业,新闻,人大,科协,社会科学,社科,金审,人口,电子商务,市委办公室,追溯,档案,人居环境治理,技术升级,技术改造,应急指挥,景区,门票,分销,定位,全景,旅游,车载,车辆,信息安全,在线课程,布线,升级,改造,扩容,传输,入户,校园,政务,支付,财务,教育,财政,通信,通讯,视频,语音,数据,互联网,商务,小微,APN,因特网,IP,MSTP,VPDN,光纤,无线,GPRS,WiFi,扶贫,检察院,法院,公安,司法,政务,监测,政协,金税,履职,政务服务,放管服,公共资源,行政服务,行政审批,社会信用体系,效能监督,热线,政务数据,电视台,广播,传媒,杂志社,科学技术,科技园区,开发区管理委员,管委会,科技馆,科技创新,高新区发展,科技成果,影业,科技大厦,情报,科学器材,自然科学,科技信息和档案,科技金融,科学技术传播,青少年科技,企业创新促进,创新战略,普及推广,工作者,新华社,通讯社,舆论,智能化,门禁"
  1301. tagJ1 := TagMatching{
  1302. tagName: "第一类",
  1303. tagCode: "001",
  1304. matchField: []string{"title"},
  1305. matchKey: jundui,
  1306. matchKeyReg: GetRegex(jundui),
  1307. addField: []string{"title"},
  1308. addKey: "平台,系统,软件,网络,云,通讯",
  1309. addKeyReg: GetRegex("平台,系统,软件,网络,云,通讯"),
  1310. excludeField: []string{"title"},
  1311. excludeKey: "超声,输煤系统,采样及制样系统,装车系统,机电系统,MW,机组,放射,转炉,工程造价,纲要设计,脱水系统,翻车机,订单,医疗设备,肺结节,商务楼施工,破碎系统,油库系统,审计服务,空调系统,灭火系统,新订单,垃圾处理系统,生产机房,电除尘高频电源设备,冲击地压,微信平台,发酵集成,液压润滑系统,#,杂志采购,制氧系统,除臭系统,编制,kV,电气线路,铁路线路,渗沥液,高压细水雾灭火系统,场地授权,土建工程,生物,医疗器械,医贸,医疗设备,承德世纪兴宇建筑工程有限公司,天津国能华北电力技术工程有限公司,机电设备,建筑安装,工程咨询,空调工程,电力安装,X射线,药敏分析系统,热送调度系统,射频手术系统,肾镜系统,注射系统,胃肠系统,质谱仪筛查系统,勘察,手术系统,反洗钱系统,发电机,高低压系统,排水系统,升降平台,污水系统,供销社建设,消防系统,通风系统,人体生理实验系统,试验系统,污泥系统,主机热控系统,供水系统,电路整修,安装工程有限公司,劳务有限公司,除尘系统,装修工程,用地预审,运输自动化控制系统,化学水工系统,故障自动诊断系统,手术导航系统,灰硝硫系统,液压系统,脱硫系统,光纤打标机,制粉系统,净化系统,车辆租赁,空压机系统,校准系统,设计标段,取水系统,装饰工程,宣传视频制作,分析服务,铁路专线,制冷系统,点火系统,水处理系统,火检光纤,遥感资料,燃料系统,供电系统,供热系统,土建,新风系统,传输系统,火灾报警系统,液压及水系统,加油服务,空调采购,电气系统,物流传输系统,原煤筛分系统,汽车冲洗平台,长沙高新技术产业开发区管理委员会,防水工程,热水系统,综合管网工程,电路板,生活水系统,网线采购,电源线采购,配电系统,自动报警系统,温室气体连续监测系统,制水系统,热泵系统,热力管道,道路维修,管网改造,脱硝系统,AGC系统,公交专线,物业服务,废水系统,电伴热系统,上料系统,电务系统,控制系统,电路改造,手术麻醉管理系统,造价咨询,建筑修缮,课程,设计咨询,雨污分流系统,中央空调机房,印刷系统,天然气管网,DCS,赛事安全评估,轨道电路,制造平台,供暖系统,皮带系统,血流动力学监测,中继泵站,光伏发电,工程初步设计,照明系统,电力专线,水冷系统,散热系统,重症监护系统,管道专线,气体检测系统,采暖系统,激光测振系统,租用办公场所,焊接系统,无创定量诊断系统,风机房,手术管理系统,磁共振机房,洗车平台,隧道工程,电力接入系统,物业管理服务,外墙粉刷,尾砂运输供给系统,换热机房,垂钓平台,可行性研究,地面系统,空气质量检测平台,网上超市采购,车辆维保,卸料平台,直饮水系统,煤系统,余热利用系统,劳务分包,火气系统,排风系统,装修施工,办公桌椅采购,天翼云科技,载具采购,钢板机房,腔镜系统,吹灰系统,激光扫描系统,空调,冷却水,打印机,排潮系统,排烟系统,蒸汽系统,润滑系统,烧结系统,加热系统,粉刷,磐石公司,工程施工,内墙维修,除雾器系统,自流平,宣传服务,渣处理系统,雨水系统,主题宣传,天翼云科技河北分公司,车辆定点,装修,劳动技术服务,真空系统,施工,施工图设计,造影系统,制冷机房,GW,心脏,检修平台,冷水系统,消防改造,供热专线,专栏,给水系统,警服,被装,灭火剂,雨污,保洁服务,物业服务,服装采购,中国移动,中移在线,中移系统,铁通,中国联通,联合网络通信,联通系统集成,中国电信,天翼视讯,天翼电信,天翼云,监理服务,监理&&中选,监理项目,项目监理,工程监理,预算编制,代理机构&&遴选,代理机构&&选取",
  1312. excludeKeyReg: GetRegex("超声,输煤系统,采样及制样系统,装车系统,机电系统,MW,机组,放射,转炉,工程造价,纲要设计,脱水系统,翻车机,订单,医疗设备,肺结节,商务楼施工,破碎系统,油库系统,审计服务,空调系统,灭火系统,新订单,垃圾处理系统,生产机房,电除尘高频电源设备,冲击地压,微信平台,发酵集成,液压润滑系统,#,杂志采购,制氧系统,除臭系统,编制,kV,电气线路,铁路线路,渗沥液,高压细水雾灭火系统,场地授权,土建工程,生物,医疗器械,医贸,医疗设备,承德世纪兴宇建筑工程有限公司,天津国能华北电力技术工程有限公司,机电设备,建筑安装,工程咨询,空调工程,电力安装,X射线,药敏分析系统,热送调度系统,射频手术系统,肾镜系统,注射系统,胃肠系统,质谱仪筛查系统,勘察,手术系统,反洗钱系统,发电机,高低压系统,排水系统,升降平台,污水系统,供销社建设,消防系统,通风系统,人体生理实验系统,试验系统,污泥系统,主机热控系统,供水系统,电路整修,安装工程有限公司,劳务有限公司,除尘系统,装修工程,用地预审,运输自动化控制系统,化学水工系统,故障自动诊断系统,手术导航系统,灰硝硫系统,液压系统,脱硫系统,光纤打标机,制粉系统,净化系统,车辆租赁,空压机系统,校准系统,设计标段,取水系统,装饰工程,宣传视频制作,分析服务,铁路专线,制冷系统,点火系统,水处理系统,火检光纤,遥感资料,燃料系统,供电系统,供热系统,土建,新风系统,传输系统,火灾报警系统,液压及水系统,加油服务,空调采购,电气系统,物流传输系统,原煤筛分系统,汽车冲洗平台,长沙高新技术产业开发区管理委员会,防水工程,热水系统,综合管网工程,电路板,生活水系统,网线采购,电源线采购,配电系统,自动报警系统,温室气体连续监测系统,制水系统,热泵系统,热力管道,道路维修,管网改造,脱硝系统,AGC系统,公交专线,物业服务,废水系统,电伴热系统,上料系统,电务系统,控制系统,电路改造,手术麻醉管理系统,造价咨询,建筑修缮,课程,设计咨询,雨污分流系统,中央空调机房,印刷系统,天然气管网,DCS,赛事安全评估,轨道电路,制造平台,供暖系统,皮带系统,血流动力学监测,中继泵站,光伏发电,工程初步设计,照明系统,电力专线,水冷系统,散热系统,重症监护系统,管道专线,气体检测系统,采暖系统,激光测振系统,租用办公场所,焊接系统,无创定量诊断系统,风机房,手术管理系统,磁共振机房,洗车平台,隧道工程,电力接入系统,物业管理服务,外墙粉刷,尾砂运输供给系统,换热机房,垂钓平台,可行性研究,地面系统,空气质量检测平台,网上超市采购,车辆维保,卸料平台,直饮水系统,煤系统,余热利用系统,劳务分包,火气系统,排风系统,装修施工,办公桌椅采购,天翼云科技,载具采购,钢板机房,腔镜系统,吹灰系统,激光扫描系统,空调,冷却水,打印机,排潮系统,排烟系统,蒸汽系统,润滑系统,烧结系统,加热系统,粉刷,磐石公司,工程施工,内墙维修,除雾器系统,自流平,宣传服务,渣处理系统,雨水系统,主题宣传,天翼云科技河北分公司,车辆定点,装修,劳动技术服务,真空系统,施工,施工图设计,造影系统,制冷机房,GW,心脏,检修平台,冷水系统,消防改造,供热专线,专栏,给水系统,警服,被装,灭火剂,雨污,保洁服务,物业服务,服装采购,中国移动,中移在线,中移系统,铁通,中国联通,联合网络通信,联通系统集成,中国电信,天翼视讯,天翼电信,天翼云,监理服务,监理&&中选,监理项目,项目监理,工程监理,预算编制,代理机构&&遴选,代理机构&&选取"),
  1313. }
  1314. matchArr = append(matchArr, tagJ1)
  1315. key2 := "视频会议,视频监控,等保,信息化,机房,雪亮,智慧交管,智慧安防,智慧社区,天网,天幕,移动警务,综治,视联网,磐石,智慧监所,智慧平安,智慧检务,智慧法院,移动检务,掌上法院,直播听证,远程提讯,智慧监狱,智慧司法,智慧戒毒,智慧信访,绿色军营,智慧营区,二三级网,二级网,三级网,手机管控,智慧校园,智慧医院,智慧医保,智慧景区,智慧乡村,智慧食堂,一卡通,一脸通,银医,掌上医院,数据中心,风险普查,智慧城市,智慧城管,政务外网,云平台,物流系统,专线,电路,物联网,智慧医疗,互联互通,远程医疗,医疗云,影像云,PACS,HIS,云安全,云桌面,专属云,医院云,云服务,私有云,医院上云,云监控,云计算,云主机,桌面云,云医院,安全云,云办公,云专线,云客服,云终端,云网融合,专有云,云医疗,公有云,云应用,云化项目,智慧健康,系统平台,平台系统,信息服务平台,医联体,核酸检测系统,数字医疗,远程会诊,移动医护,网络安全,健康系统,专网,护理系统,胶片数字化,医废管理系统,安防系统,管理系统,卫健系统,服务系统,成像分析系统,一体化系统,呼叫系统,教学系统,体检系统,业务系统,定位系统,票据系统,医院系统,叫号系统,监护系统,导视系统,培训系统,监控系统,监测系统,标测系统,支持系统,用药系统,追溯系统,建设系统,超融合系统,病房净化系统,应用系统,系统功能,审核系统,影像系统,防护系统,导向系统,归档系统,备份系统,桌面系统,安保系统,发票系统,监管系统,决策系统,考核系统,物资系统,诊断系统,核算系统,电子签名系统,评价系统,安检系统,财务系统,系统开发,预约系统,分诊系统,合一系统,对讲系统,展示系统,调度系统,认证系统,办公系统,结算系统,干预系统,病案系统,筛查系统,管控系统,检验系统,防控系统,探视系统,引导系统,登记系统,上报系统,考试系统,传输系统采购,分配系统,报警系统,采集系统,监视系统,病理系统,收据系统,缴费系统,统计系统,报销系统,安全系统,报告系统,应急救援系统,测评系统,核酸快速检测系统,事件系统,一卡通系统,转播系统,接口系统,改造系统,互动系统,审计系统,核对系统,应急指挥系统,上传系统,评审系统,核签系统,共享系统,巡更系统,发布系统,排队系统,告警系统,疫苗接种告知确认系统,运维系统,支撑系统,内控系统,层析系统,导检系统,信息发布系统,卫生监督移动执法系统,疫苗接种系统,电子签核系统,应急系统,ERP系统,技术系统,仓储系统,支付系统,查询系统,前端系统,核查系统,人事系统,协同系统,住院系统,环境系统,面部跟踪系统,接警系统,审计大数据,电子病历,三农大数据,智慧渔业,数字乡村,5G,4G,智慧旅游平台,智慧停车,智慧农业,智慧气象,智慧建设,智慧城市建设,智慧水务,智慧档案,融媒体,VPDN,IDC,综合布线,IoT,光纤,综合管理平台,执法终端,慧眼,互联网+,呼叫中心,短彩信,校园网,网络存储设备,OA,办公自动化,高清视频,智能安防,监控安防,12345,12341,12342,12366,12328,12329,12333,12348,12351,12306,12316,12317,12322,12330,12319,12338,12378,12358,NB,辅警通,移动工作终端购置及通信服务,移动执法,一键报警,警务通,管控平台系统建设,数字化城市,4G单兵系统,综治视联网,数字化校园,云企信,云总机,融合总机,多媒通信,融合通信,视频通信,视频电话,无线商话,无线座机,交换机直连,集团通讯录,外勤管家,兵团社保通,商户管家,移动秀品,校讯通平台,集团V网,农信通,信息化终端设备服务系统,天眼,村村享,智慧交通,安全通讯,城域网,GPS,大数据,短信,防汛视频,数字校园,宽带,电子警察,智慧党建,智慧供水,高清会议,移动税务,WIFI,无线通信,检务通,云视频,可视一张网,智慧派出所,等级保护,智能扫码刷脸测温,智能测温,基层测温,智慧检务,智慧,医院信息化建设,智能信息化,机房运维,平安社区,四级网,智能接处警,智慧云,监控工程建设,安全监测设施,通信管道,数字城管,指挥调度系统,监控设备,智慧平安乡村,信息网建设,智能监控,网络建设,智慧教育,电教室,扫码测温,智能感知,长效管护平台,数字中心,智慧环卫,人脸识别,交通感知,移动办公,益农信息社,链路连接,人脸抓拍,电话系统,农村厕所管护,警务终端,城市综合管理,平安城市,弱电&&智能化,门禁,视频传输,安全防护体系,智能化,网络&&平台,卫星通信,卫星通讯,公网基站,通信&&基站,通讯&&基站,互联网&&接入,互联网&&服务,通信线路,通信&&服务,弱电&&系统"
  1316. ex2 := "超声,输煤系统,采样及制样系统,装车系统,机电系统,MW,机组,放射,转炉,工程造价,纲要设计,脱水系统,翻车机,订单,医疗设备,肺结节,商务楼施工,破碎系统,油库系统,审计服务,空调系统,灭火系统,新订单,垃圾处理系统,生产机房,电除尘高频电源设备,冲击地压,微信平台,发酵集成,液压润滑系统,#,杂志采购,制氧系统,除臭系统,编制,kV,电气线路,铁路线路,渗沥液,高压细水雾灭火系统,场地授权,土建工程,生物,医疗器械,医贸,医疗设备,承德世纪兴宇建筑工程有限公司,天津国能华北电力技术工程有限公司,机电设备,建筑安装,工程咨询,空调工程,电力安装,X射线,药敏分析系统,热送调度系统,射频手术系统,肾镜系统,注射系统,胃肠系统,质谱仪筛查系统,勘察,手术系统,反洗钱系统,发电机,高低压系统,排水系统,升降平台,污水系统,供销社建设,消防系统,通风系统,人体生理实验系统,试验系统,污泥系统,主机热控系统,供水系统,电路整修,安装工程有限公司,劳务有限公司,除尘系统,装修工程,用地预审,运输自动化控制系统,化学水工系统,故障自动诊断系统,手术导航系统,灰硝硫系统,液压系统,脱硫系统,光纤打标机,制粉系统,净化系统,车辆租赁,空压机系统,校准系统,设计标段,取水系统,装饰工程,宣传视频制作,分析服务,铁路专线,制冷系统,点火系统,水处理系统,火检光纤,遥感资料,燃料系统,供电系统,供热系统,土建,新风系统,传输系统,火灾报警系统,液压及水系统,加油服务,空调采购,电气系统,物流传输系统,原煤筛分系统,汽车冲洗平台,长沙高新技术产业开发区管理委员会,防水工程,热水系统,综合管网工程,电路板,生活水系统,网线采购,电源线采购,配电系统,自动报警系统,温室气体连续监测系统,制水系统,热泵系统,热力管道,道路维修,管网改造,脱硝系统,AGC系统,公交专线,物业服务,废水系统,电伴热系统,上料系统,电务系统,控制系统,电路改造,手术麻醉管理系统,造价咨询,建筑修缮,课程,设计咨询,雨污分流系统,中央空调机房,印刷系统,天然气管网,DCS,赛事安全评估,轨道电路,制造平台,供暖系统,皮带系统,血流动力学监测,中继泵站,光伏发电,工程初步设计,照明系统,电力专线,水冷系统,散热系统,重症监护系统,管道专线,气体检测系统,采暖系统,激光测振系统,租用办公场所,焊接系统,无创定量诊断系统,风机房,手术管理系统,磁共振机房,洗车平台,隧道工程,电力接入系统,物业管理服务,网上超市采购,外墙粉刷,尾砂运输供给系统,换热机房,垂钓平台,可行性研究,地面系统,空气质量检测平台,车辆维保,卸料平台,直饮水系统,煤系统,余热利用系统,劳务分包,火气系统,排风系统,装修施工,办公桌椅采购,天翼云科技,载具采购,钢板机房,腔镜系统,吹灰系统,激光扫描系统,空调,冷却水,打印机,排潮系统,排烟系统,蒸汽系统,润滑系统,烧结系统,加热系统,粉刷,磐石公司,工程施工,内墙维修,除雾器系统,自流平,宣传服务,渣处理系统,雨水系统,主题宣传,天翼云科技河北分公司,车辆定点,装修,劳动技术服务,真空系统,施工,施工图设计,造影系统,制冷机房,GW,心脏,检修平台,冷水系统,消防改造,供热专线,专栏,给水系统,警服,被装,灭火剂,保洁服务,物业服务,服装采购中国移动,中移在线,中移系统,铁通,中国联通,联合网络通信,联通系统集成,中国电信,天翼视讯,天翼电信,天翼云,监理服务,监理&&中选,监理项目,项目监理,工程监理,预算编制,代理机构&&遴选,代理机构&&选取"
  1317. tagJ2 := TagMatching{
  1318. tagName: "第2类",
  1319. tagCode: "002",
  1320. matchField: []string{"title"},
  1321. matchKey: key2,
  1322. matchKeyReg: GetRegex(key2),
  1323. excludeField: []string{"title"},
  1324. excludeKey: ex2,
  1325. excludeKeyReg: GetRegex(ex2),
  1326. }
  1327. matchArr = append(matchArr, tagJ2)
  1328. key3 := "智算云,智算中台,数字孪生平台,物联网平台,城市大脑,智慧停车,智慧灯杆,智慧社区,智慧养老,智慧小区,智慧物业,智慧乡村,智慧农业,智慧党建,数字乡村,智慧城市,数智城市,智治城市,数字驾驶舱,新型智慧城市,数据基础底座,智能视觉平台,云网资源接入,数字城市,数智城市,数字底座,超级大脑,城市大脑,全息路网,全息路口,智慧水务,智慧应急,智能装备,智慧城管,应急指挥系统,智慧消防,一网统管,数字政府,城市超脑,防欺凌&&报警,防欺凌&&预警,防欺凌&&终端,防欺凌&&AI,人工智能智算,算力卡,云智算,定制开发&&系统集成"
  1329. ex3 := "监理服务,监理&&中选,监理项目,项目监理,工程监理,预算编制,代理机构&&遴选,代理机构&&选取"
  1330. tagJ3 := TagMatching{
  1331. tagName: "第3类",
  1332. tagCode: "003",
  1333. matchField: []string{"title"},
  1334. matchKey: key3,
  1335. matchKeyReg: GetRegex(key3),
  1336. excludeField: []string{"title"},
  1337. excludeKey: ex3,
  1338. excludeKeyReg: GetRegex(ex3),
  1339. }
  1340. matchArr = append(matchArr, tagJ3)
  1341. key4 := "热线平台,综合布线,协同办公,远程办公,vpn,wifi,私有云,云桌面,云计算,桌面云,智能云,政务云,云平台,云迁移,云资源,云服务,公有云,云灾备,云存储,云租用,云租赁,边缘云,专享云,虚拟化,云办公,云基础,基础资源,医疗云,智造云,行业云,新沃云,云运维,云应用,云安全,灵云,人口普查,舆情&&分析,舆情监测,舆情监控,舆情&&系统,防勒索病毒,灾备平台,电子化规范,处方前置系统,合理用药,物联网,NB-IOT,烟感,IDC,ICT,机房&&租赁,机房&&租用,机房&&建设,机房&&迁移,机房&&搬迁,机房&&托管,5G,人脸识别,门禁&&系统,人脸&&闸机,容灾备份,等级保护,等保,等级评测,区块链,短信,彩信,固话,数字政府,平安社区,平安校园,共享交换平台,移动执法,平安城市,智慧矿山,雪亮,智慧旅游,智慧景区,电子围栏,明厨亮灶,智慧校务,远程教育,多媒体教学,智慧教育,智慧课堂,虚拟现实,大数据实训,工业机器人,教育信息化,数字校园,智慧校园,校园信息化,标准化&&考场,标准化&&考点,智慧考场,智慧考点,智能&&安检门,基础网络,弱电智能化,智能化工程,智慧居家,智能门禁,应急能力提升,教育&&设备,教学&&设备,教育&&装备,教学&&装备,智慧医院,智慧医疗,大数据监督平台,信息化,监测平台,风险普查,通信服务,雨水情,智慧市场监管,智能化,数据流量,移动办案,智慧环保,智能安防,移动警务,移动&&终端,无人农场,远程医疗,监管体系,智慧井盖,智能交通,房屋&&普查,应急管理体系,智慧办公,城市综合治理,智慧大厦,智慧养老,灾害防御系统,综合治理平台,排队叫号,教育&&一体化,教学&&一体化,智慧政协,智慧哨兵,电子政务,非现场执法,智慧园区,社会治理,水库安全运行,溯源体系,接处警,一张图,涉税数据,智慧监管,精准教学,远程接访,云广播,数字化城市,智慧警务,智慧人大,医共体,医联体,预警信息发布,移动护理,无纸化病案,智能医废,电子病历,协同共管,信创云,智慧医护,无线覆盖,移动专网,惠企&&平台,院前急救,数字化城管,IPV4,IPV6,智慧水利,智慧水务,云视讯,视频会议系统,视频会商,蓝天卫士,智慧工厂,远程医技,远程会诊,森林防火,森林火灾,电子表决,人像识别,录播教室,多规合一,96110,智能回访,舆情通,智能导航,智能导诊,智慧法制,呼叫平台,虚拟仿真,智慧教室,智慧路灯,班班通,改薄提升,电子警察,教育薄弱环节改善,教育薄改,管户设备,标准化考场,标准化考点,可视化指挥调度系统,基本装备采购,网络管理,国际业务专线,传输网络,指挥通信设备,4G无线图传,无线图传&&执法记录仪,专网,专线,信息系统,网络服务,天线地网,地网,移动医护,应急救援,全民健康信息平台,等保测评,疾病预防,精准预约,挂号系统,双重预防,预防体系,监控系统,动态监控,一村一警,等级测评,远程协同,转移支付,图像监测站,监测监控能力,监测监控&&设备,智慧&&系统集成,智能&&系统集成,通信系统,计算机网络,视频安防系统,通信光缆,自动化系统,流量计系统,决策支持系统,高精定位,移动办公,辅助办案,远程指挥,跨省通办,支付电子化,雪亮工程,基础电信业务运营商,广电网络运营商,溯源体系软件平台建设,治安防控,系统集成,远程取证,建筑承灾体,建筑受灾体,考评一体化,数字化,老旧小区,质量安全追溯体系,平安灯箱,雨水情测报,安全监测,安全运行,技能振兴,生态综合体,平安基层,尾水&&达标,尾水&&治理,互联&&电路,工业互联网,双高,监测&&技术&&服务,执法系统,应急&&广播,定位系统,城市&&平台建设,加油站涉税数据管理,无纸化办公,大数据&&平台,网格&&终端,一体化&&平台,疫情防控&&一体化,疫情&&平台,医疗&&共同体,重点隐患整治,技防监控,突发事件&&预警,公共数字文化,考试平台,安防工程,安防系统,水库监测,景区提升,美丽乡村,乡村振兴,智慧社区,智慧小区,智慧物业,智慧乡村,智慧农业,智慧党建,数字乡村,返贫监测,基层治理,乡村治理,航空巡护,房屋安全普查,厕所革命,履职平台,信道&&服务,信道租赁,综合治理,有诉即办,接诉即办,软件技术服务,感知设备,综合&&集成,现代&&产业园,场所码&&系统,网站群&&升级,数智化,运管服管理平台,城市生命线,智慧园林,智慧市政,智慧环卫,运管服&&平台,组网&&集成,组网&&服务,督查&&系统,督办&&系统,元宇宙,基础设施&&提升,湿地&&保护,湿地&&修复,追溯体系,人工影响天气能力,防汛&&装备,抢险&&装备,数字城市,数智城市,数字底座,超级大脑,城市大脑,全息路网,全息路口,车联网,智能网联,网联车,车路协同,车路智行,智慧出行,营运车辆监管,TOCC,交通运行监测,交通运行调度,车&&调度平台,车&&调度系统,电子站牌,智慧停车,智慧泊车,道路&&智能,网络&&建设,ipv,雾森,雾炮,数字孪生,薄弱环节改善,教育&&薄&&改,拆墙透绿,工控安全,一体化建设,烟草&&一体化,薄&&改&&提升,智慧交通,校园&&安防,智慧&&安防,移动互联网,互联网链路,移动&&链路,城市&&视频,城市&&监控,亮化工程,视频图像,图像解析,北斗定位,精准&&教学,弱电系统,自动审核,智能审核,旱作节水,农业技术,勤指情,智慧街面巡防,智慧安防小区,智感安防小区,公安信息化,公安科技装备,警务信息化,天网,治安视频监控,公安大数据,警务云,视频图像感知,全息感知网,视频智能化,视频云,视频监控平台,视频图像综合应用,视频图像信息数据库,视图库,视频图像解析,人脸聚档,公安技战法,社会治安防控体系,圈层查控,市域单元防控,治安要素管控,数字驾驶舱,新型智慧城市,数据基础底座,智能视觉平台,系统平台维护,云网资源接入,驾驶舱,水质&&监测,三级等保,会商系统,值班视频,机房托管,无线&&网,网&&接入,全光网,电子商务进农村,互联网法庭,办公流量,弱电&&设施,新型城市,战术子网,云监管,云&&平台,文旅&&云,固网&&业务,固网语音,电子监控,新媒体宣传,院内&&导航,高精矢量地图,地图模拟导航,平台搭建,录音录像系统,网络运维,基础软件,软件开发,公共停车系统,无纸化,城市综合提升,一件事,一次办,只跑一次,市带县,情指勤,情指行,互联互通,五级乙等,医院&&级&&等,视频会议,云&&部署,全域可视化,执法&&装备,舆情分析,语音服务平台,语音&&平台,12123,网络设备,信息技术类,技防体系,火灾探测报警器,独立式&&火灾探测,阅卷系统,全域感知,物联网平台,融媒体中心,智慧交管,智能交管,交通治理,交通综合治理,拥堵治理,缓堵提升,数智治理,数字道路,交通提升,交通大脑,大数据分析,评价诊断,辅助决策,交通参数,交通态势,边缘计算单元,边缘计算盒子,边缘信号控制,边缘智能信控,边缘信控盒子,信控一体机,信号控制优化,信号控制与优化,统一信控平台,信号控制系统,信控系统,信控联网,安全治理,城市交通,农村交通,农村安全,交通违法,机动车违法,非机动车违法,电动自行车违法,重点车辆违法,农村违法,交通执法,机动车执法,非机动车执法,电动自行车执法,重点车辆执法,农村执法,重点车辆,视频抓拍,机动车抓拍,非机动车抓拍,违法抓拍,执法抓拍,电动自行车抓拍,车辆抓拍,车辆档案,违法检测,事件检测,二次识别,违法识别,行为识别,特征识别,AI识别,AI分析,智能识别,智能分析,视频分析,视频解析,图片解析,智能算法,智能视觉,以图搜图,布控,检索比对,学院&&信息化,大学&&信息化,校园&&信息化,医院&&信息化,医疗&&信息化,学院&&智能化,大学&&智能化,校园&&智能化,医院&&智能化,医疗&&智能化,互联网接入,光纤,链路,通信&&传输,在线监管,12313,12315,警务通,辅警通,检务通,手机卡,审务通,狱警通,城管通,党务通,4G视频,车载定位,流量服务,移动4G手机,办公自动化,OA办公,保密终端,政务短信平台,移动专属合作,人像卡口,网络线路,网络升级,宽带提速,数据库建设,办案手持终端,防汛视频,光伏扶贫,监控系统联网监督系统,监控设备,宽带升级,政务办公系统,网络化管理,移动终端,视频监控,光纤租赁,数据共享中心,宽带接入,光纤线路租费,智慧城市指挥中心,卡口系统,网络改造,视频检测站,手持报警器,值班室视频,智慧供水,高清会议系统,云视频,移动通信业务,电视会议,联网系统,网络安全,信息管理平台,监控中心,信息平台,VPN专线,门户网站建设,信息共享平台,互联网平台集成服务,值班管理系统,高清视频会议,矿坑监测点,线路组网,公交车载WIFI,OA功能扩展,移动税务信息化,互联网接入服务,信息服务平台,数字化中心,前端信息点,智能办公系统,无线通信设备,电子监控平台,办公管理平台,移动云,MAS,管理信息网,数据共享平台,网络运营服务,村村响,免费WIFI,信息安全服务,保密通信服务,保障体系,移动安全,监控设施,网&&租赁,数字化采集,应用程序服务,调度平台,运营平台,农村厕所&&提升,农村厕所&&改造,粪污&&平台,智慧灌区,水利大脑,水旱灾害防御,河长制湖长制,水利云平台,数字大厅,数据大脑,企业上云,智能巡更,园区信息化服务,智慧水表,一网通办,一网通管,一体化政务服务,城市治理,市域治理,可视化调度,智慧城市,CIM,智慧政务,数字民生,智慧物流,智慧能源,数字物流,数字城管,食品安全,智慧工地,数字产业,数据智能,智慧应急,智能装备,智慧城管,应急指挥系统,智慧消防,一网统管,城市超脑,天眼,城市&&智能,城市&&网络,城市&&数字化,城市&&数智,智能环保,智能医疗,远程诊断,智慧经济,智慧居民,智慧安防,智能电网,智慧安居,智慧健康,数字交通,智慧电网,智慧燃气,一图全面感知,一键可知全局,一站创新平台,一体运行联动,城市运行管理体系,创业服务平台,数字化产业,智慧管廊,智慧文旅,文旅云,电子健康卡,数字&&保障&&中心,视觉计算,APP建设,应急指挥能力,警情分析,执法助手,执法办案,AIGC,创新应用中心,基层防灾,精准分析,算力,防欺凌,人工智能,集群"
  1342. ex4 := "监理服务,监理&&中选,监理项目,项目监理,工程监理,预算编制,代理机构&&遴选,代理机构&&选取"
  1343. tagJ4 := TagMatching{
  1344. tagName: "第4类",
  1345. tagCode: "004",
  1346. matchField: []string{"title"},
  1347. matchKey: key4,
  1348. matchKeyReg: GetRegex(key4),
  1349. excludeField: []string{"title"},
  1350. excludeKey: ex4,
  1351. excludeKeyReg: GetRegex(ex4),
  1352. }
  1353. matchArr = append(matchArr, tagJ4)
  1354. key5 := "专网,网络,链路,线路,互联网,宽带,带宽,链路"
  1355. add5 := "租用,租赁,服务,接入"
  1356. ex5 := "监理服务,监理&&中选,监理项目,项目监理,工程监理,预算编制,代理机构&&遴选,代理机构&&选取"
  1357. tagJ5 := TagMatching{
  1358. tagName: "第5类",
  1359. tagCode: "005",
  1360. matchField: []string{"title"},
  1361. matchKey: key5,
  1362. matchKeyReg: GetRegex(key5),
  1363. addField: []string{"title"},
  1364. addKey: add5,
  1365. addKeyReg: GetRegex(add5),
  1366. excludeField: []string{"title"},
  1367. excludeKey: ex5,
  1368. excludeKeyReg: GetRegex(ex5),
  1369. }
  1370. matchArr = append(matchArr, tagJ5)
  1371. key6 := "社会治理信息化,综合指挥调度系统,视频图像交换系统,智能巡护终端,大数据智能监管平台,灌溉&&一张网,水肥一体化,农田信息化工程,耕地质量监测,农田生产&&监测,农田科技&&监测,农作物良种对比试验站,森林资源视频监控,自然保护区&&智慧化,城市生命线,城市运管服,城市运行管理服务,城市运行监测,城市管理监督评价指标体系,城市灾害预警,预警指挥平台,物联感知支撑平台,地理信息支撑系统,溯源体系软件平台建设,AI声音安防卫士,智能音频分析,智能音频检测,防欺凌AI音频报警,智能语音警报设备,农田&&信息化,农田信息工程,农田&&监测,高标准农田&&智能化,高标准农田&&图斑,高标准农田&&灌溉,高标准农田&&大数据,高标准&&农田监测,农田监测系统,高标准农田&&信息化监测,算力"
  1372. ex6 := "监理服务,监理&&中选,监理项目,项目监理,工程监理,预算编制,代理机构&&遴选,代理机构&&选取,起重机,材料,审计,编制服务,报告编制,会务服务"
  1373. tagJ6 := TagMatching{
  1374. tagName: "第6类",
  1375. tagCode: "006",
  1376. matchField: []string{"title"},
  1377. matchKey: key6,
  1378. matchKeyReg: GetRegex(key6),
  1379. excludeField: []string{"title"},
  1380. excludeKey: ex6,
  1381. excludeKeyReg: GetRegex(ex6),
  1382. }
  1383. matchArr = append(matchArr, tagJ6)
  1384. key7 := "综合服务能力,监控,水库,灌区,风险"
  1385. add7 := "提升,升级,改造,建设,信息化,雨水情,监测设施,监测预警,防控,预警,预防"
  1386. ex7 := "监理服务,监理&&中选,监理项目,项目监理,工程监理,预算编制,代理机构&&遴选,代理机构&&选取"
  1387. tagJ7 := TagMatching{
  1388. tagName: "第7类",
  1389. tagCode: "007",
  1390. matchField: []string{"title"},
  1391. matchKey: key7,
  1392. matchKeyReg: GetRegex(key7),
  1393. addField: []string{"title"},
  1394. addKey: add7,
  1395. addKeyReg: GetRegex(add7),
  1396. excludeField: []string{"title"},
  1397. excludeKey: ex7,
  1398. excludeKeyReg: GetRegex(ex7),
  1399. }
  1400. matchArr = append(matchArr, tagJ7)
  1401. key8 := "火灾&&报警,医院&&达标,医养&&设备,医养综合体,考点&&改造,养老&&设施,养老&&设备,密评,网络&&提升,长距离对讲,防统方,机顶盒,污染&&基站,乐业小站,城市&&生命线,全息投影,电子签,远程医学,掌上医院,算力集群,算力平台,量子计算平台,算力&&建设,算力服务,专属云,智算&&云,组网,园区&&安防,一网统管,全息感知,全域感知,智慧热力,危化品监管,综合管廊,数字孪生,城市风险,城市&&平台建设,智慧&&路灯,智能&&路灯,智慧&&灯杆,智能&&灯杆,监控杆,智慧&&灯塔,多功能路灯,数字&&路灯,数字&&灯杆,多杆合一,预警&&能力,应急&&能力提升,预警&&指挥,预警&&提升,火险&&监测,火情&&监测,视频&&指挥&&调度,无人机&&平台,航空应急,网络&&感知,融合调度,河长制,AI音频,声纹识别,AI预警,智能语音,警报设备,安防卫士,校园&&安防,AI报警,声纹,警务综合,警综,签名捺印,电子签,案管,涉案语音处理,警情分析,执法助手,执法办案,生态&&监测站,环境&&监测站,油烟&&监测,感烟报警,烟感报警,大模型,数据模型,普查&&PDA,普查&&PAD,智慧农业,旱作节水,雨水情,无人农场,溯源体系,数字茶园,数字农田,智慧灌区,水旱灾害防御,农田&&信息化,农田信息工程,农田&&监测,高标准农田&&智能化,高标准农田&&图斑,高标准农田&&灌溉,耕地质量评估,土壤&&检测,高标准农田&&大数据,智慧农业,土肥监测,耕地核实入库,高标准&&农田监测,农田监测系统,高标准农田&&信息化监测,互联网&&安全,互联网&&设备,卡口测速,云教室,天空地&&一体,四情&&监测,基层&&医疗&&体系,基层&&卫生&&系统,基层&&医疗&&系统,电子班牌,监控&&补点,监控&&补盲,考点&&升级,风险管控&&平台,耕地&&预警,公立医院改革,医院&&高质量发展,窨井&&整治,物联网&&设备,自动监测站,物联&&感知,诊疗平台,中心平台软件,环境监测,4G图传,医院告知软件,作战系统,电子报规,监控&&系统,智慧化,政务&&网络,移动端&&服务,固网&&服务,金保,便民&&热线,服务&&热线,视联网,视频&&联网"
  1402. ex8 := "家具,监理服务,监理&&中选,监理项目,项目监理,工程监理,预算编制,代理机构&&遴选,代理机构&&选取"
  1403. tagJ8 := TagMatching{
  1404. tagName: "第8类",
  1405. tagCode: "008",
  1406. matchField: []string{"title"},
  1407. matchKey: key8,
  1408. matchKeyReg: GetRegex(key8),
  1409. excludeField: []string{"title"},
  1410. excludeKey: ex8,
  1411. excludeKeyReg: GetRegex(ex8),
  1412. }
  1413. matchArr = append(matchArr, tagJ8)
  1414. f, err := excelize.OpenFile("./7月非运营商中标数据比对缺失数据V1.xlsx")
  1415. if err != nil {
  1416. fmt.Println(err)
  1417. return
  1418. }
  1419. defer func() {
  1420. f.Save()
  1421. if err := f.Close(); err != nil {
  1422. fmt.Println(err)
  1423. }
  1424. }()
  1425. //2.专项债详情
  1426. rows, err := f.GetRows("基础数据")
  1427. if err != nil {
  1428. fmt.Println(err)
  1429. return
  1430. }
  1431. for i := 2; i < len(rows); i++ {
  1432. title := rows[i][2]
  1433. tmp := map[string]interface{}{
  1434. "title": title,
  1435. }
  1436. _, match, _, ex := TaskTags(tmp, matchArr)
  1437. if match == "" {
  1438. f.SetCellValue("基础数据", fmt.Sprintf("%s%d", "K", i+1), "1")
  1439. }
  1440. if match != "" && ex != "" {
  1441. f.SetCellValue("基础数据", fmt.Sprintf("%s%d", "K", i+1), "2")
  1442. }
  1443. if match != "" && ex == "" {
  1444. f.SetCellValue("基础数据", fmt.Sprintf("%s%d", "K", i+1), "3")
  1445. }
  1446. }
  1447. f.Save()
  1448. log.Println("数据处理完毕")
  1449. }