index_merge.go 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781
  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. "strconv"
  9. "strings"
  10. "sync"
  11. "time"
  12. "github.com/rdlucklib/rdluck_tools/paging"
  13. "github.com/xuri/excelize/v2"
  14. )
  15. //合并指标
  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. //周度->292
  30. //日度->114
  31. //merge_file_path
  32. fmt.Println("merge end")
  33. }
  34. //年度
  35. func IndexYearMerge() {
  36. frequency := "年度"
  37. fileName := "year" + ".xlsx" //保存的文件名称
  38. yearIndexFilePath := utils.IndexMsergeSaveDir + fileName
  39. var err error
  40. indexObj := new(index.BaseFromMysteelChemicalIndex)
  41. yearList, err := indexObj.GetIndexByFrequency(frequency)
  42. if err != nil {
  43. fmt.Println("GetIndexByFrequency Err:" + err.Error())
  44. return
  45. }
  46. commentResult, err := GetIndexComment(yearIndexFilePath, yearList, 1)
  47. if err != nil {
  48. fmt.Println("GetIndexComment Err:" + err.Error())
  49. return
  50. }
  51. if utils.FileIsExist(yearIndexFilePath) { //修改文件
  52. fileObj, err := excelize.OpenFile(yearIndexFilePath)
  53. if err != nil {
  54. fmt.Println("打开文件失败,Err:" + err.Error())
  55. return
  56. }
  57. fileObj.DeleteComment("Sheet1", "A1")
  58. fileObj.AddComment("Sheet1", "A1", commentResult)
  59. if err := fileObj.SaveAs(yearIndexFilePath); err != nil {
  60. fmt.Println("保存失败,Err:" + err.Error())
  61. fileObj.Close()
  62. return
  63. }
  64. fileObj.Close()
  65. } else { //新增文件
  66. templatePath := utils.IndexSaveDir + "index_template.xlsx"
  67. templateFile, err := excelize.OpenFile(templatePath)
  68. if err != nil {
  69. fmt.Println("打开文件失败,Err:" + err.Error())
  70. return
  71. }
  72. templateFile.DeleteComment("Sheet1", "A1")
  73. templateFile.AddComment("Sheet1", "A1", commentResult)
  74. if err := templateFile.SaveAs(yearIndexFilePath); err != nil {
  75. fmt.Println("保存失败,Err:" + err.Error())
  76. templateFile.Close()
  77. return
  78. }
  79. templateFile.Close()
  80. }
  81. //处理excel数据
  82. }
  83. //季度
  84. func IndexSeasonMerge() {
  85. frequency := "季度"
  86. fileName := "season" + ".xlsx" //保存的文件名称
  87. seasonIndexFilePath := utils.IndexMsergeSaveDir + fileName
  88. var err error
  89. indexObj := new(index.BaseFromMysteelChemicalIndex)
  90. seasonList, err := indexObj.GetIndexByFrequency(frequency)
  91. if err != nil {
  92. fmt.Println("GetIndexByFrequency Err:" + err.Error())
  93. return
  94. }
  95. commentResult, err := GetIndexComment(seasonIndexFilePath, seasonList, 1)
  96. if err != nil {
  97. fmt.Println("GetIndexComment Err:" + err.Error())
  98. return
  99. }
  100. if utils.FileIsExist(seasonIndexFilePath) { //修改文件
  101. fileObj, err := excelize.OpenFile(seasonIndexFilePath)
  102. if err != nil {
  103. fmt.Println("打开文件失败,Err:" + err.Error())
  104. return
  105. }
  106. fileObj.DeleteComment("Sheet1", "A1")
  107. fileObj.AddComment("Sheet1", "A1", commentResult)
  108. if err := fileObj.SaveAs(seasonIndexFilePath); err != nil {
  109. fmt.Println("保存失败,Err:" + err.Error())
  110. fileObj.Close()
  111. return
  112. }
  113. fileObj.Close()
  114. } else { //新增文件
  115. templatePath := utils.IndexSaveDir + "index_template.xlsx"
  116. templateFile, err := excelize.OpenFile(templatePath)
  117. if err != nil {
  118. fmt.Println("打开文件失败,Err:" + err.Error())
  119. return
  120. }
  121. templateFile.DeleteComment("Sheet1", "A1")
  122. templateFile.AddComment("Sheet1", "A1", commentResult)
  123. if err := templateFile.SaveAs(seasonIndexFilePath); err != nil {
  124. fmt.Println("保存失败,Err:" + err.Error())
  125. templateFile.Close()
  126. return
  127. }
  128. templateFile.Close()
  129. }
  130. //处理excel数据
  131. }
  132. //月度
  133. func IndexMonthMerge() {
  134. frequency := "月度"
  135. filePre := "month"
  136. pageSize := 30
  137. var err error
  138. indexObj := new(index.BaseFromMysteelChemicalIndex)
  139. total, err := indexObj.GetIndexByFrequencyCount(frequency)
  140. if err != nil {
  141. fmt.Println("GetIndexByFrequencyCount Err:" + err.Error())
  142. return
  143. }
  144. maxFileIndexItem, err := indexObj.GetMaxFileIndex(frequency)
  145. if err != nil {
  146. fmt.Println("GetMaxFileIndex Err:" + err.Error())
  147. return
  148. }
  149. maxFileIndex := maxFileIndexItem.FileIndex
  150. if maxFileIndex <= 0 {
  151. maxFileIndex = 1
  152. }
  153. fileName := filePre + "_" + strconv.Itoa(maxFileIndex) + ".xlsx" //保存的文件名称
  154. monthIndexFilePath := utils.IndexMsergeSaveDir + fileName
  155. indexTotal, err := indexObj.GetIndexCountByMergeFilePath(monthIndexFilePath)
  156. if err != nil {
  157. fmt.Println("GetIndexCountByMergeFilePath Err:" + err.Error())
  158. return
  159. }
  160. if (indexTotal > int64(pageSize)/2) && maxFileIndex != 1 {
  161. maxFileIndex += 1
  162. }
  163. fmt.Println("maxFileIndex:", maxFileIndex)
  164. totalPage := paging.PageCount(int(total), pageSize)
  165. fmt.Println("total:", total)
  166. fmt.Println("totalPage:", totalPage)
  167. for i := 1; i <= totalPage; i++ {
  168. offset := (i - 1) * pageSize
  169. fileName = filePre + "_" + strconv.Itoa(maxFileIndex) + ".xlsx" //保存的文件名称
  170. monthIndexFilePath := utils.IndexMsergeSaveDir + fileName
  171. fmt.Println(monthIndexFilePath)
  172. fmt.Println(offset, pageSize)
  173. pageList, err := indexObj.GetIndexByFrequencyPage(frequency, offset, pageSize)
  174. if err != nil {
  175. fmt.Println("GetIndexByFrequency Err:" + err.Error())
  176. return
  177. }
  178. commentResult, err := GetIndexComment(monthIndexFilePath, pageList, maxFileIndex)
  179. if err != nil {
  180. fmt.Println("GetIndexComment Err:" + err.Error())
  181. return
  182. }
  183. if utils.FileIsExist(monthIndexFilePath) { //修改文件
  184. fileObj, err := excelize.OpenFile(monthIndexFilePath)
  185. if err != nil {
  186. fmt.Println("打开文件失败,Err:" + err.Error())
  187. return
  188. }
  189. fileObj.DeleteComment("Sheet1", "A1")
  190. fileObj.AddComment("Sheet1", "A1", commentResult)
  191. if err := fileObj.SaveAs(monthIndexFilePath); err != nil {
  192. fmt.Println("保存失败,Err:" + err.Error())
  193. fileObj.Close()
  194. return
  195. }
  196. fileObj.Close()
  197. } else { //新增文件
  198. templatePath := utils.IndexSaveDir + "index_template.xlsx"
  199. templateFile, err := excelize.OpenFile(templatePath)
  200. if err != nil {
  201. fmt.Println("打开文件失败,Err:" + err.Error())
  202. return
  203. }
  204. templateFile.DeleteComment("Sheet1", "A1")
  205. templateFile.AddComment("Sheet1", "A1", commentResult)
  206. if err := templateFile.SaveAs(monthIndexFilePath); err != nil {
  207. fmt.Println("保存失败,Err:" + err.Error())
  208. templateFile.Close()
  209. return
  210. }
  211. templateFile.Close()
  212. }
  213. maxFileIndex += 1
  214. time.Sleep(1 * time.Second)
  215. }
  216. }
  217. //日度
  218. func IndexDayMerge() {
  219. frequency := "日度"
  220. filePre := "day"
  221. pageSize := 30
  222. var err error
  223. indexObj := new(index.BaseFromMysteelChemicalIndex)
  224. total, err := indexObj.GetIndexByFrequencyCount(frequency)
  225. if err != nil {
  226. fmt.Println("GetIndexByFrequencyCount Err:" + err.Error())
  227. return
  228. }
  229. maxFileIndexItem, err := indexObj.GetMaxFileIndex(frequency)
  230. if err != nil {
  231. fmt.Println("GetMaxFileIndex Err:" + err.Error())
  232. return
  233. }
  234. maxFileIndex := maxFileIndexItem.FileIndex
  235. if maxFileIndex <= 0 {
  236. maxFileIndex = 1
  237. }
  238. fileName := filePre + "_" + strconv.Itoa(maxFileIndex) + ".xlsx" //保存的文件名称
  239. monthIndexFilePath := utils.IndexMsergeSaveDir + fileName
  240. indexTotal, err := indexObj.GetIndexCountByMergeFilePath(monthIndexFilePath)
  241. if err != nil {
  242. fmt.Println("GetIndexCountByMergeFilePath Err:" + err.Error())
  243. return
  244. }
  245. if (indexTotal > int64(pageSize)/2) && maxFileIndex != 1 {
  246. maxFileIndex += 1
  247. }
  248. fmt.Println("maxFileIndex:", maxFileIndex)
  249. totalPage := paging.PageCount(int(total), pageSize)
  250. fmt.Println("total:", total)
  251. fmt.Println("totalPage:", totalPage)
  252. for i := 1; i <= totalPage; i++ {
  253. offset := (i - 1) * pageSize
  254. fileName = filePre + "_" + strconv.Itoa(maxFileIndex) + ".xlsx" //保存的文件名称
  255. monthIndexFilePath := utils.IndexMsergeSaveDir + fileName
  256. fmt.Println(monthIndexFilePath)
  257. fmt.Println(offset, pageSize)
  258. pageList, err := indexObj.GetIndexByFrequencyPage(frequency, offset, pageSize)
  259. if err != nil {
  260. fmt.Println("GetIndexByFrequency Err:" + err.Error())
  261. return
  262. }
  263. commentResult, err := GetIndexComment(monthIndexFilePath, pageList, maxFileIndex)
  264. if err != nil {
  265. fmt.Println("GetIndexComment Err:" + err.Error())
  266. return
  267. }
  268. if utils.FileIsExist(monthIndexFilePath) { //修改文件
  269. fileObj, err := excelize.OpenFile(monthIndexFilePath)
  270. if err != nil {
  271. fmt.Println("打开文件失败,Err:" + err.Error())
  272. return
  273. }
  274. fileObj.DeleteComment("Sheet1", "A1")
  275. fileObj.AddComment("Sheet1", "A1", commentResult)
  276. if err := fileObj.SaveAs(monthIndexFilePath); err != nil {
  277. fmt.Println("保存失败,Err:" + err.Error())
  278. fileObj.Close()
  279. return
  280. }
  281. fileObj.Close()
  282. } else { //新增文件
  283. templatePath := utils.IndexSaveDir + "index_template.xlsx"
  284. templateFile, err := excelize.OpenFile(templatePath)
  285. if err != nil {
  286. fmt.Println("打开文件失败,Err:" + err.Error())
  287. return
  288. }
  289. templateFile.DeleteComment("Sheet1", "A1")
  290. templateFile.AddComment("Sheet1", "A1", commentResult)
  291. if err := templateFile.SaveAs(monthIndexFilePath); err != nil {
  292. fmt.Println("保存失败,Err:" + err.Error())
  293. templateFile.Close()
  294. return
  295. }
  296. templateFile.Close()
  297. }
  298. maxFileIndex += 1
  299. time.Sleep(1 * time.Second)
  300. }
  301. }
  302. func GetIndexComment(indexFilePath string, list []*index.BaseFromMysteelChemicalIndex, fileIndex int) (commentResult string, err error) {
  303. runMode := "release"
  304. indexInfo := new(IndexObj)
  305. if utils.FileIsExist(indexFilePath) { //文件存在
  306. fmt.Println("utils.FileIsExist")
  307. getCommentStr := GetComment(indexFilePath)
  308. fmt.Println(getCommentStr)
  309. err = json.Unmarshal([]byte(getCommentStr), &indexInfo)
  310. if err != nil {
  311. fmt.Println("json.Unmarshal err:" + err.Error())
  312. return
  313. }
  314. } else { //文件不存在,
  315. indexInfo.BlankValue = "0"
  316. indexInfo.CanMark = true
  317. indexInfo.ChartLineType = "0"
  318. indexInfo.DateBlock = 0
  319. indexInfo.DateBlockCount = 1
  320. indexInfo.DateFormat = 0
  321. indexInfo.DateTimeTag = "637973605613980000"
  322. indexInfo.EndDate = ""
  323. indexInfo.ExportType = 0
  324. indexInfo.HasDescription = true
  325. indexInfo.HasEmptyRows = false
  326. indexInfo.HasFrequency = true
  327. indexInfo.HasIndexID = true
  328. indexInfo.HasLastDate = true
  329. indexInfo.HasSourceName = true
  330. indexInfo.HasTimeInterval = true
  331. indexInfo.HasUnit = true
  332. indexInfo.HasUpdateDate = true
  333. indexInfo.IsCreateChart = false
  334. indexInfo.IsDataSort = true
  335. indexInfo.IsNewSheet = false
  336. indexInfo.IsNewWorkbook = false
  337. indexInfo.Position = "A1"
  338. indexInfo.ShowBlankLines = false
  339. indexInfo.StartDate = ""
  340. indexInfo.Transpose = false
  341. indexInfo.UpdateMode = 1
  342. indexInfo.LookModel.IsLast = false
  343. indexInfo.LookModel.LookValue = 0
  344. indexInfo.LookModel.LookType = 0
  345. indexInfo.Ver = 3
  346. }
  347. modelsList := make([]IndexModels, 0)
  348. startDate := "1990-01-01"
  349. indexObj := new(index.BaseFromMysteelChemicalIndex)
  350. for k, v := range list {
  351. fmt.Println(k, v)
  352. item := new(IndexModels)
  353. item.DataFormat = 0
  354. if v.IndexName == "" {
  355. item.DataStartDate = startDate
  356. } else {
  357. item.DataStartDate = v.StartDate.Format(utils.FormatDate)
  358. }
  359. item.DefineName = ""
  360. item.DefineUnit = ""
  361. item.DisplayIndexCode = v.IndexCode
  362. item.IndexCode = v.IndexCode
  363. item.IndexFormula = v.IndexCode
  364. item.PointValue = 0
  365. item.UnionStart = ""
  366. modelsList = append(modelsList, *item)
  367. indexObj.IndexCode = v.IndexCode
  368. indexObj.MergeFilePath = indexFilePath
  369. indexObj.FileIndex = fileIndex
  370. updateColsArr := make([]string, 0)
  371. updateColsArr = append(updateColsArr, "merge_file_path")
  372. updateColsArr = append(updateColsArr, "file_index")
  373. err = indexObj.Update(runMode, updateColsArr)
  374. if err != nil {
  375. fmt.Println("indexObj.Update err:" + err.Error())
  376. return
  377. }
  378. }
  379. indexInfo.Models = modelsList
  380. indexStr, err := json.Marshal(indexInfo)
  381. if err != nil {
  382. fmt.Println("json.Marshal err:" + err.Error())
  383. return
  384. }
  385. text := string(indexStr)
  386. text = strings.Trim(text, "{")
  387. commentMap := make(map[string]interface{})
  388. commentMap["author"] = "{"
  389. commentMap["text"] = text
  390. //commentMap["text"] = commentItem
  391. commentJson, err := json.Marshal(commentMap)
  392. if err != nil {
  393. fmt.Println("json.Marshal err:" + err.Error())
  394. }
  395. commentResult = string(commentJson)
  396. return
  397. }
  398. type IndexObj struct {
  399. BlankValue string `json:"BlankValue"`
  400. CanMark bool `json:"CanMark"`
  401. ChartLineType string `json:"ChartLineType"`
  402. DateBlock int64 `json:"DateBlock"`
  403. DateBlockCount int64 `json:"DateBlockCount"`
  404. DateFormat int64 `json:"DateFormat"`
  405. DateTimeTag string `json:"DateTimeTag"`
  406. EndDate string `json:"EndDate"`
  407. ExportType int64 `json:"ExportType"`
  408. HasDescription bool `json:"HasDescription"`
  409. HasEmptyRows bool `json:"HasEmptyRows"`
  410. HasFrequency bool `json:"HasFrequency"`
  411. HasIndexID bool `json:"HasIndexID"`
  412. HasLastDate bool `json:"HasLastDate"`
  413. HasSourceName bool `json:"HasSourceName"`
  414. HasTimeInterval bool `json:"HasTimeInterval"`
  415. HasUnit bool `json:"HasUnit"`
  416. HasUpdateDate bool `json:"HasUpdateDate"`
  417. IsCreateChart bool `json:"IsCreateChart"`
  418. IsDataSort bool `json:"IsDataSort"`
  419. IsNewSheet bool `json:"IsNewSheet"`
  420. IsNewWorkbook bool `json:"IsNewWorkbook"`
  421. Models []IndexModels `json:"Models"`
  422. Position string `json:"Position"`
  423. RangeData string `json:"RangeData"`
  424. ShowBlankLines bool `json:"ShowBlankLines"`
  425. StartDate string `json:"StartDate"`
  426. Transpose bool `json:"Transpose"`
  427. UpdateMode int64 `json:"UpdateMode"`
  428. LookModel struct {
  429. IsLast bool `json:"IsLast"`
  430. LookValue int64 `json:"LookValue"`
  431. LookType int64 `json:"lookType"`
  432. } `json:"lookModel"`
  433. Ver int64 `json:"ver"`
  434. }
  435. type IndexModels struct {
  436. DataFormat int64 `json:"DataFormat"`
  437. DataStartDate string `json:"DataStartDate"`
  438. DefineName string `json:"DefineName"`
  439. DefineUnit string `json:"DefineUnit"`
  440. DisplayIndexCode string `json:"DisplayIndexCode"`
  441. IndexCode string `json:"IndexCode"`
  442. IndexFormula string `json:"IndexFormula"`
  443. PointValue int64 `json:"PointValue"`
  444. UnionStart string `json:"UnionStart"`
  445. }
  446. func DataAnalysis(filePath string) {
  447. runMode := "debug"
  448. //runMode = "release"
  449. fmt.Println("filePath:", filePath)
  450. time.Sleep(1 * time.Second)
  451. if !utils.FileIsExist(filePath) {
  452. fmt.Println("filePath is not exist:" + filePath)
  453. return
  454. }
  455. //读取文件内容
  456. global.LOG.Info("WatchFile:" + filePath)
  457. f, err := excelize.OpenFile(filePath)
  458. global.LOG.Info("OpenFile:" + filePath)
  459. if err != nil {
  460. fmt.Println("OpenFile:" + filePath + ",Err:" + err.Error())
  461. return
  462. }
  463. defer func() {
  464. if err := f.Close(); err != nil {
  465. fmt.Println("FileClose Err:" + err.Error())
  466. return
  467. }
  468. }()
  469. indexObj := new(index.BaseFromMysteelChemicalIndex)
  470. var wg = sync.WaitGroup{}
  471. wg.Add(1)
  472. go func() {
  473. sheetList := f.GetSheetList()
  474. for _, sv := range sheetList {
  475. rows, err := f.GetRows(sv)
  476. if err != nil {
  477. fmt.Println("f.GetRows:err:" + err.Error())
  478. return
  479. }
  480. var nameArr []string
  481. unitArr := make([]string, 0)
  482. sourceArr := make([]string, 0)
  483. codeArr := make([]string, 0)
  484. frequencyArr := make([]string, 0)
  485. dateArr := make([]string, 0)
  486. describeArr := make([]string, 0)
  487. endDateArr := make([]string, 0)
  488. updateArr := make([]string, 0)
  489. indexDateArr := make([]string, 0)
  490. dataMap := make(map[string][]string)
  491. var nameLen int
  492. for rk, row := range rows {
  493. if rk == 0 {
  494. continue
  495. }
  496. if rk == 1 {
  497. for ck, colCell := range row {
  498. if ck >= 1 {
  499. nameArr = append(nameArr, colCell)
  500. }
  501. }
  502. nameLen = len(nameArr)
  503. unitArr = make([]string, nameLen)
  504. sourceArr = make([]string, nameLen)
  505. codeArr = make([]string, nameLen)
  506. frequencyArr = make([]string, nameLen)
  507. dateArr = make([]string, nameLen)
  508. describeArr = make([]string, nameLen)
  509. endDateArr = make([]string, nameLen)
  510. updateArr = make([]string, nameLen)
  511. } else if rk == 2 {
  512. for ck, colCell := range row {
  513. if ck >= 1 {
  514. unitArr[ck-1] = colCell
  515. }
  516. }
  517. } else if rk == 3 {
  518. for ck, colCell := range row {
  519. if ck >= 1 {
  520. //sourceArr = append(sourceArr, colCell)
  521. sourceArr[ck-1] = colCell
  522. }
  523. }
  524. } else if rk == 4 {
  525. for ck, colCell := range row {
  526. if ck >= 1 {
  527. //codeArr = append(codeArr, colCell)
  528. codeArr[ck-1] = colCell
  529. }
  530. }
  531. } else if rk == 5 {
  532. for ck, colCell := range row {
  533. if ck >= 1 {
  534. //frequencyArr = append(frequencyArr, colCell)
  535. frequencyArr[ck-1] = colCell
  536. }
  537. }
  538. } else if rk == 6 {
  539. for ck, colCell := range row {
  540. if ck >= 1 {
  541. //dateArr = append(dateArr, colCell)
  542. dateArr[ck-1] = colCell
  543. }
  544. }
  545. } else if rk == 7 {
  546. for ck, colCell := range row {
  547. if ck >= 1 {
  548. //describeArr = append(describeArr, colCell)
  549. describeArr[ck-1] = colCell
  550. }
  551. }
  552. } else if rk == 8 {
  553. for ck, colCell := range row {
  554. if ck >= 1 {
  555. //endDateArr = append(endDateArr, colCell)
  556. endDateArr[ck-1] = colCell
  557. }
  558. }
  559. } else if rk == 9 {
  560. for ck, colCell := range row {
  561. if ck >= 1 {
  562. //updateArr = append(updateArr, colCell)
  563. updateArr[ck-1] = colCell
  564. }
  565. }
  566. } else {
  567. var date string
  568. dataArr := make([]string, nameLen)
  569. for ck, colCell := range row {
  570. if ck == 0 {
  571. date = colCell
  572. indexDateArr = append(indexDateArr, date)
  573. } else {
  574. if colCell != "" {
  575. dataArr[ck-1] = colCell
  576. }
  577. }
  578. }
  579. dataMap[date] = dataArr
  580. }
  581. }
  582. var indexId int64
  583. existDataMap := make(map[string]string)
  584. for k, v := range nameArr {
  585. indexName := v
  586. indexCode := codeArr[k]
  587. unit := unitArr[k]
  588. source := sourceArr[k]
  589. describe := describeArr[k]
  590. dateStr := dateArr[k]
  591. frequency := frequencyArr[k]
  592. //判断指标是否存在
  593. var isAdd int
  594. item, err := indexObj.GetIndexItem(runMode, indexCode)
  595. if err != nil {
  596. if err.Error() == "record not found" {
  597. isAdd = 1
  598. } else {
  599. isAdd = -1
  600. fmt.Println("GetIndexItem Err:" + err.Error())
  601. return
  602. }
  603. }
  604. if item != nil && item.BaseFromMysteelChemicalIndexId > 0 {
  605. fmt.Println("item:", item)
  606. isAdd = 2
  607. } else {
  608. isAdd = 1
  609. }
  610. var startDate, endDate string
  611. startEndArr := strings.Split(dateStr, "~")
  612. if len(startEndArr) >= 2 {
  613. startDate = startEndArr[0]
  614. endDate = startEndArr[1]
  615. }
  616. if !strings.Contains(frequency, "度") {
  617. frequency = frequency + "度"
  618. }
  619. indexItem := new(index.BaseFromMysteelChemicalIndex)
  620. if isAdd == 1 {
  621. indexItem.IndexCode = indexCode
  622. indexItem.IndexName = indexName
  623. indexItem.Unit = unit
  624. indexItem.Source = source
  625. indexItem.Describe = describe
  626. indexItem.StartDate, _ = time.ParseInLocation(utils.FormatDate, startDate, time.Local)
  627. indexItem.EndDate, _ = time.ParseInLocation(utils.FormatDate, endDate, time.Local)
  628. indexItem.Frequency = frequency
  629. indexItem.FilePath = filePath
  630. indexItem.MergeFilePath = filePath
  631. err = indexItem.Add(runMode)
  632. if err != nil {
  633. fmt.Println("indexItem.add err:" + err.Error())
  634. return
  635. }
  636. indexId = indexObj.BaseFromMysteelChemicalIndexId
  637. } else if isAdd == 2 {
  638. indexItem.IndexCode = indexCode
  639. indexItem.IndexName = indexName
  640. indexItem.Unit = unit
  641. indexItem.Source = source
  642. indexItem.Describe = describe
  643. indexItem.StartDate, _ = time.ParseInLocation(utils.FormatDate, startDate, time.Local)
  644. indexItem.EndDate, _ = time.ParseInLocation(utils.FormatDate, endDate, time.Local)
  645. indexItem.Frequency = frequency
  646. indexItem.FilePath = filePath
  647. indexItem.ModifyTime = time.Now()
  648. indexId = item.BaseFromMysteelChemicalIndexId
  649. //修改数据
  650. updateColsArr := make([]string, 0)
  651. updateColsArr = append(updateColsArr, "index_name")
  652. updateColsArr = append(updateColsArr, "unit")
  653. updateColsArr = append(updateColsArr, "source")
  654. updateColsArr = append(updateColsArr, "frequency")
  655. updateColsArr = append(updateColsArr, "start_date")
  656. updateColsArr = append(updateColsArr, "end_date")
  657. updateColsArr = append(updateColsArr, "describe")
  658. updateColsArr = append(updateColsArr, "end_date")
  659. updateColsArr = append(updateColsArr, "modify_time")
  660. updateColsArr = append(updateColsArr, "file_path")
  661. err = indexItem.Update(runMode, updateColsArr)
  662. if err != nil {
  663. fmt.Println("indexObj.Update err:" + err.Error())
  664. return
  665. }
  666. dataObj := new(index.BaseFromMysteelChemicalData)
  667. //获取已存在的所有数据
  668. dataList, err := dataObj.GetIndexDataList(runMode, indexCode)
  669. if err != nil {
  670. fmt.Println("GetIndexDataList Err:" + err.Error())
  671. return
  672. }
  673. fmt.Println("dataListLen:", len(dataList))
  674. for _, v := range dataList {
  675. dateStr := v.DataTime.Format(utils.FormatDate)
  676. existDataMap[dateStr] = v.Value
  677. }
  678. }
  679. dataList := make([]index.BaseFromMysteelChemicalData, 0)
  680. for _, dv := range indexDateArr {
  681. dataArr := dataMap[dv]
  682. dataVal := dataArr[k]
  683. updateDate := updateArr[k]
  684. if dataVal != "" {
  685. if _, ok := existDataMap[dv]; !ok {
  686. dateTime, err := time.ParseInLocation(utils.FormatDate, dv, time.Local)
  687. if err != nil {
  688. fmt.Println("time.ParseInLocation Err:" + err.Error())
  689. return
  690. }
  691. dataItem := new(index.BaseFromMysteelChemicalData)
  692. dataItem.BaseFromMysteelChemicalIndexId = indexId
  693. dataItem.IndexCode = indexCode
  694. dataItem.DataTime = dateTime
  695. dataItem.Value = dataVal
  696. dataItem.UpdateDate = updateDate
  697. dataItem.CreateTime = time.Now()
  698. dataItem.ModifyTime = time.Now()
  699. dataList = append(dataList, *dataItem)
  700. }
  701. }
  702. }
  703. if len(dataList) > 0 {
  704. dataObj := new(index.BaseFromMysteelChemicalData)
  705. err = dataObj.Add(runMode, dataList)
  706. if err != nil {
  707. fmt.Println("dataObj.Add() Err:" + err.Error())
  708. return
  709. }
  710. }
  711. }
  712. }
  713. wg.Done()
  714. }()
  715. wg.Wait()
  716. }