chart_info_section.go 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. package data_manage
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "eta/eta_api/models"
  6. "eta/eta_api/models/data_manage"
  7. "eta/eta_api/services/data"
  8. "eta/eta_api/services/data/data_manage_permission"
  9. "eta/eta_api/utils"
  10. "fmt"
  11. "strings"
  12. )
  13. // GetChartTypeList
  14. // @Title 获取所有图表类型
  15. // @Description 获取所有图表类型
  16. // @Success 200 {object} data_manage.AddChartInfoResp
  17. // @router /chart_info/type_list [get]
  18. func (this *ChartInfoController) GetChartTypeList() {
  19. br := new(models.BaseResponse).Init()
  20. defer func() {
  21. this.Data["json"] = br
  22. this.ServeJSON()
  23. }()
  24. sysUser := this.SysUser
  25. if sysUser == nil {
  26. br.Msg = "请登录"
  27. br.ErrMsg = "请登录,SysUser Is Empty"
  28. br.Ret = 408
  29. return
  30. }
  31. listTmp, err := data_manage.GetChartTypeList()
  32. if err != nil {
  33. br.Msg = "获取图表类型失败"
  34. br.ErrMsg = "获取图表类型失败,Err:" + err.Error()
  35. return
  36. }
  37. //遍历list,将id和name组成map
  38. chartTypeMap := make(map[int][]data_manage.ChartType)
  39. for _, v := range listTmp {
  40. if v.ParentId > 0 {
  41. chartTypeMap[v.ParentId] = append(chartTypeMap[v.ParentId], v)
  42. }
  43. }
  44. list := make([]data_manage.ChartTypeList, 0)
  45. for _, v := range listTmp {
  46. if v.ParentId == 0 {
  47. tmp := data_manage.ChartTypeList{
  48. ChartTypeId: v.ChartTypeId,
  49. ChartTypeName: v.ChartTypeName,
  50. ChartTypeNameEn: v.ChartTypeNameEn,
  51. ParentId: v.ParentId,
  52. }
  53. child, ok := chartTypeMap[v.ChartTypeId]
  54. if ok {
  55. tmp.Child = child
  56. }
  57. list = append(list, tmp)
  58. }
  59. }
  60. resp := data_manage.ChartTypeListResp{List: list}
  61. br.Data = resp
  62. br.Ret = 200
  63. br.Success = true
  64. br.Msg = "获取图表类型成功"
  65. }
  66. // PreviewSectionCombineChartInfo
  67. // @Title 图表-获取预览的截面组合图数据
  68. // @Description 图表-获取预览的截面组合图数据
  69. // @Param request body data_manage.PreviewSectionCombineChartReq true "type json string"
  70. // @Success 200 {object} data_manage.ChartEdbInfoDetailResp
  71. // @router /chart_info/preview/section_combine [post]
  72. func (this *ChartInfoController) PreviewSectionCombineChartInfo() {
  73. br := new(models.BaseResponse).Init()
  74. defer func() {
  75. this.Data["json"] = br
  76. this.ServeJSON()
  77. }()
  78. var req data_manage.PreviewSectionCombineChartReq
  79. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  80. if err != nil {
  81. br.Msg = "参数解析异常!"
  82. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  83. return
  84. }
  85. chartInfo := new(data_manage.ChartInfoView)
  86. sysUser := this.SysUser
  87. if sysUser == nil {
  88. br.Msg = "请登录"
  89. br.ErrMsg = "请登录,SysUser Is Empty"
  90. br.Ret = 408
  91. return
  92. }
  93. chartType := utils.CHART_TYPE_SECTION_COMBINE
  94. edbInfoIdArr, err, errMsg := data.CheckChartExtraConfig(chartType, req.ExtraConfig)
  95. if err != nil {
  96. br.Msg = errMsg
  97. br.ErrMsg = "添加失败:" + err.Error()
  98. return
  99. }
  100. chartInfo.ChartType = chartType
  101. mappingList, err := data_manage.GetChartEdbMappingListByEdbInfoIdList(edbInfoIdArr)
  102. if err != nil {
  103. br.Msg = "获取图表,指标信息失败"
  104. br.ErrMsg = "获取图表,指标信息失败,Err:" + err.Error()
  105. return
  106. }
  107. // 获取图表中的指标数据
  108. edbList, xEdbIdValue, yDataList, dataResp, err, errMsg := data.GetChartEdbData(0, chartType, "", "", "", mappingList, req.ExtraConfig, "")
  109. if err != nil {
  110. br.Msg = "获取失败"
  111. if errMsg != `` {
  112. br.Msg = errMsg
  113. }
  114. br.ErrMsg = "获取图表,指标信息失败,Err:" + err.Error()
  115. return
  116. }
  117. // 指标权限
  118. {
  119. classifyMap := make(map[int]*data_manage.EdbClassify)
  120. // 分类
  121. {
  122. classifyIdList := make([]int, 0)
  123. for _, v := range edbList {
  124. classifyIdList = append(classifyIdList, v.ClassifyId)
  125. }
  126. classifyList, tmpErr := data_manage.GetEdbClassifyByIdList(classifyIdList)
  127. if tmpErr != nil {
  128. br.Msg = "获取失败"
  129. br.ErrMsg = "获取分类列表失败,Err:" + tmpErr.Error()
  130. return
  131. }
  132. for _, v := range classifyList {
  133. classifyMap[v.ClassifyId] = v
  134. }
  135. }
  136. // 获取所有有权限的指标和分类
  137. permissionEdbIdList, permissionClassifyIdList, err := data_manage_permission.GetUserEdbAndClassifyPermissionList(sysUser.AdminId, 0, 0)
  138. if err != nil {
  139. br.Msg = "获取失败"
  140. br.ErrMsg = "获取所有有权限的指标和分类失败,Err:" + err.Error()
  141. return
  142. }
  143. for _, item := range edbList {
  144. // 数据权限
  145. if currClassify, ok := classifyMap[item.ClassifyId]; ok {
  146. item.HaveOperaAuth = data_manage_permission.CheckEdbPermissionByPermissionIdList(item.IsJoinPermission, currClassify.IsJoinPermission, item.EdbInfoId, item.ClassifyId, permissionEdbIdList, permissionClassifyIdList)
  147. }
  148. }
  149. }
  150. warnEdbList := make([]string, 0)
  151. for _, v := range edbList {
  152. if v.IsNullData {
  153. warnEdbList = append(warnEdbList, v.EdbName+"("+v.EdbCode+")")
  154. }
  155. v.HaveOperaAuth = true
  156. }
  157. if len(warnEdbList) > 0 {
  158. chartInfo.WarnMsg = `图表引用指标异常,异常指标:` + strings.Join(warnEdbList, ",")
  159. }
  160. // 图表的指标来源
  161. sourceNameList, sourceNameEnList := data.GetEdbSourceByEdbInfoIdList(edbList)
  162. chartInfo.ChartSource = strings.Join(sourceNameList, ",")
  163. chartInfo.ChartSourceEn = strings.Join(sourceNameEnList, ",")
  164. //图表操作权限
  165. chartInfo.IsEdit = data.CheckOpChartPermission(sysUser, chartInfo.SysUserId, true)
  166. //判断是否需要展示英文标识
  167. chartInfo.IsEnChart = data.CheckIsEnChart(chartInfo.ChartNameEn, edbList, utils.CHART_SOURCE_DEFAULT, chartType)
  168. chartInfo.Button = data_manage.ChartViewButton{
  169. IsEdit: chartInfo.IsEdit,
  170. IsEnChart: chartInfo.IsEnChart,
  171. IsAdd: chartInfo.IsEdit,
  172. IsCopy: true,
  173. IsSetName: chartInfo.IsSetName,
  174. }
  175. resp := new(data_manage.ChartInfoDetailResp)
  176. resp.ChartInfo = chartInfo
  177. resp.EdbInfoList = edbList
  178. resp.XEdbIdValue = xEdbIdValue
  179. resp.YDataList = yDataList
  180. resp.DataResp = dataResp
  181. br.Ret = 200
  182. br.Success = true
  183. br.Msg = "获取成功"
  184. br.Data = resp
  185. }
  186. // PreviewSectionCombineChartInfo
  187. // @Title 图表-获取预览的截面组合图数据
  188. // @Description 图表-获取预览的截面组合图数据
  189. // @Param request body data_manage.ChartSectionDateConfItem true "type json string"
  190. // @Success 200 {object} data_manage.PreviewSectionCombineDateCalculateResp
  191. // @router /chart_info/section_combine/date_calculate [post]
  192. func (this *ChartInfoController) PreviewSectionCombineDateCalculate() {
  193. br := new(models.BaseResponse).Init()
  194. defer func() {
  195. this.Data["json"] = br
  196. this.ServeJSON()
  197. }()
  198. var req data_manage.PreviewSectionCombineDateCalculateReq
  199. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  200. if err != nil {
  201. br.Msg = "参数解析异常!"
  202. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  203. return
  204. }
  205. sysUser := this.SysUser
  206. if sysUser == nil {
  207. br.Msg = "请登录"
  208. br.ErrMsg = "请登录,SysUser Is Empty"
  209. br.Ret = 408
  210. return
  211. }
  212. //查询指标细信息
  213. dataList := make([]*data_manage.EdbDataList, 0)
  214. if req.EdbInfoId > 0 {
  215. edbInfo, e := data_manage.GetEdbInfoById(req.EdbInfoId)
  216. if e != nil {
  217. br.Msg = "指标查询失败!"
  218. br.ErrMsg = "指标查询失败,Err:" + e.Error()
  219. return
  220. }
  221. startDateReal := ""
  222. endDate := ""
  223. switch edbInfo.EdbInfoType {
  224. case 0:
  225. dataList, err = data_manage.GetEdbDataList(edbInfo.Source, edbInfo.SubSource, edbInfo.EdbInfoId, startDateReal, endDate)
  226. case 1:
  227. _, dataList, _, _, err, _ = data.GetPredictDataListByPredictEdbInfoId(edbInfo.EdbInfoId, startDateReal, endDate, true)
  228. default:
  229. err = errors.New(fmt.Sprint("获取失败,指标类型异常", edbInfo.EdbInfoType))
  230. }
  231. if err != nil {
  232. br.Msg = "指标数据查询失败!"
  233. br.ErrMsg = "指标数据查询失败,Err:" + err.Error()
  234. return
  235. }
  236. }
  237. var findDate string
  238. if req.DateType == 1 {
  239. req.EdbInfoId = 0
  240. }
  241. findDate, err = data.GetChartSectionSeriesDateByDateChange(req.EdbInfoId, dataList, req.DateChange, req.MoveForward)
  242. if err != nil {
  243. br.Msg = "指标数据查询失败!"
  244. br.ErrMsg = "指标数据查询失败,Err:" + err.Error()
  245. return
  246. }
  247. if findDate == "" {
  248. br.Msg = "日期为空!"
  249. return
  250. }
  251. resp := &data_manage.PreviewSectionCombineDateCalculateResp{
  252. Date: findDate,
  253. }
  254. br.Ret = 200
  255. br.Success = true
  256. br.Msg = "获取成功"
  257. br.Data = resp
  258. }