Browse Source

fix:新增刷新设置接口

Roc 1 year ago
parent
commit
f87c42a041

+ 334 - 141
controllers/data_manage/edb_info_refresh.go

@@ -1,12 +1,16 @@
 package data_manage
 
 import (
+	"encoding/json"
 	"eta/eta_api/models"
 	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/data_manage/edb_refresh"
+	"eta/eta_api/models/data_manage/edb_refresh/request"
 	"eta/eta_api/utils"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"strings"
+	"time"
 )
 
 // RefreshSourceList
@@ -22,7 +26,7 @@ func (c *EdbInfoController) RefreshSourceList() {
 		c.ServeJSON()
 	}()
 
-	item := data_manage.EdbRefreshSource{}
+	item := edb_refresh.EdbRefreshSource{}
 	tmpList, err := item.GetAllList()
 	if err != nil {
 		br.Msg = "获取失败"
@@ -30,27 +34,27 @@ func (c *EdbInfoController) RefreshSourceList() {
 		return
 	}
 
-	list := make([]data_manage.EdbRefreshSourceList, 0)
-	tmpMap := make(map[int]data_manage.EdbRefreshSourceList, 0)
+	list := make([]edb_refresh.EdbRefreshSourceList, 0)
+	tmpMap := make(map[int]edb_refresh.EdbRefreshSourceList, 0)
 
 	for _, v := range tmpList {
 		tmp, ok := tmpMap[v.Source]
 		if ok {
 			continue
 		}
-		tmp = data_manage.EdbRefreshSourceList{
+		tmp = edb_refresh.EdbRefreshSourceList{
 			Source:     v.Source,
 			SourceName: v.SourceName,
 			//SubSource:     v.SubSource,
 			//SubSourceName: v.SubSourceName,
-			Child:    make([]data_manage.EdbRefreshSourceList, 0),
+			Child:    make([]edb_refresh.EdbRefreshSourceList, 0),
 			HasChild: v.HasChild,
 		}
 
 		if v.HasChild == 1 {
 			for _, v2 := range tmpList {
 				if v2.Source == v.Source {
-					tmp.Child = append(tmp.Child, data_manage.EdbRefreshSourceList{
+					tmp.Child = append(tmp.Child, edb_refresh.EdbRefreshSourceList{
 						Source:        v.Source,
 						SourceName:    v.SourceName,
 						SubSource:     v.SubSource,
@@ -87,7 +91,7 @@ func (c *EdbInfoController) RefreshClassifyList() {
 
 	source, _ := c.GetInt("Source", utils.DATA_SOURCE_MYSTEEL_CHEMICAL)
 
-	list := make([]*data_manage.BaseClassifyItems, 0)
+	list := make([]*edb_refresh.BaseClassifyItems, 0)
 	switch source {
 	case utils.DATA_SOURCE_MYSTEEL_CHEMICAL: // 钢联
 		rootList, err := data_manage.GetBaseFromMysteelChemicalClassifyByParentId(0)
@@ -104,7 +108,7 @@ func (c *EdbInfoController) RefreshClassifyList() {
 			return
 		}
 
-		rootChildMap := make(map[int][]*data_manage.BaseClassifyItems)
+		rootChildMap := make(map[int][]*edb_refresh.BaseClassifyItems)
 
 		for _, v := range classifyAll {
 			//tmpList, ok := rootChildMap[v.ParentId]
@@ -120,7 +124,7 @@ func (c *EdbInfoController) RefreshClassifyList() {
 			//})
 			//rootChildMap[v.ParentId] = tmpList
 
-			rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], &data_manage.BaseClassifyItems{
+			rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], &edb_refresh.BaseClassifyItems{
 				ClassifyId:   v.BaseFromMysteelChemicalClassifyId,
 				ClassifyName: v.ClassifyName,
 				ParentId:     v.ParentId,
@@ -129,7 +133,7 @@ func (c *EdbInfoController) RefreshClassifyList() {
 			})
 		}
 		for _, v := range rootList {
-			tmp := &data_manage.BaseClassifyItems{
+			tmp := &edb_refresh.BaseClassifyItems{
 				ClassifyId:   v.BaseFromMysteelChemicalClassifyId,
 				ClassifyName: v.ClassifyName,
 				ParentId:     v.ParentId,
@@ -139,7 +143,7 @@ func (c *EdbInfoController) RefreshClassifyList() {
 			if existItems, ok := rootChildMap[v.BaseFromMysteelChemicalClassifyId]; ok {
 				tmp.Children = existItems
 			} else {
-				items := make([]*data_manage.BaseClassifyItems, 0)
+				items := make([]*edb_refresh.BaseClassifyItems, 0)
 				tmp.Children = items
 			}
 			list = append(list, tmp)
@@ -147,7 +151,7 @@ func (c *EdbInfoController) RefreshClassifyList() {
 
 	case utils.DATA_SOURCE_YS: // 有色
 
-		list = append(list, &data_manage.BaseClassifyItems{
+		list = append(list, &edb_refresh.BaseClassifyItems{
 			ClassifyId:   0,
 			ClassifyName: "未分类",
 			ParentId:     0,
@@ -168,9 +172,9 @@ func (c *EdbInfoController) RefreshClassifyList() {
 			return
 		}
 
-		rootChildMap := make(map[int][]*data_manage.BaseClassifyItems)
+		rootChildMap := make(map[int][]*edb_refresh.BaseClassifyItems)
 		for _, v := range classifyAll {
-			rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], &data_manage.BaseClassifyItems{
+			rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], &edb_refresh.BaseClassifyItems{
 				ClassifyId:   v.ClassifyId,
 				ClassifyName: v.ClassifyName,
 				ParentId:     v.ParentId,
@@ -179,7 +183,7 @@ func (c *EdbInfoController) RefreshClassifyList() {
 			})
 		}
 		for _, v := range rootList {
-			tmp := &data_manage.BaseClassifyItems{
+			tmp := &edb_refresh.BaseClassifyItems{
 				ClassifyId:   v.ClassifyId,
 				ClassifyName: v.ClassifyName,
 				ParentId:     v.ParentId,
@@ -189,7 +193,7 @@ func (c *EdbInfoController) RefreshClassifyList() {
 			if existItems, ok := rootChildMap[v.ClassifyId]; ok {
 				tmp.Children = existItems
 			} else {
-				items := make([]*data_manage.BaseClassifyItems, 0)
+				items := make([]*edb_refresh.BaseClassifyItems, 0)
 				tmp.Children = items
 			}
 			list = append(list, tmp)
@@ -204,7 +208,7 @@ func (c *EdbInfoController) RefreshClassifyList() {
 			return
 		}
 		for _, v := range tmpList {
-			list = append(list, &data_manage.BaseClassifyItems{
+			list = append(list, &edb_refresh.BaseClassifyItems{
 				ClassifyId:   v.ClassifyId,
 				ClassifyName: v.ClassifyName,
 				ParentId:     v.ParentId,
@@ -223,8 +227,8 @@ func (c *EdbInfoController) RefreshClassifyList() {
 }
 
 // 生成多层级列表的递归函数
-func buildTree(items []*data_manage.BaseClassifyItems, parentId int) []*data_manage.BaseClassifyItems {
-	var result []*data_manage.BaseClassifyItems
+func buildTree(items []*edb_refresh.BaseClassifyItems, parentId int) []*edb_refresh.BaseClassifyItems {
+	var result []*edb_refresh.BaseClassifyItems
 
 	// 遍历所有分类项
 	for i := range items {
@@ -280,12 +284,319 @@ func (c *EdbInfoController) RefreshEdbList() {
 	}
 	startSize = utils.StartIndex(currentIndex, pageSize)
 
+	total, list, err := getList(source, subSource, classifyId, terminalCode, sysUserId, frequency, keyword, startSize, pageSize)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+		return
+	}
+
+	page := paging.GetPaging(currentIndex, pageSize, total)
+
+	resp := data_manage.RefreshBaseEdbInfoResp{
+		Paging: page,
+		List:   list,
+	}
+
+	// todo 数据源中的最新值
+	// todo 刷新时间
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// GetEdbRefreshDefaultConfig
+// @Title 获取待配置的指标列表接口
+// @Description 获取待配置的指标列表接口
+// @Param   Source   query   int  true       "来源:1:同花顺,2:wind,3:彭博"
+// @Param   SubSource   query   int  true       "来源:0:经济数据库,1:日期序列"
+// @Param   Frequency   query   string  false       "频度"
+// @Success 200 {object} data_manage.RefreshBaseEdbInfoResp
+// @router /edb_info/refresh/default_config [get]
+func (c *EdbInfoController) GetEdbRefreshDefaultConfig() {
+	br := new(models.BaseResponse).Init()
+
+	defer func() {
+		c.Data["json"] = br
+		c.ServeJSON()
+	}()
+
+	source, _ := c.GetInt("Source")
+	subSource, _ := c.GetInt("SubSource")
+	frequency := c.GetString("Frequency")
+
+	if source <= 0 {
+		br.Msg = "来源不能为空"
+		br.IsSendEmail = false
+		return
+	}
+
+	if frequency == `` {
+		br.Msg = "频度不能为空"
+		br.IsSendEmail = false
+		return
+	}
+
+	list, err := edb_refresh.GetListBySourceAndFrequency(source, subSource, frequency)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = err.Error()
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = list
+}
+
+// SaveEdbRefreshDefaultConfig
+// @Title 设置默认的指标刷新配置接口
+// @Description 设置默认的指标刷新配置接口
+// @Param	request	body data_manage.SaveEdbRefreshDefaultConfigReq true "type json string"
+// @Success Ret=200 保存成功
+// @router /edb_info/refresh/default_config/save [post]
+func (c *EdbInfoController) SaveEdbRefreshDefaultConfig() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		c.Data["json"] = br
+		c.ServeJSON()
+	}()
+
+	var req request.SaveEdbRefreshDefaultConfigReq
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+
+	if req.Source <= 0 {
+		br.Msg = "来源不能为空"
+		br.IsSendEmail = false
+		return
+	}
+
+	if req.Frequency == `` {
+		br.Msg = "频度不能为空"
+		br.IsSendEmail = false
+		return
+	}
+
+	lenConf := len(req.List)
+	if lenConf == 0 {
+		br.Msg = "至少需要一个刷新配置"
+		br.IsSendEmail = false
+		return
+	}
+
+	tmpArr := []string{"每周", "每旬", "每月", "每季", "每半年", "每年"}
+	for _, v := range req.List {
+		if utils.InArrayByStr(tmpArr, v.RefreshFrequency) && v.RefreshFrequencyDay <= 0 {
+			br.Msg = "请选择具体日期"
+			br.IsSendEmail = false
+			return
+		}
+
+		if v.RefreshTime == "" {
+			br.Msg = "请选择具体时间"
+			br.IsSendEmail = false
+			return
+		}
+	}
+
+	addList := make([]*edb_refresh.EdbRefreshDefaultConfig, 0)
+	for _, v := range req.List {
+		addList = append(addList, &edb_refresh.EdbRefreshDefaultConfig{
+			Source:              req.Source,
+			SubSource:           req.SubSource,
+			Frequency:           req.Frequency,
+			RefreshFrequency:    v.RefreshFrequency,
+			RefreshFrequencyDay: v.RefreshFrequencyDay,
+			RefreshAllData:      v.RefreshAllData,
+			RefreshTime:         v.RefreshTime,
+			RefreshDataNum:      v.RefreshDataNum,
+			ModifyTime:          time.Now(),
+			CreateTime:          time.Now(),
+		})
+	}
+
+	// 保存
+	err = edb_refresh.SaveEdbRefreshDefaultConfig(req.Source, req.SubSource, req.Frequency, addList)
+	if err != nil {
+		br.Msg = `保存失败`
+		br.ErrMsg = "保存失败,Err:" + err.Error()
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "保存成功"
+}
+
+// SaveEdbRefreshConfig
+// @Title 单独设置指标刷新配置接口
+// @Description 单独设置指标刷新配置接口
+// @Param	request	body data_manage.SaveEdbRefreshConfigReq true "type json string"
+// @Success 200 {object} data_manage.RefreshBaseEdbInfoResp
+// @router /edb_info/refresh/config/save [post]
+func (c *EdbInfoController) SaveEdbRefreshConfig() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		c.Data["json"] = br
+		c.ServeJSON()
+	}()
+
+	var req request.SaveEdbRefreshConfigReq
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+
+	if req.Source <= 0 {
+		br.Msg = "来源不能为空"
+		br.IsSendEmail = false
+		return
+	}
+
+	lenConf := len(req.List)
+	if lenConf == 0 {
+		br.Msg = "至少需要一个刷新配置"
+		br.IsSendEmail = false
+		return
+	}
+
+	tmpArr := []string{"每周", "每旬", "每月", "每季", "每半年", "每年"}
+	for _, v := range req.List {
+		if utils.InArrayByStr(tmpArr, v.RefreshFrequency) && v.RefreshFrequencyDay <= 0 {
+			br.Msg = "请选择具体日期"
+			br.IsSendEmail = false
+			return
+		}
+
+		if v.RefreshTime == "" {
+			br.Msg = "请选择具体时间"
+			br.IsSendEmail = false
+			return
+		}
+	}
+
+	edbIdList := make([]int, 0)
+	// 指标id列表
+	if req.IsSelectAll {
+		// 如果是列表全选
+		_, edbList, err := getList(req.Source, req.SubSource, req.ClassifyId, req.TerminalCode, req.SysUserId, req.Frequency, req.Keyword, 0, 100000)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取数据失败,Err:" + err.Error()
+			return
+		}
+
+		// 不配置的指标id
+		notIdMap := make(map[int]int, 0)
+		for _, v := range req.EdbSelectIdList {
+			notIdMap[v] = v
+		}
+
+		for _, v := range edbList {
+			_, ok := notIdMap[v.EdbInfoId]
+			// 在不配置的指标id列表内的话,那就过滤
+			if ok {
+				continue
+			}
+
+			// 加入到待配置的指标列表id
+			edbIdList = append(edbIdList, v.EdbInfoId)
+		}
+	} else {
+		edbIdList = req.EdbSelectIdList
+	}
+
+	if len(edbIdList) <= 0 {
+		br.Msg = "指标不能为空"
+		br.IsSendEmail = false
+		return
+	}
+
+	// 待添加的配置关系数据
+	addMappingList := make([]*edb_refresh.EdbRefreshMapping, 0)
+
+	// 待添加的日期配置项
+	addConfigList := make([]*edb_refresh.EdbRefreshConfig, 0)
+	for _, v := range req.List {
+		item, err := edb_refresh.GetEdbRefreshConfigListByCondition(v.RefreshFrequency, v.RefreshTime, v.RefreshFrequencyDay, v.RefreshAllData, v.RefreshDataNum)
+		if err != nil {
+			if err.Error() != utils.ErrNoRow() {
+				br.Msg = "保存失败"
+				br.ErrMsg = "保存失败,Err:" + err.Error()
+				return
+			}
+
+			addConfigList = append(addConfigList, &edb_refresh.EdbRefreshConfig{
+				RefreshFrequency:    v.RefreshFrequency,
+				RefreshFrequencyDay: v.RefreshFrequencyDay,
+				RefreshTime:         v.RefreshTime,
+				RefreshAllData:      v.RefreshAllData,
+				RefreshDataNum:      v.RefreshDataNum,
+				ModifyTime:          time.Now(),
+				CreateTime:          time.Now(),
+			})
+			continue
+		}
+
+		for _, edbId := range edbIdList {
+			addMappingList = append(addMappingList, &edb_refresh.EdbRefreshMapping{
+				EdbRefreshMappingId: 0,
+				Source:              req.Source,
+				SubSource:           req.SubSource,
+				EdbInfoId:           edbId,
+				EdbRefreshConfigId:  item.EdbRefreshConfigId,
+				SysUserId:           c.SysUser.AdminId,
+				SysUserRealName:     c.SysUser.RealName,
+				ModifyTime:          time.Now(),
+				CreateTime:          time.Now(),
+			})
+		}
+	}
+
+	// 保存
+	err = edb_refresh.SaveEdbRefreshConfig(req.Source, req.SubSource, c.SysUser.AdminId, c.SysUser.RealName, addConfigList, addMappingList, edbIdList)
+	if err != nil {
+		br.Msg = `保存失败`
+		br.ErrMsg = "保存失败,Err:" + err.Error()
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "保存成功"
+}
+
+// getList
+// @Description: 获取指标列表
+// @author: Roc
+// @datetime 2024-01-08 15:14:16
+// @param source int
+// @param subSource int
+// @param classifyId int
+// @param terminalCode string
+// @param sysUserId string
+// @param frequency string
+// @param keyword string
+// @param startSize int
+// @param pageSize int
+// @return total int
+// @return list []*data_manage.BaseEdbInfo
+// @return err error
+func getList(source, subSource, classifyId int, terminalCode, sysUserId, frequency, keyword string, startSize, pageSize int) (total int, list []*data_manage.BaseEdbInfo, err error) {
 	var pars []interface{}
 	var condition string
 
-	var total int
-	list := make([]*data_manage.BaseEdbInfo, 0)
-	var err error
+	list = make([]*data_manage.BaseEdbInfo, 0)
 
 	switch source {
 	case utils.DATA_SOURCE_MYSTEEL_CHEMICAL: // 钢联
@@ -326,11 +637,6 @@ func (c *EdbInfoController) RefreshEdbList() {
 		}
 
 		total, list, err = data_manage.GetMysteelChemicalBaseInfo(condition, pars, startSize, pageSize)
-		if err != nil && err.Error() != utils.ErrNoRow() {
-			br.Msg = "获取失败"
-			br.ErrMsg = "获取数据失败,Err:" + err.Error()
-			return
-		}
 	case utils.DATA_SOURCE_YS: // 有色
 		if classifyId > 0 {
 			condition += " AND classify_id = ? "
@@ -364,11 +670,6 @@ func (c *EdbInfoController) RefreshEdbList() {
 		}
 
 		total, list, err = data_manage.GetSmmBaseInfo(condition, pars, startSize, pageSize)
-		if err != nil && err.Error() != utils.ErrNoRow() {
-			br.Msg = "获取失败"
-			br.ErrMsg = "获取数据失败,Err:" + err.Error()
-			return
-		}
 	default:
 		condition += ` AND source = ? AND sub_source = ? `
 		pars = append(pars, source, subSource)
@@ -410,115 +711,7 @@ func (c *EdbInfoController) RefreshEdbList() {
 		}
 
 		total, list, err = data_manage.GetEdbBaseInfo(condition, pars, startSize, pageSize)
-		if err != nil && err.Error() != utils.ErrNoRow() {
-			br.Msg = "获取失败"
-			br.ErrMsg = "获取数据失败,Err:" + err.Error()
-			return
-		}
-	}
-
-	page := paging.GetPaging(currentIndex, pageSize, total)
-
-	resp := data_manage.RefreshBaseEdbInfoResp{
-		Paging: page,
-		List:   list,
 	}
 
-	// todo 数据源中的最新值
-	// todo 刷新时间
-
-	br.Ret = 200
-	br.Success = true
-	br.Msg = "获取成功"
-	br.Data = resp
-}
-
-// GetEdbRefreshDefaultConfig
-// @Title 获取待配置的指标列表接口
-// @Description 获取待配置的指标列表接口
-// @Param   Source   query   int  true       "来源:1:同花顺,2:wind,3:彭博"
-// @Param   SubSource   query   int  true       "来源:0:经济数据库,1:日期序列"
-// @Param   Frequency   query   string  false       "频度"
-// @Success 200 {object} data_manage.RefreshBaseEdbInfoResp
-// @router /edb_info/refresh/default_config [get]
-func (c *EdbInfoController) GetEdbRefreshDefaultConfig() {
-	br := new(models.BaseResponse).Init()
-
-	defer func() {
-		c.Data["json"] = br
-		c.ServeJSON()
-	}()
-
-	source, _ := c.GetInt("Source")
-	subSource, _ := c.GetInt("SubSource")
-	frequency := c.GetString("Frequency")
-
-	if source <= 0 {
-		br.Msg = "来源不能为空"
-		br.IsSendEmail = false
-		return
-	}
-
-	if frequency == `` {
-		br.Msg = "频度不能为空"
-		br.IsSendEmail = false
-		return
-	}
-
-	list, err := data_manage.GetListBySourceAndFrequency(source, subSource, frequency)
-	if err != nil {
-		br.Msg = "获取失败"
-		br.ErrMsg = err.Error()
-		return
-	}
-
-	br.Ret = 200
-	br.Success = true
-	br.Msg = "获取成功"
-	br.Data = list
-}
-
-// SaveEdbRefreshDefaultConfig
-// @Title 设置待配置的指标列表接口
-// @Description 设置待配置的指标列表接口
-// @Param   Source   query   int  true       "来源:1:同花顺,2:wind,3:彭博"
-// @Param   SubSource   query   int  true       "来源:0:经济数据库,1:日期序列"
-// @Param   Frequency   query   string  false       "频度"
-// @Success 200 {object} data_manage.RefreshBaseEdbInfoResp
-// @router /edb_info/refresh/default_config/save [post]
-func (c *EdbInfoController) SaveEdbRefreshDefaultConfig() {
-	br := new(models.BaseResponse).Init()
-
-	defer func() {
-		c.Data["json"] = br
-		c.ServeJSON()
-	}()
-
-	source, _ := c.GetInt("Source")
-	subSource, _ := c.GetInt("SubSource")
-	frequency := c.GetString("Frequency")
-
-	if source <= 0 {
-		br.Msg = "来源不能为空"
-		br.IsSendEmail = false
-		return
-	}
-
-	if frequency == `` {
-		br.Msg = "频度不能为空"
-		br.IsSendEmail = false
-		return
-	}
-
-	list, err := data_manage.GetListBySourceAndFrequency(source, subSource, frequency)
-	if err != nil {
-		br.Msg = "获取失败"
-		br.ErrMsg = err.Error()
-		return
-	}
-
-	br.Ret = 200
-	br.Success = true
-	br.Msg = "获取成功"
-	br.Data = list
+	return
 }

+ 174 - 0
models/data_manage/edb_refresh/edb_refresh_config.go

@@ -0,0 +1,174 @@
+package edb_refresh
+
+import (
+	"errors"
+	"eta/eta_api/utils"
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+// EdbRefreshConfig
+// @Description: 指标的刷新时间配置表
+type EdbRefreshConfig struct {
+	EdbRefreshConfigId  int       `orm:"column(edb_refresh_config_id);pk"`
+	RefreshFrequency    string    `description:"刷新频率"`
+	RefreshFrequencyDay int       `description:"具体刷新的日期"`
+	RefreshTime         string    `description:"刷新时间"`
+	RefreshAllData      int       `description:"是否刷新所有数据,0:否,1:刷新所有数据"`
+	RefreshDataNum      int       `description:"刷新单元格数"`
+	ModifyTime          time.Time `description:"最晚一次的更新时间"`
+	CreateTime          time.Time `description:"添加时间"`
+}
+
+// Add
+// @Description: 添加
+// @author: Roc
+// @receiver m
+// @datetime 2023-12-14 16:11:10
+// @param cols []string
+// @return err error
+func (m *EdbRefreshConfig) Add() (err error) {
+	if m.EdbRefreshConfigId > 0 {
+		err = errors.New("该配置已存在")
+		return
+	}
+	o := orm.NewOrmUsingDB("data")
+	lastId, err := o.Insert(m)
+	if err != nil {
+		return
+	}
+	m.EdbRefreshConfigId = int(lastId)
+
+	return
+}
+
+// Update
+// @Description: 更新
+// @author: Roc
+// @receiver m
+// @datetime 2023-12-14 16:11:10
+// @param cols []string
+// @return err error
+func (m *EdbRefreshConfig) Update(cols []string) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Update(m, cols...)
+	return
+}
+
+// Delete
+// @Description: 删除
+// @author: Roc
+// @receiver m
+// @datetime 2023-12-14 16:11:10
+// @return err error
+func (m *EdbRefreshConfig) Delete() (err error) {
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Delete(m)
+	return
+}
+
+// GetEdbRefreshConfigListByCondition
+// @Description: 根据条件获取刷新配置列表
+// @author: Roc
+// @datetime 2024-01-08 14:07:10
+// @param refreshFrequency string
+// @param refreshTime string
+// @param refreshFrequencyDay int
+// @param refreshAllData int
+// @param refreshDataNum int
+// @return item *EdbRefreshConfig
+// @return err error
+func GetEdbRefreshConfigListByCondition(refreshFrequency, refreshTime string, refreshFrequencyDay, refreshAllData, refreshDataNum int) (item *EdbRefreshConfig, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM edb_refresh_config
+         WHERE refresh_frequency = ? AND refresh_frequency_day = ? AND refresh_time = ? AND refresh_all_data = ? AND refresh_data_num = ? ORDER BY edb_refresh_config_id ASC `
+	err = o.Raw(sql, refreshFrequency, refreshFrequencyDay, refreshTime, refreshAllData, refreshDataNum).QueryRow(&item)
+
+	return
+}
+
+// SaveEdbRefreshConfig
+// @Description:  保存刷新配置
+// @author: Roc
+// @datetime 2024-01-08 15:13:23
+// @param source int
+// @param subSource int
+// @param sysUserId int
+// @param sysUserRealName string
+// @param newConfigList []*EdbRefreshConfig
+// @param addMapping []*EdbRefreshMapping
+// @param edbIdList []int
+// @return err error
+func SaveEdbRefreshConfig(source, subSource, sysUserId int, sysUserRealName string, newConfigList []*EdbRefreshConfig, addMapping []*EdbRefreshMapping, edbIdList []int) (err error) {
+	num := len(edbIdList)
+	if num <= 0 {
+		return
+	}
+	o, err := orm.NewOrmUsingDB("data").Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = o.Rollback()
+			return
+		}
+		_ = o.Commit()
+	}()
+
+	for _, v := range newConfigList {
+		lastId, tmpErr := o.Insert(v)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+
+		v.EdbRefreshConfigId = int(lastId)
+
+		for _, edbId := range edbIdList {
+			addMapping = append(addMapping, &EdbRefreshMapping{
+				EdbRefreshMappingId: 0,
+				Source:              source,
+				SubSource:           subSource,
+				EdbInfoId:           edbId,
+				EdbRefreshConfigId:  v.EdbRefreshConfigId,
+				SysUserId:           sysUserId,
+				SysUserRealName:     sysUserRealName,
+				ModifyTime:          time.Now(),
+				CreateTime:          time.Now(),
+			})
+		}
+	}
+
+	// 先删除
+	sql := `DELETE FROM edb_refresh_mapping WHERE source =? AND sub_source =? AND edb_info_id in (` + utils.GetOrmInReplace(num) + `)`
+	_, err = o.Raw(sql, source, subSource, edbIdList).Exec()
+
+	// 再写入
+	if len(addMapping) > 0 {
+		tmpAddDataList := make([]*EdbRefreshMapping, 0)
+		i := 0
+		for _, v := range addMapping {
+			tmpAddDataList = append(tmpAddDataList, v)
+			i++
+			if i >= 500 {
+				_, err = o.InsertMulti(len(tmpAddDataList), tmpAddDataList)
+				if err != nil {
+					return
+				}
+				i = 0
+				tmpAddDataList = make([]*EdbRefreshMapping, 0)
+			}
+		}
+
+		if len(tmpAddDataList) > 0 {
+			_, err = o.InsertMulti(len(tmpAddDataList), tmpAddDataList)
+			if err != nil {
+				return
+			}
+		}
+	}
+
+	return
+
+}

+ 48 - 2
models/data_manage/edb_refresh_default_config.go → models/data_manage/edb_refresh/edb_refresh_default_config.go

@@ -1,4 +1,4 @@
-package data_manage
+package edb_refresh
 
 import (
 	"errors"
@@ -14,8 +14,9 @@ type EdbRefreshDefaultConfig struct {
 	SubSource           int       `description:"来源名称"`
 	Frequency           string    `description:"频度"`
 	RefreshFrequency    string    `description:"刷新频率"`
-	RefreshFrequencyNum int       `description:"具体刷新的日期"`
+	RefreshFrequencyDay int       `description:"具体刷新的日期"`
 	RefreshTime         string    `description:"刷新时间"`
+	RefreshAllData      int       `description:"是否刷新所有数据,0:否,1:刷新所有数据"`
 	RefreshDataNum      int       `description:"刷新单元格数"`
 	ModifyTime          time.Time `description:"最晚一次的更新时间"`
 	CreateTime          time.Time `description:"添加时间"`
@@ -56,6 +57,18 @@ func (m *EdbRefreshDefaultConfig) Update(cols []string) (err error) {
 	return
 }
 
+// Delete
+// @Description: 删除
+// @author: Roc
+// @receiver m
+// @datetime 2023-12-14 16:11:10
+// @return err error
+func (m *EdbRefreshDefaultConfig) Delete() (err error) {
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Delete(m)
+	return
+}
+
 // GetListBySourceAndFrequency
 // @Description: 根据来源和频度获取列表
 // @author: Roc
@@ -73,3 +86,36 @@ func GetListBySourceAndFrequency(source, subSource int, frequency string) (list
 
 	return
 }
+
+// SaveEdbRefreshDefaultConfig
+// @Description: 保存配置项
+// @author: Roc
+// @datetime 2024-01-08 10:20:00
+// @param source int
+// @param subSource int
+// @param frequency string
+// @param newList []*EdbRefreshDefaultConfig
+// @return err error
+func SaveEdbRefreshDefaultConfig(source, subSource int, frequency string, newList []*EdbRefreshDefaultConfig) (err error) {
+	o, err := orm.NewOrmUsingDB("data").Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = o.Rollback()
+			return
+		}
+		_ = o.Commit()
+	}()
+
+	// 先删除
+	sql := `DELETE FROM edb_refresh_default_config WHERE source =? AND sub_source =? AND frequency =?`
+	_, err = o.Raw(sql, source, subSource, frequency).Exec()
+
+	// 再写入
+	_, err = o.InsertMulti(len(newList), newList)
+
+	return
+
+}

+ 68 - 0
models/data_manage/edb_refresh/edb_refresh_mapping.go

@@ -0,0 +1,68 @@
+package edb_refresh
+
+import (
+	"errors"
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+// EdbRefreshMapping
+// @Description: 指标刷新时间配置关系表
+type EdbRefreshMapping struct {
+	EdbRefreshMappingId int       `orm:"column(edb_refresh_mapping_id);pk"`
+	Source              int       `description:"来源"`
+	SubSource           int       `description:"来源名称"`
+	EdbInfoId           int       `description:"指标id,如果是数据源(钢联、有色)的,那么就是数据源里面的id"`
+	EdbRefreshConfigId  int       `description:"刷新配置id"`
+	SysUserId           int       `description:"操作人id"`
+	SysUserRealName     string    `description:"操作人真实姓名"`
+	ModifyTime          time.Time `description:"最晚一次的更新时间"`
+	CreateTime          time.Time `description:"添加时间"`
+}
+
+// Add
+// @Description: 添加
+// @author: Roc
+// @receiver m
+// @datetime 2023-12-14 16:11:10
+// @param cols []string
+// @return err error
+func (m *EdbRefreshMapping) Add() (err error) {
+	if m.EdbRefreshMappingId > 0 {
+		err = errors.New("该配置已存在")
+		return
+	}
+	o := orm.NewOrmUsingDB("data")
+	lastId, err := o.Insert(m)
+	if err != nil {
+		return
+	}
+	m.EdbRefreshMappingId = int(lastId)
+
+	return
+}
+
+// Update
+// @Description: 更新
+// @author: Roc
+// @receiver m
+// @datetime 2023-12-14 16:11:10
+// @param cols []string
+// @return err error
+func (m *EdbRefreshMapping) Update(cols []string) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Update(m, cols...)
+	return
+}
+
+// Delete
+// @Description: 删除
+// @author: Roc
+// @receiver m
+// @datetime 2023-12-14 16:11:10
+// @return err error
+func (m *EdbRefreshMapping) Delete() (err error) {
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Delete(m)
+	return
+}

+ 1 - 1
models/data_manage/edb_refresh_source.go → models/data_manage/edb_refresh/edb_refresh_source.go

@@ -1,4 +1,4 @@
-package data_manage
+package edb_refresh
 
 import (
 	"github.com/beego/beego/v2/client/orm"

+ 35 - 0
models/data_manage/edb_refresh/request/edb_info_refresh.go

@@ -0,0 +1,35 @@
+package request
+
+// SaveEdbRefreshDefaultConfigReq
+// @Description: 设置默认刷新时间配置
+type SaveEdbRefreshDefaultConfigReq struct {
+	Source    int                `description:"来源"`
+	SubSource int                `description:"子来源"`
+	Frequency string             `description:"频度"`
+	List      []RefreshConfigReq `description:"刷新配置项"`
+}
+
+// RefreshConfigReq
+// @Description: 刷新时间配置项
+type RefreshConfigReq struct {
+	RefreshFrequency    string `description:"刷新频率"`
+	RefreshFrequencyDay int    `description:"具体刷新的日期"`
+	RefreshTime         string `description:"刷新时间"`
+	RefreshAllData      int    `description:"是否刷新所有数据,0:否,1:刷新所有数据"`
+	RefreshDataNum      int    `description:"刷新单元格数"`
+}
+
+// SaveEdbRefreshConfigReq
+// @Description: 设置指标的刷新时间配置
+type SaveEdbRefreshConfigReq struct {
+	Source          int                `description:"来源"`
+	SubSource       int                `description:"子来源"`
+	ClassifyId      int                `description:"分类id"`
+	TerminalCode    string             `description:"终端编码"`
+	SysUserId       string             `description:"操作人id"`
+	Frequency       string             `description:"频度"`
+	Keyword         string             `description:"关键字"`
+	IsSelectAll     bool               `description:"是否选择所有指标"`
+	EdbSelectIdList []int              `description:"选择的指标id列表"`
+	List            []RefreshConfigReq `description:"刷新配置项"`
+}

+ 0 - 11
models/data_manage/request/edb_info_refresh.go

@@ -1,11 +0,0 @@
-package request
-
-type SaveEdbRefreshDefaultConfigReq struct {
-	Source              int    `description:"来源"`
-	SubSource           int    `description:"子来源"`
-	Frequency           string `description:"频度"`
-	RefreshFrequency    string `description:"刷新频率"`
-	RefreshFrequencyNum int    `description:"具体刷新的日期"`
-	RefreshTime         string `description:"刷新时间"`
-	RefreshDataNum      int    `description:"刷新单元格数"`
-}

+ 5 - 2
models/db.go

@@ -6,6 +6,7 @@ import (
 	"eta/eta_api/models/data_manage"
 	"eta/eta_api/models/data_manage/chart_theme"
 	"eta/eta_api/models/data_manage/cross_variety"
+	"eta/eta_api/models/data_manage/edb_refresh"
 	"eta/eta_api/models/data_manage/excel"
 	future_good2 "eta/eta_api/models/data_manage/future_good"
 	"eta/eta_api/models/data_manage/supply_analysis"
@@ -541,7 +542,9 @@ func initChartTheme() {
 // initEdbRefresh 初始化指标刷新
 func initEdbRefresh() {
 	orm.RegisterModel(
-		new(data_manage.EdbRefreshSource),        // 刷新的数据源表
-		new(data_manage.EdbRefreshDefaultConfig), // 指标的默认刷新时间配置表
+		new(edb_refresh.EdbRefreshSource),        // 刷新的数据源表
+		new(edb_refresh.EdbRefreshDefaultConfig), // 指标的默认刷新时间配置表
+		new(edb_refresh.EdbRefreshConfig),        // 指标的刷新时间配置表
+		new(edb_refresh.EdbRefreshMapping),       // 指标刷新时间配置关系表
 	)
 }

+ 18 - 0
routers/commentsRouter.go

@@ -2950,6 +2950,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:EdbInfoController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:EdbInfoController"],
+        beego.ControllerComments{
+            Method: "SaveEdbRefreshConfig",
+            Router: `/edb_info/refresh/config/save`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:EdbInfoController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:EdbInfoController"],
         beego.ControllerComments{
             Method: "GetEdbRefreshDefaultConfig",
@@ -2959,6 +2968,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:EdbInfoController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:EdbInfoController"],
+        beego.ControllerComments{
+            Method: "SaveEdbRefreshDefaultConfig",
+            Router: `/edb_info/refresh/default_config/save`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:EdbInfoController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:EdbInfoController"],
         beego.ControllerComments{
             Method: "RefreshEdbList",