xlsx_test.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499
  1. package main
  2. import (
  3. "fmt"
  4. "github.com/xuri/excelize/v2"
  5. "jygit.jydev.jianyu360.cn/data_processing/common_utils/mongodb"
  6. "log"
  7. "strings"
  8. "testing"
  9. )
  10. func TestA(T *testing.T) {
  11. Mgo := &mongodb.MongodbSim{
  12. //MongodbAddr: "172.17.189.140:27080",
  13. MongodbAddr: "127.0.0.1:27017",
  14. Size: 10,
  15. DbName: "wcc",
  16. //UserName: "SJZY_RWbid_ES",
  17. //Password: "SJZY@B4i4D5e6S",
  18. //Direct: true,
  19. }
  20. Mgo.InitPool()
  21. f, err := excelize.OpenFile("./拼数据.xlsx")
  22. if err != nil {
  23. fmt.Println(err)
  24. return
  25. }
  26. defer func() {
  27. if err := f.Close(); err != nil {
  28. fmt.Println(err)
  29. }
  30. }()
  31. rows, err := f.GetRows("Sheet1")
  32. if err != nil {
  33. fmt.Println(err)
  34. return
  35. }
  36. cells, _ := f.GetCols("Sheet2")
  37. for i := 1; i < len(rows); i++ {
  38. log.Print(rows[i][3])
  39. if rows[i][2] == "省级" {
  40. for k, v := range cells[0] {
  41. if k == 0 || v == "" {
  42. continue
  43. }
  44. insert := make(map[string]interface{})
  45. insert["top"] = rows[i][0]
  46. insert["area"] = rows[i][3]
  47. insert["level"] = rows[i][2]
  48. insert["sub"] = v
  49. insert["name"] = rows[i][3] + v
  50. Mgo.InsertOrUpdate("wcc", "wcc_0313", insert)
  51. }
  52. }
  53. if rows[i][2] == "市级" {
  54. for k, v := range cells[1] {
  55. if k == 0 || v == "" {
  56. continue
  57. }
  58. insert := make(map[string]interface{})
  59. insert["top"] = rows[i][0]
  60. insert["area"] = rows[i][3]
  61. insert["city"] = rows[i][4]
  62. insert["level"] = rows[i][2]
  63. insert["sub"] = v
  64. insert["name"] = rows[i][4] + v
  65. Mgo.InsertOrUpdate("wcc", "wcc_0313", insert)
  66. }
  67. }
  68. if rows[i][2] == "县级" {
  69. for k, v := range cells[2] {
  70. if k == 0 || v == "" {
  71. continue
  72. }
  73. insert := make(map[string]interface{})
  74. insert["top"] = rows[i][0]
  75. insert["area"] = rows[i][3]
  76. insert["city"] = rows[i][4]
  77. insert["district"] = rows[i][5]
  78. insert["level"] = rows[i][2]
  79. insert["sub"] = v
  80. insert["name"] = rows[i][4] + rows[i][5] + v
  81. Mgo.InsertOrUpdate("wcc", "wcc_0313", insert)
  82. }
  83. }
  84. }
  85. fmt.Println("over")
  86. }
  87. func TestA2(T *testing.T) {
  88. Mgo := &mongodb.MongodbSim{
  89. MongodbAddr: "127.0.0.1:27017",
  90. Size: 10,
  91. DbName: "wcc",
  92. }
  93. Mgo.InitPool()
  94. f, err := excelize.OpenFile("./拼数据.xlsx")
  95. if err != nil {
  96. fmt.Println(err)
  97. return
  98. }
  99. defer func() {
  100. if err := f.Close(); err != nil {
  101. fmt.Println(err)
  102. }
  103. }()
  104. rows, err := f.GetRows("Sheet3")
  105. if err != nil {
  106. fmt.Println(err)
  107. return
  108. }
  109. for i := 1; i < len(rows); i++ {
  110. log.Print(rows[i][2])
  111. insert := map[string]interface{}{
  112. "company_name": rows[i][2],
  113. "organizer": rows[i][1],
  114. }
  115. err = Mgo.InsertOrUpdate("wcc", "wcc_henan_gov2", insert)
  116. if err != nil {
  117. log.Println("err", err)
  118. }
  119. }
  120. fmt.Println("over")
  121. }
  122. func TestB(T *testing.T) {
  123. Mgo := &mongodb.MongodbSim{
  124. //MongodbAddr: "172.17.189.140:27080",
  125. MongodbAddr: "127.0.0.1:27083",
  126. Size: 10,
  127. DbName: "qfw",
  128. UserName: "SJZY_RWbid_ES",
  129. Password: "SJZY@B4i4D5e6S",
  130. Direct: true,
  131. }
  132. Mgo.InitPool()
  133. f, err := excelize.OpenFile("./剑鱼标讯_数据导出.xlsx")
  134. if err != nil {
  135. fmt.Println(err)
  136. return
  137. }
  138. defer func() {
  139. if err := f.Close(); err != nil {
  140. fmt.Println(err)
  141. }
  142. }()
  143. rows, err := f.GetRows("Sheet1")
  144. if err != nil {
  145. fmt.Println(err)
  146. return
  147. }
  148. for i := 1; i < len(rows); i++ {
  149. url := rows[i][2]
  150. log.Println(rows[i][1])
  151. id := GetIdByURL(url)
  152. re, _ := Mgo.FindById("bidding", id, nil)
  153. (*re)["wcc_id"] = i
  154. (*re)["toptype_old"] = (*re)["toptype"]
  155. (*re)["subtype_old"] = (*re)["subtype"]
  156. delete(*re, "toptype")
  157. delete(*re, "subtype")
  158. Mgo.SaveByOriID("wcc_bidding_0518", re)
  159. }
  160. log.Println("over")
  161. }
  162. // TestAAA 处理专项债券数据
  163. func TestAAA(t *testing.T) {
  164. //87 竞品
  165. Mgo := &mongodb.MongodbSim{
  166. //MongodbAddr: "172.17.189.140:27080",
  167. MongodbAddr: "127.0.0.1:27081",
  168. Size: 10,
  169. DbName: "py_theme",
  170. UserName: "",
  171. Password: "",
  172. Direct: true,
  173. }
  174. Mgo.InitPool()
  175. sess := Mgo.GetMgoConn()
  176. defer Mgo.DestoryMongoConn(sess)
  177. f, err := excelize.OpenFile("./湖北新增专项债.xlsx")
  178. if err != nil {
  179. fmt.Println(err)
  180. return
  181. }
  182. defer func() {
  183. f.Save()
  184. if err := f.Close(); err != nil {
  185. fmt.Println(err)
  186. }
  187. }()
  188. rows, err := f.GetRows("项目列表")
  189. if err != nil {
  190. fmt.Println(err)
  191. return
  192. }
  193. keys := []string{"projectName", "totalInvestment", "regionName", "cityName", "countyName", "capital", "applyDebt", "portfolioFinancing", "specialDebtAsCapital",
  194. "expectedReturn", "projectCost", "projectTypeName3", "projectSubject", "startDate", "endDate", "operationStartDate",
  195. "operationEndDate", "sourceIncome", "constructionContent", "remarks", "portfolioFinancingSource", "costIncomePercent", "coverageMultiple", "implementingAgency",
  196. "accountingFirm", "lawFirm", "createTime", "updateTime"}
  197. titles := []string{"项目名称", "总投资(万元)", "省份", "地市", "区县", "不含专项债资本金(万元)", "申请专项债总额(万元)", "其他债务融资(万元)", "专项债作资本金(万元)", "预期收入(万元)", "成本",
  198. "项目领域", "项目业主", "建设期开始", "建设期结束", "运营期开始", "运营期结束", "收入来源", "建设内容", "特殊情况备注", "其他债务融资来源", "成本/收入(%)", "覆盖倍数", "主管部门", "会计所", "律所", "入库时间", "更新时间"}
  199. keys2 := []string{"bondName", "bondShortName", "bondNo", "regionName", "bondType1Name", "bondType2Name", "projectType1Name", "totalAmount", "issueDate", "issuePlaceName", "issueTerm", "issueInterestRate", "issuePhase", "payInterestMethodName",
  200. "newBondAmount", "counterBondAmount", "refinancingBondAmount", "redemptionMethod", "valueDate", "expiryDate", "payInterestDate", "latelyPayInterestDate", "lastPayInterest", "cumulativePayInterest"}
  201. titles2 := []string{"项目名称", "债券名称", "债券简称", "债券编码", "省份", "债券性质", "债券类型", "官方项目类型", "发行金额(万元)", "发行日期", "发行场所", "发行期限(年)", "发行利率(%)", "发行期数", "付息方式", "新增债券(亿元)", "置换债券(亿元)", "再融资债券(亿元)", "赎回方式",
  202. "起息日", "到息日", "付息日", "最近付息日", "上期已付息(亿元)", "累计付息(亿元)"}
  203. line := 0
  204. line++
  205. f.NewSheet("项目详情")
  206. f.NewSheet("债券详情")
  207. bondLine := 0
  208. //设置第一行title
  209. _ = f.SetSheetRow("项目详情", fmt.Sprintf("%s%d", "A", line), &titles)
  210. _ = f.SetSheetRow("债券详情", fmt.Sprintf("%s%d", "A", line), &titles2)
  211. //
  212. for i := 1; i < len(rows); i++ {
  213. projectName := rows[i][0]
  214. //projectName := "新建南通至宁波高速铁路(海盐段)"
  215. log.Println(projectName)
  216. line++
  217. where := map[string]interface{}{
  218. "project.jcxx.projectName": projectName,
  219. }
  220. detail, _ := Mgo.FindOne("specialbond_detail_202407", where)
  221. if len(*detail) == 0 {
  222. continue
  223. }
  224. insert := make([]interface{}, 0)
  225. if project, ok := (*detail)["project"].(map[string]interface{}); ok {
  226. if jcxx, ok := project["jcxx"].(map[string]interface{}); ok {
  227. for _, v := range keys {
  228. insert = append(insert, jcxx[v])
  229. }
  230. }
  231. }
  232. err := f.SetSheetRow("项目详情", fmt.Sprintf("%s%d", "A", line), &insert)
  233. if err != nil {
  234. log.Println(err)
  235. return
  236. }
  237. // 债券基本信息
  238. if bonds, ok := (*detail)["bond"].([]interface{}); ok {
  239. for _, bond := range bonds {
  240. if bondData, ok := bond.(map[string]interface{}); ok {
  241. if jcxx, ok := bondData["jbxx"].(map[string]interface{}); ok {
  242. //if strings.Contains(util.ObjToString(jcxx["bondName"]), "2024") {
  243. bondInsert := make([]interface{}, 0)
  244. bondInsert = append(bondInsert, projectName)
  245. for _, v := range keys2 {
  246. bondInsert = append(bondInsert, jcxx[v])
  247. }
  248. bondLine++
  249. f.SetSheetRow("债券详情", fmt.Sprintf("%s%d", "A", line), &bondInsert)
  250. //}
  251. }
  252. }
  253. }
  254. }
  255. }
  256. //query := sess.DB("py_theme").C("specialbond_detail").Find(nil).Select(nil).Iter()
  257. //count := 0
  258. //for tmp := make(map[string]interface{}); query.Next(tmp); count++ {
  259. // if count%10000 == 0 {
  260. // log.Println("current:", count)
  261. // }
  262. //
  263. // id := mongodb.BsonIdToSId(tmp["_id"])
  264. // log.Println(id)
  265. //}
  266. }
  267. func TestGetIdByURL(t *testing.T) {
  268. url := "https://www.jianyu360.cn/article/content/AHnY1xBfikoAjYsNGd4cE8JIzAvFj1jcXNlKDhROC4eWlFwA15UCZQ%3D.html"
  269. fmt.Println(GetIdByURL(url))
  270. }
  271. // TestArea 中国行政区划数据-民政部
  272. func TestArea(t *testing.T) {
  273. Mgo := &mongodb.MongodbSim{
  274. //MongodbAddr: "172.17.189.140:27080",
  275. MongodbAddr: "127.0.0.1:27083",
  276. Size: 10,
  277. DbName: "qfw",
  278. UserName: "SJZY_RWbid_ES",
  279. Password: "SJZY@B4i4D5e6S",
  280. Direct: true,
  281. }
  282. Mgo.InitPool()
  283. f, err := excelize.OpenFile("./20240530_民政部统计数据.xlsx")
  284. if err != nil {
  285. fmt.Println(err)
  286. return
  287. }
  288. defer func() {
  289. if err := f.Close(); err != nil {
  290. fmt.Println(err)
  291. }
  292. }()
  293. rows, err := f.GetRows("2023")
  294. if err != nil {
  295. fmt.Println(err)
  296. return
  297. }
  298. for i := 1; i < len(rows); i++ {
  299. data := map[string]interface{}{}
  300. if rows[i][0] == "省份" {
  301. data["level"] = 1
  302. } else if rows[i][0] == "城市" {
  303. data["level"] = 2
  304. } else {
  305. data["level"] = 3
  306. }
  307. log.Println(rows[i][1])
  308. parts := strings.Split(rows[i][1], "(")
  309. data["province"] = parts[0]
  310. data["province_code"] = rows[i][2]
  311. if len(rows[i]) > 3 {
  312. data["city"] = rows[i][3]
  313. }
  314. if len(rows[i]) > 4 {
  315. data["city_code"] = rows[i][4]
  316. }
  317. if len(rows[i]) > 5 {
  318. data["area"] = rows[i][5]
  319. }
  320. if len(rows[i]) > 6 {
  321. data["area_code"] = rows[i][6]
  322. }
  323. Mgo.Save("wcc_area_minzhengbu", data)
  324. }
  325. }
  326. // TestArea2 中国行政区划数据-统计局
  327. func TestArea2(t *testing.T) {
  328. Mgo := &mongodb.MongodbSim{
  329. //MongodbAddr: "172.17.189.140:27080",
  330. MongodbAddr: "127.0.0.1:27083",
  331. Size: 10,
  332. DbName: "qfw",
  333. UserName: "SJZY_RWbid_ES",
  334. Password: "SJZY@B4i4D5e6S",
  335. Direct: true,
  336. }
  337. Mgo.InitPool()
  338. f, err := excelize.OpenFile("./20240530_统计局统计数据.xlsx")
  339. if err != nil {
  340. fmt.Println(err)
  341. return
  342. }
  343. defer func() {
  344. if err := f.Close(); err != nil {
  345. fmt.Println(err)
  346. }
  347. }()
  348. rows, err := f.GetRows("2023")
  349. if err != nil {
  350. fmt.Println(err)
  351. return
  352. }
  353. for i := 1; i < len(rows); i++ {
  354. data := map[string]interface{}{}
  355. data["level"] = rows[i][0]
  356. log.Println(rows[i][1], rows[3])
  357. data["province"] = rows[i][1]
  358. data["province_code"] = rows[i][2]
  359. if len(rows[i]) > 3 {
  360. data["city"] = rows[i][3]
  361. }
  362. if len(rows[i]) > 4 {
  363. data["city_code"] = rows[i][4]
  364. }
  365. if len(rows[i]) > 5 {
  366. data["area"] = rows[i][5]
  367. }
  368. if len(rows[i]) > 6 {
  369. data["area_code"] = rows[i][6]
  370. }
  371. Mgo.Save("wcc_area_tongjiju", data)
  372. }
  373. }
  374. func TestHN(t *testing.T) {
  375. Mgo := &mongodb.MongodbSim{
  376. //MongodbAddr: "172.17.189.140:27080",
  377. MongodbAddr: "127.0.0.1:27083",
  378. Size: 10,
  379. DbName: "qfw",
  380. UserName: "SJZY_RWbid_ES",
  381. Password: "SJZY@B4i4D5e6S",
  382. Direct: true,
  383. }
  384. Mgo.InitPool()
  385. //181
  386. Mgo2 := &mongodb.MongodbSim{
  387. //MongodbAddr: "172.17.4.181:27001",
  388. MongodbAddr: "127.0.0.1:27001",
  389. DbName: "mixdata",
  390. Size: 10,
  391. UserName: "",
  392. Password: "",
  393. Direct: true,
  394. }
  395. Mgo2.InitPool()
  396. f, err := excelize.OpenFile("./河南单位.xlsx")
  397. if err != nil {
  398. fmt.Println(err)
  399. return
  400. }
  401. defer func() {
  402. if err := f.Close(); err != nil {
  403. fmt.Println(err)
  404. }
  405. }()
  406. sheet := "单位"
  407. rows, err := f.GetRows(sheet)
  408. if err != nil {
  409. fmt.Println(err)
  410. return
  411. }
  412. for i := 1; i < len(rows); i++ {
  413. name := rows[i][0]
  414. log.Println(i, "----", name)
  415. //res, _ := Mgo2.FindOne("special_enterprise", map[string]interface{}{"company_name": name})
  416. //if res != nil && len(*res) > 0 {
  417. // f.SetCellValue(sheet, fmt.Sprintf("%s%d", "E", i+1), "special_enterprise")
  418. // f.SetCellValue(sheet, fmt.Sprintf("%s%d", "F", i+1), (*res)["company_status"])
  419. // f.SetCellValue(sheet, fmt.Sprintf("%s%d", "G", i+1), (*res)["company_type"])
  420. //} else {
  421. // ra, _ := Mgo2.FindOne("special_gov_unit", map[string]interface{}{"company_name": name})
  422. // if ra != nil && len(*ra) > 0 {
  423. // f.SetCellValue(sheet, fmt.Sprintf("%s%d", "E", i+1), "special_gov_unit")
  424. // f.SetCellValue(sheet, fmt.Sprintf("%s%d", "G", i+1), (*ra)["company_type"])
  425. // if util.ObjToString((*ra)["company_status"]) != "" {
  426. // f.SetCellValue(sheet, fmt.Sprintf("%s%d", "F", i+1), (*ra)["company_status"])
  427. // } else {
  428. // if util.IntAll((*ra)["use_flag"]) < 5 {
  429. // f.SetCellValue(sheet, fmt.Sprintf("%s%d", "F", i+1), "正常")
  430. // } else {
  431. // f.SetCellValue(sheet, fmt.Sprintf("%s%d", "F", i+1), "废弃")
  432. // }
  433. // }
  434. // }
  435. //}
  436. //
  437. data := map[string]interface{}{
  438. "detail": name,
  439. }
  440. res := getAreaInfo(data)
  441. if res != nil {
  442. city := res["city"]
  443. district := res["district"]
  444. f.SetCellValue("单位", fmt.Sprintf("%s%d", "B", i+1), city)
  445. f.SetCellValue("单位", fmt.Sprintf("%s%d", "C", i+1), district)
  446. }
  447. }
  448. f.Save()
  449. log.Println("结束")
  450. }