index_merge.go 34 KB

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