base_from_rzd_index_controller.go 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763
  1. // Package data_manage
  2. // @Author gmy 2024/8/12 14:31:00
  3. package data_manage
  4. import (
  5. "encoding/json"
  6. "eta/eta_api/controllers"
  7. "eta/eta_api/models"
  8. "eta/eta_api/models/data_manage"
  9. "eta/eta_api/models/system"
  10. "eta/eta_api/services/data"
  11. etaTrialService "eta/eta_api/services/eta_trial"
  12. "eta/eta_api/utils"
  13. "fmt"
  14. "github.com/rdlucklib/rdluck_tools/paging"
  15. "github.com/tealeg/xlsx"
  16. "os"
  17. "path/filepath"
  18. "strconv"
  19. "strings"
  20. "time"
  21. )
  22. // BaseFromRzdIndexController 睿姿得数据控制器
  23. type BaseFromRzdIndexController struct {
  24. controllers.BaseAuthController
  25. }
  26. // RzdClassify
  27. // @Title 睿姿得数据分类
  28. // @Description 汾渭数据分类接口
  29. // @Success 200 {object} data_manage.BaseFromRzdClassifyResponse
  30. // @router /rzd/classify [get]
  31. func (this *BaseFromRzdIndexController) RzdClassify() {
  32. br := new(models.BaseResponse).Init()
  33. defer func() {
  34. if br.ErrMsg == "" {
  35. br.IsSendEmail = false
  36. }
  37. this.Data["json"] = br
  38. this.ServeJSON()
  39. }()
  40. sysUser := this.SysUser
  41. if sysUser == nil {
  42. br.Msg = "请登录"
  43. br.ErrMsg = "请登录,SysUser Is Empty"
  44. br.Ret = 408
  45. return
  46. }
  47. classifies, e := data.RzdClassifyList()
  48. if e != nil {
  49. br.Msg = "获取失败"
  50. br.ErrMsg = "获取睿姿得数据分类失败, Err: " + e.Error()
  51. return
  52. }
  53. br.Data = classifies
  54. br.Ret = 200
  55. br.Success = true
  56. br.Msg = "获取成功"
  57. }
  58. // RzdIndexData
  59. // @Title 获取睿姿得数据
  60. // @Description 获取睿姿得数据
  61. // @Param PageSize query int true "每页数据条数"
  62. // @Param CurrentIndex query int true "当前页页码,从1开始"
  63. // @Param ClassifyId query string true "分类id"
  64. // @Param Frequency query string true "频率"
  65. // @Success 200
  66. // @router /rzd/index/data [get]
  67. func (this *BaseFromRzdIndexController) RzdIndexData() {
  68. br := new(models.BaseResponse).Init()
  69. defer func() {
  70. if br.ErrMsg == "" {
  71. br.IsSendEmail = false
  72. }
  73. this.Data["json"] = br
  74. this.ServeJSON()
  75. }()
  76. sysUser := this.SysUser
  77. if sysUser == nil {
  78. br.Msg = "请登录"
  79. br.ErrMsg = "请登录,SysUser Is Empty"
  80. br.Ret = 408
  81. return
  82. }
  83. pageSize, _ := this.GetInt("PageSize")
  84. currentIndex, _ := this.GetInt("CurrentIndex")
  85. var startSize int
  86. if pageSize <= 0 {
  87. pageSize = utils.PageSize20
  88. }
  89. if currentIndex <= 0 {
  90. currentIndex = 1
  91. }
  92. startSize = utils.StartIndex(currentIndex, pageSize)
  93. classifyId, _ := this.GetInt("ClassifyId")
  94. if classifyId < 0 {
  95. br.Msg = "请选择分类"
  96. br.ErrMsg = "请选择分类"
  97. return
  98. }
  99. frequency := this.GetString("Frequency")
  100. // 获取指标
  101. var condition string
  102. var pars []interface{}
  103. if classifyId >= 0 {
  104. condition += ` AND base_from_rzd_classify_id=? `
  105. pars = append(pars, classifyId)
  106. }
  107. if frequency != "" {
  108. condition += ` AND frequency=? `
  109. pars = append(pars, frequency)
  110. }
  111. indexes, err := data_manage.GetRzdIndex(condition, pars)
  112. if err != nil {
  113. br.Msg = "获取数据失败"
  114. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  115. return
  116. }
  117. indexCodes := make([]string, 0)
  118. for _, v := range indexes {
  119. indexCodes = append(indexCodes, v.IndexCode)
  120. }
  121. indexCounts, e := data_manage.GetRzdIndexDataCountGroup(indexCodes)
  122. if e != nil {
  123. br.Msg = "获取失败"
  124. br.ErrMsg = "获取指标数据总量失败, Err:" + err.Error()
  125. return
  126. }
  127. countMap := make(map[string]int)
  128. for _, v := range indexCounts {
  129. countMap[v.IndexCode] = v.Count
  130. }
  131. // 判断是否存在于指标库
  132. edbCodeList, err := data_manage.GetEdbInfoByEdbCodeList(utils.DATA_SOURCE_RZD, indexCodes)
  133. if err != nil {
  134. return
  135. }
  136. edbCodeMap := make(map[string]*data_manage.EdbInfo)
  137. for _, v := range edbCodeList {
  138. edbCodeMap[v.EdbCode] = v
  139. }
  140. resultList := make([]*data_manage.BaseFromRzdIndexList, 0)
  141. for _, v := range indexes {
  142. product := new(data_manage.BaseFromRzdIndexList)
  143. product.BaseFromRzdIndexId = v.BaseFromRzdIndexId
  144. product.BaseFromRzdClassifyId = v.BaseFromRzdClassifyId
  145. product.Unit = v.Unit
  146. product.IndexCode = v.IndexCode
  147. product.IndexName = v.IndexName
  148. product.Frequency = v.Frequency
  149. product.CreateTime = v.CreateTime
  150. product.ModifyTime = v.ModifyTime
  151. edbInfo := edbCodeMap[v.IndexCode]
  152. if edbInfo != nil {
  153. product.EdbInfoId = edbInfo.EdbInfoId
  154. }
  155. total := countMap[v.IndexCode]
  156. page := paging.GetPaging(currentIndex, pageSize, total)
  157. dataList, e := data_manage.GetRzdIndexData(v.IndexCode, startSize, pageSize)
  158. if e != nil {
  159. br.Msg = "获取数据失败"
  160. br.ErrMsg = "获取指标数据失败,Err:" + e.Error()
  161. return
  162. }
  163. if dataList == nil {
  164. dataList = make([]*data_manage.BaseFromRzdData, 0)
  165. }
  166. product.DataList = dataList
  167. product.Paging = page
  168. resultList = append(resultList, product)
  169. }
  170. br.Ret = 200
  171. br.Success = true
  172. br.Msg = "获取成功"
  173. br.Data = resultList
  174. }
  175. // RzdIndexDetail
  176. // @Title 获取睿姿得数据指标详情
  177. // @Description 获取睿姿得数据指标详情
  178. // @Param IndexCode query string true "查询参数 指标id"
  179. // @Success 200
  180. // @router /rzd/index/detail [get]
  181. func (this *BaseFromRzdIndexController) RzdIndexDetail() {
  182. br := new(models.BaseResponse).Init()
  183. defer func() {
  184. if br.ErrMsg == "" {
  185. br.IsSendEmail = false
  186. }
  187. this.Data["json"] = br
  188. this.ServeJSON()
  189. }()
  190. sysUser := this.SysUser
  191. if sysUser == nil {
  192. br.Msg = "请登录"
  193. br.ErrMsg = "请登录,SysUser Is Empty"
  194. br.Ret = 408
  195. return
  196. }
  197. indexCode := this.GetString("IndexCode")
  198. indexDetail, err := data.GetRzdIndexDetail(indexCode)
  199. if err != nil {
  200. return
  201. }
  202. br.Ret = 200
  203. br.Success = true
  204. br.Msg = "获取成功"
  205. br.Data = indexDetail
  206. }
  207. // RzdIndexList
  208. // @Title 获取睿姿得数据指标列表
  209. // @Description 获取睿姿得数据指标详情
  210. // @Param searchParams query string true "查询参数 指标id/指标名称"
  211. // @Success 200
  212. // @router /rzd/index/list [get]
  213. func (this *BaseFromRzdIndexController) RzdIndexList() {
  214. br := new(models.BaseResponse).Init()
  215. defer func() {
  216. if br.ErrMsg == "" {
  217. br.IsSendEmail = false
  218. }
  219. this.Data["json"] = br
  220. this.ServeJSON()
  221. }()
  222. sysUser := this.SysUser
  223. if sysUser == nil {
  224. br.Msg = "请登录"
  225. br.ErrMsg = "请登录,SysUser Is Empty"
  226. br.Ret = 408
  227. return
  228. }
  229. searchParams := this.GetString("SearchParams")
  230. indexList, err := data.GetRzdIndexList(searchParams)
  231. if err != nil {
  232. return
  233. }
  234. br.Ret = 200
  235. br.Success = true
  236. br.Msg = "获取成功"
  237. br.Data = indexList
  238. }
  239. // GetRzdFrequencyList
  240. // @Title 查询频率列表
  241. // @Description 查询频率列表
  242. // @Param classifyId query int false "指标唯一编码"
  243. // @Success 200 {object} []string
  244. // @router /rzd/frequency/list [get]
  245. func (this *BaseFromRzdIndexController) GetRzdFrequencyList() {
  246. br := new(models.BaseResponse).Init()
  247. defer func() {
  248. if br.ErrMsg == "" {
  249. br.IsSendEmail = false
  250. }
  251. this.Data["json"] = br
  252. this.ServeJSON()
  253. }()
  254. sysUser := this.SysUser
  255. if sysUser == nil {
  256. br.Msg = "请登录"
  257. br.ErrMsg = "请登录,SysUser Is Empty"
  258. br.Ret = 408
  259. return
  260. }
  261. classifyId, _ := this.GetInt("ClassifyId")
  262. frequencyList, err := data_manage.GetRzdIndexFrequency(classifyId)
  263. if err != nil {
  264. return
  265. }
  266. br.Ret = 200
  267. br.Success = true
  268. br.Msg = "获取成功"
  269. br.Data = frequencyList
  270. }
  271. // RzdIndexAddValidate
  272. // @Title 新增加入到指标库校验
  273. // @Description 新增加入到指标库校验
  274. // @Param req body data_manage.BaseFromFenWeiIndexBatchAddCheckReq true "请求参数"
  275. // @Success 200 {object} []data_manage.IndexCheckData
  276. // @router /rzd/index/add/validate [post]
  277. func (this *BaseFromRzdIndexController) RzdIndexAddValidate() {
  278. br := new(models.BaseResponse).Init()
  279. defer func() {
  280. if br.ErrMsg == "" {
  281. br.IsSendEmail = false
  282. }
  283. this.Data["json"] = br
  284. this.ServeJSON()
  285. }()
  286. sysUser := this.SysUser
  287. if sysUser == nil {
  288. br.Msg = "请登录"
  289. br.ErrMsg = "请登录,SysUser Is Empty"
  290. br.Ret = 408
  291. return
  292. }
  293. var req *data_manage.BaseFromRzdIndexBatchAddCheckReq
  294. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  295. br.Msg = "参数解析异常!"
  296. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  297. return
  298. }
  299. codeLen := len(req.IndexCodes)
  300. var codeMax = 30
  301. if codeLen > codeMax {
  302. br.Msg = "批量添加指标数量不得超过" + strconv.Itoa(codeMax) + "个"
  303. br.ErrMsg = "批量添加指标数量不得超过" + strconv.Itoa(codeMax) + "个"
  304. return
  305. }
  306. // 校验指标编码是否存在
  307. addValidate, err := data.RzdIndexAddValidate(req.IndexCodes)
  308. if err != nil {
  309. return
  310. }
  311. br.Data = addValidate
  312. br.Ret = 200
  313. br.Success = true
  314. br.Msg = "操作成功"
  315. }
  316. // RzdIndexAdd
  317. // @Title 指标添加到指标库
  318. // @Description 指标添加到指标库
  319. // @Param req body []data_manage.AddEdbInfoReq true "请求参数"
  320. // @Success 200 string "操作成功"
  321. // @router /rzd/index/add [post]
  322. func (this *BaseFromRzdIndexController) RzdIndexAdd() {
  323. br := new(models.BaseResponse).Init()
  324. defer func() {
  325. if br.ErrMsg == "" {
  326. br.IsSendEmail = false
  327. }
  328. this.Data["json"] = br
  329. this.ServeJSON()
  330. }()
  331. sysUser := this.SysUser
  332. if sysUser == nil {
  333. br.Msg = "请登录"
  334. br.ErrMsg = "请登录,SysUser Is Empty"
  335. br.Ret = 408
  336. return
  337. }
  338. deleteCache := true
  339. cacheKey := "CACHE_EDB_INFO_BATCH_ADD_RZD_" + strconv.Itoa(sysUser.AdminId)
  340. defer func() {
  341. if deleteCache {
  342. _ = utils.Rc.Delete(cacheKey)
  343. }
  344. }()
  345. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  346. deleteCache = false
  347. br.Msg = "系统处理中,请稍后重试!"
  348. br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
  349. return
  350. }
  351. var req []*data_manage.AddEdbInfoReq
  352. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  353. br.Msg = "参数解析异常!"
  354. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  355. return
  356. }
  357. if len(req) == 0 {
  358. br.Msg = "请选择指标"
  359. return
  360. }
  361. codeMax := 30
  362. if len(req) > codeMax {
  363. br.Msg = "批量添加指标数量不得超过" + strconv.Itoa(codeMax) + "个"
  364. return
  365. }
  366. indexNames := make([]string, 0)
  367. resp := make([]*data_manage.RzdNameCheckResult, 0)
  368. for _, index := range req {
  369. index.EdbCode = strings.TrimSpace(index.EdbCode)
  370. if index.EdbCode == "" {
  371. br.Msg = "指标ID不可为空"
  372. return
  373. }
  374. index.EdbName = strings.TrimSpace(index.EdbName)
  375. if index.EdbName == "" {
  376. br.Msg = "请输入指标名称"
  377. return
  378. }
  379. index.Frequency = strings.TrimSpace(index.Frequency)
  380. if index.Frequency == "" {
  381. br.Msg = "请选择频度"
  382. return
  383. }
  384. index.Unit = strings.TrimSpace(index.Unit)
  385. if index.Unit == "" {
  386. br.Msg = "请输入单位"
  387. return
  388. }
  389. if index.ClassifyId <= 0 {
  390. br.Msg = "请选择分类"
  391. return
  392. }
  393. indexNames = append(indexNames, index.EdbName)
  394. resp = append(resp, &data_manage.RzdNameCheckResult{
  395. IndexCode: index.EdbCode,
  396. IndexName: index.EdbName,
  397. Exist: false,
  398. })
  399. }
  400. // 指标名称重复校验
  401. nameCheck, err := data.RzdIndexNameCheck(indexNames, resp)
  402. if err != nil {
  403. br.Msg = err.Error()
  404. br.ErrMsg = err.Error()
  405. return
  406. }
  407. for _, v := range nameCheck {
  408. if v.Exist {
  409. br.Msg = "指标名称重复"
  410. br.Data = nameCheck
  411. br.Ret = 200
  412. br.Success = true
  413. return
  414. }
  415. }
  416. for _, v := range req {
  417. var rzdIndexAddReq data_manage.RzdIndexAddReq
  418. rzdIndexAddReq.EdbCode = v.EdbCode
  419. rzdIndexAddReq.EdbName = v.EdbName
  420. rzdIndexAddReq.Frequency = v.Frequency
  421. rzdIndexAddReq.Unit = v.Unit
  422. rzdIndexAddReq.ClassifyId = v.ClassifyId
  423. rzdIndexAddReq.AdminId = sysUser.AdminId
  424. rzdIndexAddReq.AdminRealName = sysUser.RealName
  425. // 新增指标到指标库
  426. edbInfo, e, errMsg, skip := data.RzdIndexAdd(rzdIndexAddReq, this.Lang)
  427. if e != nil {
  428. br.Msg = "操作失败"
  429. if errMsg != "" {
  430. br.Msg = errMsg
  431. }
  432. br.ErrMsg = e.Error()
  433. return
  434. }
  435. if skip {
  436. continue
  437. }
  438. // todo 下面两段代码能否抽离出来???
  439. // 试用平台更新用户累计新增指标数
  440. if utils.BusinessCode == utils.BusinessCodeSandbox {
  441. go func() {
  442. adminItem, e := system.GetSysAdminById(sysUser.AdminId)
  443. if e != nil {
  444. tips := fmt.Sprintf("试用平台更新用户累计新增指标数-获取用户失败, Err: " + e.Error())
  445. utils.FileLog.Info(tips)
  446. return
  447. }
  448. if adminItem.DepartmentName != "ETA试用客户" {
  449. return
  450. }
  451. var ur etaTrialService.EtaTrialUserReq
  452. ur.Mobile = adminItem.Mobile
  453. _, _ = etaTrialService.UpdateUserIndexNum(ur)
  454. }()
  455. }
  456. // 新增操作日志
  457. {
  458. edbLog := new(data_manage.EdbInfoLog)
  459. edbLog.EdbInfoId = edbInfo.EdbInfoId
  460. edbLog.SourceName = edbInfo.SourceName
  461. edbLog.Source = edbInfo.Source
  462. edbLog.EdbCode = edbInfo.EdbCode
  463. edbLog.EdbName = edbInfo.EdbName
  464. edbLog.ClassifyId = edbInfo.ClassifyId
  465. edbLog.SysUserId = sysUser.AdminId
  466. edbLog.SysUserRealName = sysUser.RealName
  467. edbLog.CreateTime = time.Now()
  468. edbLog.Content = string(this.Ctx.Input.RequestBody)
  469. edbLog.Status = "新增指标"
  470. edbLog.Method = this.Ctx.Input.URI()
  471. go data_manage.AddEdbInfoLog(edbLog)
  472. }
  473. }
  474. br.Msg = "操作成功"
  475. br.Ret = 200
  476. br.Success = true
  477. br.IsAddLog = true
  478. }
  479. // RzdIndexDataExport
  480. // @Title 导出指标数据
  481. // @Description 导出指标数据
  482. // @Param IndexCode query string false "指标编码"
  483. // @Param ClassifyId query int false "分类ID"
  484. // @Success 200 string "操作成功"
  485. // @router /rzd/index/data/export [get]
  486. func (this *BaseFromRzdIndexController) RzdIndexDataExport() {
  487. br := new(models.BaseResponse).Init()
  488. defer func() {
  489. this.Data["json"] = br
  490. this.ServeJSON()
  491. }()
  492. sysUser := this.SysUser
  493. if sysUser == nil {
  494. br.Msg = "请重新登录"
  495. return
  496. }
  497. classifyId, _ := this.GetInt("ClassifyId") //分类
  498. indexCode := this.GetString("IndexCode") //指标唯一编码
  499. if classifyId <= 0 {
  500. br.Msg = "请选择分类"
  501. return
  502. }
  503. //userId := sysUser.AdminId
  504. //超管账号可以查看分类下的所有频度数据
  505. /*if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_ADMIN {
  506. userId = 0
  507. }*/
  508. //获取账户所拥有权限的分类id集合
  509. /*classifyIdStrList, err := data.GetEdbClassifyListByAdminId(int64(userId))
  510. if err != nil {
  511. br.Msg = "获取分类数据失败"
  512. return
  513. }*/
  514. dir, _ := os.Executable()
  515. exPath := filepath.Dir(dir)
  516. downLoadFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  517. xlsxFile := xlsx.NewFile()
  518. frequencies, err := data_manage.GetRzdIndexFrequency(classifyId)
  519. if err != nil {
  520. br.Msg = "查询频度失败"
  521. br.ErrMsg = "查询频度失败"
  522. return
  523. }
  524. fileName := `睿姿得数据`
  525. if classifyId > 0 && indexCode == "" {
  526. fenWeiClassify, err := data_manage.GetRzdClassifyItemByClassifyId(classifyId)
  527. if err != nil {
  528. return
  529. }
  530. fileName = fenWeiClassify.ClassifyName
  531. }
  532. if frequencies == nil {
  533. sheet, err := xlsxFile.AddSheet("无数据")
  534. if err != nil {
  535. br.Msg = "新增Sheet失败"
  536. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  537. return
  538. }
  539. rowSecName := sheet.AddRow()
  540. celSecName := rowSecName.AddCell()
  541. celSecName.SetValue("")
  542. }
  543. for _, frequency := range frequencies {
  544. fenWeiIndices, err := data_manage.GetRzdIndexByCodeAndClassify(indexCode, classifyId, frequency)
  545. if err != nil {
  546. return
  547. }
  548. var sheet *xlsx.Sheet
  549. if len(fenWeiIndices) > 0 {
  550. sheetName := *frequency
  551. if sheetName == "" {
  552. sheetName = "无频度"
  553. }
  554. sheet, err = xlsxFile.AddSheet(sheetName)
  555. if err != nil {
  556. br.Msg = "新增Sheet失败"
  557. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  558. return
  559. }
  560. } else {
  561. continue
  562. }
  563. if indexCode != "" {
  564. fileName = fenWeiIndices[0].IndexName
  565. }
  566. //获取指标数据
  567. rowSecName := sheet.AddRow()
  568. celSecName := rowSecName.AddCell()
  569. celSecName.SetValue("指标名称")
  570. rowFrequency := sheet.AddRow()
  571. celFrequency := rowFrequency.AddCell()
  572. celFrequency.SetValue("频率")
  573. rowUnit := sheet.AddRow()
  574. celUnit := rowUnit.AddCell()
  575. celUnit.SetValue("单位")
  576. rowModifyDate := sheet.AddRow()
  577. rowModifyCell := rowModifyDate.AddCell()
  578. rowModifyCell.SetValue("更新时间")
  579. dataMap := make(map[string]map[string]*data_manage.BaseFromRzdData)
  580. var tradeCodeList []string
  581. for _, v := range fenWeiIndices {
  582. cellSenName := rowSecName.AddCell()
  583. cellSenName.SetValue(v.IndexName)
  584. celFrequency := rowFrequency.AddCell()
  585. celFrequency.SetValue(v.Frequency)
  586. celUnit := rowUnit.AddCell()
  587. celUnit.SetValue(v.Unit)
  588. rowModifyCell := rowModifyDate.AddCell()
  589. updateTimeStr := utils.FormatDateString(v.ModifyTime)
  590. rowModifyCell.SetValue(updateTimeStr)
  591. tradeCodeList = append(tradeCodeList, v.IndexCode)
  592. var dataList []*data_manage.BaseFromRzdData
  593. dataList, err = data_manage.GetBaseFormRzdDataByIndexCode(v.IndexCode)
  594. if err != nil && err.Error() != utils.ErrNoRow() {
  595. br.ErrMsg = "GetBaseFormRzdDataByIndexCode,Err:" + err.Error()
  596. br.Msg = "获取数据失败"
  597. return
  598. }
  599. for _, item := range dataList {
  600. if dataMap[item.IndexCode] == nil {
  601. dataMap[item.IndexCode] = make(map[string]*data_manage.BaseFromRzdData)
  602. }
  603. dataMap[item.IndexCode][item.DataTime] = item
  604. }
  605. }
  606. tradeCodeStr := strings.Join(tradeCodeList, "','")
  607. tradeCodeStr = "'" + tradeCodeStr + "'"
  608. dataTimeList, err := data_manage.GetRzdDataListByIndexCodes(tradeCodeStr)
  609. if err != nil {
  610. br.Msg = "获取数据失败"
  611. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  612. return
  613. }
  614. for _, dataTime := range dataTimeList {
  615. rowData := sheet.AddRow()
  616. celDate := rowData.AddCell()
  617. celDate.SetValue(dataTime)
  618. for _, m := range fenWeiIndices {
  619. celData := rowData.AddCell()
  620. if dataMap[m.IndexCode][dataTime] != nil {
  621. celData.SetValue(dataMap[m.IndexCode][dataTime].Value)
  622. }
  623. }
  624. }
  625. }
  626. err = xlsxFile.Save(downLoadFilePath)
  627. if err != nil {
  628. //有指标无数据时先导出一遍空表
  629. sheet, err := xlsxFile.AddSheet("无数据")
  630. if err != nil {
  631. br.Msg = "新增Sheet失败"
  632. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  633. return
  634. }
  635. rowSecName := sheet.AddRow()
  636. celSecName := rowSecName.AddCell()
  637. celSecName.SetValue("")
  638. err = xlsxFile.Save(downLoadFilePath)
  639. if err != nil {
  640. br.Msg = "保存文件失败"
  641. br.ErrMsg = "保存文件失败"
  642. return
  643. }
  644. }
  645. fileName += time.Now().Format("06.01.02") + `.xlsx` //文件名称
  646. this.Ctx.Output.Download(downLoadFilePath, fileName)
  647. defer func() {
  648. os.Remove(downLoadFilePath)
  649. }()
  650. br.Ret = 200
  651. br.Success = true
  652. br.Msg = "success"
  653. }
  654. // GetRzdIndexInfo
  655. // @Title 添加指标-根据条件获取指标信息
  656. // @Description 添加指标-根据条件获取指标信息
  657. // @Param KeyWord query string false "关键字"
  658. // @Param ClassifyIds query string false "分类id"
  659. // @Param Frequencies query string false "频率"
  660. // @Param PageSize query int false "每页数据条数"
  661. // @Param CurrentIndex query int false "当前页页码,从1开始"
  662. // @Success 200 {object} data_manage.BaseFromRzdIndexPage
  663. // @router /rzd/get/index/info [get]
  664. func (this *BaseFromRzdIndexController) GetRzdIndexInfo() {
  665. br := new(models.BaseResponse).Init()
  666. defer func() {
  667. if br.ErrMsg == "" {
  668. br.IsSendEmail = false
  669. }
  670. this.Data["json"] = br
  671. this.ServeJSON()
  672. }()
  673. sysUser := this.SysUser
  674. if sysUser == nil {
  675. br.Msg = "请登录"
  676. br.ErrMsg = "请登录,SysUser Is Empty"
  677. br.Ret = 408
  678. return
  679. }
  680. keyWord := this.GetString("KeyWord")
  681. classifyIds := this.GetString("ClassifyIds")
  682. frequencies := this.GetString("Frequencies")
  683. var classifyIdList []string
  684. var frequencyList []string
  685. if classifyIds != "" {
  686. classifyIdList = strings.Split(classifyIds, ",")
  687. }
  688. if frequencies != "" {
  689. frequencyList = strings.Split(frequencies, ",")
  690. }
  691. indexInfoList, err := data.GetRzdIndexInfo(keyWord, classifyIdList, frequencyList)
  692. if err != nil {
  693. return
  694. }
  695. br.Ret = 200
  696. br.Success = true
  697. br.Msg = "获取成功"
  698. br.Data = indexInfoList
  699. }