index_merge.go 28 KB

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