base_from_rzd_index_controller.go 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787
  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.FenweiIndexId
  144. product.BaseFromRzdClassifyId = v.ClassifyId
  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 searchParams 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. /*searchParams := this.GetString("SearchParams")
  198. indexes, err := data_manage.GetRzdIndex(condition, pars)
  199. if err != nil {
  200. br.Msg = "获取数据失败"
  201. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  202. return
  203. }
  204. indexCodes := make([]string, 0)
  205. for _, v := range indexes {
  206. indexCodes = append(indexCodes, v.IndexCode)
  207. }
  208. indexCounts, e := data_manage.GetRzdIndexDataCountGroup(indexCodes)
  209. if e != nil {
  210. br.Msg = "获取失败"
  211. br.ErrMsg = "获取指标数据总量失败, Err:" + err.Error()
  212. return
  213. }
  214. countMap := make(map[string]int)
  215. for _, v := range indexCounts {
  216. countMap[v.IndexCode] = v.Count
  217. }
  218. // 判断是否存在于指标库
  219. edbCodeList, err := data_manage.GetEdbInfoByEdbCodeList(utils.DATA_SOURCE_RZD, indexCodes)
  220. if err != nil {
  221. return
  222. }
  223. edbCodeMap := make(map[string]*data_manage.EdbInfo)
  224. for _, v := range edbCodeList {
  225. edbCodeMap[v.EdbCode] = v
  226. }
  227. resultList := make([]*data_manage.BaseFromRzdIndexList, 0)
  228. for _, v := range indexes {
  229. product := new(data_manage.BaseFromRzdIndexList)
  230. product.BaseFromRzdIndexId = v.FenweiIndexId
  231. product.BaseFromRzdClassifyId = v.ClassifyId
  232. product.Unit = v.Unit
  233. product.IndexCode = v.IndexCode
  234. product.IndexName = v.IndexName
  235. product.Frequency = v.Frequency
  236. product.CreateTime = v.CreateTime
  237. product.ModifyTime = v.ModifyTime
  238. edbInfo := edbCodeMap[v.IndexCode]
  239. if edbInfo != nil {
  240. product.EdbInfoId = edbInfo.EdbInfoId
  241. }
  242. total := countMap[v.IndexCode]
  243. page := paging.GetPaging(currentIndex, pageSize, total)
  244. dataList, e := data_manage.GetRzdIndexData(v.IndexCode, startSize, pageSize)
  245. if e != nil {
  246. br.Msg = "获取数据失败"
  247. br.ErrMsg = "获取指标数据失败,Err:" + e.Error()
  248. return
  249. }
  250. if dataList == nil {
  251. dataList = make([]*data_manage.BaseFromRzdData, 0)
  252. }
  253. product.DataList = dataList
  254. product.Paging = page
  255. resultList = append(resultList, product)
  256. }*/
  257. br.Ret = 200
  258. br.Success = true
  259. br.Msg = "获取成功"
  260. //br.Data = resultList
  261. }
  262. // GetRzdFrequencyList
  263. // @Title 查询频率列表
  264. // @Description 查询频率列表
  265. // @Param classifyId query int false "指标唯一编码"
  266. // @Success 200 {object} []string
  267. // @router /rzd/frequency/list [get]
  268. func (this *BaseFromRzdIndexController) GetRzdFrequencyList() {
  269. br := new(models.BaseResponse).Init()
  270. defer func() {
  271. if br.ErrMsg == "" {
  272. br.IsSendEmail = false
  273. }
  274. this.Data["json"] = br
  275. this.ServeJSON()
  276. }()
  277. sysUser := this.SysUser
  278. if sysUser == nil {
  279. br.Msg = "请登录"
  280. br.ErrMsg = "请登录,SysUser Is Empty"
  281. br.Ret = 408
  282. return
  283. }
  284. classifyId, _ := this.GetInt("ClassifyId")
  285. frequencyList, err := data_manage.GetRzdIndexFrequency(classifyId)
  286. if err != nil {
  287. return
  288. }
  289. br.Ret = 200
  290. br.Success = true
  291. br.Msg = "获取成功"
  292. br.Data = frequencyList
  293. }
  294. // RzdIndexAddValidate
  295. // @Title 新增加入到指标库校验
  296. // @Description 新增加入到指标库校验
  297. // @Param req body data_manage.BaseFromFenWeiIndexBatchAddCheckReq true "请求参数"
  298. // @Success 200 {object} []data_manage.IndexCheckData
  299. // @router /rzd/index/add/validate [post]
  300. func (this *BaseFromRzdIndexController) RzdIndexAddValidate() {
  301. br := new(models.BaseResponse).Init()
  302. defer func() {
  303. if br.ErrMsg == "" {
  304. br.IsSendEmail = false
  305. }
  306. this.Data["json"] = br
  307. this.ServeJSON()
  308. }()
  309. sysUser := this.SysUser
  310. if sysUser == nil {
  311. br.Msg = "请登录"
  312. br.ErrMsg = "请登录,SysUser Is Empty"
  313. br.Ret = 408
  314. return
  315. }
  316. var req *data_manage.BaseFromRzdIndexBatchAddCheckReq
  317. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  318. br.Msg = "参数解析异常!"
  319. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  320. return
  321. }
  322. codeLen := len(req.IndexCodes)
  323. var codeMax = 30
  324. if codeLen > codeMax {
  325. br.Msg = "批量添加指标数量不得超过" + strconv.Itoa(codeMax) + "个"
  326. br.ErrMsg = "批量添加指标数量不得超过" + strconv.Itoa(codeMax) + "个"
  327. return
  328. }
  329. // 校验指标编码是否存在
  330. addValidate, err := data.RzdIndexAddValidate(req.IndexCodes)
  331. if err != nil {
  332. return
  333. }
  334. br.Data = addValidate
  335. br.Ret = 200
  336. br.Success = true
  337. br.Msg = "操作成功"
  338. }
  339. // RzdIndexAdd
  340. // @Title 指标添加到指标库
  341. // @Description 指标添加到指标库
  342. // @Param req body []data_manage.AddEdbInfoReq true "请求参数"
  343. // @Success 200 string "操作成功"
  344. // @router /rzd/index/add [post]
  345. func (this *BaseFromRzdIndexController) RzdIndexAdd() {
  346. br := new(models.BaseResponse).Init()
  347. defer func() {
  348. if br.ErrMsg == "" {
  349. br.IsSendEmail = false
  350. }
  351. this.Data["json"] = br
  352. this.ServeJSON()
  353. }()
  354. sysUser := this.SysUser
  355. if sysUser == nil {
  356. br.Msg = "请登录"
  357. br.ErrMsg = "请登录,SysUser Is Empty"
  358. br.Ret = 408
  359. return
  360. }
  361. deleteCache := true
  362. cacheKey := "CACHE_EDB_INFO_BATCH_ADD_RZD_" + strconv.Itoa(sysUser.AdminId)
  363. defer func() {
  364. if deleteCache {
  365. _ = utils.Rc.Delete(cacheKey)
  366. }
  367. }()
  368. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  369. deleteCache = false
  370. br.Msg = "系统处理中,请稍后重试!"
  371. br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
  372. return
  373. }
  374. var req []*data_manage.AddEdbInfoReq
  375. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  376. br.Msg = "参数解析异常!"
  377. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  378. return
  379. }
  380. if len(req) == 0 {
  381. br.Msg = "请选择指标"
  382. return
  383. }
  384. codeMax := 30
  385. if len(req) > codeMax {
  386. br.Msg = "批量添加指标数量不得超过" + strconv.Itoa(codeMax) + "个"
  387. return
  388. }
  389. indexNames := make([]string, 0)
  390. resp := make([]*data_manage.RzdNameCheckResult, 0)
  391. for _, index := range req {
  392. index.EdbCode = strings.TrimSpace(index.EdbCode)
  393. if index.EdbCode == "" {
  394. br.Msg = "指标ID不可为空"
  395. return
  396. }
  397. index.EdbName = strings.TrimSpace(index.EdbName)
  398. if index.EdbName == "" {
  399. br.Msg = "请输入指标名称"
  400. return
  401. }
  402. index.Frequency = strings.TrimSpace(index.Frequency)
  403. if index.Frequency == "" {
  404. br.Msg = "请选择频度"
  405. return
  406. }
  407. index.Unit = strings.TrimSpace(index.Unit)
  408. if index.Unit == "" {
  409. br.Msg = "请输入单位"
  410. return
  411. }
  412. if index.ClassifyId <= 0 {
  413. br.Msg = "请选择分类"
  414. return
  415. }
  416. indexNames = append(indexNames, index.EdbName)
  417. resp = append(resp, &data_manage.RzdNameCheckResult{
  418. IndexCode: index.EdbCode,
  419. IndexName: index.EdbName,
  420. Exist: false,
  421. })
  422. }
  423. // 指标名称重复校验
  424. nameCheck, err := data.RzdIndexNameCheck(indexNames, resp)
  425. if err != nil {
  426. br.Msg = err.Error()
  427. br.ErrMsg = err.Error()
  428. return
  429. }
  430. for _, v := range nameCheck {
  431. if v.Exist {
  432. br.Msg = "指标名称重复"
  433. br.Data = nameCheck
  434. br.Ret = 200
  435. br.Success = true
  436. return
  437. }
  438. }
  439. for _, v := range req {
  440. var rzdIndexAddReq data_manage.RzdIndexAddReq
  441. rzdIndexAddReq.EdbCode = v.EdbCode
  442. rzdIndexAddReq.EdbName = v.EdbName
  443. rzdIndexAddReq.Frequency = v.Frequency
  444. rzdIndexAddReq.Unit = v.Unit
  445. rzdIndexAddReq.ClassifyId = v.ClassifyId
  446. rzdIndexAddReq.AdminId = sysUser.AdminId
  447. rzdIndexAddReq.AdminRealName = sysUser.RealName
  448. // 新增指标到指标库
  449. edbInfo, e, errMsg, skip := data.RzdIndexAdd(rzdIndexAddReq, this.Lang)
  450. if e != nil {
  451. br.Msg = "操作失败"
  452. if errMsg != "" {
  453. br.Msg = errMsg
  454. }
  455. br.ErrMsg = e.Error()
  456. return
  457. }
  458. if skip {
  459. continue
  460. }
  461. // todo 下面两段代码能否抽离出来???
  462. // 试用平台更新用户累计新增指标数
  463. if utils.BusinessCode == utils.BusinessCodeSandbox {
  464. go func() {
  465. adminItem, e := system.GetSysAdminById(sysUser.AdminId)
  466. if e != nil {
  467. tips := fmt.Sprintf("试用平台更新用户累计新增指标数-获取用户失败, Err: " + e.Error())
  468. utils.FileLog.Info(tips)
  469. return
  470. }
  471. if adminItem.DepartmentName != "ETA试用客户" {
  472. return
  473. }
  474. var ur etaTrialService.EtaTrialUserReq
  475. ur.Mobile = adminItem.Mobile
  476. _, _ = etaTrialService.UpdateUserIndexNum(ur)
  477. }()
  478. }
  479. // 新增操作日志
  480. {
  481. edbLog := new(data_manage.EdbInfoLog)
  482. edbLog.EdbInfoId = edbInfo.EdbInfoId
  483. edbLog.SourceName = edbInfo.SourceName
  484. edbLog.Source = edbInfo.Source
  485. edbLog.EdbCode = edbInfo.EdbCode
  486. edbLog.EdbName = edbInfo.EdbName
  487. edbLog.ClassifyId = edbInfo.ClassifyId
  488. edbLog.SysUserId = sysUser.AdminId
  489. edbLog.SysUserRealName = sysUser.RealName
  490. edbLog.CreateTime = time.Now()
  491. edbLog.Content = string(this.Ctx.Input.RequestBody)
  492. edbLog.Status = "新增指标"
  493. edbLog.Method = this.Ctx.Input.URI()
  494. go data_manage.AddEdbInfoLog(edbLog)
  495. }
  496. }
  497. br.Msg = "操作成功"
  498. br.Ret = 200
  499. br.Success = true
  500. br.IsAddLog = true
  501. }
  502. // RzdIndexDataExport
  503. // @Title 导出指标数据
  504. // @Description 导出指标数据
  505. // @Param IndexCode query string false "指标编码"
  506. // @Param ClassifyId query int false "分类ID"
  507. // @Success 200 string "操作成功"
  508. // @router /rzd/index/data/export [get]
  509. func (this *BaseFromRzdIndexController) RzdIndexDataExport() {
  510. br := new(models.BaseResponse).Init()
  511. defer func() {
  512. this.Data["json"] = br
  513. this.ServeJSON()
  514. }()
  515. sysUser := this.SysUser
  516. if sysUser == nil {
  517. br.Msg = "请重新登录"
  518. return
  519. }
  520. classifyId, _ := this.GetInt("ClassifyId") //分类
  521. indexCode := this.GetString("IndexCode") //指标唯一编码
  522. if classifyId <= 0 {
  523. br.Msg = "请选择分类"
  524. return
  525. }
  526. //userId := sysUser.AdminId
  527. //超管账号可以查看分类下的所有频度数据
  528. /*if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_ADMIN {
  529. userId = 0
  530. }*/
  531. //获取账户所拥有权限的分类id集合
  532. /*classifyIdStrList, err := data.GetEdbClassifyListByAdminId(int64(userId))
  533. if err != nil {
  534. br.Msg = "获取分类数据失败"
  535. return
  536. }*/
  537. dir, _ := os.Executable()
  538. exPath := filepath.Dir(dir)
  539. downLoadFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  540. xlsxFile := xlsx.NewFile()
  541. frequencies, err := data_manage.GetRzdIndexFrequency(classifyId)
  542. if err != nil {
  543. br.Msg = "查询频度失败"
  544. br.ErrMsg = "查询频度失败"
  545. return
  546. }
  547. fileName := `睿姿得数据`
  548. if classifyId > 0 && indexCode == "" {
  549. fenWeiClassify, err := data_manage.GetRzdClassifyItemByClassifyId(classifyId)
  550. if err != nil {
  551. return
  552. }
  553. fileName = fenWeiClassify.ClassifyName
  554. }
  555. if frequencies == nil {
  556. sheet, err := xlsxFile.AddSheet("无数据")
  557. if err != nil {
  558. br.Msg = "新增Sheet失败"
  559. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  560. return
  561. }
  562. rowSecName := sheet.AddRow()
  563. celSecName := rowSecName.AddCell()
  564. celSecName.SetValue("")
  565. }
  566. for _, frequency := range frequencies {
  567. fenWeiIndices, err := data_manage.GetRzdIndexByCodeAndClassify(indexCode, classifyId, frequency)
  568. if err != nil {
  569. return
  570. }
  571. var sheet *xlsx.Sheet
  572. if len(fenWeiIndices) > 0 {
  573. sheetName := *frequency
  574. if sheetName == "" {
  575. sheetName = "无频度"
  576. }
  577. sheet, err = xlsxFile.AddSheet(sheetName)
  578. if err != nil {
  579. br.Msg = "新增Sheet失败"
  580. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  581. return
  582. }
  583. } else {
  584. continue
  585. }
  586. if indexCode != "" {
  587. fileName = fenWeiIndices[0].IndexName
  588. }
  589. //获取指标数据
  590. rowSecName := sheet.AddRow()
  591. celSecName := rowSecName.AddCell()
  592. celSecName.SetValue("指标名称")
  593. rowFrequency := sheet.AddRow()
  594. celFrequency := rowFrequency.AddCell()
  595. celFrequency.SetValue("频率")
  596. rowUnit := sheet.AddRow()
  597. celUnit := rowUnit.AddCell()
  598. celUnit.SetValue("单位")
  599. rowModifyDate := sheet.AddRow()
  600. rowModifyCell := rowModifyDate.AddCell()
  601. rowModifyCell.SetValue("更新时间")
  602. dataMap := make(map[string]map[string]*data_manage.BaseFromRzdData)
  603. var tradeCodeList []string
  604. for _, v := range fenWeiIndices {
  605. cellSenName := rowSecName.AddCell()
  606. cellSenName.SetValue(v.IndexName)
  607. celFrequency := rowFrequency.AddCell()
  608. celFrequency.SetValue(v.Frequency)
  609. celUnit := rowUnit.AddCell()
  610. celUnit.SetValue(v.Unit)
  611. rowModifyCell := rowModifyDate.AddCell()
  612. updateTimeStr := utils.FormatDateString(v.ModifyTime)
  613. rowModifyCell.SetValue(updateTimeStr)
  614. tradeCodeList = append(tradeCodeList, v.IndexCode)
  615. var dataList []*data_manage.BaseFromRzdData
  616. dataList, err = data_manage.GetBaseFormRzdDataByIndexCode(v.IndexCode)
  617. if err != nil && err.Error() != utils.ErrNoRow() {
  618. br.ErrMsg = "GetBaseFormRzdDataByIndexCode,Err:" + err.Error()
  619. br.Msg = "获取数据失败"
  620. return
  621. }
  622. for _, item := range dataList {
  623. if dataMap[item.IndexCode] == nil {
  624. dataMap[item.IndexCode] = make(map[string]*data_manage.BaseFromRzdData)
  625. }
  626. dataMap[item.IndexCode][item.DataTime] = item
  627. }
  628. }
  629. tradeCodeStr := strings.Join(tradeCodeList, "','")
  630. tradeCodeStr = "'" + tradeCodeStr + "'"
  631. dataTimeList, err := data_manage.GetRzdDataListByIndexCodes(tradeCodeStr)
  632. if err != nil {
  633. br.Msg = "获取数据失败"
  634. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  635. return
  636. }
  637. for _, dataTime := range dataTimeList {
  638. rowData := sheet.AddRow()
  639. celDate := rowData.AddCell()
  640. celDate.SetValue(dataTime)
  641. for _, m := range fenWeiIndices {
  642. celData := rowData.AddCell()
  643. if dataMap[m.IndexCode][dataTime] != nil {
  644. celData.SetValue(dataMap[m.IndexCode][dataTime].Value)
  645. }
  646. }
  647. }
  648. }
  649. err = xlsxFile.Save(downLoadFilePath)
  650. if err != nil {
  651. //有指标无数据时先导出一遍空表
  652. sheet, err := xlsxFile.AddSheet("无数据")
  653. if err != nil {
  654. br.Msg = "新增Sheet失败"
  655. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  656. return
  657. }
  658. rowSecName := sheet.AddRow()
  659. celSecName := rowSecName.AddCell()
  660. celSecName.SetValue("")
  661. err = xlsxFile.Save(downLoadFilePath)
  662. if err != nil {
  663. br.Msg = "保存文件失败"
  664. br.ErrMsg = "保存文件失败"
  665. return
  666. }
  667. }
  668. fileName += time.Now().Format("06.01.02") + `.xlsx` //文件名称
  669. this.Ctx.Output.Download(downLoadFilePath, fileName)
  670. defer func() {
  671. os.Remove(downLoadFilePath)
  672. }()
  673. br.Ret = 200
  674. br.Success = true
  675. br.Msg = "success"
  676. }
  677. // GetRzdIndexInfo
  678. // @Title 添加指标-根据条件获取指标信息
  679. // @Description 添加指标-根据条件获取指标信息
  680. // @Param KeyWord query string false "关键字"
  681. // @Param ClassifyIds query string false "分类id"
  682. // @Param Frequencies query string false "频率"
  683. // @Param PageSize query int false "每页数据条数"
  684. // @Param CurrentIndex query int false "当前页页码,从1开始"
  685. // @Success 200 {object} data_manage.BaseFromRzdIndexPage
  686. // @router /rzd/get/index/info [get]
  687. func (this *BaseFromRzdIndexController) GetRzdIndexInfo() {
  688. br := new(models.BaseResponse).Init()
  689. defer func() {
  690. if br.ErrMsg == "" {
  691. br.IsSendEmail = false
  692. }
  693. this.Data["json"] = br
  694. this.ServeJSON()
  695. }()
  696. sysUser := this.SysUser
  697. if sysUser == nil {
  698. br.Msg = "请登录"
  699. br.ErrMsg = "请登录,SysUser Is Empty"
  700. br.Ret = 408
  701. return
  702. }
  703. keyWord := this.GetString("KeyWord")
  704. classifyIds := this.GetString("ClassifyIds")
  705. frequencies := this.GetString("Frequencies")
  706. var classifyIdList []string
  707. var frequencyList []string
  708. if classifyIds != "" {
  709. classifyIdList = strings.Split(classifyIds, ",")
  710. }
  711. if frequencies != "" {
  712. frequencyList = strings.Split(frequencies, ",")
  713. }
  714. indexInfoList, err := data.GetRzdIndexInfo(keyWord, classifyIdList, frequencyList)
  715. if err != nil {
  716. return
  717. }
  718. br.Ret = 200
  719. br.Success = true
  720. br.Msg = "获取成功"
  721. br.Data = indexInfoList
  722. }