|
@@ -8,6 +8,8 @@ import (
|
|
|
"eta/eta_api/services/alarm_msg"
|
|
|
"eta/eta_api/utils"
|
|
|
"fmt"
|
|
|
+ "strconv"
|
|
|
+ "time"
|
|
|
)
|
|
|
|
|
|
type UploadChartToForumReq struct {
|
|
@@ -21,7 +23,7 @@ type UpdateChartToForumReq struct {
|
|
|
|
|
|
type ChartSaveLibReq struct {
|
|
|
ChartInfo *data_manage.ChartInfo
|
|
|
- Description string `description:"逻辑简述"`
|
|
|
+ Description []*data_manage.ChartDescriptionReq `description:"逻辑简述"`
|
|
|
EdbInfoList []*data_manage.EdbInfo
|
|
|
ChartThemeList []*chart_theme.ChartTheme
|
|
|
EdbInfoDataList []*AddEdbDataReq
|
|
@@ -45,6 +47,7 @@ type ChartSaveLibResp struct {
|
|
|
}
|
|
|
|
|
|
type AddEdbDataReq struct {
|
|
|
+ EdbInfoId int
|
|
|
EdbCode string
|
|
|
EdbType int
|
|
|
DataList []*data_manage.EdbDataBase
|
|
@@ -56,10 +59,18 @@ type DeleteChartReq struct {
|
|
|
|
|
|
// UploadChart 上传图表接口
|
|
|
func UploadChart(chartInfoId int, description string, uploaderInfo *system.Admin) (err error, errMsg string) {
|
|
|
+ // 设置缓存 防止重复上传
|
|
|
+ cacheKey := "eta_forum_task:UploadChart:" + strconv.Itoa(chartInfoId)
|
|
|
+ if utils.Rc.Get(cacheKey) != nil {
|
|
|
+ err = fmt.Errorf("系统处理中,请稍后重试!")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ utils.Rc.SetNX(cacheKey, 1, 10*time.Minute)
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
|
go alarm_msg.SendAlarmMsg(fmt.Sprintf("上传图表至社区失败:Err:%v,ErrMsg:%s", err, errMsg), 3)
|
|
|
}
|
|
|
+ utils.Rc.Delete(cacheKey)
|
|
|
}()
|
|
|
// 查询图表信息
|
|
|
chartInfo, err := data_manage.GetChartInfoById(chartInfoId)
|
|
@@ -82,15 +93,17 @@ func UploadChart(chartInfoId int, description string, uploaderInfo *system.Admin
|
|
|
|
|
|
//查询图表指标
|
|
|
//获取原图表关联的指标信息列表
|
|
|
- chartMappingList, err := data_manage.GetChartMappingList(chartInfoId)
|
|
|
+ chartMappingList, err := data_manage.GetChartMappingListOrderByEdbInfoId(chartInfoId)
|
|
|
if err != nil {
|
|
|
errMsg = "获取图表关联的指标信息失败"
|
|
|
err = fmt.Errorf("获取图表关联的指标信息失败,Err:" + err.Error())
|
|
|
return
|
|
|
}
|
|
|
edbIds := make([]int, 0)
|
|
|
+ edbInfoStr := ""
|
|
|
for _, v := range chartMappingList {
|
|
|
edbIds = append(edbIds, v.EdbInfoId)
|
|
|
+ edbInfoStr += strconv.Itoa(v.EdbInfoId) + ","
|
|
|
}
|
|
|
chartSeriesList := make([]*data_manage.ChartSeries, 0)
|
|
|
chartSeriesEdbList := make([]*data_manage.ChartSeriesEdbMapping, 0)
|
|
@@ -116,20 +129,27 @@ func UploadChart(chartInfoId int, description string, uploaderInfo *system.Admin
|
|
|
edbInfoDataList []*AddEdbDataReq
|
|
|
)
|
|
|
//查询指标详情
|
|
|
- edbInfoList, edbMappingList, edbInfoDataList, err = GetEdbListByEdbInfoId(edbIds)
|
|
|
+ edbInfoList, edbMappingList, edbInfoDataList, err = GetEdbListByEdbInfoId(edbIds, true)
|
|
|
if err != nil {
|
|
|
errMsg = "获取指标详情失败"
|
|
|
err = fmt.Errorf("获取指标详情失败,Err:" + err.Error())
|
|
|
return
|
|
|
}
|
|
|
|
|
|
+ descriptionList, err, errMsg := getChartDescriptionWithAdminNameByChartInfoId(chartInfoId)
|
|
|
+ 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.Description = descriptionList
|
|
|
req.ChartSeries = chartSeriesList
|
|
|
req.ChartSeriesEdbMapping = chartSeriesEdbList
|
|
|
|
|
@@ -161,12 +181,19 @@ func UploadChart(chartInfoId int, description string, uploaderInfo *system.Admin
|
|
|
|
|
|
if respItem.Data != nil && respItem.Data.ChartInfoId != 0 {
|
|
|
// 更新社区返回的图表ID
|
|
|
- err = data_manage.SetForumChartInfoId(chartInfoId, respItem.Data.ChartInfoId)
|
|
|
+ err = data_manage.SetForumChartInfoId(chartInfoId, respItem.Data.ChartInfoId, utils.ChartClassifyResourceStatusUp)
|
|
|
if err != nil {
|
|
|
errMsg = "更新图表ID失败"
|
|
|
err = fmt.Errorf("更新图表ID失败,Err:" + err.Error())
|
|
|
return
|
|
|
}
|
|
|
+ // 新增投研资源库里的图表和指标绑定关系
|
|
|
+ err = data_manage.AddForumChartEdbMapping(chartInfoId, edbInfoStr)
|
|
|
+ if err != nil {
|
|
|
+ errMsg = "新增投研资源库里的图表和指标绑定关系失败"
|
|
|
+ err = fmt.Errorf("新增投研资源库里的图表和指标绑定关系失败,Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
return
|
|
@@ -174,10 +201,18 @@ func UploadChart(chartInfoId int, description string, uploaderInfo *system.Admin
|
|
|
|
|
|
// UpdateChart 更新社区里的图表接口
|
|
|
func UpdateChart(chartInfoId int) (err error, errMsg string) {
|
|
|
+ // 设置缓存 防止重复更新
|
|
|
+ cacheKey := "eta_forum_task:UpdateChart:" + strconv.Itoa(chartInfoId)
|
|
|
+ if utils.Rc.Get(cacheKey) != nil {
|
|
|
+ err = fmt.Errorf("系统处理中,请稍后重试!")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ utils.Rc.SetNX(cacheKey, 1, 10*time.Minute)
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
|
go alarm_msg.SendAlarmMsg(fmt.Sprintf("同步图表信息至社区失败:Err:%v,ErrMsg:%s", err, errMsg), 3)
|
|
|
}
|
|
|
+ utils.Rc.Delete(cacheKey)
|
|
|
}()
|
|
|
// 查询图表信息
|
|
|
chartInfo, err := data_manage.GetChartInfoById(chartInfoId)
|
|
@@ -201,15 +236,17 @@ func UpdateChart(chartInfoId int) (err error, errMsg string) {
|
|
|
|
|
|
//查询图表指标
|
|
|
//获取原图表关联的指标信息列表
|
|
|
- chartMappingList, err := data_manage.GetChartMappingList(chartInfoId)
|
|
|
+ chartMappingList, err := data_manage.GetChartMappingListOrderByEdbInfoId(chartInfoId)
|
|
|
if err != nil {
|
|
|
errMsg = "获取图表关联的指标信息失败"
|
|
|
err = fmt.Errorf("获取图表关联的指标信息失败,Err:" + err.Error())
|
|
|
return
|
|
|
}
|
|
|
edbIds := make([]int, 0)
|
|
|
+ edbInfoStr := ""
|
|
|
for _, v := range chartMappingList {
|
|
|
edbIds = append(edbIds, v.EdbInfoId)
|
|
|
+ edbInfoStr += strconv.Itoa(v.EdbInfoId) + ","
|
|
|
}
|
|
|
chartSeriesList := make([]*data_manage.ChartSeries, 0)
|
|
|
chartSeriesEdbList := make([]*data_manage.ChartSeriesEdbMapping, 0)
|
|
@@ -234,12 +271,30 @@ func UpdateChart(chartInfoId int) (err error, errMsg string) {
|
|
|
edbInfoDataList []*AddEdbDataReq
|
|
|
)
|
|
|
//查询指标详情
|
|
|
- edbInfoList, edbMappingList, edbInfoDataList, err = GetEdbListByEdbInfoId(edbIds)
|
|
|
+ isGetEdbData := false
|
|
|
+ // 查询投研资源库里的图表和指标绑定关系
|
|
|
+ oldEdbInfoStr, err := data_manage.GetForumEdbInfoIdsByChartInfoId(chartInfoId)
|
|
|
+ if err != nil {
|
|
|
+ errMsg = "获取投研资源库里的图表和指标绑定关系失败"
|
|
|
+ err = fmt.Errorf("获取投研资源库里的图表和指标绑定关系失败,Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if oldEdbInfoStr != edbInfoStr { // 图表更换过指标需要重新获取指标数据
|
|
|
+ isGetEdbData = true
|
|
|
+ }
|
|
|
+ //查询指标详情
|
|
|
+ edbInfoList, edbMappingList, edbInfoDataList, err = GetEdbListByEdbInfoId(edbIds, isGetEdbData)
|
|
|
if err != nil {
|
|
|
errMsg = "获取指标详情失败"
|
|
|
err = fmt.Errorf("获取指标详情失败,Err:" + err.Error())
|
|
|
return
|
|
|
}
|
|
|
+ descriptionList, err, errMsg := getChartDescriptionWithAdminNameByChartInfoId(chartInfoId)
|
|
|
+ if err != nil {
|
|
|
+ errMsg = "获取图表简介失败"
|
|
|
+ err = fmt.Errorf("获取图表简介失败,Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
req := new(ChartSaveLibReq)
|
|
|
req.ChartInfo = chartInfo
|
|
|
req.ChartInfo.ChartInfoId = chartInfo.ForumChartInfoId
|
|
@@ -249,6 +304,7 @@ func UpdateChart(chartInfoId int) (err error, errMsg string) {
|
|
|
req.EdbInfoCalculateMapping = edbMappingList
|
|
|
req.ChartSeries = chartSeriesList
|
|
|
req.ChartSeriesEdbMapping = chartSeriesEdbList
|
|
|
+ req.Description = descriptionList
|
|
|
// 查询创建者信息
|
|
|
creatorInfo, _ := system.GetSysAdminById(chartInfo.SysUserId)
|
|
|
if creatorInfo != nil {
|
|
@@ -274,20 +330,29 @@ func UpdateChart(chartInfoId int) (err error, errMsg string) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
+ // 更新投研资源库里的图表和指标绑定关系
|
|
|
+ err = data_manage.UpdateForumChartEdbMapping(chartInfoId, edbInfoStr)
|
|
|
+ if err != nil {
|
|
|
+ errMsg = "更新投研资源库里的图表和指标绑定关系失败"
|
|
|
+ err = fmt.Errorf("更新投研资源库里的图表和指标绑定关系失败,Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-func GetEdbListByEdbInfoId(edbInfoIds []int) (edbInfoList []*data_manage.EdbInfo, edbMappingList []*data_manage.EdbInfoCalculateMapping, edbInfoDataList []*AddEdbDataReq, err error) {
|
|
|
+func GetEdbListByEdbInfoId(edbInfoIds []int, isGetEdbData bool) (edbInfoList []*data_manage.EdbInfo, edbMappingList []*data_manage.EdbInfoCalculateMapping, edbInfoDataList []*AddEdbDataReq, err error) {
|
|
|
//查询指标信息
|
|
|
//查询指标映射
|
|
|
//查询所有指标数据
|
|
|
//查询这个指标相关的mapping信息放到数组里,
|
|
|
//将得到的指标ID信息放到数组里
|
|
|
+ chartEdbInfoIdMap := make(map[int]struct{}) //只查询图表上直接相关的指标数据
|
|
|
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 {
|
|
|
+ chartEdbInfoIdMap[edbInfoId] = struct{}{}
|
|
|
edbMappingList, err = traceEdbInfoByEdbInfoId(edbInfoId, hasFindMap, edbInfoIdMap, edbMappingList, edbMappingMap)
|
|
|
if err != nil {
|
|
|
err = fmt.Errorf(" traceEdbInfoByEdbInfoId err: %s", err.Error())
|
|
@@ -305,27 +370,32 @@ func GetEdbListByEdbInfoId(edbInfoIds []int) (edbInfoList []*data_manage.EdbInfo
|
|
|
err = fmt.Errorf(" GetEdbInfoByIdList err: %s", err.Error())
|
|
|
return
|
|
|
}
|
|
|
+ if isGetEdbData {
|
|
|
+ for _, v := range edbInfoList {
|
|
|
+ if _, ok := chartEdbInfoIdMap[v.EdbInfoId]; !ok {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ 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)
|
|
|
+ }
|
|
|
|
|
|
- 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
|
|
|
+ }
|
|
|
|
|
|
- if err != nil {
|
|
|
- err = fmt.Errorf("查询指标数据失败 Err: %s", err.Error())
|
|
|
- return
|
|
|
+ tmp := new(AddEdbDataReq)
|
|
|
+ tmp.EdbInfoId = v.EdbInfoId
|
|
|
+ tmp.EdbCode = v.EdbCode
|
|
|
+ tmp.EdbType = v.EdbType
|
|
|
+ tmp.DataList = dataList
|
|
|
+ edbInfoDataList = append(edbInfoDataList, tmp)
|
|
|
}
|
|
|
-
|
|
|
- tmp := new(AddEdbDataReq)
|
|
|
- tmp.EdbCode = v.EdbCode
|
|
|
- tmp.EdbType = v.EdbType
|
|
|
- tmp.DataList = dataList
|
|
|
- edbInfoDataList = append(edbInfoDataList, tmp)
|
|
|
}
|
|
|
return
|
|
|
}
|
|
@@ -397,6 +467,19 @@ func traceEdbInfoByEdbInfoId(edbInfoId int, hasFindMap map[int]struct{}, edbInfo
|
|
|
|
|
|
// DeleteChart 上传图表接口
|
|
|
func DeleteChart(chartInfoId int) (err error, errMsg string) {
|
|
|
+ // 设置缓存 防止重复撤回
|
|
|
+ cacheKey := "eta_forum_task:DeleteChart:" + strconv.Itoa(chartInfoId)
|
|
|
+ if utils.Rc.Get(cacheKey) != nil {
|
|
|
+ err = fmt.Errorf("系统处理中,请稍后重试!")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ utils.Rc.SetNX(cacheKey, 1, 30*time.Second)
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ go alarm_msg.SendAlarmMsg(fmt.Sprintf("撤回图表失败:%v,ErrMsg:%s", err, errMsg), 3)
|
|
|
+ }
|
|
|
+ utils.Rc.Delete(cacheKey)
|
|
|
+ }()
|
|
|
// 查询图表信息
|
|
|
chartInfo, err := data_manage.GetChartInfoById(chartInfoId)
|
|
|
if err != nil {
|
|
@@ -438,12 +521,46 @@ func DeleteChart(chartInfoId int) (err error, errMsg string) {
|
|
|
}
|
|
|
|
|
|
// 更新社区返回的图表ID
|
|
|
- err = data_manage.SetForumChartInfoId(chartInfoId, 0)
|
|
|
+ err = data_manage.SetForumChartInfoId(chartInfoId, 0, utils.ChartClassifyResourceStatusDown)
|
|
|
if err != nil {
|
|
|
errMsg = "撤回失败"
|
|
|
err = fmt.Errorf("更新图表ID失败,Err:" + err.Error())
|
|
|
return
|
|
|
}
|
|
|
+ // 删除投研资源库里的图表和指标绑定关系
|
|
|
+ err = data_manage.DeleteForumChartEdbMapping(chartInfoId)
|
|
|
+ if err != nil {
|
|
|
+ errMsg = "删除投研资源库里的图表和指标绑定关系失败"
|
|
|
+ err = fmt.Errorf("删除投研资源库里的图表和指标绑定关系失败,Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// DeleteChart 上传图表接口
|
|
|
+func DeleteChartByForumChartInfoId(forumChartInfoId int) (err error, errMsg string) {
|
|
|
+ // 查询图表信息
|
|
|
+ req := new(DeleteChartReq)
|
|
|
+ req.ChartInfoId = 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
|
|
|
+ }
|
|
|
|
|
|
return
|
|
|
}
|
|
@@ -570,3 +687,375 @@ func ChartThemeTypeSave(theme *chart_theme.ChartThemeType) (err error) {
|
|
|
}
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+// ChartBatchUpdate 批量上传和更新图表信息
|
|
|
+func ChartBatchUpdateAndUpload(chartClassifyInfo *data_manage.ChartClassify, sysUser *system.Admin) (err error) {
|
|
|
+ if utils.BusinessCode == "" || (utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeDebug && utils.BusinessCode != utils.BusinessCodeSandbox) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var tmpErr []error
|
|
|
+ deleteCache := true
|
|
|
+ cacheKey := "eta_forum_task:EtaForumChartUpdateByClassifyId:" + strconv.Itoa(chartClassifyInfo.ChartClassifyId)
|
|
|
+ defer func() {
|
|
|
+ if deleteCache {
|
|
|
+ _ = utils.Rc.Delete(cacheKey)
|
|
|
+ }
|
|
|
+ stack := ""
|
|
|
+ if err != nil {
|
|
|
+ stack = fmt.Sprintln(stack + err.Error())
|
|
|
+ }
|
|
|
+ if len(tmpErr) > 0 {
|
|
|
+ for _, v := range tmpErr {
|
|
|
+ stack = fmt.Sprintln(stack + v.Error())
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if stack != "" {
|
|
|
+ utils.FileLog.Error("批量更新资源库图表信息失败"+"<br/>"+stack)
|
|
|
+ go alarm_msg.SendAlarmMsg("批量更新资源库图表信息失败"+"<br/>"+stack, 3)
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
|
|
|
+ deleteCache = false
|
|
|
+ err = fmt.Errorf("系统处理中,请稍后重试!")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ chartClassifyInfoList, err := data_manage.GetChartClassifyByLevelPath(chartClassifyInfo.LevelPath, chartClassifyInfo.Source)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ chartClassifyIdList := make([]string, 0)
|
|
|
+ upChartClassifyIdList := make([]string, 0)
|
|
|
+ for _, v := range chartClassifyInfoList {
|
|
|
+ chartClassifyIdList = append(chartClassifyIdList, strconv.Itoa(v.ChartClassifyId))
|
|
|
+ if v.ResourceStatus == utils.ChartClassifyResourceStatusUp {
|
|
|
+ upChartClassifyIdList = append(upChartClassifyIdList, strconv.Itoa(v.ChartClassifyId))
|
|
|
+ }
|
|
|
+ }
|
|
|
+ condition := " and forum_chart_info_id > 0 and source=1 and chart_classify_id in ?"
|
|
|
+ // 查询需要更新的图表信息总数
|
|
|
+ total, err := data_manage.GetChartInfoCountByCondition(condition, []interface{}{chartClassifyIdList})
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if total > 0 {
|
|
|
+ // 更新图表数据
|
|
|
+ offset := 0
|
|
|
+ pageSize := 100
|
|
|
+ success := 0
|
|
|
+
|
|
|
+ // 循环更新100个图表数据
|
|
|
+ for i := 0; offset < total; i++ {
|
|
|
+ // 查询需要更新的图表信息
|
|
|
+ chartInfos, e := data_manage.GetChartInfoListByCondition(condition, []interface{}{chartClassifyIdList}, offset, pageSize)
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("查询需要更新的图表信息失败: %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if len(chartInfos) == 0 {
|
|
|
+ break
|
|
|
+ }
|
|
|
+ // 循环更新图表数据
|
|
|
+ for _, chartInfo := range chartInfos {
|
|
|
+ // 更新图表数据
|
|
|
+ er, msg := UpdateChart(chartInfo.ChartInfoId)
|
|
|
+ if er != nil {
|
|
|
+ er = fmt.Errorf("图表ID %d, 更新图表数据失败: %s, %v", chartInfo.ChartInfoId, msg, er)
|
|
|
+ tmpErr = append(tmpErr, er)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ success += 1
|
|
|
+ }
|
|
|
+
|
|
|
+ offset += pageSize
|
|
|
+ }
|
|
|
+ utils.FileLog.Info("更新图表数据完成, 更新图表数据总数:", success)
|
|
|
+ }
|
|
|
+ // 更新指标数据
|
|
|
+ utils.Rc.LPush(utils.CACHE_KEY_EDB_DATA_UPDATE_LOG, []byte("1"))
|
|
|
+
|
|
|
+ // 批量上传已经上架的分类下的图表到资源库中
|
|
|
+ // 查询需要新增的图表ID
|
|
|
+ condition = " and source=1 and forum_chart_info_id=0 and resource_status !=2 and chart_classify_id in ?"
|
|
|
+ total, err = data_manage.GetChartInfoCountByCondition(condition, []interface{}{upChartClassifyIdList})
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if total == 0 {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ offset := 0
|
|
|
+ pageSize := 100
|
|
|
+ success := 0
|
|
|
+ for i := 0; offset < total; i++ {
|
|
|
+ chartInfos, e := data_manage.GetChartInfoListByCondition(condition, []interface{}{upChartClassifyIdList}, offset, pageSize)
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("查询需要新增的图表信息失败: %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if len(chartInfos) == 0 {
|
|
|
+ break
|
|
|
+ }
|
|
|
+ // 循环更新图表数据
|
|
|
+ for _, chartInfo := range chartInfos {
|
|
|
+ // 更新图表数据
|
|
|
+ er, msg := UploadChart(chartInfo.ChartInfoId, "", sysUser)
|
|
|
+ if er != nil {
|
|
|
+ er = fmt.Errorf("图表ID %d, 上传图表数据失败: %s, %v", chartInfo.ChartInfoId, msg, er)
|
|
|
+ tmpErr = append(tmpErr, er)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ success += 1
|
|
|
+ }
|
|
|
+
|
|
|
+ offset += pageSize
|
|
|
+ }
|
|
|
+ utils.FileLog.Info("批量上传已经上架的分类下的图表到资源库中完成, 新增图表数据总数:", success)
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// 批量删除资源库图表信息
|
|
|
+func ChartInfoDeleteBatch(chartClassifyInfo *data_manage.ChartClassify, sysUser *system.Admin) (err error) {
|
|
|
+ if utils.BusinessCode == "" || (utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeDebug && utils.BusinessCode != utils.BusinessCodeSandbox) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var tmpErr []error
|
|
|
+ deleteCache := true
|
|
|
+ cacheKey := "eta_forum_task:ChartInfoDeleteBatch:" + strconv.Itoa(chartClassifyInfo.ChartClassifyId)
|
|
|
+ defer func() {
|
|
|
+ if deleteCache {
|
|
|
+ _ = utils.Rc.Delete(cacheKey)
|
|
|
+ }
|
|
|
+ stack := ""
|
|
|
+ if err != nil {
|
|
|
+ stack = fmt.Sprintln(stack + err.Error())
|
|
|
+ }
|
|
|
+ if len(tmpErr) > 0 {
|
|
|
+ for _, v := range tmpErr {
|
|
|
+ stack = fmt.Sprintln(stack + v.Error())
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if stack != "" {
|
|
|
+ utils.FileLog.Error("批量删除资源库图表信息失败"+"<br/>"+stack)
|
|
|
+ go alarm_msg.SendAlarmMsg("批量删除资源库图表信息失败"+"<br/>"+stack, 3)
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
|
|
|
+ deleteCache = false
|
|
|
+ err = fmt.Errorf("系统处理中,请稍后重试!")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 查询所有子分类
|
|
|
+ chartClassifyInfoList, err := data_manage.GetChartClassifyByLevelPath(chartClassifyInfo.LevelPath, chartClassifyInfo.Source)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if len(chartClassifyInfoList) == 0 {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ chartClassifyIdList := make([]string, 0)
|
|
|
+ for _, v := range chartClassifyInfoList {
|
|
|
+ chartClassifyIdList = append(chartClassifyIdList, strconv.Itoa(v.ChartClassifyId))
|
|
|
+ }
|
|
|
+ // 批量删除图表信息
|
|
|
+ condition := " AND source=? AND chart_classify_id in ? AND forum_chart_info_id > 0"
|
|
|
+ total, err := data_manage.GetChartInfoCountByCondition(condition, []interface{}{chartClassifyInfo.Source, chartClassifyIdList})
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if total == 0 {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ offset := 0
|
|
|
+ pageSize := 100
|
|
|
+ success := 0
|
|
|
+
|
|
|
+ // 循环更新100个图表数据
|
|
|
+ for i := 0; offset < total; i++ {
|
|
|
+ // 查询需要更新的图表信息
|
|
|
+ chartInfos, e := data_manage.GetChartInfoListByCondition(condition, []interface{}{chartClassifyInfo.Source, chartClassifyIdList}, offset, pageSize)
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("查询需要更新的图表信息失败: %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if len(chartInfos) == 0 {
|
|
|
+ break
|
|
|
+ }
|
|
|
+ // 循环更新图表数据
|
|
|
+ for _, chartInfo := range chartInfos {
|
|
|
+ // 删除图表数据
|
|
|
+ er, msg := DeleteChart(chartInfo.ChartInfoId)
|
|
|
+ if er != nil {
|
|
|
+ er = fmt.Errorf("图表ID %d, 删除图表数据失败: %s, %v", chartInfo.ChartInfoId, msg, er)
|
|
|
+ tmpErr = append(tmpErr, er)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ success += 1
|
|
|
+ }
|
|
|
+
|
|
|
+ offset += pageSize
|
|
|
+ }
|
|
|
+ fmt.Println("删除图表数据完成, 删除图表数据总数:", success)
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// 批量删除资源库图表信息
|
|
|
+func ChartInfoDeleteBatchByChartInfoIds(chartInfoIds []int, chartClassifyId int) (err error) {
|
|
|
+ if utils.BusinessCode == "" || (utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeDebug && utils.BusinessCode != utils.BusinessCodeSandbox) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var tmpErr []error
|
|
|
+ defer func() {
|
|
|
+ stack := ""
|
|
|
+ if err != nil {
|
|
|
+ stack = fmt.Sprintln(stack + err.Error())
|
|
|
+ }
|
|
|
+ if len(tmpErr) > 0 {
|
|
|
+ for _, v := range tmpErr {
|
|
|
+ stack = fmt.Sprintln(stack + v.Error())
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if stack != "" {
|
|
|
+ utils.FileLog.Error("批量删除资源库图表信息失败"+"<br/>"+stack)
|
|
|
+ go alarm_msg.SendAlarmMsg("批量删除资源库图表信息失败"+"<br/>"+stack, 3)
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ // 查询是否精选分类
|
|
|
+ chartClassifyInfo, err := data_manage.GetChartClassifyById(chartClassifyId)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if chartClassifyInfo.IsSelected == 1 {
|
|
|
+ utils.FileLog.Info("精选分类,不需要删除图表信息")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 非精选,需要下架图表,批量删除图表信息
|
|
|
+ condition := " AND source=1 AND chart_info_id in ? AND forum_chart_info_id > 0"
|
|
|
+ total, err := data_manage.GetChartInfoCountByCondition(condition, []interface{}{chartInfoIds})
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if total == 0 {
|
|
|
+ utils.FileLog.Info("没有需要下架的图表")
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ offset := 0
|
|
|
+ pageSize := 100
|
|
|
+ success := 0
|
|
|
+
|
|
|
+ // 循环更新100个图表数据
|
|
|
+ for i := 0; offset < total; i++ {
|
|
|
+ // 查询需要更新的图表信息
|
|
|
+ chartInfos, e := data_manage.GetChartInfoListByCondition(condition, []interface{}{chartInfoIds}, offset, pageSize)
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("查询需要更新的图表信息失败: %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if len(chartInfos) == 0 {
|
|
|
+ break
|
|
|
+ }
|
|
|
+ // 循环更新图表数据
|
|
|
+ for _, chartInfo := range chartInfos {
|
|
|
+ // 删除图表数据
|
|
|
+ er, msg := DeleteChart(chartInfo.ChartInfoId)
|
|
|
+ if er != nil {
|
|
|
+ er = fmt.Errorf("图表ID %d, 删除图表数据失败: %s, %v", chartInfo.ChartInfoId, msg, er)
|
|
|
+ tmpErr = append(tmpErr, er)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ success += 1
|
|
|
+ }
|
|
|
+
|
|
|
+ offset += pageSize
|
|
|
+ }
|
|
|
+ fmt.Println("删除图表数据完成, 删除图表数据总数:", success)
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// 修改分类状态,一键上架至资源库
|
|
|
+func SetChartClassifyResourceStatusUp(chartClassifyInfo *data_manage.ChartClassify, sysUser *system.Admin) (errMsg string, err error) {
|
|
|
+ if chartClassifyInfo.ResourceStatus == utils.ChartClassifyResourceStatusUp {
|
|
|
+ errMsg = "分类状态已为已上架, 无需重复操作"
|
|
|
+ err = fmt.Errorf("%s", errMsg)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 判断是否是精选资源
|
|
|
+ if chartClassifyInfo.IsSelected != utils.ChartClassifyIsSelected {
|
|
|
+ errMsg = "分类状态已为已上架, 无需重复操作"
|
|
|
+ err = fmt.Errorf("%s", errMsg)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 查询分类下的所有图表信息
|
|
|
+ err = data_manage.UpdateChartClassifyResourceStatus(chartClassifyInfo.Source, utils.ChartClassifyResourceStatusUp, chartClassifyInfo.LevelPath)
|
|
|
+ if err != nil {
|
|
|
+ errMsg = "更新分类状态失败"
|
|
|
+ err = fmt.Errorf("更新分类状态失败,Err:%w", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ go ChartBatchUpdateAndUpload(chartClassifyInfo, sysUser)
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// 修改分类,一键从资源库下架
|
|
|
+func SetChartClassifyResourceStatusDown(chartClassifyInfo *data_manage.ChartClassify, sysUser *system.Admin) (errMsg string, err error) {
|
|
|
+ if chartClassifyInfo.ResourceStatus == utils.ChartClassifyResourceStatusDown {
|
|
|
+ errMsg = "分类状态已为已下架, 无需重复操作"
|
|
|
+ err = fmt.Errorf("%s", errMsg)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 查询分类下的所有图表信息
|
|
|
+ err = data_manage.UpdateChartClassifyResourceStatus(chartClassifyInfo.Source, utils.ChartClassifyResourceStatusDown, chartClassifyInfo.LevelPath)
|
|
|
+ if err != nil {
|
|
|
+ errMsg = "更新分类状态失败"
|
|
|
+ err = fmt.Errorf("更新分类状态失败,Err:%w", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ go ChartInfoDeleteBatch(chartClassifyInfo, sysUser)
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func getChartDescriptionWithAdminNameByChartInfoId(chartInfoId int) (list []*data_manage.ChartDescriptionReq, err error, errMsg string) {
|
|
|
+ descriptionList, err := data_manage.GetChartDescriptionByChartInfoId(chartInfoId)
|
|
|
+ if err != nil {
|
|
|
+ errMsg = "获取图表简介失败"
|
|
|
+ err = fmt.Errorf("获取图表简介失败,Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 查询创建者信息
|
|
|
+ adminIdList := make([]int, 0)
|
|
|
+ for _, v := range descriptionList {
|
|
|
+ adminIdList = append(adminIdList, v.SysUserId)
|
|
|
+ }
|
|
|
+ adminList, err := system.GetAdminListByIdList(adminIdList)
|
|
|
+ if err != nil {
|
|
|
+ errMsg = "获取创建者信息失败"
|
|
|
+ err = fmt.Errorf("获取创建者信息失败,Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ adminMap := make(map[int]string)
|
|
|
+ for _, v := range adminList {
|
|
|
+ adminMap[v.AdminId] = v.AdminName
|
|
|
+ }
|
|
|
+ for _, v := range descriptionList {
|
|
|
+ adminName, ok := adminMap[v.SysUserId]
|
|
|
+ if !ok {
|
|
|
+ adminName = ""
|
|
|
+ }
|
|
|
+ list = append(list, &data_manage.ChartDescriptionReq{
|
|
|
+ ChartInfoId: v.ChartInfoId,
|
|
|
+ Description: v.Description,
|
|
|
+ AdminName: adminName,
|
|
|
+ SysUserId: v.SysUserId,
|
|
|
+ SysUserRealName: v.SysUserRealName,
|
|
|
+ ModifyTime: v.ModifyTime,
|
|
|
+ CreateTime: v.CreateTime,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|