Bladeren bron

fix:品种与指标的关系保存与查询

Roc 1 jaar geleden
bovenliggende
commit
d4cf2143a8

+ 83 - 1
controllers/data_manage/cross_variety/tag.go

@@ -8,6 +8,7 @@ import (
 	"eta/eta_api/models/data_manage/cross_variety/request"
 	"eta/eta_api/models/data_manage/cross_variety/response"
 	"eta/eta_api/utils"
+	"github.com/rdlucklib/rdluck_tools/paging"
 	"time"
 )
 
@@ -186,7 +187,7 @@ func (c *TagController) DeleteCheck() {
 // Delete
 // @Title 删除标签
 // @Description 删除标签接口
-// @Param	request	body data_manage.DeleteChartClassifyReq true "type json string"
+// @Param	request	body request.DeleteChartClassifyReq true "type json string"
 // @Success 200 Ret=200 删除成功
 // @router /tag/delete [post]
 func (c *TagController) Delete() {
@@ -236,3 +237,84 @@ func (c *TagController) Delete() {
 	br.Success = true
 	br.IsAddLog = true
 }
+
+// VarietyEdbList
+// @Title 获取标签中的指标与品种的映射关系
+// @Description 获取标签中的指标与品种的映射关系
+// @Param   ChartTagId   query   int  true       "标签id"
+// @Success 200 Ret=200 保存成功
+// @router /tag/variety_edb/list [get]
+func (c *TagController) VarietyEdbList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		c.Data["json"] = br
+		c.ServeJSON()
+	}()
+
+	chartTagId, _ := c.GetInt("ChartTagId")
+	if chartTagId <= 0 {
+		br.Msg = "请选择标签"
+		br.IsSendEmail = false
+		return
+	}
+
+	// 获取数据
+	list, err := cross_variety.GetChartTagVarietyItemListByTag(chartTagId)
+	if err != nil {
+		br.Msg = "保存失败"
+		br.ErrMsg = "保存失败,ERR:" + err.Error()
+		return
+	}
+	dataCount := len(list)
+	page := paging.GetPaging(1, dataCount, dataCount)
+
+	resp := response.VarietyEdbListResp{
+		List:   list,
+		Paging: page,
+	}
+
+	br.Ret = 200
+	br.Msg = "保存成功"
+	br.Success = true
+	br.Data = resp
+}
+
+// SaveVarietyEdb
+// @Title 配置标签中的指标与品种的映射关系
+// @Description 配置标签中的指标与品种的映射关系
+// @Param	request	body request.SaveTagVarietyEdbReq true "type json string"
+// @Success 200 Ret=200 保存成功
+// @router /tag/variety_edb/save [post]
+func (c *TagController) SaveVarietyEdb() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		c.Data["json"] = br
+		c.ServeJSON()
+	}()
+	var req request.SaveTagVarietyEdbReq
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+
+	if req.ChartTagId <= 0 {
+		br.Msg = "请选择标签"
+		br.IsSendEmail = false
+		return
+	}
+
+	// 保存配置
+	err = cross_variety.SaveVarietyEdb(req.ChartTagId, req.VarietyEdb, c.SysUser.AdminId, c.SysUser.RealName)
+	if err != nil {
+		br.Msg = "保存失败"
+		br.ErrMsg = "保存失败,ERR:" + err.Error()
+		return
+	}
+
+	br.Ret = 200
+	br.Msg = "保存成功"
+	br.Success = true
+	br.IsAddLog = true
+}

+ 1 - 1
controllers/data_manage/cross_variety/variety.go

