index_merge.go 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083
  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. "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. // 年度
  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. // 季度
  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. fmt.Println("GetIndexCommentV2 start")
  859. fmt.Println(indexFilePath)
  860. fmt.Println("GetIndexCommentV2 end")
  861. //runMode := "release"
  862. indexInfo := new(IndexObj)
  863. if utils.FileIsExist(indexFilePath) { //文件存在
  864. //fmt.Println("utils.FileIsExist")
  865. //getCommentStr := GetComment(indexFilePath)
  866. ////fmt.Println(getCommentStr)
  867. //
  868. //err = json.Unmarshal([]byte(getCommentStr), &indexInfo)
  869. //if err != nil {
  870. // fmt.Println("json.Unmarshal err:" + err.Error())
  871. // return
  872. //}
  873. err = os.Remove(indexFilePath)
  874. if err != nil {
  875. fmt.Println("os.Remove Err:" + err.Error() + ";indexFilePath:" + indexFilePath)
  876. return
  877. }
  878. }
  879. indexInfo.BlankValue = "0"
  880. indexInfo.CanMark = true
  881. indexInfo.ChartLineType = "0"
  882. indexInfo.DateBlock = 0
  883. indexInfo.DateBlockCount = 1
  884. indexInfo.DateFormat = 0
  885. indexInfo.DateTimeTag = "637973605613980000"
  886. indexInfo.EndDate = ""
  887. indexInfo.ExportType = 0
  888. indexInfo.HasDescription = true
  889. indexInfo.HasEmptyRows = false
  890. indexInfo.HasFrequency = true
  891. indexInfo.HasIndexID = true
  892. indexInfo.HasLastDate = true
  893. indexInfo.HasSourceName = true
  894. indexInfo.HasTimeInterval = true
  895. indexInfo.HasUnit = true
  896. indexInfo.HasUpdateDate = true
  897. indexInfo.IsCreateChart = false
  898. indexInfo.IsDataSort = true
  899. indexInfo.IsNewSheet = false
  900. indexInfo.IsNewWorkbook = false
  901. indexInfo.Position = "A1"
  902. indexInfo.ShowBlankLines = false
  903. indexInfo.StartDate = StartDate
  904. indexInfo.Transpose = false
  905. indexInfo.UpdateMode = 1
  906. indexInfo.LookModel.IsLast = false
  907. indexInfo.LookModel.LookValue = 0
  908. indexInfo.LookModel.LookType = 0
  909. indexInfo.Ver = 3
  910. modelsList := make([]IndexModels, 0)
  911. startDate := "1990-01-01"
  912. updateIndexes := make([]watch.UpdateIndexReq, 0)
  913. updateCols := []string{"merge_file_path", "file_index"}
  914. modelsList = append(modelsList, indexInfo.Models...)
  915. for _, v := range list {
  916. if v.IndexCode == "ID01084004" {
  917. fmt.Println("IndexInfo:", v.IndexCode, v.IndexName)
  918. }
  919. //fmt.Println(k, v)
  920. item := new(IndexModels)
  921. item.DataFormat = 0
  922. if v.IndexName == "" {
  923. item.DataStartDate = startDate
  924. } else {
  925. item.DataStartDate = v.EndDate.AddDate(0, 0, -7).Format(utils.FormatDate)
  926. }
  927. item.DefineName = ""
  928. item.DefineUnit = ""
  929. item.DisplayIndexCode = v.IndexCode
  930. item.IndexCode = v.IndexCode
  931. item.IndexFormula = v.IndexCode
  932. item.PointValue = 0
  933. item.UnionStart = ""
  934. modelsList = append(modelsList, *item)
  935. // 待更新的指标
  936. var req watch.UpdateIndexReq
  937. req.Item = new(index.BaseFromMysteelChemicalIndex)
  938. req.Item.BaseFromMysteelChemicalIndexId = v.BaseFromMysteelChemicalIndexId
  939. req.Item.IndexCode = v.IndexCode
  940. req.Item.MergeFilePath = indexFilePath
  941. req.UpdateCols = updateCols
  942. updateIndexes = append(updateIndexes, req)
  943. }
  944. // 批量更新Index
  945. if len(updateIndexes) > 0 {
  946. e := watch.MultiUpdateIndex(updateIndexes)
  947. if e != nil {
  948. fmt.Println("UpdateIndexByIndexCode err: " + e.Error())
  949. return
  950. }
  951. }
  952. indexInfo.Models = modelsList
  953. indexStr, err := json.Marshal(indexInfo)
  954. if err != nil {
  955. fmt.Println("json.Marshal err:" + err.Error())
  956. return
  957. }
  958. text := string(indexStr)
  959. text = strings.Trim(text, "{")
  960. commentMap := make(map[string]interface{})
  961. commentMap["author"] = "{"
  962. commentMap["text"] = text
  963. //commentMap["text"] = commentItem
  964. commentJson, err := json.Marshal(commentMap)
  965. if err != nil {
  966. fmt.Println("json.Marshal err:" + err.Error())
  967. }
  968. commentResult = string(commentJson)
  969. return
  970. }
  971. type IndexObj struct {
  972. BlankValue string `json:"BlankValue"`
  973. CanMark bool `json:"CanMark"`
  974. ChartLineType string `json:"ChartLineType"`
  975. DateBlock int64 `json:"DateBlock"`
  976. DateBlockCount int64 `json:"DateBlockCount"`
  977. DateFormat int64 `json:"DateFormat"`
  978. DateTimeTag string `json:"DateTimeTag"`
  979. EndDate string `json:"EndDate"`
  980. ExportType int64 `json:"ExportType"`
  981. HasDescription bool `json:"HasDescription"`
  982. HasEmptyRows bool `json:"HasEmptyRows"`
  983. HasFrequency bool `json:"HasFrequency"`
  984. HasIndexID bool `json:"HasIndexID"`
  985. HasLastDate bool `json:"HasLastDate"`
  986. HasSourceName bool `json:"HasSourceName"`
  987. HasTimeInterval bool `json:"HasTimeInterval"`
  988. HasUnit bool `json:"HasUnit"`
  989. HasUpdateDate bool `json:"HasUpdateDate"`
  990. IsCreateChart bool `json:"IsCreateChart"`
  991. IsDataSort bool `json:"IsDataSort"`
  992. IsNewSheet bool `json:"IsNewSheet"`
  993. IsNewWorkbook bool `json:"IsNewWorkbook"`
  994. Models []IndexModels `json:"Models"`
  995. Position string `json:"Position"`
  996. RangeData string `json:"RangeData"`
  997. ShowBlankLines bool `json:"ShowBlankLines"`
  998. StartDate string `json:"StartDate"`
  999. Transpose bool `json:"Transpose"`
  1000. UpdateMode int64 `json:"UpdateMode"`
  1001. LookModel struct {
  1002. IsLast bool `json:"IsLast"`
  1003. LookValue int64 `json:"LookValue"`
  1004. LookType int64 `json:"lookType"`
  1005. } `json:"lookModel"`
  1006. Ver int64 `json:"ver"`
  1007. }
  1008. type IndexModels struct {
  1009. DataFormat int64 `json:"DataFormat"`
  1010. DataStartDate string `json:"DataStartDate"`
  1011. DefineName string `json:"DefineName"`
  1012. DefineUnit string `json:"DefineUnit"`
  1013. DisplayIndexCode string `json:"DisplayIndexCode"`
  1014. IndexCode string `json:"IndexCode"`
  1015. IndexFormula string `json:"IndexFormula"`
  1016. PointValue int64 `json:"PointValue"`
  1017. UnionStart string `json:"UnionStart"`
  1018. }