index_merge.go 32 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060
  1. package services
  2. import (
  3. "encoding/json"
  4. "eta/mysteel_watch/global"
  5. "eta/mysteel_watch/models/index"
  6. "eta/mysteel_watch/utils"
  7. "eta/mysteel_watch/watch"
  8. "fmt"
  9. "os"
  10. "strconv"
  11. "strings"
  12. "time"
  13. "github.com/rdlucklib/rdluck_tools/paging"
  14. "github.com/xuri/excelize/v2"
  15. )
  16. // Merge 合并指标
  17. func Merge() {
  18. fmt.Println("merge start")
  19. /*
  20. 年底,季度,存放在一个excel中
  21. 月度30个指标存一个excel
  22. 周度25个指标存放一个excel
  23. 日度20个指标存一个excel
  24. */
  25. //年度->38
  26. IndexYearMerge()
  27. //季度->5
  28. IndexSeasonMerge()
  29. //月度->86
  30. IndexMonthMerge()
  31. //周度->292
  32. IndexWeekMerge()
  33. //日度->114
  34. IndexDayMerge()
  35. //merge_file_path
  36. fmt.Println("merge end")
  37. }
  38. // IndexYearMerge 年度
  39. func IndexYearMerge() {
  40. frequency := "年度"
  41. fileName := "year" + ".xlsx" //保存的文件名称
  42. yearIndexFilePath := global.CONFIG.Serve.IndexMergeSaveDir + fileName
  43. var err error
  44. //indexObj := new(index.BaseFromMysteelChemicalIndex)
  45. //yearList, err := indexObj.GetIndexByFrequency(frequency)
  46. yearList, err := watch.GetIndexByFrequency(frequency)
  47. if err != nil {
  48. fmt.Println("GetIndexByFrequency Err:" + err.Error())
  49. return
  50. }
  51. if len(yearList) <= 0 {
  52. return
  53. }
  54. //commentResult, err := GetIndexComment(yearIndexFilePath, yearList, 1)
  55. commentResult, err := GetIndexCommentV2(yearIndexFilePath, yearList, 1)
  56. if err != nil {
  57. fmt.Println("GetIndexComment Err:" + err.Error())
  58. return
  59. }
  60. if utils.FileIsExist(yearIndexFilePath) { //修改文件
  61. fileObj, err := excelize.OpenFile(yearIndexFilePath)
  62. if err != nil {
  63. fmt.Println("打开文件失败,Err:" + err.Error())
  64. return
  65. }
  66. fileObj.DeleteComment("Sheet1", "A1")
  67. fileObj.AddComment("Sheet1", "A1", commentResult)
  68. if err := fileObj.SaveAs(yearIndexFilePath); err != nil {
  69. fmt.Println("保存失败,Err:" + err.Error())
  70. fileObj.Close()
  71. return
  72. }
  73. fileObj.Close()
  74. } else { //新增文件
  75. templatePath := global.CONFIG.Serve.IndexSaveDir + "index_template.xlsx"
  76. templateFile, err := excelize.OpenFile(templatePath)
  77. if err != nil {
  78. fmt.Println("打开文件失败,Err:" + err.Error())
  79. return
  80. }
  81. templateFile.DeleteComment("Sheet1", "A1")
  82. templateFile.AddComment("Sheet1", "A1", commentResult)
  83. if err := templateFile.SaveAs(yearIndexFilePath); err != nil {
  84. fmt.Println("保存失败,Err:" + err.Error())
  85. templateFile.Close()
  86. return
  87. }
  88. templateFile.Close()
  89. }
  90. //刷新数据
  91. //MysteelChemicalRefresh(yearIndexFilePath)
  92. AddIndexRefreshToLPush(yearIndexFilePath)
  93. }
  94. // IndexSeasonMerge 季度
  95. func IndexSeasonMerge() {
  96. frequency := "季度"
  97. fileName := "season" + ".xlsx" //保存的文件名称
  98. seasonIndexFilePath := global.CONFIG.Serve.IndexMergeSaveDir + fileName
  99. var err error
  100. //indexObj := new(index.BaseFromMysteelChemicalIndex)
  101. //seasonList, err := indexObj.GetIndexByFrequency(frequency)
  102. seasonList, err := watch.GetIndexByFrequency(frequency)
  103. if err != nil {
  104. fmt.Println("GetIndexByFrequency Err:" + err.Error())
  105. return
  106. }
  107. if len(seasonList) <= 0 {
  108. return
  109. }
  110. //commentResult, err := GetIndexComment(seasonIndexFilePath, seasonList, 1)
  111. commentResult, err := GetIndexCommentV2(seasonIndexFilePath, seasonList, 1)
  112. if err != nil {
  113. fmt.Println("GetIndexComment Err:" + err.Error())
  114. return
  115. }
  116. if utils.FileIsExist(seasonIndexFilePath) { //修改文件
  117. fileObj, err := excelize.OpenFile(seasonIndexFilePath)
  118. if err != nil {
  119. fmt.Println("打开文件失败,Err:" + err.Error())
  120. return
  121. }
  122. fileObj.DeleteComment("Sheet1", "A1")
  123. fileObj.AddComment("Sheet1", "A1", commentResult)
  124. if err := fileObj.SaveAs(seasonIndexFilePath); err != nil {
  125. fmt.Println("保存失败,Err:" + err.Error())
  126. fileObj.Close()
  127. return
  128. }
  129. fileObj.Close()
  130. } else { //新增文件
  131. templatePath := global.CONFIG.Serve.IndexSaveDir + "index_template.xlsx"
  132. templateFile, err := excelize.OpenFile(templatePath)
  133. if err != nil {
  134. fmt.Println("打开文件失败,Err:" + err.Error())
  135. return
  136. }
  137. templateFile.DeleteComment("Sheet1", "A1")
  138. templateFile.AddComment("Sheet1", "A1", commentResult)
  139. if err := templateFile.SaveAs(seasonIndexFilePath); err != nil {
  140. fmt.Println("保存失败,Err:" + err.Error())
  141. templateFile.Close()
  142. return
  143. }
  144. templateFile.Close()
  145. }
  146. //刷新数据
  147. //MysteelChemicalRefresh(seasonIndexFilePath)
  148. AddIndexRefreshToLPush(seasonIndexFilePath)
  149. }
  150. //月度
  151. //func IndexMonthMerge() {
  152. // frequency := "月度"
  153. // filePre := "month"
  154. // pageSize := 30
  155. // var err error
  156. //
  157. // indexObj := new(index.BaseFromMysteelChemicalIndex)
  158. // total, err := indexObj.GetIndexByFrequencyCount(frequency)
  159. // if err != nil {
  160. // fmt.Println("GetIndexByFrequencyCount Err:" + err.Error())
  161. // return
  162. // }
  163. //
  164. // maxFileIndexItem, err := indexObj.GetMaxFileIndex(frequency)
  165. // if err != nil {
  166. // fmt.Println("GetMaxFileIndex Err:" + err.Error())
  167. // return
  168. // }
  169. //
  170. // maxFileIndex := maxFileIndexItem.FileIndex
  171. // if maxFileIndex <= 0 {
  172. // maxFileIndex = 1
  173. // }
  174. //
  175. // fileName := filePre + "_" + strconv.Itoa(maxFileIndex) + ".xlsx" //保存的文件名称
  176. // monthIndexFilePath := global.CONFIG.Serve.IndexMergeSaveDir + fileName
  177. //
  178. // indexTotal, err := indexObj.GetIndexCountByMergeFilePath(monthIndexFilePath)
  179. // if err != nil {
  180. // fmt.Println("GetIndexCountByMergeFilePath Err:" + err.Error())
  181. // return
  182. // }
  183. //
  184. // if (indexTotal > int64(pageSize)/2) && maxFileIndex != 1 {
  185. // maxFileIndex += 1
  186. // }
  187. //
  188. // fmt.Println("maxFileIndex:", maxFileIndex)
  189. // totalPage := paging.PageCount(int(total), pageSize)
  190. // fmt.Println("total:", total)
  191. // fmt.Println("totalPage:", totalPage)
  192. // for i := 1; i <= totalPage; i++ {
  193. //
  194. // offset := (i - 1) * pageSize
  195. //
  196. // fileName = filePre + "_" + strconv.Itoa(maxFileIndex) + ".xlsx" //保存的文件名称
  197. // monthIndexFilePath := global.CONFIG.Serve.IndexMergeSaveDir + fileName
  198. // fmt.Println(monthIndexFilePath)
  199. //
  200. // fmt.Println(offset, pageSize)
  201. // pageList, err := indexObj.GetIndexByFrequencyPage(frequency, offset, pageSize)
  202. // if err != nil {
  203. // fmt.Println("GetIndexByFrequency Err:" + err.Error())
  204. // return
  205. // }
  206. //
  207. // commentResult, err := GetIndexComment(monthIndexFilePath, pageList, maxFileIndex)
  208. // if err != nil {
  209. // fmt.Println("GetIndexComment Err:" + err.Error())
  210. // return
  211. // }
  212. // if utils.FileIsExist(monthIndexFilePath) { //修改文件
  213. // fileObj, err := excelize.OpenFile(monthIndexFilePath)
  214. // if err != nil {
  215. // fmt.Println("打开文件失败,Err:" + err.Error())
  216. // return
  217. // }
  218. //
  219. // fileObj.DeleteComment("Sheet1", "A1")
  220. // fileObj.AddComment("Sheet1", "A1", commentResult)
  221. // if err := fileObj.SaveAs(monthIndexFilePath); err != nil {
  222. // fmt.Println("保存失败,Err:" + err.Error())
  223. // fileObj.Close()
  224. // return
  225. // }
  226. // fileObj.Close()
  227. // } else { //新增文件
  228. // templatePath := global.CONFIG.Serve.IndexSaveDir + "index_template.xlsx"
  229. // templateFile, err := excelize.OpenFile(templatePath)
  230. // if err != nil {
  231. // fmt.Println("打开文件失败,Err:" + err.Error())
  232. // return
  233. // }
  234. // templateFile.DeleteComment("Sheet1", "A1")
  235. // templateFile.AddComment("Sheet1", "A1", commentResult)
  236. // if err := templateFile.SaveAs(monthIndexFilePath); err != nil {
  237. // fmt.Println("保存失败,Err:" + err.Error())
  238. // templateFile.Close()
  239. // return
  240. // }
  241. // templateFile.Close()
  242. // }
  243. // maxFileIndex += 1
  244. // time.Sleep(1 * time.Second)
  245. // }
  246. //}
  247. func IndexMonthMerge() {
  248. frequency := "月度"
  249. filePre := "month"
  250. pageSize := 30
  251. err := indexMerge(frequency, filePre, pageSize)
  252. if err != nil {
  253. fmt.Println("合并月度指标失败,err:", err)
  254. }
  255. }
  256. //日度
  257. //func IndexDayMerge() {
  258. // frequency := "日度"
  259. // filePre := "day"
  260. // pageSize := 30
  261. // var err error
  262. //
  263. // indexObj := new(index.BaseFromMysteelChemicalIndex)
  264. // total, err := indexObj.GetIndexByFrequencyCount(frequency)
  265. // if err != nil {
  266. // fmt.Println("GetIndexByFrequencyCount Err:" + err.Error())
  267. // return
  268. // }
  269. //
  270. // maxFileIndexItem, err := indexObj.GetMaxFileIndex(frequency)
  271. // if err != nil {
  272. // fmt.Println("GetMaxFileIndex Err:" + err.Error())
  273. // return
  274. // }
  275. //
  276. // maxFileIndex := maxFileIndexItem.FileIndex
  277. // if maxFileIndex <= 0 {
  278. // maxFileIndex = 1
  279. // }
  280. //
  281. // fileName := filePre + "_" + strconv.Itoa(maxFileIndex) + ".xlsx" //保存的文件名称
  282. // monthIndexFilePath := global.CONFIG.Serve.IndexMergeSaveDir + fileName
  283. //
  284. // indexTotal, err := indexObj.GetIndexCountByMergeFilePath(monthIndexFilePath)
  285. // if err != nil {
  286. // fmt.Println("GetIndexCountByMergeFilePath Err:" + err.Error())
  287. // return
  288. // }
  289. //
  290. // if (indexTotal > int64(pageSize)/2) && maxFileIndex != 1 {
  291. // maxFileIndex += 1
  292. // }
  293. //
  294. // fmt.Println("maxFileIndex:", maxFileIndex)
  295. // totalPage := paging.PageCount(int(total), pageSize)
  296. // fmt.Println("total:", total)
  297. // fmt.Println("totalPage:", totalPage)
  298. // for i := 1; i <= totalPage; i++ {
  299. //
  300. // offset := (i - 1) * pageSize
  301. //
  302. // fileName = filePre + "_" + strconv.Itoa(maxFileIndex) + ".xlsx" //保存的文件名称
  303. // monthIndexFilePath := global.CONFIG.Serve.IndexMergeSaveDir + fileName
  304. // fmt.Println(monthIndexFilePath)
  305. //
  306. // fmt.Println(offset, pageSize)
  307. // pageList, err := indexObj.GetIndexByFrequencyPage(frequency, offset, pageSize)
  308. // if err != nil {
  309. // fmt.Println("GetIndexByFrequency Err:" + err.Error())
  310. // return
  311. // }
  312. //
  313. // commentResult, err := GetIndexComment(monthIndexFilePath, pageList, maxFileIndex)
  314. // if err != nil {
  315. // fmt.Println("GetIndexComment Err:" + err.Error())
  316. // return
  317. // }
  318. // if utils.FileIsExist(monthIndexFilePath) { //修改文件
  319. // fileObj, err := excelize.OpenFile(monthIndexFilePath)
  320. // if err != nil {
  321. // fmt.Println("打开文件失败,Err:" + err.Error())
  322. // return
  323. // }
  324. //
  325. // fileObj.DeleteComment("Sheet1", "A1")
  326. // fileObj.AddComment("Sheet1", "A1", commentResult)
  327. // if err := fileObj.SaveAs(monthIndexFilePath); err != nil {
  328. // fmt.Println("保存失败,Err:" + err.Error())
  329. // fileObj.Close()
  330. // return
  331. // }
  332. // fileObj.Close()
  333. // } else { //新增文件
  334. // templatePath := global.CONFIG.Serve.IndexSaveDir + "index_template.xlsx"
  335. // templateFile, err := excelize.OpenFile(templatePath)
  336. // if err != nil {
  337. // fmt.Println("打开文件失败,Err:" + err.Error())
  338. // return
  339. // }
  340. // templateFile.DeleteComment("Sheet1", "A1")
  341. // templateFile.AddComment("Sheet1", "A1", commentResult)
  342. // if err := templateFile.SaveAs(monthIndexFilePath); err != nil {
  343. // fmt.Println("保存失败,Err:" + err.Error())
  344. // templateFile.Close()
  345. // return
  346. // }
  347. // templateFile.Close()
  348. // }
  349. // maxFileIndex += 1
  350. // time.Sleep(1 * time.Second)
  351. // }
  352. //}
  353. // IndexDayMerge 日度指标合并
  354. func IndexDayMerge() {
  355. frequency := "日度"
  356. filePre := "day"
  357. pageSize := 30 //每个excel表需要的指标数
  358. err := indexMerge(frequency, filePre, pageSize)
  359. if err != nil {
  360. fmt.Println("合并日度指标失败,err:", err)
  361. }
  362. }
  363. // IndexWeekMerge 周度指标合并
  364. func IndexWeekMerge() {
  365. frequency := "周度"
  366. filePre := "week"
  367. pageSize := 30 //每个excel表需要的指标数
  368. err := indexMerge(frequency, filePre, pageSize)
  369. if err != nil {
  370. fmt.Println("合并周度指标失败,err:", err)
  371. }
  372. }
  373. //func IndexWeekMerge() {
  374. // frequency := "周度"
  375. // filePre := "week"
  376. // pageSize := 30 //每个excel表需要的指标数
  377. // firstIndexCount := pageSize //第一个添加的excel表需要的指标数
  378. // var err error
  379. //
  380. // indexObj := new(index.BaseFromMysteelChemicalIndex)
  381. //
  382. // // 获取未合并的指标总数量
  383. // total, err := indexObj.GetNoMergeIndexByFrequencyCount(frequency)
  384. // if err != nil {
  385. // fmt.Println("GetIndexByFrequencyCount Err:" + err.Error())
  386. // return
  387. // }
  388. // //未合并的指标总数量小于等于0,说明没有需要合并的指标
  389. // if total <=0{
  390. // return
  391. // }
  392. //
  393. // // 获取最大的文件编号下标
  394. // maxFileIndexItem, err := indexObj.GetMaxFileIndex(frequency)
  395. // if err != nil {
  396. // fmt.Println("GetMaxFileIndex Err:" + err.Error())
  397. // return
  398. // }
  399. //
  400. // maxFileIndex := maxFileIndexItem.FileIndex
  401. // if maxFileIndex <= 0 {
  402. // maxFileIndex = 1
  403. // }
  404. //
  405. // fileName := filePre + "_" + strconv.Itoa(maxFileIndex) + ".xlsx" //保存的文件名称
  406. // maxMergeIndexFilePath := global.CONFIG.Serve.IndexMergeSaveDir + fileName
  407. //
  408. // // 根据文件下标获取该文件下标已经存在多少的指标
  409. // indexTotal, err := indexObj.GetIndexCountByMergeFilePath(maxMergeIndexFilePath)
  410. // if err != nil {
  411. // fmt.Println("GetIndexCountByMergeFilePath Err:" + err.Error())
  412. // return
  413. // }
  414. //
  415. // // 如果最近的excel表的指标数量 少于 每页需要的指标数
  416. // if int(indexTotal) < pageSize {
  417. // // 最近的excel表的待添加指标数 = 每页需要的指标数 - 已经添加的指标
  418. // firstIndexCount = pageSize - int(indexTotal)
  419. // }
  420. //
  421. // fmt.Println("maxFileIndex:", maxFileIndex)
  422. //
  423. // // 除去第一个excel表的剩余需要添加的指标数量
  424. // nextTotal := int(total)-firstIndexCount
  425. // // 总文件数
  426. // totalPage := paging.PageCount(nextTotal, pageSize)
  427. // totalPage = totalPage+1 //需要加上除去在外面的指标(第一张excel)
  428. // fmt.Println("total:", total)
  429. // fmt.Println("totalPage:", totalPage)
  430. // for i := 1; i <= totalPage; i++ {
  431. // //offset := (i - 1) * pageSize
  432. //
  433. // fileName = filePre + "_" + strconv.Itoa(maxFileIndex) + ".xlsx" //保存的文件名称
  434. // mergeIndexFilePath := global.CONFIG.Serve.IndexMergeSaveDir + fileName
  435. // fmt.Println(mergeIndexFilePath)
  436. //
  437. // var list []*index.BaseFromMysteelChemicalIndex
  438. // // 需要查询的指标数
  439. // size := pageSize
  440. // if i == 1{
  441. // size = firstIndexCount // 第一页需要合并的新指标数
  442. //
  443. // // 第一页需要的指标列表
  444. // tmpList ,tmpErr := indexObj.GetIndexByFrequencyListByMergeFilePath(frequency,mergeIndexFilePath)
  445. // if tmpErr != nil{
  446. // fmt.Println("GetIndexByFrequencyListByMergeFilePath Err:" + err.Error())
  447. // return
  448. // }
  449. // list = tmpList
  450. // }
  451. // fmt.Println("需要查询",size,"个指标")
  452. //
  453. // //fmt.Println(offset, pageSize)
  454. //
  455. // // 当下需要合并到excel的指标
  456. // pageList, err := indexObj.GetNoMergeIndexByFrequencyPage(frequency, size)
  457. // if err != nil {
  458. // fmt.Println("GetIndexByFrequency Err:" + err.Error())
  459. // return
  460. // }
  461. //
  462. // if len(list)>0{
  463. // pageList = append(pageList,list...)
  464. // }
  465. //
  466. // commentResult, err := GetIndexComment(mergeIndexFilePath, pageList, maxFileIndex)
  467. // if err != nil {
  468. // fmt.Println("GetIndexComment Err:" + err.Error())
  469. // return
  470. // }
  471. // if utils.FileIsExist(mergeIndexFilePath) { //修改文件
  472. // fileObj, err := excelize.OpenFile(mergeIndexFilePath)
  473. // if err != nil {
  474. // fmt.Println("打开文件失败,Err:" + err.Error())
  475. // return
  476. // }
  477. //
  478. // fileObj.DeleteComment("Sheet1", "A1")
  479. // fileObj.AddComment("Sheet1", "A1", commentResult)
  480. // if err := fileObj.SaveAs(mergeIndexFilePath); err != nil {
  481. // fmt.Println("保存失败,Err:" + err.Error())
  482. // fileObj.Close()
  483. // return
  484. // }
  485. // fileObj.Close()
  486. // } else { //新增文件
  487. // templatePath := global.CONFIG.Serve.IndexSaveDir + "index_template.xlsx"
  488. // templateFile, err := excelize.OpenFile(templatePath)
  489. // if err != nil {
  490. // fmt.Println("打开文件失败,Err:" + err.Error())
  491. // return
  492. // }
  493. // templateFile.DeleteComment("Sheet1", "A1")
  494. // templateFile.AddComment("Sheet1", "A1", commentResult)
  495. // if err := templateFile.SaveAs(mergeIndexFilePath); err != nil {
  496. // fmt.Println("保存失败,Err:" + err.Error())
  497. // templateFile.Close()
  498. // return
  499. // }
  500. // templateFile.Close()
  501. // }
  502. // maxFileIndex += 1
  503. // time.Sleep(1 * time.Second)
  504. // }
  505. //}
  506. // indexMerge 指标合并
  507. // @params frequency string 频度
  508. // @params filePre string 文件名前缀
  509. // @params pageSize int 每个excel表中的指标数量
  510. func indexMerge(frequency, filePre string, pageSize int) (err error) {
  511. firstIndexCount := pageSize //第一个添加的excel表需要的指标数
  512. //indexObj := new(index.BaseFromMysteelChemicalIndex)
  513. frequencyReq := watch.GetMaxFileIndexReq{
  514. Frequency: frequency,
  515. }
  516. // 获取未合并的指标总数量
  517. total, err := watch.GetNoMergeIndexByFrequencyCount(frequencyReq)
  518. if err != nil {
  519. fmt.Println("GetIndexByFrequencyCount Err:" + err.Error())
  520. return
  521. }
  522. //未合并的指标总数量小于等于0,说明没有需要合并的指标
  523. if total <= 0 {
  524. return
  525. }
  526. // 获取最大的文件编号下标
  527. maxFileIndexItem, err := watch.GetMaxFileIndex(frequencyReq)
  528. maxFileIndex := maxFileIndexItem.FileIndex
  529. if maxFileIndex <= 0 {
  530. maxFileIndex = 1
  531. }
  532. fileName := filePre + "_" + strconv.Itoa(maxFileIndex) + ".xlsx" //保存的文件名称
  533. maxMergeIndexFilePath := global.CONFIG.Serve.IndexMergeSaveDir + fileName
  534. // 根据文件下标获取该文件下标已经存在多少的指标
  535. //indexTotal, err := indexObj.GetIndexCountByMergeFilePath(maxMergeIndexFilePath)
  536. indexTotal, err := watch.GetIndexCountByMergeFilePath(maxMergeIndexFilePath)
  537. if err != nil {
  538. fmt.Println("GetIndexCountByMergeFilePath Err:" + err.Error())
  539. return
  540. }
  541. fmt.Println("当前待合并的文件名:", maxMergeIndexFilePath)
  542. fmt.Println("当前文件中指标的最大数量:", indexTotal)
  543. fmt.Println("maxFileIndex:", maxFileIndex)
  544. // 如果最近的excel表的指标数量 少于 每页需要的指标数
  545. if int(indexTotal) < pageSize {
  546. // 最近的excel表的待添加指标数 = 每页需要的指标数 - 已经添加的指标
  547. firstIndexCount = pageSize - int(indexTotal)
  548. } else {
  549. firstIndexCount = pageSize
  550. maxFileIndex++
  551. }
  552. fmt.Println("maxFileIndex2:", maxFileIndex)
  553. // 除去第一个excel表的剩余需要添加的指标数量
  554. nextTotal := int(total) - firstIndexCount
  555. // 总文件数
  556. totalPage := paging.PageCount(nextTotal, pageSize)
  557. totalPage = totalPage + 1 //需要加上除去在外面的指标(第一张excel)
  558. fmt.Println("total:", total)
  559. fmt.Println("totalPage:", totalPage)
  560. for i := 1; i <= totalPage; i++ {
  561. //offset := (i - 1) * pageSize
  562. fileName = filePre + "_" + strconv.Itoa(maxFileIndex) + ".xlsx" //保存的文件名称
  563. mergeIndexFilePath := global.CONFIG.Serve.IndexMergeSaveDir + fileName
  564. fmt.Println(mergeIndexFilePath)
  565. //var list []*index.BaseFromMysteelChemicalIndex
  566. // 需要查询的指标数
  567. size := pageSize
  568. if i == 1 {
  569. size = firstIndexCount // 第一页需要合并的新指标数
  570. // 第一页需要的指标列表
  571. //tmpList, tmpErr := indexObj.GetIndexByFrequencyListByMergeFilePath(frequency, mergeIndexFilePath)
  572. //if tmpErr != nil {
  573. // fmt.Println("GetIndexByFrequencyListByMergeFilePath Err:" + tmpErr.Error())
  574. // err = tmpErr
  575. // return
  576. //}
  577. //list = tmpList
  578. }
  579. fmt.Println("需要查询", size, "个指标")
  580. //fmt.Println(offset, pageSize)
  581. // 当下需要合并到excel的指标
  582. pageList, tmpErr := watch.GetNoMergeIndexByFrequencyPage(frequency, size)
  583. if tmpErr != nil {
  584. fmt.Println("GetIndexByFrequency Err:" + tmpErr.Error())
  585. err = tmpErr
  586. return
  587. }
  588. //if len(list) > 0 {
  589. // pageList = append(pageList, list...)
  590. //}
  591. commentResult, tmpErr := GetIndexCommentV2(mergeIndexFilePath, pageList, maxFileIndex)
  592. if tmpErr != nil {
  593. fmt.Println("GetIndexComment Err:" + tmpErr.Error())
  594. err = tmpErr
  595. return
  596. }
  597. if utils.FileIsExist(mergeIndexFilePath) { //修改文件
  598. fileObj, tmpErr := excelize.OpenFile(mergeIndexFilePath)
  599. if tmpErr != nil {
  600. fmt.Println("打开文件失败,Err:" + tmpErr.Error())
  601. err = tmpErr
  602. return
  603. }
  604. fileObj.DeleteComment("Sheet1", "A1")
  605. fileObj.AddComment("Sheet1", "A1", commentResult)
  606. if err = fileObj.SaveAs(mergeIndexFilePath); err != nil {
  607. fmt.Println("保存失败,Err:" + err.Error())
  608. fileObj.Close()
  609. return
  610. }
  611. fileObj.Close()
  612. } else { //新增文件
  613. templatePath := global.CONFIG.Serve.IndexSaveDir + "index_template.xlsx"
  614. templateFile, tmpErr := excelize.OpenFile(templatePath)
  615. if tmpErr != nil {
  616. fmt.Println("打开文件失败,Err:" + tmpErr.Error())
  617. err = tmpErr
  618. return
  619. }
  620. templateFile.DeleteComment("Sheet1", "A1")
  621. templateFile.AddComment("Sheet1", "A1", commentResult)
  622. if err = templateFile.SaveAs(mergeIndexFilePath); err != nil {
  623. fmt.Println("保存失败,Err:" + err.Error())
  624. templateFile.Close()
  625. return
  626. }
  627. templateFile.Close()
  628. }
  629. maxFileIndex += 1
  630. time.Sleep(1 * time.Second)
  631. //刷新数据
  632. //MysteelChemicalRefresh(mergeIndexFilePath)
  633. //AddIndexRefreshToLPush(mergeIndexFilePath)
  634. }
  635. return
  636. }
  637. //func GetIndexComment(indexFilePath string, list []*index.BaseFromMysteelChemicalIndex, fileIndex int) (commentResult string, err error) {
  638. // runMode := "release"
  639. // indexInfo := new(IndexObj)
  640. // if utils.FileIsExist(indexFilePath) { //文件存在
  641. // fmt.Println("utils.FileIsExist")
  642. // getCommentStr := GetComment(indexFilePath)
  643. // fmt.Println(getCommentStr)
  644. //
  645. // err = json.Unmarshal([]byte(getCommentStr), &indexInfo)
  646. // if err != nil {
  647. // fmt.Println("json.Unmarshal err:" + err.Error())
  648. // return
  649. // }
  650. // } else { //文件不存在,
  651. // indexInfo.BlankValue = "0"
  652. // indexInfo.CanMark = true
  653. // indexInfo.ChartLineType = "0"
  654. // indexInfo.DateBlock = 0
  655. // indexInfo.DateBlockCount = 1
  656. // indexInfo.DateFormat = 0
  657. // indexInfo.DateTimeTag = "637973605613980000"
  658. // indexInfo.EndDate = ""
  659. // indexInfo.ExportType = 0
  660. // indexInfo.HasDescription = true
  661. // indexInfo.HasEmptyRows = false
  662. // indexInfo.HasFrequency = true
  663. // indexInfo.HasIndexID = true
  664. // indexInfo.HasLastDate = true
  665. // indexInfo.HasSourceName = true
  666. // indexInfo.HasTimeInterval = true
  667. // indexInfo.HasUnit = true
  668. // indexInfo.HasUpdateDate = true
  669. // indexInfo.IsCreateChart = false
  670. // indexInfo.IsDataSort = true
  671. // indexInfo.IsNewSheet = false
  672. // indexInfo.IsNewWorkbook = false
  673. // indexInfo.Position = "A1"
  674. // indexInfo.ShowBlankLines = false
  675. // indexInfo.StartDate = ""
  676. // indexInfo.Transpose = false
  677. // indexInfo.UpdateMode = 1
  678. // indexInfo.LookModel.IsLast = false
  679. // indexInfo.LookModel.LookValue = 0
  680. // indexInfo.LookModel.LookType = 0
  681. // indexInfo.Ver = 3
  682. // }
  683. // modelsList := make([]IndexModels, 0)
  684. // startDate := "1990-01-01"
  685. //
  686. // indexObj := new(index.BaseFromMysteelChemicalIndex)
  687. //
  688. // modelsList = append(modelsList, indexInfo.Models...)
  689. //
  690. // for k, v := range list {
  691. // fmt.Println(k, v)
  692. // item := new(IndexModels)
  693. // item.DataFormat = 0
  694. // if v.IndexName == "" {
  695. // item.DataStartDate = startDate
  696. // } else {
  697. // item.DataStartDate = v.StartDate.Format(utils.FormatDate)
  698. // }
  699. // item.DefineName = ""
  700. // item.DefineUnit = ""
  701. // item.DisplayIndexCode = v.IndexCode
  702. // item.IndexCode = v.IndexCode
  703. // item.IndexFormula = v.IndexCode
  704. // item.PointValue = 0
  705. // item.UnionStart = ""
  706. // modelsList = append(modelsList, *item)
  707. //
  708. // indexObj.IndexCode = v.IndexCode
  709. // indexObj.MergeFilePath = indexFilePath
  710. // indexObj.FileIndex = fileIndex
  711. //
  712. // updateColsArr := make([]string, 0)
  713. // updateColsArr = append(updateColsArr, "merge_file_path")
  714. // updateColsArr = append(updateColsArr, "file_index")
  715. //
  716. // err = indexObj.Update(runMode, updateColsArr)
  717. // if err != nil {
  718. // fmt.Println("indexObj.Update err:" + err.Error())
  719. // return
  720. // }
  721. // }
  722. //
  723. // indexInfo.Models = modelsList
  724. //
  725. // indexStr, err := json.Marshal(indexInfo)
  726. // if err != nil {
  727. // fmt.Println("json.Marshal err:" + err.Error())
  728. // return
  729. // }
  730. // text := string(indexStr)
  731. // text = strings.Trim(text, "{")
  732. //
  733. // commentMap := make(map[string]interface{})
  734. // commentMap["author"] = "{"
  735. // commentMap["text"] = text
  736. // //commentMap["text"] = commentItem
  737. //
  738. // commentJson, err := json.Marshal(commentMap)
  739. // if err != nil {
  740. // fmt.Println("json.Marshal err:" + err.Error())
  741. // }
  742. // commentResult = string(commentJson)
  743. // return
  744. //}
  745. func GetIndexCommentV2(indexFilePath string, list []index.BaseFromMysteelChemicalIndex, fileIndex int) (commentResult string, err error) {
  746. fmt.Println("GetIndexCommentV2 start")
  747. fmt.Println(indexFilePath)
  748. fmt.Println("GetIndexCommentV2 end")
  749. //runMode := "release"
  750. indexInfo := new(IndexObj)
  751. if utils.FileIsExist(indexFilePath) { //文件存在
  752. //fmt.Println("utils.FileIsExist")
  753. //getCommentStr := GetComment(indexFilePath)
  754. ////fmt.Println(getCommentStr)
  755. //
  756. //err = json.Unmarshal([]byte(getCommentStr), &indexInfo)
  757. //if err != nil {
  758. // fmt.Println("json.Unmarshal err:" + err.Error())
  759. // return
  760. //}
  761. err = os.Remove(indexFilePath)
  762. if err != nil {
  763. fmt.Println("os.Remove Err:" + err.Error() + ";indexFilePath:" + indexFilePath)
  764. return
  765. }
  766. }
  767. indexInfo.BlankValue = "0"
  768. indexInfo.CanMark = true
  769. indexInfo.ChartLineType = "0"
  770. indexInfo.DateBlock = 0
  771. indexInfo.DateBlockCount = 1
  772. indexInfo.DateFormat = 0
  773. indexInfo.DateTimeTag = "637973605613980000"
  774. indexInfo.EndDate = ""
  775. indexInfo.ExportType = 0
  776. indexInfo.HasDescription = true
  777. indexInfo.HasEmptyRows = false
  778. indexInfo.HasFrequency = true
  779. indexInfo.HasIndexID = true
  780. indexInfo.HasLastDate = true
  781. indexInfo.HasSourceName = true
  782. indexInfo.HasTimeInterval = true
  783. indexInfo.HasUnit = true
  784. indexInfo.HasUpdateDate = true
  785. indexInfo.IsCreateChart = false
  786. indexInfo.IsDataSort = true
  787. indexInfo.IsNewSheet = false
  788. indexInfo.IsNewWorkbook = false
  789. indexInfo.Position = "A1"
  790. indexInfo.ShowBlankLines = false
  791. indexInfo.StartDate = time.Now().AddDate(0, 0, -6).Format(utils.FormatDate)
  792. indexInfo.Transpose = false
  793. indexInfo.UpdateMode = 1
  794. indexInfo.LookModel.IsLast = false
  795. indexInfo.LookModel.LookValue = 0
  796. indexInfo.LookModel.LookType = 0
  797. indexInfo.Ver = 3
  798. modelsList := make([]IndexModels, 0)
  799. startDate := "1990-01-01"
  800. updateIndexes := make([]watch.UpdateIndexReq, 0)
  801. updateCols := []string{"merge_file_path", "file_index"}
  802. modelsList = append(modelsList, indexInfo.Models...)
  803. for _, v := range list {
  804. //fmt.Println(k, v)
  805. item := new(IndexModels)
  806. item.DataFormat = 0
  807. if v.IndexName == "" {
  808. item.DataStartDate = startDate
  809. } else {
  810. item.DataStartDate = v.EndDate.AddDate(0, 0, -7).Format(utils.FormatDate)
  811. }
  812. item.DefineName = ""
  813. item.DefineUnit = ""
  814. item.DisplayIndexCode = v.IndexCode
  815. item.IndexCode = v.IndexCode
  816. item.IndexFormula = v.IndexCode
  817. item.PointValue = 0
  818. item.UnionStart = ""
  819. modelsList = append(modelsList, *item)
  820. // 待更新的指标
  821. var req watch.UpdateIndexReq
  822. req.Item = new(index.BaseFromMysteelChemicalIndex)
  823. req.Item.BaseFromMysteelChemicalIndexId = v.BaseFromMysteelChemicalIndexId
  824. req.Item.IndexCode = v.IndexCode
  825. req.Item.MergeFilePath = indexFilePath
  826. req.Item.FileIndex = fileIndex
  827. req.UpdateCols = updateCols
  828. updateIndexes = append(updateIndexes, req)
  829. }
  830. // 批量更新Index
  831. if len(updateIndexes) > 0 {
  832. e := watch.MultiUpdateIndex(updateIndexes)
  833. if e != nil {
  834. fmt.Println("UpdateIndexByIndexCode err: " + e.Error())
  835. return
  836. }
  837. }
  838. indexInfo.Models = modelsList
  839. indexStr, err := json.Marshal(indexInfo)
  840. if err != nil {
  841. fmt.Println("json.Marshal err:" + err.Error())
  842. return
  843. }
  844. text := string(indexStr)
  845. text = strings.Trim(text, "{")
  846. commentMap := make(map[string]interface{})
  847. commentMap["author"] = "{"
  848. commentMap["text"] = text
  849. //commentMap["text"] = commentItem
  850. commentJson, err := json.Marshal(commentMap)
  851. if err != nil {
  852. fmt.Println("json.Marshal err:" + err.Error())
  853. }
  854. commentResult = string(commentJson)
  855. return
  856. }
  857. func GetIndexCommentV3(indexFilePath, StartDate string, list []index.BaseFromMysteelChemicalIndex) (commentResult string, err error) {
  858. indexInfo := new(IndexObj)
  859. indexInfo.BlankValue = "0"
  860. indexInfo.CanMark = true
  861. indexInfo.ChartLineType = "0"
  862. indexInfo.DateBlock = 0
  863. indexInfo.DateBlockCount = 1
  864. indexInfo.DateFormat = 0
  865. indexInfo.DateTimeTag = "637973605613980000"
  866. indexInfo.EndDate = ""
  867. indexInfo.ExportType = 0
  868. indexInfo.HasDescription = true
  869. indexInfo.HasEmptyRows = false
  870. indexInfo.HasFrequency = true
  871. indexInfo.HasIndexID = true
  872. indexInfo.HasLastDate = true
  873. indexInfo.HasSourceName = true
  874. indexInfo.HasTimeInterval = true
  875. indexInfo.HasUnit = true
  876. indexInfo.HasUpdateDate = true
  877. indexInfo.IsCreateChart = false
  878. indexInfo.IsDataSort = true
  879. indexInfo.IsNewSheet = false
  880. indexInfo.IsNewWorkbook = false
  881. indexInfo.Position = "A1"
  882. indexInfo.ShowBlankLines = false
  883. indexInfo.StartDate = StartDate // 这个是定义数据开始刷新的日期
  884. indexInfo.Transpose = false
  885. indexInfo.UpdateMode = 1
  886. indexInfo.LookModel.IsLast = false
  887. indexInfo.LookModel.LookValue = 0
  888. indexInfo.LookModel.LookType = 0
  889. indexInfo.Ver = 3
  890. modelsList := make([]IndexModels, 0)
  891. startDate := "1990-01-01"
  892. updateIndexes := make([]watch.UpdateIndexReq, 0)
  893. updateCols := []string{"merge_file_path", "file_index"}
  894. modelsList = append(modelsList, indexInfo.Models...)
  895. for _, v := range list {
  896. //fmt.Println(k, v)
  897. item := new(IndexModels)
  898. item.DataFormat = 0
  899. if v.IndexName == "" {
  900. item.DataStartDate = startDate // 数据的开始日期
  901. } else {
  902. item.DataStartDate = v.StartDate.Format(utils.FormatDate) // 数据的开始日期
  903. }
  904. item.DefineName = ""
  905. item.DefineUnit = ""
  906. item.DisplayIndexCode = v.IndexCode
  907. item.IndexCode = v.IndexCode
  908. item.IndexFormula = v.IndexCode
  909. item.PointValue = 0
  910. item.UnionStart = ""
  911. modelsList = append(modelsList, *item)
  912. // 待更新的指标
  913. var req watch.UpdateIndexReq
  914. req.Item = new(index.BaseFromMysteelChemicalIndex)
  915. req.Item.BaseFromMysteelChemicalIndexId = v.BaseFromMysteelChemicalIndexId
  916. req.Item.IndexCode = v.IndexCode
  917. req.Item.MergeFilePath = indexFilePath
  918. req.UpdateCols = updateCols
  919. updateIndexes = append(updateIndexes, req)
  920. }
  921. // 批量更新Index
  922. if len(updateIndexes) > 0 {
  923. e := watch.MultiUpdateIndex(updateIndexes)
  924. if e != nil {
  925. fmt.Println("UpdateIndexByIndexCode err: " + e.Error())
  926. return
  927. }
  928. }
  929. indexInfo.Models = modelsList
  930. indexStr, err := json.Marshal(indexInfo)
  931. if err != nil {
  932. fmt.Println("json.Marshal err:" + err.Error())
  933. return
  934. }
  935. text := string(indexStr)
  936. text = strings.Trim(text, "{")
  937. commentMap := make(map[string]interface{})
  938. commentMap["author"] = "{"
  939. commentMap["text"] = text
  940. //commentMap["text"] = commentItem
  941. commentJson, err := json.Marshal(commentMap)
  942. if err != nil {
  943. fmt.Println("json.Marshal err:" + err.Error())
  944. }
  945. commentResult = string(commentJson)
  946. return
  947. }
  948. type IndexObj struct {
  949. BlankValue string `json:"BlankValue"`
  950. CanMark bool `json:"CanMark"`
  951. ChartLineType string `json:"ChartLineType"`
  952. DateBlock int64 `json:"DateBlock"`
  953. DateBlockCount int64 `json:"DateBlockCount"`
  954. DateFormat int64 `json:"DateFormat"`
  955. DateTimeTag string `json:"DateTimeTag"`
  956. EndDate string `json:"EndDate"`
  957. ExportType int64 `json:"ExportType"`
  958. HasDescription bool `json:"HasDescription"`
  959. HasEmptyRows bool `json:"HasEmptyRows"`
  960. HasFrequency bool `json:"HasFrequency"`
  961. HasIndexID bool `json:"HasIndexID"`
  962. HasLastDate bool `json:"HasLastDate"`
  963. HasSourceName bool `json:"HasSourceName"`
  964. HasTimeInterval bool `json:"HasTimeInterval"`
  965. HasUnit bool `json:"HasUnit"`
  966. HasUpdateDate bool `json:"HasUpdateDate"`
  967. IsCreateChart bool `json:"IsCreateChart"`
  968. IsDataSort bool `json:"IsDataSort"`
  969. IsNewSheet bool `json:"IsNewSheet"`
  970. IsNewWorkbook bool `json:"IsNewWorkbook"`
  971. Models []IndexModels `json:"Models"`
  972. Position string `json:"Position"`
  973. RangeData string `json:"RangeData"`
  974. ShowBlankLines bool `json:"ShowBlankLines"`
  975. StartDate string `json:"StartDate"`
  976. Transpose bool `json:"Transpose"`
  977. UpdateMode int64 `json:"UpdateMode"`
  978. LookModel struct {
  979. IsLast bool `json:"IsLast"`
  980. LookValue int64 `json:"LookValue"`
  981. LookType int64 `json:"lookType"`
  982. } `json:"lookModel"`
  983. Ver int64 `json:"ver"`
  984. }
  985. type IndexModels struct {
  986. DataFormat int64 `json:"DataFormat"`
  987. DataStartDate string `json:"DataStartDate"`
  988. DefineName string `json:"DefineName"`
  989. DefineUnit string `json:"DefineUnit"`
  990. DisplayIndexCode string `json:"DisplayIndexCode"`
  991. IndexCode string `json:"IndexCode"`
  992. IndexFormula string `json:"IndexFormula"`
  993. PointValue int64 `json:"PointValue"`
  994. UnionStart string `json:"UnionStart"`
  995. }