123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572 |
- package eta_forum
- import (
- "encoding/json"
- "eta/eta_api/models/data_manage"
- "eta/eta_api/models/data_manage/chart_theme"
- "eta/eta_api/models/system"
- "eta/eta_api/services/alarm_msg"
- "eta/eta_api/utils"
- "fmt"
- )
- type UploadChartToForumReq struct {
- ChartInfoId int `description:"图表ID"`
- Description string `description:"逻辑简述"`
- }
- type UpdateChartToForumReq struct {
- ChartInfoId int `description:"图表ID"`
- }
- 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
- ChartSeries []*data_manage.ChartSeries
- ChartSeriesEdbMapping []*data_manage.ChartSeriesEdbMapping
- CreatorInfo *system.Admin //创建者的账号信息
- UploaderInfo *system.Admin //上传者的账号信息
- }
- 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
- EdbType int
- DataList []*data_manage.EdbDataBase
- }
- type DeleteChartReq struct {
- ChartInfoId int `description:"图表id"`
- }
- // UploadChart 上传图表接口
- func UploadChart(chartInfoId int, description string, uploaderInfo *system.Admin) (err error, errMsg string) {
- defer func() {
- if err != nil {
- go alarm_msg.SendAlarmMsg(fmt.Sprintf("上传图表至社区失败:Err:%v,ErrMsg:%s", err, errMsg), 3)
- }
- }()
- // 查询图表信息
- 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
- }
- if chartInfo.ForumChartInfoId > 0 {
- errMsg = "该图表已上传至社区,无法再次上传"
- err = fmt.Errorf(errMsg)
- 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)
- }
- chartSeriesList := make([]*data_manage.ChartSeries, 0)
- chartSeriesEdbList := make([]*data_manage.ChartSeriesEdbMapping, 0)
- if chartInfo.ChartType == utils.CHART_TYPE_SECTION_COMBINE {
- chartSeriesList, err = data_manage.GetChartSeriesByChartInfoId(chartInfoId)
- if err != nil {
- errMsg = "获取图表关联的系列信息失败"
- err = fmt.Errorf("获取图表关联的系列信息失败,Err:" + err.Error())
- return
- }
- chartSeriesEdbList, err = data_manage.GetChartSeriesEdbByChartInfoId(chartInfoId)
- if err != nil {
- errMsg = "获取图表关联的系列指标信息失败"
- err = fmt.Errorf("获取图表关联的系列指标信息失败,Err:" + err.Error())
- return
- }
- }
- 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
- req.Description = description
- req.ChartSeries = chartSeriesList
- req.ChartSeriesEdbMapping = chartSeriesEdbList
- // 查询创建者信息
- creatorInfo, _ := system.GetSysAdminById(chartInfo.SysUserId)
- if creatorInfo != nil {
- req.CreatorInfo = creatorInfo
- }
- req.UploaderInfo = uploaderInfo
- // 添加计算指标
- 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
- }
- if respItem.Data != nil && respItem.Data.ChartInfoId != 0 {
- // 更新社区返回的图表ID
- err = data_manage.SetForumChartInfoId(chartInfoId, respItem.Data.ChartInfoId)
- if err != nil {
- errMsg = "更新图表ID失败"
- err = fmt.Errorf("更新图表ID失败,Err:" + err.Error())
- return
- }
- }
- return
- }
- // UpdateChart 更新社区里的图表接口
- func UpdateChart(chartInfoId int) (err error, errMsg string) {
- defer func() {
- if err != nil {
- go alarm_msg.SendAlarmMsg(fmt.Sprintf("同步图表信息至社区失败:Err:%v,ErrMsg:%s", err, errMsg), 3)
- }
- }()
- // 查询图表信息
- 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
- }
- if chartInfo.ForumChartInfoId <= 0 {
- errMsg = "该图表未上传至社区"
- err = fmt.Errorf(errMsg)
- 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)
- }
- chartSeriesList := make([]*data_manage.ChartSeries, 0)
- chartSeriesEdbList := make([]*data_manage.ChartSeriesEdbMapping, 0)
- if chartInfo.ChartType == utils.CHART_TYPE_SECTION_COMBINE {
- chartSeriesList, err = data_manage.GetChartSeriesByChartInfoId(chartInfoId)
- if err != nil {
- errMsg = "获取图表关联的系列信息失败"
- err = fmt.Errorf("获取图表关联的系列信息失败,Err:" + err.Error())
- return
- }
- chartSeriesEdbList, err = data_manage.GetChartSeriesEdbByChartInfoId(chartInfoId)
- if err != nil {
- errMsg = "获取图表关联的系列指标信息失败"
- err = fmt.Errorf("获取图表关联的系列指标信息失败,Err:" + err.Error())
- return
- }
- }
- 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.ChartInfo.ChartInfoId = chartInfo.ForumChartInfoId
- req.ChartEdbMapping = chartMappingList
- req.EdbInfoList = edbInfoList
- req.EdbInfoDataList = edbInfoDataList
- req.EdbInfoCalculateMapping = edbMappingList
- req.ChartSeries = chartSeriesList
- req.ChartSeriesEdbMapping = chartSeriesEdbList
- // 查询创建者信息
- creatorInfo, _ := system.GetSysAdminById(chartInfo.SysUserId)
- if creatorInfo != nil {
- req.CreatorInfo = creatorInfo
- }
- // 添加计算指标
- reqJson, err := json.Marshal(req)
- if err != nil {
- errMsg = "参数解析异常"
- err = fmt.Errorf("参数解析异常,Err:" + err.Error())
- return
- }
- respItem, err := ChartUpdateLib(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 {
- err = fmt.Errorf(" traceEdbInfoByEdbInfoId err: %s", err.Error())
- 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(" GetEdbInfoByIdList err: %s", err.Error())
- return
- }
- for _, v := range edbInfoList {
- var dataList []*data_manage.EdbDataBase
- if v.Source == utils.DATA_SOURCE_BUSINESS && utils.UseMongo {
- dataList, err = data_manage.GetEdbDataBaseMongoByEdbInfoId(v.EdbInfoId, v.Source, v.SubSource)
- } else if v.Source == utils.DATA_SOURCE_THS && v.SubSource == utils.DATA_SUB_SOURCE_HIGH_FREQUENCY && utils.UseMongo {
- dataList, err = data_manage.GetThsHfEdbDataBaseMongoByEdbInfoId(v.EdbInfoId, v.Source, v.SubSource)
- } else {
- dataList, err = data_manage.GetEdbDataBaseByEdbInfoId(v.EdbInfoId, v.Source, v.SubSource)
- }
- if err != nil {
- err = fmt.Errorf("查询指标数据失败 Err: %s", err.Error())
- return
- }
- tmp := new(AddEdbDataReq)
- tmp.EdbCode = v.EdbCode
- tmp.EdbType = v.EdbType
- 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
- }
- // DeleteChart 上传图表接口
- func DeleteChart(chartInfoId int) (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
- }
- if chartInfo.ForumChartInfoId <= 0 {
- errMsg = "该图表未上传至社区,无需撤回"
- err = fmt.Errorf(errMsg)
- return
- }
- req := new(DeleteChartReq)
- req.ChartInfoId = chartInfo.ForumChartInfoId
- // 添加计算指标
- reqJson, err := json.Marshal(req)
- if err != nil {
- errMsg = "参数解析异常"
- err = fmt.Errorf("参数解析异常,Err:" + err.Error())
- return
- }
- respItem, err := ChartDeleteLib(string(reqJson))
- if err != nil {
- errMsg = "撤回失败"
- err = fmt.Errorf("撤回失败,Err:" + err.Error())
- return
- }
- if respItem.Ret != 200 {
- errMsg = "撤回失败"
- err = fmt.Errorf(respItem.ErrMsg)
- return
- }
- // 更新社区返回的图表ID
- err = data_manage.SetForumChartInfoId(chartInfoId, 0)
- if err != nil {
- errMsg = "撤回失败"
- err = fmt.Errorf("更新图表ID失败,Err:" + err.Error())
- return
- }
- return
- }
- type AdminSaveReq struct {
- *system.Admin
- BusinessCode string `description:"商家编码"`
- }
- // 上传管理员信息
- func AdminSave(adminId int) (err error) {
- if utils.BusinessCode == "" || (utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeDebug && utils.BusinessCode != utils.BusinessCodeSandbox) {
- return
- }
- //查询用户信息
- adminInfo, err := system.GetSysAdminById(adminId)
- if err != nil {
- if err.Error() == utils.ErrNoRow() {
- err = fmt.Errorf("用户不存在")
- return
- }
- err = fmt.Errorf("获取用户信息失败,Err:" + err.Error())
- return
- }
- var req AdminSaveReq
- req.Admin = adminInfo
- req.BusinessCode = utils.BusinessCode
- reqJson, err := json.Marshal(req)
- if err != nil {
- err = fmt.Errorf("参数解析异常,Err:" + err.Error())
- return
- }
- respItem, err := AdminSaveLib(string(reqJson))
- if err != nil {
- err = fmt.Errorf("上传管理员信息失败,Err:" + err.Error())
- return
- }
- if respItem.Ret != 200 {
- err = fmt.Errorf("上传管理员信息失败,Err:%v,errMsg:%v", respItem.Msg, respItem.ErrMsg)
- return
- }
- return
- }
- type AdminDeleteReq struct {
- AdminName string
- BusinessCode string `description:"商家编码"`
- }
- // 上传管理员信息
- func AdminDelete(adminName string) (err error) {
- if utils.BusinessCode == "" || (utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeDebug && utils.BusinessCode != utils.BusinessCodeSandbox) {
- return
- }
- var req AdminDeleteReq
- req.AdminName = adminName
- req.BusinessCode = utils.BusinessCode
- reqJson, err := json.Marshal(req)
- if err != nil {
- err = fmt.Errorf("参数解析异常,Err:" + err.Error())
- return
- }
- respItem, err := AdminDeleteLib(string(reqJson))
- if err != nil {
- err = fmt.Errorf("删除管理员信息失败,Err:" + err.Error())
- return
- }
- if respItem.Ret != 200 {
- err = fmt.Errorf("删除管理员信息失败,Err:%v,errMsg:%v", respItem.Msg, respItem.ErrMsg)
- return
- }
- return
- }
- type ChartThemeReq struct {
- *chart_theme.ChartTheme
- BusinessCode string `description:"商家编码"`
- }
- // 上传主题信息
- func ChartThemeSave(theme *chart_theme.ChartTheme) (err error) {
- if utils.BusinessCode == "" || (utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeDebug && utils.BusinessCode != utils.BusinessCodeSandbox) {
- return
- }
- var req ChartThemeReq
- req.ChartTheme = theme
- req.BusinessCode = utils.BusinessCode
- reqJson, err := json.Marshal(req)
- if err != nil {
- err = fmt.Errorf("参数解析异常,Err:" + err.Error())
- return
- }
- respItem, err := ChartThemeSaveLib(string(reqJson))
- if err != nil {
- err = fmt.Errorf("上传图表主题信息失败,Err:" + err.Error())
- return
- }
- if respItem.Ret != 200 {
- err = fmt.Errorf("上传图表主题信息失败,Err:%v,errMsg:%v", respItem.Msg, respItem.ErrMsg)
- return
- }
- return
- }
- // ChartThemeTypeSave 上传主题类型信息
- func ChartThemeTypeSave(theme *chart_theme.ChartThemeType) (err error) {
- if utils.BusinessCode == "" || (utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeDebug && utils.BusinessCode != utils.BusinessCodeSandbox) {
- return
- }
- //req.BusinessCode = utils.BusinessCode
- reqJson, err := json.Marshal(theme)
- if err != nil {
- err = fmt.Errorf("参数解析异常,Err:" + err.Error())
- return
- }
- respItem, err := ChartThemeTypeSaveLib(string(reqJson))
- if err != nil {
- err = fmt.Errorf("上传图表主题信息失败,Err:" + err.Error())
- return
- }
- if respItem.Ret != 200 {
- err = fmt.Errorf("上传图表主题信息失败,Err:%v,errMsg:%v", respItem.Msg, respItem.ErrMsg)
- return
- }
- return
- }
|