yongyi_data.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724
  1. package data_manage
  2. import (
  3. "encoding/json"
  4. "eta/eta_api/models"
  5. "eta/eta_api/models/data_manage"
  6. "eta/eta_api/models/system"
  7. "eta/eta_api/services/data"
  8. etaTrialService "eta/eta_api/services/eta_trial"
  9. "eta/eta_api/utils"
  10. "fmt"
  11. "os"
  12. "path/filepath"
  13. "strconv"
  14. "strings"
  15. "time"
  16. "github.com/rdlucklib/rdluck_tools/paging"
  17. "github.com/tealeg/xlsx"
  18. )
  19. // YongyiClassify
  20. // @Title 涌益咨询数据分类
  21. // @Description 涌益咨询数据分类接口
  22. // @Success 200 {object} data_manage.BaseFromYongyiClassify
  23. // @router /yongyi/classify [get]
  24. func (this *EdbInfoController) YongyiClassify() {
  25. br := new(models.BaseResponse).Init()
  26. defer func() {
  27. this.Data["json"] = br
  28. this.ServeJSON()
  29. }()
  30. sysUser := this.SysUser
  31. if sysUser == nil {
  32. br.Msg = "请登录"
  33. br.ErrMsg = "请登录,SysUser Is Empty"
  34. br.Ret = 408
  35. return
  36. }
  37. classifyAll, err := data_manage.GetAllBaseFromYongyiClassify()
  38. if err != nil && err.Error() != utils.ErrNoRow() {
  39. br.Msg = "获取失败"
  40. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  41. return
  42. }
  43. //组装一级分类
  44. rootMap := make(map[int][]*data_manage.BaseFromYongyiClassifyItems)
  45. list := make([]*data_manage.BaseFromYongyiClassifyItems, 0)
  46. for _, classify := range classifyAll {
  47. if classify.ParentId == 0 {
  48. if _, ok := rootMap[classify.ClassifyId]; !ok {
  49. rootMap[classify.ClassifyId] = make([]*data_manage.BaseFromYongyiClassifyItems, 0)
  50. list = append(list, classify)
  51. }
  52. } else {
  53. child, ok := rootMap[classify.ParentId]
  54. if ok {
  55. child = append(child, classify)
  56. rootMap[classify.ParentId] = child
  57. }
  58. }
  59. }
  60. for k, v := range list {
  61. child, ok := rootMap[v.ClassifyId]
  62. if ok {
  63. list[k].Children = child
  64. }
  65. }
  66. //组装二级分类
  67. var ret data_manage.BaseFromYongyiClassifyResp
  68. ret.List = list
  69. br.Ret = 200
  70. br.Success = true
  71. br.Msg = "获取成功"
  72. br.Data = ret
  73. }
  74. // YongyiIndexData
  75. // @Title 获取钢联数据
  76. // @Description 获取钢联数据接口
  77. // @Param PageSize query int true "每页数据条数"
  78. // @Param CurrentIndex query int true "当前页页码,从1开始"
  79. // @Param ClassifyId query string true "分类id"
  80. // @Success 200 {object} data_manage.LzFrequency
  81. // @router /yongyi/index/data [get]
  82. func (this *EdbInfoController) YongyiIndexData() {
  83. br := new(models.BaseResponse).Init()
  84. defer func() {
  85. this.Data["json"] = br
  86. this.ServeJSON()
  87. }()
  88. sysUser := this.SysUser
  89. if sysUser == nil {
  90. br.Msg = "请登录"
  91. br.ErrMsg = "请登录,SysUser Is Empty"
  92. br.Ret = 408
  93. return
  94. }
  95. pageSize, _ := this.GetInt("PageSize")
  96. currentIndex, _ := this.GetInt("CurrentIndex")
  97. var startSize int
  98. if pageSize <= 0 {
  99. pageSize = utils.PageSize20
  100. }
  101. if currentIndex <= 0 {
  102. currentIndex = 1
  103. }
  104. startSize = utils.StartIndex(currentIndex, pageSize)
  105. classifyId, _ := this.GetInt("ClassifyId")
  106. if classifyId < 0 {
  107. br.Msg = "请选择分类"
  108. br.ErrMsg = "请选择分类"
  109. return
  110. }
  111. //获取指标
  112. var condition string
  113. var pars []interface{}
  114. if classifyId >= 0 {
  115. classifyInfo, err := data_manage.GetBaseFromYongyiClassifyById(classifyId)
  116. if err != nil {
  117. if err.Error() == utils.ErrNoRow() {
  118. br.Msg = "分类不存在"
  119. return
  120. }
  121. br.Msg = "获取分类信息失败"
  122. br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
  123. return
  124. }
  125. if classifyInfo.Level == 2 {
  126. condition += ` AND classify_id=? `
  127. pars = append(pars, classifyId)
  128. } else if classifyInfo.Level == 1 {
  129. childClassify, err := data_manage.GetBaseFromYongyiClassifyByParentId(classifyId)
  130. if err != nil {
  131. br.Msg = "获取分类信息失败"
  132. br.ErrMsg = "获取子分类信息失败,Err:" + err.Error()
  133. return
  134. }
  135. var classifyList []int
  136. for _, v := range childClassify {
  137. classifyList = append(classifyList, v.ClassifyId)
  138. }
  139. condition += ` AND classify_id IN (` + utils.GetOrmInReplace(len(classifyList)) + `) `
  140. pars = append(pars, classifyList)
  141. }
  142. }
  143. yongyiList, err := data_manage.GetYongyiIndex(condition, pars)
  144. if err != nil {
  145. br.Msg = "获取数据失败"
  146. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  147. return
  148. }
  149. resultList := make([]*data_manage.BaseFromYongyiIndexList, 0)
  150. for _, v := range yongyiList {
  151. product := new(data_manage.BaseFromYongyiIndexList)
  152. product.YongyiIndexId = v.YongyiIndexId
  153. product.Unit = v.Unit
  154. product.IndexCode = v.IndexCode
  155. product.IndexName = v.IndexName
  156. product.Frequency = v.Frequency
  157. product.ModifyTime = v.ModifyTime
  158. total, err := data_manage.GetYongyiIndexDataCount(v.IndexCode)
  159. page := paging.GetPaging(currentIndex, pageSize, total)
  160. dataList, err := data_manage.GetYongyiIndexData(v.IndexCode, startSize, pageSize)
  161. if err != nil {
  162. br.Msg = "获取数据失败"
  163. br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
  164. return
  165. }
  166. if dataList == nil {
  167. dataList = make([]*data_manage.BaseFromYongyiData, 0)
  168. }
  169. product.DataList = dataList
  170. product.Paging = page
  171. resultList = append(resultList, product)
  172. }
  173. br.Ret = 200
  174. br.Success = true
  175. br.Msg = "获取成功"
  176. br.Data = resultList
  177. }
  178. // YongyiSearchList
  179. // @Title Yongyi模糊搜索
  180. // @Description Yongyi模糊搜索
  181. // @Param Keyword query string ture "关键字搜索"
  182. // @Success 200 {object} models.BaseResponse
  183. // @router /yongyi/search_list [get]
  184. func (this *EdbInfoController) YongyiSearchList() {
  185. br := new(models.BaseResponse).Init()
  186. defer func() {
  187. this.Data["json"] = br
  188. this.ServeJSON()
  189. }()
  190. sysUser := this.SysUser
  191. if sysUser == nil {
  192. br.Msg = "请重新登录"
  193. return
  194. }
  195. list := make([]*data_manage.BaseFromYongyiIndexSearchItem, 0)
  196. var err error
  197. //关键字
  198. keyword := this.GetString("Keyword")
  199. if keyword != "" {
  200. keyWordArr := strings.Split(keyword, " ")
  201. if len(keyWordArr) > 0 {
  202. condition := ""
  203. for _, v := range keyWordArr {
  204. condition += ` AND CONCAT(index_name,index_code) LIKE '%` + v + `%'`
  205. }
  206. list, err = data_manage.GetYongyiItemList(condition)
  207. if err != nil {
  208. br.ErrMsg = "获取失败,Err:" + err.Error()
  209. br.Msg = "获取失败"
  210. return
  211. }
  212. }
  213. } else {
  214. // todo es 模糊搜索
  215. list, err = data_manage.GetYongyiItemList("")
  216. if err != nil {
  217. br.ErrMsg = "获取失败,Err:" + err.Error()
  218. br.Msg = "获取失败"
  219. return
  220. }
  221. }
  222. br.Ret = 200
  223. br.Success = true
  224. br.Msg = "获取成功"
  225. br.Data = list
  226. }
  227. // YongyiSingleData
  228. // @Title 获取Yongyi数据
  229. // @Description 获取Yongyi单条数据接口
  230. // @Param IndexCode query string true "指标唯一编码"
  231. // @Success 200 {object} models.BaseResponse
  232. // @router /yongyi/single_data [get]
  233. func (this *EdbInfoController) YongyiSingleData() {
  234. br := new(models.BaseResponse).Init()
  235. defer func() {
  236. this.Data["json"] = br
  237. this.ServeJSON()
  238. }()
  239. sysUser := this.SysUser
  240. if sysUser == nil {
  241. br.Msg = "请登录"
  242. br.ErrMsg = "请登录,SysUser Is Empty"
  243. br.Ret = 408
  244. return
  245. }
  246. indexCode := this.GetString("IndexCode")
  247. indexInfo, err := data_manage.GetBaseFromYongyiIndexByIndexCode(indexCode)
  248. if err != nil {
  249. br.Msg = "获取指标信息失败"
  250. br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
  251. return
  252. }
  253. dataTmpList, err := data_manage.GetYongyiIndexDataByCode(indexCode)
  254. if err != nil {
  255. br.Msg = "获取数据失败"
  256. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  257. return
  258. }
  259. var ret data_manage.YongyiSingleDataResp
  260. var dataList []*data_manage.YongyiSingleData
  261. ret.ClassifyId = indexInfo.ClassifyId
  262. ret.YongyiIndexId = indexInfo.YongyiIndexId
  263. ret.IndexCode = indexInfo.IndexCode
  264. ret.IndexName = indexInfo.IndexName
  265. ret.Frequency = indexInfo.Frequency
  266. ret.CreateTime = indexInfo.CreateTime.Format(utils.FormatDateTime)
  267. ret.ModifyTime = indexInfo.ModifyTime.Format(utils.FormatDateTime)
  268. ret.Unit = indexInfo.Unit
  269. for _, v := range dataTmpList {
  270. tmp := &data_manage.YongyiSingleData{
  271. Value: v.Value,
  272. DataTime: v.DataTime,
  273. }
  274. dataList = append(dataList, tmp)
  275. }
  276. ret.Data = dataList
  277. br.Ret = 200
  278. br.Success = true
  279. br.Msg = "获取成功"
  280. br.Data = ret
  281. }
  282. // YongyiIndexList
  283. // @Title 涌益咨询指标列表
  284. // @Description 涌益咨询指标列表
  285. // @Param ClassifyId query int true "分类id"
  286. // @Success 200 {object} data_manage.BaseFromMysteelChemicalIndexResp
  287. // @router /yongyi/classify/index/list [get]
  288. func (this *EdbInfoController) YongyiIndexList() {
  289. br := new(models.BaseResponse).Init()
  290. defer func() {
  291. this.Data["json"] = br
  292. this.ServeJSON()
  293. }()
  294. classifyId, _ := this.GetInt("ClassifyId", 0)
  295. indexList, err := data_manage.GetYongyiIndexByClassifyId(classifyId)
  296. if err != nil && err.Error() != utils.ErrNoRow() {
  297. br.Msg = "获取失败"
  298. br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
  299. return
  300. }
  301. br.Ret = 200
  302. br.Success = true
  303. br.Msg = "获取成功"
  304. br.Data = indexList
  305. }
  306. // YongyiBatchSearch
  307. // @Title 涌益咨询指标查询
  308. // @Description 涌益咨询指标查询
  309. // @Param ClassifyIds query string true "分类id, 多个分类用英文"
  310. // @Param Keyword query string true "关键词, 指标ID/指标名称"
  311. // @Success 200 {object} data_manage.LzFrequency
  312. // @router /yongyi/batch_search [get]
  313. func (this *EdbInfoController) YongyiBatchSearch() {
  314. br := new(models.BaseResponse).Init()
  315. defer func() {
  316. this.Data["json"] = br
  317. this.ServeJSON()
  318. }()
  319. sysUser := this.SysUser
  320. if sysUser == nil {
  321. br.Msg = "请登录"
  322. br.ErrMsg = "请登录,SysUser Is Empty"
  323. br.Ret = 408
  324. return
  325. }
  326. classifyIdStr := this.GetString("ClassifyIds")
  327. var condition string
  328. var pars []interface{}
  329. classifyIds := strings.Split(classifyIdStr, ",")
  330. if len(classifyIds) > 0 && classifyIds[0] != `` {
  331. condition += " AND classify_id IN (" + utils.GetOrmInReplace(len(classifyIds)) + " ) "
  332. pars = append(pars, classifyIds)
  333. }
  334. keyword := this.GetString("Keyword")
  335. if keyword != `` {
  336. condition += " AND (index_name like ? OR index_code like ?) "
  337. pars = utils.GetLikeKeywordPars(pars, keyword, 2)
  338. }
  339. if classifyIdStr == `` && keyword == `` {
  340. var list = make([]*data_manage.BaseFromYongyiIndexList, 0)
  341. br.Ret = 200
  342. br.Success = true
  343. br.Msg = "获取成功"
  344. br.Data = list
  345. return
  346. }
  347. list, err := data_manage.GetYongyiIndex(condition, pars)
  348. if err != nil {
  349. br.Msg = "获取失败"
  350. br.ErrMsg = "获取失败,Err:" + err.Error()
  351. return
  352. }
  353. br.Ret = 200
  354. br.Success = true
  355. br.Msg = "获取成功"
  356. br.Data = list
  357. }
  358. // YongyiBatchAdd
  359. // @Title 涌益批量新增
  360. // @Description 涌益批量新增
  361. // @Param request body data_manage.AddEdbInfoReq true "type json string"
  362. // @Success 200 string "操作成功"
  363. // @router /yongyi/batch_add [post]
  364. func (this *EdbInfoController) YongyiBatchAdd() {
  365. br := new(models.BaseResponse).Init()
  366. defer func() {
  367. if br.ErrMsg == "" {
  368. br.IsSendEmail = false
  369. }
  370. this.Data["json"] = br
  371. this.ServeJSON()
  372. }()
  373. sysUser := this.SysUser
  374. if sysUser == nil {
  375. br.Msg = "请登录"
  376. br.ErrMsg = "请登录,SysUser Is Empty"
  377. br.Ret = 408
  378. return
  379. }
  380. deleteCache := true
  381. cacheKey := "CACHE_EDB_INFO_BATCH_ADD_YONGYI_" + strconv.Itoa(sysUser.AdminId)
  382. defer func() {
  383. if deleteCache {
  384. _ = utils.Rc.Delete(cacheKey)
  385. }
  386. }()
  387. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  388. deleteCache = false
  389. br.Msg = "系统处理中,请稍后重试!"
  390. br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
  391. return
  392. }
  393. var req []*data_manage.AddEdbInfoReq
  394. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  395. br.Msg = "参数解析异常!"
  396. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  397. return
  398. }
  399. if len(req) == 0 {
  400. br.Msg = "请选择指标"
  401. return
  402. }
  403. if len(req) > 30 {
  404. br.Msg = "批量添加指标数量不得超过30个"
  405. return
  406. }
  407. for _, v := range req {
  408. v.EdbCode = strings.TrimSpace(v.EdbCode)
  409. if v.EdbCode == "" {
  410. br.Msg = "指标ID不可为空"
  411. return
  412. }
  413. v.EdbName = strings.TrimSpace(v.EdbName)
  414. if v.EdbName == "" {
  415. br.Msg = "请输入指标名称"
  416. return
  417. }
  418. v.Frequency = strings.TrimSpace(v.Frequency)
  419. if v.Frequency == "" {
  420. br.Msg = "请选择频度"
  421. return
  422. }
  423. v.Unit = strings.TrimSpace(v.Unit)
  424. if v.Unit == "" {
  425. br.Msg = "请输入单位"
  426. return
  427. }
  428. if v.ClassifyId <= 0 {
  429. br.Msg = "请选择分类"
  430. return
  431. }
  432. }
  433. // 限定同一时间最多批量新增30个指标
  434. for _, v := range req {
  435. var r data.MysteelChemicalIndexSource2EdbReq
  436. r.EdbCode = v.EdbCode
  437. r.EdbName = v.EdbName
  438. r.Frequency = v.Frequency
  439. r.Unit = v.Unit
  440. r.ClassifyId = v.ClassifyId
  441. r.AdminId = sysUser.AdminId
  442. r.AdminRealName = sysUser.RealName
  443. edbInfo, e, errMsg, skip := data.MysteelChemicalIndexSource2Edb(r, this.Lang)
  444. if e != nil {
  445. br.Msg = "操作失败"
  446. if errMsg != "" {
  447. br.Msg = errMsg
  448. }
  449. br.ErrMsg = e.Error()
  450. return
  451. }
  452. if skip {
  453. continue
  454. }
  455. // 试用平台更新用户累计新增指标数
  456. if utils.BusinessCode == utils.BusinessCodeSandbox {
  457. go func() {
  458. adminItem, e := system.GetSysAdminById(sysUser.AdminId)
  459. if e != nil {
  460. tips := fmt.Sprintf("试用平台更新用户累计新增指标数-获取用户失败, Err: " + e.Error())
  461. utils.FileLog.Info(tips)
  462. return
  463. }
  464. if adminItem.DepartmentName != "ETA试用客户" {
  465. return
  466. }
  467. var ur etaTrialService.EtaTrialUserReq
  468. ur.Mobile = adminItem.Mobile
  469. _, _ = etaTrialService.UpdateUserIndexNum(ur)
  470. }()
  471. }
  472. // 新增操作日志
  473. {
  474. edbLog := new(data_manage.EdbInfoLog)
  475. edbLog.EdbInfoId = edbInfo.EdbInfoId
  476. edbLog.SourceName = edbInfo.SourceName
  477. edbLog.Source = edbInfo.Source
  478. edbLog.EdbCode = edbInfo.EdbCode
  479. edbLog.EdbName = edbInfo.EdbName
  480. edbLog.ClassifyId = edbInfo.ClassifyId
  481. edbLog.SysUserId = sysUser.AdminId
  482. edbLog.SysUserRealName = sysUser.RealName
  483. edbLog.CreateTime = time.Now()
  484. edbLog.Content = string(this.Ctx.Input.RequestBody)
  485. edbLog.Status = "新增指标"
  486. edbLog.Method = this.Ctx.Input.URI()
  487. go data_manage.AddEdbInfoLog(edbLog)
  488. }
  489. }
  490. br.Msg = "操作成功"
  491. br.Ret = 200
  492. br.Success = true
  493. br.IsAddLog = true
  494. }
  495. // ExportYongyiList
  496. // @Title 导出Yongyi数据
  497. // @Description 导出Yongyi数据
  498. // @Param IndexName query string false "名称关键词"
  499. // @Param IndexCode query string false "指标唯一编码"
  500. // @Param ClassifyId query string true "分类"
  501. // @Success 200 导出成功
  502. // @router /yongyi/export [get]
  503. func (this *EdbInfoController) ExportYongyiList() {
  504. br := new(models.BaseResponse).Init()
  505. defer func() {
  506. this.Data["json"] = br
  507. this.ServeJSON()
  508. }()
  509. sysUser := this.SysUser
  510. if sysUser == nil {
  511. br.Msg = "请重新登录"
  512. return
  513. }
  514. indexCode := this.GetString("IndexCode") //指标唯一编码
  515. classifyId, _ := this.GetInt("ClassifyId")
  516. //secNameList := make([]*models.EdbdataExportList, 0)
  517. dir, _ := os.Executable()
  518. exPath := filepath.Dir(dir)
  519. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  520. xlsxFile := xlsx.NewFile()
  521. var pars []interface{}
  522. condition := ""
  523. if classifyId > 0 {
  524. //获取指标
  525. condition += " AND classify_id=?"
  526. pars = append(pars, classifyId)
  527. }
  528. if indexCode != "" {
  529. //获取指标
  530. condition += " AND index_code=?"
  531. pars = append(pars, indexCode)
  532. }
  533. indexList, err := data_manage.GetYongyiIndex(condition, pars)
  534. if err != nil {
  535. fmt.Println("获取数据失败,Err:" + err.Error())
  536. return
  537. }
  538. if len(indexList) <= 0 {
  539. fmt.Println("indexList 为空")
  540. br.Ret = 200
  541. br.Success = true
  542. br.Msg = "success"
  543. return
  544. }
  545. sheetNew := new(xlsx.Sheet)
  546. // todo 分类名称
  547. sheetNew, err = xlsxFile.AddSheet("涌益咨询")
  548. //sheetNew.SetColWidth()
  549. //获取指标数据
  550. windRow := sheetNew.AddRow()
  551. secNameRow := sheetNew.AddRow()
  552. indexCodeRow := sheetNew.AddRow()
  553. frequencyRow := sheetNew.AddRow()
  554. unitRow := sheetNew.AddRow()
  555. lastModifyDateRow := sheetNew.AddRow()
  556. //获取分类下指标最大数据量
  557. var dataMax int
  558. setRowIndex := 6
  559. indexCodeList := make([]string, 0)
  560. for _, v := range indexList {
  561. indexCodeList = append(indexCodeList, v.IndexCode)
  562. }
  563. dataListMap := make(map[string][]*data_manage.BaseFromYongyiData)
  564. if len(indexList) > 0 {
  565. allDataList, e := data_manage.GetYongyiIndexDataByCodes(indexCodeList)
  566. if e != nil {
  567. br.Msg = "获取数据失败"
  568. br.ErrMsg = "获取数据失败,Err:" + e.Error()
  569. return
  570. }
  571. for _, v := range allDataList {
  572. dataListMap[v.IndexCode] = append(dataListMap[v.IndexCode], v)
  573. }
  574. for _, v := range dataListMap {
  575. if len(v) > dataMax {
  576. dataMax = len(v)
  577. }
  578. }
  579. }
  580. for k, sv := range indexList {
  581. //获取数据
  582. dataList, ok := dataListMap[sv.IndexCode]
  583. if !ok {
  584. continue
  585. }
  586. if len(dataList) > 0 {
  587. windRow.AddCell().SetValue("涌益咨询")
  588. secNameRow.AddCell().SetValue("指标名称")
  589. indexCodeRow.AddCell().SetValue("指标ID")
  590. frequencyRow.AddCell().SetValue("频率")
  591. unitRow.AddCell().SetValue("单位")
  592. lastModifyDateRow.AddCell().SetValue("更新时间")
  593. secNameRow.AddCell().SetValue(sv.IndexName)
  594. indexCodeRow.AddCell().SetValue(sv.IndexCode)
  595. frequencyRow.AddCell().SetValue(sv.Frequency)
  596. unitRow.AddCell().SetValue(sv.Unit)
  597. lastModifyDateRow.AddCell().SetValue(sv.ModifyTime)
  598. windRow.AddCell()
  599. windRow.AddCell()
  600. secNameRow.AddCell()
  601. indexCodeRow.AddCell()
  602. frequencyRow.AddCell()
  603. unitRow.AddCell()
  604. lastModifyDateRow.AddCell()
  605. min := k * 3
  606. sheetNew.SetColWidth(min, min, 15)
  607. if len(dataList) <= 0 {
  608. for n := 0; n < dataMax; n++ {
  609. rowIndex := setRowIndex + n
  610. row := sheetNew.Row(rowIndex)
  611. row.AddCell()
  612. row.AddCell()
  613. row.AddCell()
  614. }
  615. } else {
  616. endRowIndex := 0
  617. for rk, dv := range dataList {
  618. rowIndex := setRowIndex + rk
  619. row := sheetNew.Row(rowIndex)
  620. displayDate, _ := time.Parse(utils.FormatDate, dv.DataTime)
  621. displayDateCell := row.AddCell()
  622. style := new(xlsx.Style)
  623. style.ApplyAlignment = true
  624. style.Alignment.WrapText = true
  625. displayDateCell.SetStyle(style)
  626. displayDateCell.SetDate(displayDate)
  627. row.AddCell().SetValue(dv.Value)
  628. row.AddCell()
  629. endRowIndex = rowIndex
  630. }
  631. if len(dataList) < dataMax {
  632. dataLen := dataMax - len(dataList)
  633. for n := 0; n < dataLen; n++ {
  634. rowIndex := (endRowIndex + 1) + n
  635. row := sheetNew.Row(rowIndex)
  636. row.AddCell()
  637. row.AddCell()
  638. row.AddCell()
  639. }
  640. }
  641. }
  642. }
  643. }
  644. err = xlsxFile.Save(downLoadnFilePath)
  645. if err != nil {
  646. //有指标无数据时先导出一遍空表
  647. sheet, err := xlsxFile.AddSheet("无数据")
  648. if err != nil {
  649. br.Msg = "新增Sheet失败"
  650. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  651. return
  652. }
  653. rowSecName := sheet.AddRow()
  654. celSecName := rowSecName.AddCell()
  655. celSecName.SetValue("")
  656. err = xlsxFile.Save(downLoadnFilePath)
  657. if err != nil {
  658. br.Msg = "保存文件失败"
  659. br.ErrMsg = "保存文件失败"
  660. return
  661. }
  662. }
  663. fileName := `涌益咨询数据`
  664. if len(indexList) > 0 {
  665. fileName = indexList[0].IndexName
  666. }
  667. fileName += time.Now().Format("06.01.02") + `.xlsx` //文件名称
  668. this.Ctx.Output.Download(downLoadnFilePath, fileName)
  669. defer func() {
  670. os.Remove(downLoadnFilePath)
  671. }()
  672. br.Ret = 200
  673. br.Success = true
  674. br.Msg = "success"
  675. }