|
@@ -0,0 +1,216 @@
|
|
|
+package eta_forum
|
|
|
+
|
|
|
+import (
|
|
|
+ "encoding/json"
|
|
|
+ "eta/eta_api/models/data_manage"
|
|
|
+ "eta/eta_api/models/data_manage/chart_theme"
|
|
|
+ "eta/eta_api/utils"
|
|
|
+ "fmt"
|
|
|
+)
|
|
|
+
|
|
|
+type UploadChartToForumReq struct {
|
|
|
+ ChartInfoId int `description:"图表ID"`
|
|
|
+ Description string `description:"逻辑简述"`
|
|
|
+}
|
|
|
+
|
|
|
+type ChartSaveLibReq struct {
|
|
|
+ ChartInfo *data_manage.ChartInfo
|
|
|
+ Description string `description:"逻辑简述"`
|
|
|
+ EdbInfoList []*data_manage.EdbInfo
|
|
|
+ ChartThemeList []*chart_theme.ChartTheme
|
|
|
+ EdbInfoDataList []*AddEdbDataReq
|
|
|
+ ChartEdbMapping []*data_manage.ChartEdbMapping
|
|
|
+ EdbInfoCalculateMapping []*data_manage.EdbInfoCalculateMapping
|
|
|
+}
|
|
|
+
|
|
|
+type ChartSaveLibResp struct {
|
|
|
+ Ret int
|
|
|
+ Msg string
|
|
|
+ ErrMsg string
|
|
|
+ ErrCode string
|
|
|
+ Data data_manage.AddChartInfoResp
|
|
|
+ Success bool `description:"true 执行成功,false 执行失败"`
|
|
|
+ IsSendEmail bool `json:"-" description:"true 发送邮件,false 不发送邮件"`
|
|
|
+ IsAddLog bool `json:"-" description:"true 新增操作日志,false 不新增操作日志" `
|
|
|
+}
|
|
|
+
|
|
|
+type AddEdbDataReq struct {
|
|
|
+ EdbCode string
|
|
|
+ DataList []*data_manage.EdbDataBase
|
|
|
+}
|
|
|
+
|
|
|
+// UploadChart 上传图表接口
|
|
|
+func UploadChart(chartInfoId int, description string) (err error, errMsg string) {
|
|
|
+ // 查询图表信息
|
|
|
+ chartInfo, err := data_manage.GetChartInfoById(chartInfoId)
|
|
|
+ if err != nil {
|
|
|
+ if err.Error() == utils.ErrNoRow() {
|
|
|
+ errMsg = "图表不存在"
|
|
|
+ err = fmt.Errorf(errMsg)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ errMsg = "获取图表信息失败"
|
|
|
+ err = fmt.Errorf("获取图表信息失败,Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ //查询图表主题
|
|
|
+
|
|
|
+ //查询图表指标
|
|
|
+ //获取原图表关联的指标信息列表
|
|
|
+ chartMappingList, err := data_manage.GetChartMappingList(chartInfoId)
|
|
|
+ if err != nil {
|
|
|
+ errMsg = "获取图表关联的指标信息失败"
|
|
|
+ err = fmt.Errorf("获取图表关联的指标信息失败,Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ edbIds := make([]int, 0)
|
|
|
+ for _, v := range chartMappingList {
|
|
|
+ edbIds = append(edbIds, v.EdbInfoId)
|
|
|
+ }
|
|
|
+ var (
|
|
|
+ edbInfoList []*data_manage.EdbInfo
|
|
|
+ edbMappingList []*data_manage.EdbInfoCalculateMapping
|
|
|
+ edbInfoDataList []*AddEdbDataReq
|
|
|
+ )
|
|
|
+ //查询指标详情
|
|
|
+ edbInfoList, edbMappingList, edbInfoDataList, err = GetEdbListByEdbInfoId(edbIds)
|
|
|
+ if err != nil {
|
|
|
+ errMsg = "获取指标详情失败"
|
|
|
+ err = fmt.Errorf("获取指标详情失败,Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ req := new(ChartSaveLibReq)
|
|
|
+ req.ChartInfo = chartInfo
|
|
|
+ req.ChartEdbMapping = chartMappingList
|
|
|
+ req.EdbInfoList = edbInfoList
|
|
|
+ req.EdbInfoDataList = edbInfoDataList
|
|
|
+ req.EdbInfoCalculateMapping = edbMappingList
|
|
|
+
|
|
|
+ // 添加计算指标
|
|
|
+ reqJson, err := json.Marshal(req)
|
|
|
+ if err != nil {
|
|
|
+ errMsg = "参数解析异常"
|
|
|
+ err = fmt.Errorf("参数解析异常,Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ respItem, err := ChartSaveLib(string(reqJson))
|
|
|
+ if err != nil {
|
|
|
+ errMsg = "上传失败"
|
|
|
+ err = fmt.Errorf("上传失败,Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if respItem.Ret != 200 {
|
|
|
+ errMsg = "上传失败"
|
|
|
+ err = fmt.Errorf(respItem.ErrMsg)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func GetEdbListByEdbInfoId(edbInfoIds []int) (edbInfoList []*data_manage.EdbInfo, edbMappingList []*data_manage.EdbInfoCalculateMapping, edbInfoDataList []*AddEdbDataReq, err error) {
|
|
|
+ //查询指标信息
|
|
|
+ //查询指标映射
|
|
|
+ //查询所有指标数据
|
|
|
+ //查询这个指标相关的mapping信息放到数组里,
|
|
|
+ //将得到的指标ID信息放到数组里
|
|
|
+ hasFindMap := make(map[int]struct{})
|
|
|
+ edbInfoIdMap := make(map[int]struct{})
|
|
|
+ edbMappingList = make([]*data_manage.EdbInfoCalculateMapping, 0)
|
|
|
+ edbMappingMap := make(map[int]struct{})
|
|
|
+ for _, edbInfoId := range edbInfoIds {
|
|
|
+ edbMappingList, err = traceEdbInfoByEdbInfoId(edbInfoId, hasFindMap, edbInfoIdMap, edbMappingList, edbMappingMap)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 指标信息map
|
|
|
+ edbInfoIdList := make([]int, 0)
|
|
|
+ for k, _ := range edbInfoIdMap {
|
|
|
+ edbInfoIdList = append(edbInfoIdList, k)
|
|
|
+ }
|
|
|
+ edbInfoList, err = data_manage.GetEdbInfoByIdList(edbInfoIdList)
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("traceEdbInfoByEdbInfoId GetEdbInfoByIdList err: %s", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, v := range edbInfoList {
|
|
|
+ dataList, e := data_manage.GetEdbDataBaseByEdbCode(v.EdbInfoId, v.Source, v.SubSource)
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("查询指标数据失败 Err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ tmp := new(AddEdbDataReq)
|
|
|
+ tmp.EdbCode = v.EdbCode
|
|
|
+ tmp.DataList = dataList
|
|
|
+ edbInfoDataList = append(edbInfoDataList, tmp)
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// traceEdbInfoByEdbInfoId 指标追溯
|
|
|
+func traceEdbInfoByEdbInfoId(edbInfoId int, hasFindMap map[int]struct{}, edbInfoIdMap map[int]struct{}, edbMappingList []*data_manage.EdbInfoCalculateMapping, edbMappingMap map[int]struct{}) (newEdbMappingList []*data_manage.EdbInfoCalculateMapping, err error) {
|
|
|
+ newEdbMappingList = edbMappingList
|
|
|
+
|
|
|
+ _, ok := hasFindMap[edbInfoId]
|
|
|
+ if ok {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if _, ok1 := edbInfoIdMap[edbInfoId]; !ok1 {
|
|
|
+ edbInfoIdMap[edbInfoId] = struct{}{}
|
|
|
+ }
|
|
|
+
|
|
|
+ edbInfoMappingList, e := data_manage.GetEdbInfoCalculateMappingListByEdbInfoId(edbInfoId)
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("GetEdbInfoCalculateMappingListByEdbInfoId err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(edbInfoMappingList) > 0 {
|
|
|
+ fromEdbInfoIdList := make([]int, 0)
|
|
|
+ for _, v := range edbInfoMappingList {
|
|
|
+ fromEdbInfoIdList = append(fromEdbInfoIdList, v.FromEdbInfoId)
|
|
|
+ if _, ok1 := edbInfoIdMap[v.FromEdbInfoId]; !ok1 {
|
|
|
+ edbInfoIdMap[v.FromEdbInfoId] = struct{}{}
|
|
|
+ }
|
|
|
+ if _, ok2 := edbMappingMap[v.EdbInfoCalculateMappingId]; !ok2 {
|
|
|
+ edbMappingMap[v.EdbInfoCalculateMappingId] = struct{}{}
|
|
|
+ tmp := &data_manage.EdbInfoCalculateMapping{
|
|
|
+ EdbInfoCalculateMappingId: v.EdbInfoCalculateMappingId,
|
|
|
+ EdbInfoId: v.EdbInfoId,
|
|
|
+ Source: v.Source,
|
|
|
+ SourceName: v.SourceName,
|
|
|
+ EdbCode: v.EdbCode,
|
|
|
+ FromEdbInfoId: v.FromEdbInfoId,
|
|
|
+ FromEdbCode: v.FromEdbCode,
|
|
|
+ FromEdbName: v.FromEdbName,
|
|
|
+ FromSource: v.FromSource,
|
|
|
+ FromSourceName: v.FromSourceName,
|
|
|
+ FromTag: v.FromTag,
|
|
|
+ Sort: v.Sort,
|
|
|
+ CreateTime: v.CreateTime,
|
|
|
+ ModifyTime: v.ModifyTime,
|
|
|
+ }
|
|
|
+ newEdbMappingList = append(newEdbMappingList, tmp)
|
|
|
+ }
|
|
|
+
|
|
|
+ if edbInfoId != v.FromEdbInfoId && (v.FromEdbType == 2 || v.FromEdbInfoType == 1) {
|
|
|
+ // 查过了就不查了
|
|
|
+ if _, ok2 := hasFindMap[v.FromEdbInfoId]; !ok2 {
|
|
|
+ newEdbMappingList, e = traceEdbInfoByEdbInfoId(v.FromEdbInfoId, hasFindMap, edbInfoIdMap, newEdbMappingList, edbMappingMap)
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("traceEdbInfoByEdbInfoId err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ hasFindMap[v.FromEdbInfoId] = struct{}{}
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ hasFindMap[edbInfoId] = struct{}{}
|
|
|
+ return
|
|
|
+}
|