@@ -186,7 +186,7 @@ func (c *VarietyController) DeleteCheck() {
 // Delete
 // @Title 删除品种
 // @Description 删除品种接口
-// @Param	request	body data_manage.DeleteChartClassifyReq true "type json string"
+// @Param	request	body request.DeleteChartClassifyReq true "type json string"
 // @Success 200 Ret=200 删除成功
 // @router /variety/delete [post]
 func (c *VarietyController) Delete() {

+ 4 - 4
models/data_manage/cross_variety/chart_tag.go

@@ -19,7 +19,7 @@ type ChartTag struct {
 // GetTagById
 // @Description: 根据标签id获取标签详情
 // @author: Roc
-// @datetime2023-11-21 14:55:31
+// @datetime 2023-11-21 14:55:31
 // @param id int
 // @return item *ChartTag
 // @return err error
@@ -34,7 +34,7 @@ func GetTagById(id int) (item *ChartTag, err error) {
 // GetTagByName
 // @Description: 根据标签名称获取标签详情
 // @author: Roc
-// @datetime2023-11-21 14:55:20
+// @datetime 2023-11-21 14:55:20
 // @param name string
 // @return item *ChartTag
 // @return err error
@@ -49,7 +49,7 @@ func GetTagByName(name string) (item *ChartTag, err error) {
 // AddTag
 // @Description: 添加标签
 // @author: Roc
-// @datetime2023-11-21 14:52:56
+// @datetime 2023-11-21 14:52:56
 // @param item *ChartTag
 // @return err error
 func AddTag(item *ChartTag) (err error) {
@@ -68,7 +68,7 @@ func AddTag(item *ChartTag) (err error) {
 // @Description: 更新标签
 // @author: Roc
 // @receiver item
-// @datetime2023-11-21 15:15:17
+// @datetime 2023-11-21 15:15:17
 // @param updateColList []string
 // @return err error
 func (item *ChartTag) Update(updateColList []string) (err error) {

+ 180 - 0
models/data_manage/cross_variety/chart_tag_variety.go

@@ -0,0 +1,180 @@
+package cross_variety
+
+import (
+	"eta/eta_api/models/data_manage/cross_variety/request"
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"strings"
+	"time"
+)
+
+// ChartTagVariety
+// @Description: chart_tag_variety 图表标签品种关系表
+type ChartTagVariety struct {
+	Id                        int       `orm:"column(id);pk"`
+	ChartTagId                int       `description:"标签id"`
+	ChartVarietyId            int       `description:"品种id"`
+	EdbInfoId                 int       `description:"指标id"`
+	LastUpdateSysUserId       int       `description:"最后一次操作人"`
+	LastUpdateSysUserRealName string    `description:"最后一次操作人真实姓名"`
+	ModifyTime                time.Time `description:"修改时间"`
+	CreateTime                time.Time `description:"创建时间"`
+}
+
+// GetChartTagVarietyByTagAndVariety
+// @Description: 根据标签id和品种id获取关系
+// @author: Roc
+// @datetime 2023-11-22 10:42:50
+// @param chartTagId int
+// @param chartVarietyId int
+// @return item *ChartTagVariety
+// @return err error
+func GetChartTagVarietyByTagAndVariety(chartTagId, chartVarietyId int) (item *ChartTagVariety, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM chart_tag_variety WHERE chart_tag_id = ? AND chart_variety_id = ?`
+	err = o.Raw(sql, chartTagId, chartVarietyId).QueryRow(&item)
+
+	return
+}
+
+// GetChartTagVarietyListByTag
+// @Description: 根据标签id获取所有绑定的品种列表
+// @author: Roc
+// @datetime 2023-11-22 10:44:35
+// @param chartTagId int
+// @param chartVarietyId int
+// @return items []*ChartTagVariety
+// @return err error
+func GetChartTagVarietyListByTag(chartTagId int) (items []*ChartTagVariety, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM chart_tag_variety WHERE chart_tag_id = ? `
+	_, err = o.Raw(sql, chartTagId).QueryRows(&items)
+
+	return
+}
+
+// ChartTagVarietyItem
+// @Description: 图表标签/品种/指标数据
+type ChartTagVarietyItem struct {
+	Id             int     `orm:"column(id);pk"`
+	ChartTagId     int     `description:"标签id"`
+	ChartVarietyId int     `description:"品种id"`
+	EdbInfoId      int     `description:"指标id"`
+	EdbCode        string  `description:"指标编码"`
+	EdbName        string  `description:"指标名称"`
+	EndDate        string  `description:"数据的最晚日期"`
+	EndValue       float64 `description:"数据最新值"`
+}
+
+// GetChartTagVarietyItemListByTag
+// @Description: 根据标签id获取所有绑定的品种列表
+// @author: Roc
+// @datetime 2023-11-22 10:44:35
+// @param chartTagId int
+// @param chartVarietyId int
+// @return items []*ChartTagVariety
+// @return err error
+func GetChartTagVarietyItemListByTag(chartTagId int) (items []*ChartTagVarietyItem, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT a.*,b.edb_code,b.edb_name,b.end_date,b.end_value FROM chart_tag_variety a 
+         join edb_info b on a.edb_info_id=b.edb_info_id WHERE chart_tag_id = ? `
+	_, err = o.Raw(sql, chartTagId).QueryRows(&items)
+
+	return
+}
+
+// SaveVarietyEdb
+// @Description: 配置标签中的指标与品种的映射关系
+// @author: Roc
+// @datetime 2023-11-22 14:26:24
+// @param chartTagId int
+// @param list []request.VarietyEdbReq
+// @param sysUserId int
+// @param sysUserName string
+// @return err error
+func SaveVarietyEdb(chartTagId int, list []request.VarietyEdbReq, sysUserId int, sysUserName string) (err error) {
+	o, err := orm.NewOrmUsingDB("data").Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = o.Rollback()
+		} else {
+			_ = o.Commit()
+		}
+	}()
+
+	// 查找现在已经存在的品种和指标的关系
+	var items []*ChartTagVariety
+	sql := `SELECT * FROM chart_tag_variety WHERE chart_tag_id = ? `
+	_, err = o.Raw(sql, chartTagId).QueryRows(&items)
+	if err != nil {
+		return
+	}
+
+	hasMap := make(map[int]*ChartTagVariety)
+	existMap := make(map[int]*ChartTagVariety)
+	for _, v := range items {
+		hasMap[v.ChartVarietyId] = v
+		existMap[v.ChartVarietyId] = v
+	}
+
+	// 待添加的配置
+	addList := make([]*ChartTagVariety, 0)
+	for _, v := range list {
+		tmpChartTagVariety, ok := hasMap[v.ChartVarietyId]
+
+		// 找不到就插入
+		if !ok {
+			addList = append(addList, &ChartTagVariety{
+				Id:                        0,
+				ChartTagId:                chartTagId,
+				ChartVarietyId:            v.ChartVarietyId,
+				EdbInfoId:                 v.EdbInfoId,
+				LastUpdateSysUserId:       sysUserId,
+				LastUpdateSysUserRealName: sysUserName,
+				ModifyTime:                time.Now(),
+				CreateTime:                time.Now(),
+			})
+			continue
+		}
+
+		delete(existMap, v.ChartVarietyId)
+
+		// 找到了,如果指标不一致那就修改
+		if tmpChartTagVariety.EdbInfoId != v.EdbInfoId {
+			tmpChartTagVariety.EdbInfoId = v.EdbInfoId
+			tmpChartTagVariety.LastUpdateSysUserId = sysUserId
+			tmpChartTagVariety.LastUpdateSysUserRealName = sysUserName
+			tmpChartTagVariety.ModifyTime = time.Now()
+			_, err = o.Update(tmpChartTagVariety, "EdbInfoId", "LastUpdateSysUserId", "LastUpdateSysUserRealName", "ModifyTime")
+			if err != nil {
+				return
+			}
+		}
+	}
+
+	// 删除不要了的
+	if len(existMap) > 0 {
+		idStrList := make([]string, 0)
+		for id, _ := range existMap {
+			idStrList = append(idStrList, fmt.Sprint(id))
+		}
+		removeIdStr := strings.Join(idStrList, `,`)
+		sql = fmt.Sprintf(` DELETE FROM chart_tag_variety WHERE id in (%s) `, removeIdStr)
+		_, err = o.Raw(sql).Exec()
+		if err != nil {
+			return
+		}
+	}
+
+	// 添加配置
+	if len(addList) > 0 {
+		_, err = o.InsertMulti(len(addList), addList)
+		if err != nil {
+			return
+		}
+	}
+	return
+}

+ 4 - 4
models/data_manage/cross_variety/chart_variety.go

@@ -19,7 +19,7 @@ type ChartVariety struct {
 // GetVarietyById
 // @Description: 根据品种id获取品种详情
 // @author: Roc
-// @datetime2023-11-21 14:55:31
+// @datetime 2023-11-21 14:55:31
 // @param id int
 // @return item *ChartVariety
 // @return err error
@@ -34,7 +34,7 @@ func GetVarietyById(id int) (item *ChartVariety, err error) {
 // GetVarietyByName
 // @Description: 根据品种名称获取品种详情
 // @author: Roc
-// @datetime2023-11-21 14:55:20
+// @datetime 2023-11-21 14:55:20
 // @param name string
 // @return item *ChartVariety
 // @return err error
@@ -49,7 +49,7 @@ func GetVarietyByName(name string) (item *ChartVariety, err error) {
 // AddVariety
 // @Description: 添加品种
 // @author: Roc
-// @datetime2023-11-21 14:52:56
+// @datetime 2023-11-21 14:52:56
 // @param item *ChartVariety
 // @return err error
 func AddVariety(item *ChartVariety) (err error) {
@@ -68,7 +68,7 @@ func AddVariety(item *ChartVariety) (err error) {
 // @Description: 更新品种
 // @author: Roc
 // @receiver item
-// @datetime2023-11-21 15:15:17
+// @datetime 2023-11-21 15:15:17
 // @param updateColList []string
 // @return err error
 func (item *ChartVariety) Update(updateColList []string) (err error) {

+ 14 - 0
models/data_manage/cross_variety/request/tag.go

@@ -15,3 +15,17 @@ type EditTagReq struct {
 type DelTagReq struct {
 	ChartTagId int `description:"标签id"`
 }
+
+// SaveTagVarietyEdbReq
+// @Description: 配置标签中的指标与品种的映射关系
+type SaveTagVarietyEdbReq struct {
+	ChartTagId int             `description:"标签id"`
+	VarietyEdb []VarietyEdbReq `description:"品种和指标的映射关系"`
+}
+
+// VarietyEdbReq
+// @Description: 品种和指标的映射关系
+type VarietyEdbReq struct {
+	ChartVarietyId int `description:"品种id"`
+	EdbInfoId      int `description:"指标id"`
+}

+ 12 - 0
models/data_manage/cross_variety/response/tag.go

@@ -1,7 +1,19 @@
 package response
 
+import (
+	"eta/eta_api/models/data_manage/cross_variety"
+	"github.com/rdlucklib/rdluck_tools/paging"
+)
+
 // TagDeleteCheckResp 标签删除检测数据返回
 type TagDeleteCheckResp struct {
 	DeleteStatus int    `description:"检测状态:0:默认值,如果为0,继续走其他校验,1:该标签已关联图表,不允许删除!"`
 	TipsMsg      string `description:"提示信息"`
 }
+
+// VarietyEdbListResp
+// @Description: 品种与关系的数据返回
+type VarietyEdbListResp struct {
+	List   []*cross_variety.ChartTagVarietyItem `description:"列表数据"`
+	Paging *paging.PagingItem
+}

+ 9 - 6
models/data_manage/edb_info.go

@@ -36,8 +36,9 @@ type EdbInfo struct {
 	CalculateFormula string  `description:"计算公式"`
 	EdbType          int     `description:"指标类型:1:基础指标,2:计算指标"`
 	Sort             int     `description:"排序字段"`
-	LatestDate       string  `description:"数据最新日期"`
-	LatestValue      float64 `description:"数据最新值"`
+	LatestDate       string  `description:"数据最新日期(实际日期)"`
+	LatestValue      float64 `description:"数据最新值(实际值)"`
+	EndValue         float64 `description:"数据的最新值(预测日期的最新值)"`
 	MoveType         int     `description:"移动方式:1:领先(默认),2:滞后"`
 	MoveFrequency    string  `description:"移动频度"`
 	NoUpdate         int8    `description:"是否停止更新,0:继续更新;1:停止更新"`
@@ -265,8 +266,9 @@ type EdbInfoList struct {
 	UnitEn           string                  `description:"英文单位"`
 	StartDate        string                  `description:"起始日期"`
 	EndDate          string                  `description:"终止日期"`
-	LatestDate       string                  `description:"数据最新日期"`
-	LatestValue      float64                 `description:"数据最新值"`
+	LatestDate       string                  `description:"数据最新日期(实际日期)"`
+	LatestValue      float64                 `description:"数据最新值(实际值)"`
+	EndValue         float64                 `description:"数据的最新值(预测日期的最新值)"`
 	ClassifyId       int                     `description:"分类id"`
 	UniqueCode       string                  `description:"指标唯一编码"`
 	SysUserId        int                     `description:"创建人id"`
@@ -1464,8 +1466,9 @@ type EdbInfoView struct {
 	EdbType          int     `description:"指标类型:1:基础指标,2:计算指标"`
 	Sort             int     `description:"排序字段"`
 	IsUpdate         int     `description:"当天是否已更新,1:未更新,2:已更新"`
-	LatestDate       string  `description:"数据最新日期"`
-	LatestValue      float64 `description:"数据最新值"`
+	LatestDate       string  `description:"数据最新日期(实际日期)"`
+	LatestValue      float64 `description:"数据最新值(实际值)"`
+	EndValue         float64 `description:"数据的最新值(预测日期的最新值)"`
 }
 
 // 获取指标的所有计算指标,以及计算指标所依赖计算指标

+ 1 - 1
models/data_manage/excel/excel_edb_mapping.go

@@ -100,7 +100,7 @@ func GetAllExcelEdbMappingByExcelInfoId(excelInfoId int) (items []*ExcelEdbMappi
 // DeleteCustomAnalysisExcelEdbMappingByEdbInfoId
 // @Description: 根据指标id删除与自定义分析表格的关系
 // @author: Roc
-// @datetime2023-11-02 13:20:02
+// @datetime 2023-11-02 13:20:02
 // @param excelInfoId int
 // @return err error
 func DeleteCustomAnalysisExcelEdbMappingByEdbInfoId(excelInfoId int) (err error) {

+ 3 - 2
models/db.go

@@ -464,7 +464,8 @@ func initSmartReport() {
 // initCrossVariety 跨品种分析
 func initCrossVariety() {
 	orm.RegisterModel(
-		new(cross_variety.ChartVariety), // 品种表
-		new(cross_variety.ChartTag),     // 标签表
+		new(cross_variety.ChartVariety),    // 品种表
+		new(cross_variety.ChartTag),        // 标签表
+		new(cross_variety.ChartTagVariety), // 标签、品种、指标关系表
 	)
 }

+ 18 - 0
routers/commentsRouter.go

@@ -232,6 +232,24 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/cross_variety:TagController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/cross_variety:TagController"],
+        beego.ControllerComments{
+            Method: "VarietyEdbList",
+            Router: `/tag/variety_edb/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/cross_variety:TagController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/cross_variety:TagController"],
+        beego.ControllerComments{
+            Method: "SaveVarietyEdb",
+            Router: `/tag/variety_edb/save`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/cross_variety:VarietyController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/cross_variety:VarietyController"],
         beego.ControllerComments{
             Method: "Add",

+ 1 - 1
services/data/edb_info.go

@@ -70,7 +70,7 @@ func EdbInfoRefreshAllFromBaseV3Bak(edbInfoIdList []int, refreshAll, isSync bool
 //
 //	@Description: 全部刷新指标(切换到edb_lib服务)
 //	@author: Roc
-//	@datetime2023-10-23 09:57:55
+//	@datetime 2023-10-23 09:57:55
 //	@param edbInfoIdList []int
 //	@param refreshAll bool
 //	@param isSync bool