fenwei_data.go 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062
  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. "github.com/rdlucklib/rdluck_tools/paging"
  12. "github.com/tealeg/xlsx"
  13. "os"
  14. "path/filepath"
  15. "strconv"
  16. "strings"
  17. "time"
  18. )
  19. // FenweiClassify
  20. // @Title 汾渭数据分类
  21. // @Description 汾渭数据分类接口
  22. // @Success 200 {object} data_manage.BaseFromFenweiClassifyItem
  23. // @router /fenwei/classify [get]
  24. func (this *EdbInfoController) FenweiClassify() {
  25. br := new(models.BaseResponse).Init()
  26. defer func() {
  27. if br.ErrMsg == "" {
  28. br.IsSendEmail = false
  29. }
  30. this.Data["json"] = br
  31. this.ServeJSON()
  32. }()
  33. sysUser := this.SysUser
  34. if sysUser == nil {
  35. br.Msg = "请登录"
  36. br.ErrMsg = "请登录,SysUser Is Empty"
  37. br.Ret = 408
  38. return
  39. }
  40. classifies, e := data_manage.GetBaseFromFenweiClassify()
  41. if e != nil {
  42. br.Msg = "获取失败"
  43. br.ErrMsg = "获取汾渭数据分类失败, Err: " + e.Error()
  44. return
  45. }
  46. classifyOb := new(data_manage.BaseFromFenweiClassify)
  47. resp := make([]*data_manage.BaseFromFenweiClassifyItem, 0)
  48. parentMap := make(map[int][]*data_manage.BaseFromFenweiClassifyItem)
  49. for _, v := range classifies {
  50. t := classifyOb.Format2Item(v)
  51. if v.ParentId == 0 {
  52. resp = append(resp, t)
  53. }
  54. if v.ParentId > 0 {
  55. if parentMap[v.ParentId] == nil {
  56. parentMap[v.ParentId] = make([]*data_manage.BaseFromFenweiClassifyItem, 0)
  57. }
  58. parentMap[v.ParentId] = append(parentMap[v.ParentId], t)
  59. }
  60. }
  61. for _, v := range resp {
  62. addChildren(v, parentMap)
  63. }
  64. br.Data = resp
  65. br.Ret = 200
  66. br.Success = true
  67. br.Msg = "获取成功"
  68. }
  69. func addChildren(parent *data_manage.BaseFromFenweiClassifyItem, parentMap map[int][]*data_manage.BaseFromFenweiClassifyItem) {
  70. if children, ok := parentMap[parent.ClassifyId]; ok {
  71. parent.Child = children
  72. for _, child := range children {
  73. addChildren(child, parentMap)
  74. }
  75. }
  76. }
  77. // FenweiIndexData
  78. // @Title 获取汾渭数据
  79. // @Description 获取汾渭数据接口
  80. // @Param PageSize query int true "每页数据条数"
  81. // @Param CurrentIndex query int true "当前页页码,从1开始"
  82. // @Param ClassifyId query string true "分类id"
  83. // @Param Frequency query string true "频率"
  84. // @Success 200 {object} data_manage.LzFrequency
  85. // @router /fenwei/index/data [get]
  86. func (this *EdbInfoController) FenweiIndexData() {
  87. br := new(models.BaseResponse).Init()
  88. defer func() {
  89. if br.ErrMsg == "" {
  90. br.IsSendEmail = false
  91. }
  92. this.Data["json"] = br
  93. this.ServeJSON()
  94. }()
  95. sysUser := this.SysUser
  96. if sysUser == nil {
  97. br.Msg = "请登录"
  98. br.ErrMsg = "请登录,SysUser Is Empty"
  99. br.Ret = 408
  100. return
  101. }
  102. pageSize, _ := this.GetInt("PageSize")
  103. currentIndex, _ := this.GetInt("CurrentIndex")
  104. var startSize int
  105. if pageSize <= 0 {
  106. pageSize = utils.PageSize20
  107. }
  108. if currentIndex <= 0 {
  109. currentIndex = 1
  110. }
  111. startSize = utils.StartIndex(currentIndex, pageSize)
  112. classifyId, _ := this.GetInt("ClassifyId")
  113. if classifyId < 0 {
  114. br.Msg = "请选择分类"
  115. br.ErrMsg = "请选择分类"
  116. return
  117. }
  118. frequency := this.GetString("Frequency")
  119. // 获取指标
  120. var condition string
  121. var pars []interface{}
  122. if classifyId >= 0 {
  123. condition += ` AND classify_id=? `
  124. pars = append(pars, classifyId)
  125. }
  126. if frequency != "" {
  127. condition += ` AND frequency=? `
  128. pars = append(pars, frequency)
  129. }
  130. indexes, err := data_manage.GetFenweiIndex(condition, pars)
  131. if err != nil {
  132. br.Msg = "获取数据失败"
  133. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  134. return
  135. }
  136. indexCodes := make([]string, 0)
  137. for _, v := range indexes {
  138. indexCodes = append(indexCodes, v.IndexCode)
  139. }
  140. indexCounts, e := data_manage.GetFenweiIndexDataCountGroup(indexCodes)
  141. if e != nil {
  142. br.Msg = "获取失败"
  143. br.ErrMsg = "获取指标数据总量失败, Err:" + err.Error()
  144. return
  145. }
  146. countMap := make(map[string]int)
  147. for _, v := range indexCounts {
  148. countMap[v.IndexCode] = v.Count
  149. }
  150. // 判断是否存在于指标库
  151. edbCodeList, err := data_manage.GetEdbInfoByEdbCodeList(utils.DATA_SOURCE_FENWEI, indexCodes)
  152. if err != nil {
  153. return
  154. }
  155. edbCodeMap := make(map[string]*data_manage.EdbInfo)
  156. for _, v := range edbCodeList {
  157. edbCodeMap[v.EdbCode] = v
  158. }
  159. // 获取指标数据最新更新时间
  160. lastModifyTimeList, err := data_manage.GetFenWeiDataLastModifyTimeList(indexCodes)
  161. if err != nil {
  162. return
  163. }
  164. lastModifyTimeMap := make(map[string]string)
  165. for _, v := range lastModifyTimeList {
  166. lastModifyTimeMap[v.IndexCode] = v.ModifyTime
  167. }
  168. resultList := make([]*data_manage.BaseFromFenweiIndexList, 0)
  169. for _, v := range indexes {
  170. product := new(data_manage.BaseFromFenweiIndexList)
  171. product.FenweiIndexId = v.FenweiIndexId
  172. product.ClassifyId = v.ClassifyId
  173. product.Unit = v.Unit
  174. product.IndexCode = v.IndexCode
  175. product.IndexName = v.IndexName
  176. product.Frequency = v.Frequency
  177. product.CreateTime = v.CreateTime
  178. if lastModifyTimeMap[v.IndexCode] != "" {
  179. product.ModifyTime = lastModifyTimeMap[v.IndexCode]
  180. } else {
  181. product.ModifyTime = ""
  182. }
  183. edbInfo := edbCodeMap[v.IndexCode]
  184. if edbInfo != nil {
  185. product.EdbInfoId = edbInfo.EdbInfoId
  186. }
  187. total := countMap[v.IndexCode]
  188. page := paging.GetPaging(currentIndex, pageSize, total)
  189. dataList, e := data_manage.GetFenweiIndexData(v.IndexCode, startSize, pageSize)
  190. if e != nil {
  191. br.Msg = "获取数据失败"
  192. br.ErrMsg = "获取指标数据失败,Err:" + e.Error()
  193. return
  194. }
  195. if dataList == nil {
  196. dataList = make([]*data_manage.BaseFromFenweiData, 0)
  197. }
  198. product.DataList = dataList
  199. product.Paging = page
  200. resultList = append(resultList, product)
  201. }
  202. br.Ret = 200
  203. br.Success = true
  204. br.Msg = "获取成功"
  205. br.Data = resultList
  206. }
  207. // FenweiSearchList
  208. // @Title Fenwei模糊搜索
  209. // @Description Fenwei模糊搜索
  210. // @Param Keyword query string ture "关键字搜索"
  211. // @Success 200 {object} data_manage.BaseFromFenweiIndexSearchItem
  212. // @router /fenwei/search_list [get]
  213. func (this *EdbInfoController) FenweiSearchList() {
  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. list := make([]*data_manage.BaseFromFenweiIndexSearchItem, 0)
  230. var err error
  231. // 关键字
  232. keyword := this.GetString("Keyword")
  233. if keyword != "" {
  234. keyWordArr := strings.Split(keyword, " ")
  235. if len(keyWordArr) > 0 {
  236. condition := ""
  237. for _, v := range keyWordArr {
  238. condition += ` AND CONCAT(index_name,index_code) LIKE '%` + v + `%'`
  239. }
  240. list, err = data_manage.GetFenweiItemList(condition)
  241. if err != nil {
  242. br.ErrMsg = "获取失败,Err:" + err.Error()
  243. br.Msg = "获取失败"
  244. return
  245. }
  246. }
  247. } else {
  248. list, err = data_manage.GetFenweiItemList("")
  249. if err != nil {
  250. br.ErrMsg = "获取失败,Err:" + err.Error()
  251. br.Msg = "获取失败"
  252. return
  253. }
  254. }
  255. br.Ret = 200
  256. br.Success = true
  257. br.Msg = "获取成功"
  258. br.Data = list
  259. }
  260. // FenweiSingleData
  261. // @Title 获取Fenwei数据
  262. // @Description 获取Fenwei单条数据接口
  263. // @Param IndexCode query string true "指标唯一编码"
  264. // @Success 200 {object} models.BaseResponse
  265. // @router /fenwei/single_data [get]
  266. func (this *EdbInfoController) FenweiSingleData() {
  267. br := new(models.BaseResponse).Init()
  268. defer func() {
  269. if br.ErrMsg == "" {
  270. br.IsSendEmail = false
  271. }
  272. this.Data["json"] = br
  273. this.ServeJSON()
  274. }()
  275. sysUser := this.SysUser
  276. if sysUser == nil {
  277. br.Msg = "请登录"
  278. br.ErrMsg = "请登录,SysUser Is Empty"
  279. br.Ret = 408
  280. return
  281. }
  282. indexCode := this.GetString("IndexCode")
  283. indexInfo, err := data_manage.GetBaseFromFenweiIndexByIndexCode(indexCode)
  284. if err != nil {
  285. br.Msg = "获取指标信息失败"
  286. br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
  287. return
  288. }
  289. dataTmpList, err := data_manage.GetFenweiIndexDataByCode(indexCode)
  290. if err != nil {
  291. br.Msg = "获取数据失败"
  292. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  293. return
  294. }
  295. indexCodeList := []string{indexCode}
  296. edbCodeList, err := data_manage.GetEdbInfoByEdbCodeList(utils.DATA_SOURCE_FENWEI, indexCodeList)
  297. if err != nil {
  298. return
  299. }
  300. var ret data_manage.FenweiSingleDataResp
  301. var dataList []*data_manage.FenweiSingleData
  302. ret.ClassifyId = indexInfo.ClassifyId
  303. ret.FenweiIndexId = indexInfo.FenweiIndexId
  304. ret.IndexCode = indexInfo.IndexCode
  305. ret.IndexName = indexInfo.IndexName
  306. ret.Frequency = indexInfo.Frequency
  307. ret.CreateTime = indexInfo.CreateTime.Format(utils.FormatDateTime)
  308. ret.ModifyTime = indexInfo.ModifyTime.Format(utils.FormatDateTime)
  309. ret.Unit = indexInfo.Unit
  310. for _, v := range dataTmpList {
  311. tmp := &data_manage.FenweiSingleData{
  312. Value: v.Value,
  313. DataTime: v.DataTime,
  314. }
  315. dataList = append(dataList, tmp)
  316. }
  317. ret.Data = dataList
  318. if len(edbCodeList) > 0 {
  319. edbInfo := edbCodeList[0]
  320. ret.EdbInfoId = edbInfo.EdbInfoId
  321. }
  322. br.Ret = 200
  323. br.Success = true
  324. br.Msg = "获取成功"
  325. br.Data = ret
  326. }
  327. // ExportFenweiList
  328. // @Title 导出Fenwei数据
  329. // @Description 导出Fenwei数据
  330. // @Param IndexName query string false "名称关键词"
  331. // @Param IndexCode query string false "指标唯一编码"
  332. // @Param ClassifyId query string true "分类"
  333. // @Success 200 导出成功
  334. // @router /fenwei/export [get]
  335. func (this *EdbInfoController) ExportFenweiList() {
  336. br := new(models.BaseResponse).Init()
  337. defer func() {
  338. if br.ErrMsg == "" {
  339. br.IsSendEmail = false
  340. }
  341. this.Data["json"] = br
  342. this.ServeJSON()
  343. }()
  344. sysUser := this.SysUser
  345. if sysUser == nil {
  346. br.Msg = "请重新登录"
  347. return
  348. }
  349. indexCode := this.GetString("IndexCode") //指标唯一编码
  350. classifyId, _ := this.GetInt("ClassifyId")
  351. //secNameList := make([]*models.EdbdataExportList, 0)
  352. dir, _ := os.Executable()
  353. exPath := filepath.Dir(dir)
  354. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  355. xlsxFile := xlsx.NewFile()
  356. var pars []interface{}
  357. condition := ""
  358. if classifyId > 0 {
  359. //获取指标
  360. condition += " AND classify_id=?"
  361. pars = append(pars, classifyId)
  362. }
  363. if indexCode != "" {
  364. //获取指标
  365. condition += " AND index_code=?"
  366. pars = append(pars, indexCode)
  367. }
  368. indexList, err := data_manage.GetFenweiIndex(condition, pars)
  369. if err != nil {
  370. fmt.Println("获取数据失败,Err:" + err.Error())
  371. return
  372. }
  373. if len(indexList) <= 0 {
  374. fmt.Println("indexList 为空")
  375. br.Ret = 200
  376. br.Success = true
  377. br.Msg = "success"
  378. return
  379. }
  380. sheetNew := new(xlsx.Sheet)
  381. // todo 分类名称
  382. sheetNew, err = xlsxFile.AddSheet("汾渭数据")
  383. //sheetNew.SetColWidth()
  384. //获取指标数据
  385. windRow := sheetNew.AddRow()
  386. secNameRow := sheetNew.AddRow()
  387. indexCodeRow := sheetNew.AddRow()
  388. frequencyRow := sheetNew.AddRow()
  389. unitRow := sheetNew.AddRow()
  390. lastModifyDateRow := sheetNew.AddRow()
  391. //获取分类下指标最大数据量
  392. var dataMax int
  393. setRowIndex := 6
  394. indexCodeList := make([]string, 0)
  395. for _, v := range indexList {
  396. indexCodeList = append(indexCodeList, v.IndexCode)
  397. }
  398. dataListMap := make(map[string][]*data_manage.BaseFromFenweiData)
  399. if len(indexList) > 0 {
  400. allDataList, e := data_manage.GetFenweiIndexDataByCodes(indexCodeList)
  401. if e != nil {
  402. br.Msg = "获取数据失败"
  403. br.ErrMsg = "获取数据失败,Err:" + e.Error()
  404. return
  405. }
  406. for _, v := range allDataList {
  407. dataListMap[v.IndexCode] = append(dataListMap[v.IndexCode], v)
  408. }
  409. for _, v := range dataListMap {
  410. if len(v) > dataMax {
  411. dataMax = len(v)
  412. }
  413. }
  414. }
  415. for k, sv := range indexList {
  416. //获取数据
  417. dataList, ok := dataListMap[sv.IndexCode]
  418. if !ok {
  419. continue
  420. }
  421. if len(dataList) > 0 {
  422. windRow.AddCell().SetValue("汾渭数据")
  423. secNameRow.AddCell().SetValue("指标名称")
  424. indexCodeRow.AddCell().SetValue("指标ID")
  425. frequencyRow.AddCell().SetValue("频率")
  426. unitRow.AddCell().SetValue("单位")
  427. lastModifyDateRow.AddCell().SetValue("更新时间")
  428. secNameRow.AddCell().SetValue(sv.IndexName)
  429. indexCodeRow.AddCell().SetValue(sv.IndexCode)
  430. frequencyRow.AddCell().SetValue(sv.Frequency)
  431. unitRow.AddCell().SetValue(sv.Unit)
  432. lastModifyDateRow.AddCell().SetValue(sv.ModifyTime)
  433. windRow.AddCell()
  434. windRow.AddCell()
  435. secNameRow.AddCell()
  436. indexCodeRow.AddCell()
  437. frequencyRow.AddCell()
  438. unitRow.AddCell()
  439. lastModifyDateRow.AddCell()
  440. min := k * 3
  441. sheetNew.SetColWidth(min, min, 15)
  442. if len(dataList) <= 0 {
  443. for n := 0; n < dataMax; n++ {
  444. rowIndex := setRowIndex + n
  445. row := sheetNew.Row(rowIndex)
  446. row.AddCell()
  447. row.AddCell()
  448. row.AddCell()
  449. }
  450. } else {
  451. endRowIndex := 0
  452. for rk, dv := range dataList {
  453. rowIndex := setRowIndex + rk
  454. row := sheetNew.Row(rowIndex)
  455. displayDate, _ := time.Parse(utils.FormatDate, dv.DataTime)
  456. displayDateCell := row.AddCell()
  457. style := new(xlsx.Style)
  458. style.ApplyAlignment = true
  459. style.Alignment.WrapText = true
  460. displayDateCell.SetStyle(style)
  461. displayDateCell.SetDate(displayDate)
  462. row.AddCell().SetValue(dv.Value)
  463. row.AddCell()
  464. endRowIndex = rowIndex
  465. }
  466. if len(dataList) < dataMax {
  467. dataLen := dataMax - len(dataList)
  468. for n := 0; n < dataLen; n++ {
  469. rowIndex := (endRowIndex + 1) + n
  470. row := sheetNew.Row(rowIndex)
  471. row.AddCell()
  472. row.AddCell()
  473. row.AddCell()
  474. }
  475. }
  476. }
  477. }
  478. }
  479. err = xlsxFile.Save(downLoadnFilePath)
  480. if err != nil {
  481. //有指标无数据时先导出一遍空表
  482. sheet, err := xlsxFile.AddSheet("无数据")
  483. if err != nil {
  484. br.Msg = "新增Sheet失败"
  485. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  486. return
  487. }
  488. rowSecName := sheet.AddRow()
  489. celSecName := rowSecName.AddCell()
  490. celSecName.SetValue("")
  491. err = xlsxFile.Save(downLoadnFilePath)
  492. if err != nil {
  493. br.Msg = "保存文件失败"
  494. br.ErrMsg = "保存文件失败"
  495. return
  496. }
  497. }
  498. fileName := `汾渭数据`
  499. if len(indexList) > 0 {
  500. fileName = indexList[0].IndexName
  501. }
  502. fileName += time.Now().Format("06.01.02") + `.xlsx` //文件名称
  503. this.Ctx.Output.Download(downLoadnFilePath, fileName)
  504. defer func() {
  505. os.Remove(downLoadnFilePath)
  506. }()
  507. br.Ret = 200
  508. br.Success = true
  509. br.Msg = "success"
  510. }
  511. // GetFenWeiFrequencyList
  512. // @Title 查询频率列表
  513. // @Description 查询频率列表
  514. // @Param classifyId query int false "指标唯一编码"
  515. // @Success 200 {object} []string
  516. // @router /fenwei/frequency/list [get]
  517. func (this *EdbInfoController) GetFenWeiFrequencyList() {
  518. br := new(models.BaseResponse).Init()
  519. defer func() {
  520. if br.ErrMsg == "" {
  521. br.IsSendEmail = false
  522. }
  523. this.Data["json"] = br
  524. this.ServeJSON()
  525. }()
  526. sysUser := this.SysUser
  527. if sysUser == nil {
  528. br.Msg = "请登录"
  529. br.ErrMsg = "请登录,SysUser Is Empty"
  530. br.Ret = 408
  531. return
  532. }
  533. classifyId, _ := this.GetInt("ClassifyId")
  534. frequencyList, err := data_manage.GetFenWeiIndexFrequency(classifyId)
  535. if err != nil {
  536. return
  537. }
  538. br.Ret = 200
  539. br.Success = true
  540. br.Msg = "获取成功"
  541. br.Data = frequencyList
  542. }
  543. // FenWeiIndexAddValidate
  544. // @Title 新增加入到指标库校验
  545. // @Description 新增加入到指标库校验
  546. // @Param req body data_manage.BaseFromFenWeiIndexBatchAddCheckReq true "请求参数"
  547. // @Success 200 {object} []data_manage.IndexCheckData
  548. // @router /fenwei/index/add/validate [post]
  549. func (this *EdbInfoController) FenWeiIndexAddValidate() {
  550. br := new(models.BaseResponse).Init()
  551. defer func() {
  552. if br.ErrMsg == "" {
  553. br.IsSendEmail = false
  554. }
  555. this.Data["json"] = br
  556. this.ServeJSON()
  557. }()
  558. sysUser := this.SysUser
  559. if sysUser == nil {
  560. br.Msg = "请登录"
  561. br.ErrMsg = "请登录,SysUser Is Empty"
  562. br.Ret = 408
  563. return
  564. }
  565. var req *data_manage.BaseFromFenWeiIndexBatchAddCheckReq
  566. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  567. br.Msg = "参数解析异常!"
  568. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  569. return
  570. }
  571. codeLen := len(req.IndexCodes)
  572. var codeMax = 30
  573. if codeLen > codeMax {
  574. br.Msg = "批量添加指标数量不得超过" + strconv.Itoa(codeMax) + "个"
  575. br.ErrMsg = "批量添加指标数量不得超过" + strconv.Itoa(codeMax) + "个"
  576. return
  577. }
  578. // 校验指标编码是否存在
  579. addValidate, err := data.FenWeiIndexAddValidate(req.IndexCodes)
  580. if err != nil {
  581. return
  582. }
  583. br.Data = addValidate
  584. br.Ret = 200
  585. br.Success = true
  586. br.Msg = "操作成功"
  587. }
  588. // FenWeiIndexAdd
  589. // @Title 指标添加到指标库
  590. // @Description 指标添加到指标库
  591. // @Param req body []data_manage.AddEdbInfoReq true "请求参数"
  592. // @Success 200 string "操作成功"
  593. // @router /fenwei/index/add [post]
  594. func (this *EdbInfoController) FenWeiIndexAdd() {
  595. br := new(models.BaseResponse).Init()
  596. defer func() {
  597. if br.ErrMsg == "" {
  598. br.IsSendEmail = false
  599. }
  600. this.Data["json"] = br
  601. this.ServeJSON()
  602. }()
  603. sysUser := this.SysUser
  604. if sysUser == nil {
  605. br.Msg = "请登录"
  606. br.ErrMsg = "请登录,SysUser Is Empty"
  607. br.Ret = 408
  608. return
  609. }
  610. deleteCache := true
  611. cacheKey := "CACHE_EDB_INFO_BATCH_ADD_FENWEI_" + strconv.Itoa(sysUser.AdminId)
  612. defer func() {
  613. if deleteCache {
  614. _ = utils.Rc.Delete(cacheKey)
  615. }
  616. }()
  617. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  618. deleteCache = false
  619. br.Msg = "系统处理中,请稍后重试!"
  620. br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
  621. return
  622. }
  623. var req []*data_manage.AddEdbInfoReq
  624. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  625. br.Msg = "参数解析异常!"
  626. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  627. return
  628. }
  629. if len(req) == 0 {
  630. br.Msg = "请选择指标"
  631. return
  632. }
  633. codeMax := 30
  634. if len(req) > codeMax {
  635. br.Msg = "批量添加指标数量不得超过" + strconv.Itoa(codeMax) + "个"
  636. return
  637. }
  638. indexNames := make([]string, 0)
  639. resp := make([]*data_manage.FenWeiNameCheckResult, 0)
  640. for _, index := range req {
  641. index.EdbCode = strings.TrimSpace(index.EdbCode)
  642. if index.EdbCode == "" {
  643. br.Msg = "指标ID不可为空"
  644. return
  645. }
  646. index.EdbName = strings.TrimSpace(index.EdbName)
  647. if index.EdbName == "" {
  648. br.Msg = "请输入指标名称"
  649. return
  650. }
  651. index.Frequency = strings.TrimSpace(index.Frequency)
  652. if index.Frequency == "" {
  653. br.Msg = "请选择频度"
  654. return
  655. }
  656. index.Unit = strings.TrimSpace(index.Unit)
  657. if index.Unit == "" {
  658. br.Msg = "请输入单位"
  659. return
  660. }
  661. if index.ClassifyId <= 0 {
  662. br.Msg = "请选择分类"
  663. return
  664. }
  665. indexNames = append(indexNames, index.EdbName)
  666. resp = append(resp, &data_manage.FenWeiNameCheckResult{
  667. IndexCode: index.EdbCode,
  668. IndexName: index.EdbName,
  669. Exist: false,
  670. })
  671. }
  672. // 指标名称重复校验
  673. nameCheck, err := data.FenWeiIndexNameCheck(indexNames, resp)
  674. if err != nil {
  675. br.Msg = err.Error()
  676. br.ErrMsg = err.Error()
  677. return
  678. }
  679. for _, v := range nameCheck {
  680. if v.Exist {
  681. br.Msg = "指标名称重复"
  682. br.Data = nameCheck
  683. br.Ret = 200
  684. br.Success = true
  685. return
  686. }
  687. }
  688. for _, v := range req {
  689. var fenWeiIndexAddReq data_manage.FenWeiIndexAddReq
  690. fenWeiIndexAddReq.EdbCode = v.EdbCode
  691. fenWeiIndexAddReq.EdbName = v.EdbName
  692. fenWeiIndexAddReq.Frequency = v.Frequency
  693. fenWeiIndexAddReq.Unit = v.Unit
  694. fenWeiIndexAddReq.ClassifyId = v.ClassifyId
  695. fenWeiIndexAddReq.AdminId = sysUser.AdminId
  696. fenWeiIndexAddReq.AdminRealName = sysUser.RealName
  697. // 新增指标到指标库
  698. edbInfo, e, errMsg, skip := data.FenWeiIndexAdd(fenWeiIndexAddReq, this.Lang)
  699. if e != nil {
  700. br.Msg = "操作失败"
  701. if errMsg != "" {
  702. br.Msg = errMsg
  703. }
  704. br.ErrMsg = e.Error()
  705. return
  706. }
  707. if skip {
  708. continue
  709. }
  710. // todo 下面两段代码能否抽离出来???
  711. // 试用平台更新用户累计新增指标数
  712. if utils.BusinessCode == utils.BusinessCodeSandbox {
  713. go func() {
  714. adminItem, e := system.GetSysAdminById(sysUser.AdminId)
  715. if e != nil {
  716. tips := fmt.Sprintf("试用平台更新用户累计新增指标数-获取用户失败, Err: " + e.Error())
  717. utils.FileLog.Info(tips)
  718. return
  719. }
  720. if adminItem.DepartmentName != "ETA试用客户" {
  721. return
  722. }
  723. var ur etaTrialService.EtaTrialUserReq
  724. ur.Mobile = adminItem.Mobile
  725. _, _ = etaTrialService.UpdateUserIndexNum(ur)
  726. }()
  727. }
  728. // 新增操作日志
  729. {
  730. edbLog := new(data_manage.EdbInfoLog)
  731. edbLog.EdbInfoId = edbInfo.EdbInfoId
  732. edbLog.SourceName = edbInfo.SourceName
  733. edbLog.Source = edbInfo.Source
  734. edbLog.EdbCode = edbInfo.EdbCode
  735. edbLog.EdbName = edbInfo.EdbName
  736. edbLog.ClassifyId = edbInfo.ClassifyId
  737. edbLog.SysUserId = sysUser.AdminId
  738. edbLog.SysUserRealName = sysUser.RealName
  739. edbLog.CreateTime = time.Now()
  740. edbLog.Content = string(this.Ctx.Input.RequestBody)
  741. edbLog.Status = "新增指标"
  742. edbLog.Method = this.Ctx.Input.URI()
  743. go data_manage.AddEdbInfoLog(edbLog)
  744. }
  745. }
  746. br.Msg = "操作成功"
  747. br.Ret = 200
  748. br.Success = true
  749. br.IsAddLog = true
  750. }
  751. // FenWeiIndexDataExport
  752. // @Title 导出指标数据
  753. // @Description 导出指标数据
  754. // @Param IndexCode query string false "指标编码"
  755. // @Param ClassifyId query int false "分类ID"
  756. // @Success 200 string "操作成功"
  757. // @router /fenwei/index/data/export [get]
  758. func (this *EdbInfoController) FenWeiIndexDataExport() {
  759. br := new(models.BaseResponse).Init()
  760. defer func() {
  761. this.Data["json"] = br
  762. this.ServeJSON()
  763. }()
  764. sysUser := this.SysUser
  765. if sysUser == nil {
  766. br.Msg = "请重新登录"
  767. return
  768. }
  769. classifyId, _ := this.GetInt("ClassifyId") //分类
  770. indexCode := this.GetString("IndexCode") //指标唯一编码
  771. if classifyId <= 0 {
  772. br.Msg = "请选择分类"
  773. return
  774. }
  775. //userId := sysUser.AdminId
  776. //超管账号可以查看分类下的所有频度数据
  777. /*if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_ADMIN {
  778. userId = 0
  779. }*/
  780. //获取账户所拥有权限的分类id集合
  781. /*classifyIdStrList, err := data.GetEdbClassifyListByAdminId(int64(userId))
  782. if err != nil {
  783. br.Msg = "获取分类数据失败"
  784. return
  785. }*/
  786. dir, _ := os.Executable()
  787. exPath := filepath.Dir(dir)
  788. downLoadFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  789. xlsxFile := xlsx.NewFile()
  790. frequencies, err := data_manage.GetFenWeiIndexFrequency(classifyId)
  791. if err != nil {
  792. br.Msg = "查询频度失败"
  793. br.ErrMsg = "查询频度失败"
  794. return
  795. }
  796. fileName := `汾渭网页数据`
  797. if classifyId > 0 && indexCode == "" {
  798. fenWeiClassify, err := data_manage.GetFenweiClassifyItemByClassifyId(classifyId)
  799. if err != nil {
  800. return
  801. }
  802. fileName = fenWeiClassify.ClassifyName
  803. }
  804. if frequencies == nil {
  805. sheet, err := xlsxFile.AddSheet("无数据")
  806. if err != nil {
  807. br.Msg = "新增Sheet失败"
  808. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  809. return
  810. }
  811. rowSecName := sheet.AddRow()
  812. celSecName := rowSecName.AddCell()
  813. celSecName.SetValue("")
  814. }
  815. for _, frequency := range frequencies {
  816. fenWeiIndices, err := data_manage.GetFenWeiIndexByCodeAndClassify(indexCode, classifyId, frequency)
  817. if err != nil {
  818. return
  819. }
  820. var sheet *xlsx.Sheet
  821. if len(fenWeiIndices) > 0 {
  822. sheetName := *frequency
  823. if sheetName == "" {
  824. sheetName = "无频度"
  825. }
  826. sheet, err = xlsxFile.AddSheet(sheetName)
  827. if err != nil {
  828. br.Msg = "新增Sheet失败"
  829. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  830. return
  831. }
  832. } else {
  833. continue
  834. }
  835. if indexCode != "" {
  836. fileName = fenWeiIndices[0].IndexName
  837. }
  838. //获取指标数据
  839. rowSecName := sheet.AddRow()
  840. celSecName := rowSecName.AddCell()
  841. celSecName.SetValue("指标名称")
  842. rowFrequency := sheet.AddRow()
  843. celFrequency := rowFrequency.AddCell()
  844. celFrequency.SetValue("频率")
  845. rowUnit := sheet.AddRow()
  846. celUnit := rowUnit.AddCell()
  847. celUnit.SetValue("单位")
  848. rowModifyDate := sheet.AddRow()
  849. rowModifyCell := rowModifyDate.AddCell()
  850. rowModifyCell.SetValue("更新时间")
  851. dataMap := make(map[string]map[string]*data_manage.BaseFromFenweiData)
  852. var tradeCodeList []string
  853. for _, v := range fenWeiIndices {
  854. cellSenName := rowSecName.AddCell()
  855. cellSenName.SetValue(v.IndexName)
  856. celFrequency := rowFrequency.AddCell()
  857. celFrequency.SetValue(v.Frequency)
  858. celUnit := rowUnit.AddCell()
  859. celUnit.SetValue(v.Unit)
  860. rowModifyCell := rowModifyDate.AddCell()
  861. updateTimeStr := utils.TimeToStr(v.ModifyTime, utils.FormatDate)
  862. rowModifyCell.SetValue(updateTimeStr)
  863. tradeCodeList = append(tradeCodeList, v.IndexCode)
  864. var dataList []*data_manage.BaseFromFenweiData
  865. dataList, err = data_manage.GetBaseFromFenWeiDataByIndexCode(v.IndexCode)
  866. if err != nil && err.Error() != utils.ErrNoRow() {
  867. br.ErrMsg = "GetBaseFromFenWeiDataByIndexCode,Err:" + err.Error()
  868. br.Msg = "获取数据失败"
  869. return
  870. }
  871. for _, item := range dataList {
  872. if dataMap[item.IndexCode] == nil {
  873. dataMap[item.IndexCode] = make(map[string]*data_manage.BaseFromFenweiData)
  874. }
  875. dataMap[item.IndexCode][item.DataTime] = item
  876. }
  877. }
  878. tradeCodeStr := strings.Join(tradeCodeList, "','")
  879. tradeCodeStr = "'" + tradeCodeStr + "'"
  880. dataTimeList, err := data_manage.GetFenWeiDataListByIndexCodes(tradeCodeStr)
  881. if err != nil {
  882. br.Msg = "获取数据失败"
  883. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  884. return
  885. }
  886. for _, dataTime := range dataTimeList {
  887. rowData := sheet.AddRow()
  888. celDate := rowData.AddCell()
  889. celDate.SetValue(dataTime)
  890. for _, m := range fenWeiIndices {
  891. celData := rowData.AddCell()
  892. if dataMap[m.IndexCode][dataTime] != nil {
  893. celData.SetValue(dataMap[m.IndexCode][dataTime].Value)
  894. }
  895. }
  896. }
  897. }
  898. err = xlsxFile.Save(downLoadFilePath)
  899. if err != nil {
  900. //有指标无数据时先导出一遍空表
  901. sheet, err := xlsxFile.AddSheet("无数据")
  902. if err != nil {
  903. br.Msg = "新增Sheet失败"
  904. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  905. return
  906. }
  907. rowSecName := sheet.AddRow()
  908. celSecName := rowSecName.AddCell()
  909. celSecName.SetValue("")
  910. err = xlsxFile.Save(downLoadFilePath)
  911. if err != nil {
  912. br.Msg = "保存文件失败"
  913. br.ErrMsg = "保存文件失败"
  914. return
  915. }
  916. }
  917. fileName += time.Now().Format("06.01.02") + `.xlsx` //文件名称
  918. this.Ctx.Output.Download(downLoadFilePath, fileName)
  919. defer func() {
  920. os.Remove(downLoadFilePath)
  921. }()
  922. br.Ret = 200
  923. br.Success = true
  924. br.Msg = "success"
  925. }
  926. // GetFenWeiIndexInfo
  927. // @Title 添加指标-根据条件获取指标信息
  928. // @Description 添加指标-根据条件获取指标信息
  929. // @Param KeyWord query string false "关键字"
  930. // @Param ClassifyIds query string false "分类id"
  931. // @Param Frequencies query string false "频率"
  932. // @Param PageSize query int false "每页数据条数"
  933. // @Param CurrentIndex query int false "当前页页码,从1开始"
  934. // @Success 200 {object} data_manage.BaseFromFenWeiIndexPage
  935. // @router /fenwei/get/index/info [get]
  936. func (this *EdbInfoController) GetFenWeiIndexInfo() {
  937. br := new(models.BaseResponse).Init()
  938. defer func() {
  939. if br.ErrMsg == "" {
  940. br.IsSendEmail = false
  941. }
  942. this.Data["json"] = br
  943. this.ServeJSON()
  944. }()
  945. sysUser := this.SysUser
  946. if sysUser == nil {
  947. br.Msg = "请登录"
  948. br.ErrMsg = "请登录,SysUser Is Empty"
  949. br.Ret = 408
  950. return
  951. }
  952. /*pageSize, _ := this.GetInt("PageSize")
  953. currentIndex, _ := this.GetInt("CurrentIndex")
  954. if pageSize <= 0 {
  955. pageSize = utils.PageSize20
  956. }
  957. if currentIndex <= 0 {
  958. currentIndex = 1
  959. }*/
  960. keyWord := this.GetString("KeyWord")
  961. classifyIds := this.GetString("ClassifyIds")
  962. frequencies := this.GetString("Frequencies")
  963. var classifyIdList []string
  964. var frequencyList []string
  965. if classifyIds != "" {
  966. classifyIdList = strings.Split(classifyIds, ",")
  967. }
  968. if frequencies != "" {
  969. frequencyList = strings.Split(frequencies, ",")
  970. }
  971. indexInfoList, err := data.GetFenWeiIndexInfo(keyWord, classifyIdList, frequencyList)
  972. if err != nil {
  973. return
  974. }
  975. br.Ret = 200
  976. br.Success = true
  977. br.Msg = "获取成功"
  978. br.Data = indexInfoList
  979. }