Browse Source

add:添加卓创红期的指标和分类操作

zqbao 7 months ago
parent
commit
787906d82f

+ 397 - 3
controllers/data_manage/sci_hq_data.go

@@ -6,7 +6,11 @@ import (
 	"eta/eta_api/models"
 	"eta/eta_api/models/data_manage"
 	"eta/eta_api/models/data_manage/request"
+	"eta/eta_api/models/data_manage/response"
 	"eta/eta_api/services/data"
+	"eta/eta_api/utils"
+
+	"github.com/rdlucklib/rdluck_tools/paging"
 )
 
 type SciHqDataController struct {
@@ -105,7 +109,397 @@ func (this *SciHqDataController) DelClassify() {
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
-	var req request.DelBaseFromSciReq
+	var req request.DelBaseFromSciHqClassifyReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+
+	if req.ClassifyId < 0 {
+		br.Msg = "参数错误"
+		br.IsSendEmail = false
+		return
+	}
+
+	err = data.DelSciHqClassify(req.ClassifyId)
+	if err != nil {
+		br.Msg = "删除失败"
+		br.ErrMsg = "删除失败,Err:" + err.Error()
+		return
+	}
+
+	br.Ret = 200
+	br.Msg = "删除成功"
+	br.Success = true
+	br.IsAddLog = true
+}
+
+// EditClassify
+// @Title 修改分类
+// @Description 修改分类接口
+// @Param	request	body data_manage.EditBaseFromMysteelChemicalClassifyReq true "type json string"
+// @Success 200 Ret=200 修改成功
+// @router /sci_hq/classify/edit [post]
+func (this *SciHqDataController) EditClassify() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	var req request.EditBaseFromSciHqClassifyReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if req.ClassifyId <= 0 {
+		br.Msg = "参数错误"
+		return
+	}
+	if req.ClassifyName == "" {
+		br.Msg = "请输入分类名称"
+		return
+	}
+	classify, err := data_manage.GetSciHqClassifyById(req.ClassifyId)
+	if err != nil {
+		if err.Error() == utils.ErrNoRow() {
+			br.Msg = "分类不存在"
+			return
+		}
+		br.Msg = "编辑失败"
+		br.ErrMsg = "获取分类失败,Err:" + err.Error()
+		return
+	}
+	switch this.Lang {
+	case utils.EnLangVersion:
+		if classify.ClassifyNameEn != req.ClassifyName {
+			count, err := data_manage.GetSciHqClassifyCountByName(req.ClassifyName, this.Lang)
+			if err != nil {
+				br.Msg = "编辑失败"
+				br.ErrMsg = "获取分类失败,Err:" + err.Error()
+				return
+			}
+			if count > 0 {
+				br.Msg = "分类名称已存在"
+				return
+			}
+			err = classify.Update([]string{"classify_name_en", "modify_time"})
+			if err != nil {
+				br.Msg = "编辑失败"
+				br.ErrMsg = "编辑失败,Err:" + err.Error()
+				return
+			}
+		}
+	default:
+		if classify.ClassifyName != req.ClassifyName {
+			count, err := data_manage.GetSciHqClassifyCountByName(req.ClassifyName, this.Lang)
+			if err != nil {
+				br.Msg = "编辑失败"
+				br.ErrMsg = "获取分类失败,Err:" + err.Error()
+				return
+			}
+			if count > 0 {
+				br.Msg = "分类名称已存在"
+				return
+			}
+			err = classify.Update([]string{"classify_name", "modify_time"})
+			if err != nil {
+				br.Msg = "编辑失败"
+				br.ErrMsg = "编辑失败,Err:" + err.Error()
+				return
+			}
+		}
+	}
+
+	br.Msg = "编辑成功"
+	br.Success = true
+	br.Ret = 200
+	br.IsAddLog = true
+}
+
+// Move
+// @Title 分类移动接口
+// @Description 分类移动接口
+// @Success 200 {object} data_manage.MoveBaseFromMysteelChemicalClassifyReq
+// @router /sci/classify/move [post]
+func (this *SciHqDataController) Move() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	var req request.MoveBaseFromSciHqClassifyReq
+	if err := json.Unmarshal(this.Ctx.Input.RequestBody, &req); err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+}
+
+// SciHqIndexList
+// @Title 卓创红期指标列表
+// @Description 卓创红期数据指标列表接口
+// @Param   ClassifyId   query   int  true       "分类id"
+// @Success 200 {object} data_manage.BaseFromMysteelChemicalIndexResp
+// @router /sci_hq/index/list [get]
+func (this *SciHqDataController) SciHqIndexList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	classifyId, _ := this.GetInt("ClassifyId", 0)
+	indexList, err := data_manage.GetSciHqIndexBaseInfoByClassifyId(classifyId)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = indexList
+}
+
+// SciHqIndexPageList
+// @Title 卓创红期指标列表
+// @Description 卓创红期数据指标列表接口
+// @Param   PageSize   query   int  true       "每页数据条数"
+// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
+// @Param   ClassifyId   query   int  true       "分类id"
+// @Success 200 {object} data_manage.BaseFromMysteelChemicalIndexResp
+// @router /sci_hq/index/page/list [get]
+func (this *SciHqDataController) SciHqIndexPageList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	classifyId, _ := this.GetInt("ClassifyId", 0)
+	pageSize, _ := this.GetInt("PageSize")
+	currrentIndex, _ := this.GetInt("CurrentIndex")
+	var startSize int
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
+	}
+	if currrentIndex <= 0 {
+		currrentIndex = 1
+	}
+	startSize = utils.StartIndex(currrentIndex, pageSize)
+	total, err := data_manage.GetSciHqIndexCountByClassifyId(classifyId)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
+		return
+	}
+	indexList, err := data_manage.GetSciHqIndexByClassifyId(classifyId, startSize, pageSize)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
+		return
+	}
+
+	page := paging.GetPaging(currrentIndex, pageSize, total)
+	resp := new(response.SciHqIndexPageListResp)
+	resp.List = indexList
+	resp.Paging = page
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// SciHqSearchList
+// @Title 卓创红期模糊搜索
+// @Description 卓创红期模糊搜索
+// @Param   Keyword   query   string  ture       "关键字搜索"
+// @Success 200 {object} models.BaseResponse
+// @router /sci/search_list [get]
+func (this *SciHqDataController) SciHqSearchList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	//关键字
+	keyword := this.GetString("Keyword")
+	var condition string
+	var pars []interface{}
+	if keyword != "" {
+		condition += ` AND (index_code LIKE ? OR index_name LIKE ?)`
+		pars = utils.GetLikeKeywordPars(pars, keyword, 2)
+	} else {
+		br.Msg = "请输入指标ID/指标名称"
+		return
+	}
+
+	list, err := data_manage.GetSciHqIndexBaseInfoByCondition(condition, pars)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = list
+}
+
+// SciHqSingleData
+// @Title 获取卓创红期据
+// @Description 获取卓创红期单条数据接口
+// @Param   IndexCode   query   string  true       "指标唯一编码"
+// @Success 200 {object} models.BaseResponse
+// @router /sci_hq/single_data [get]
+func (this *SciHqDataController) SciHqSingleData() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	indexCode := this.GetString("IndexCode")
+	indexInfo, err := data_manage.GetBaseFromSciHqIndexByIndexCode(indexCode)
+	if err != nil {
+		br.Msg = "获取指标信息失败"
+		br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
+		return
+	}
+	dataList, err := data_manage.GetSciHqIndexDataByCode(indexCode)
+	if err != nil {
+		br.Msg = "获取数据失败"
+		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+		return
+	}
+	var ret response.SciHqSingleDataResp
+	ret.ClassifyId = indexInfo.ClassifyId
+	ret.BaseFromSciHqIndexId = indexInfo.BaseFromSciHqIndexId
+	ret.IndexCode = indexInfo.IndexCode
+	ret.IndexName = indexInfo.IndexName
+	ret.Frequency = indexInfo.Frequency
+	ret.CreateTime = indexInfo.CreateTime.Format(utils.FormatDateTime)
+	ret.ModifyTime = indexInfo.ModifyTime.Format(utils.FormatDateTime)
+	ret.Unit = indexInfo.Unit
+	ret.Data = dataList
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = ret
+}
+
+// ResetSciHqIndex
+// @Title 指标数据清除分类
+// @Description 指标数据清除分类
+// @Param	request	body data_manage.DelBaseFromSciReq true "type json string"
+// @Success 200 Ret=200 操作成功
+// @router /sci_hq/reset [post]
+func (this *SciHqDataController) ResetSciHqIndex() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	var req request.ResetBaseFromSciHqReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+
+	if req.BaseFromSciHqIndexId < 0 {
+		br.Msg = "参数错误"
+		br.IsSendEmail = false
+		return
+	}
+
+	err = data.ResetSciHqIndex(req.BaseFromSciHqIndexId)
+	if err != nil {
+		br.Msg = "移动失败"
+		br.ErrMsg = "移动失败,Err:" + err.Error()
+		return
+	}
+
+	br.Ret = 200
+	br.Msg = "操作成功"
+	br.Success = true
+	br.IsAddLog = true
+}
+
+// EditSciHq
+// @Title 编辑卓创红期指标
+// @Description 编辑卓创红期指标接口
+// @Param	request	body data_manage.AddEdbClassifyReq true "type json string"
+// @Success 200 Ret=200 保存成功
+// @router /sci_hq/edit [post]
+func (this *SciHqDataController) EditSciHq() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	var req request.EditBaseFromSciHqReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if req.BaseFromSciHqIndexId <= 0 {
+		br.Msg = "请选择指标"
+		br.IsSendEmail = false
+		return
+	}
+	if req.ClassifyId <= 0 {
+		br.Msg = "请选择分类"
+		br.IsSendEmail = false
+		return
+	}
+
+	//编辑指标
+	sciIndexInfo, err := data.EditSciHqIndex(req.BaseFromSciHqIndexId, req.ClassifyId)
+	if err != nil {
+		if err.Error() == utils.ErrNoRow() {
+			br.Msg = "指标不存在或已删除"
+			return
+		}
+		br.Msg = "编辑失败"
+		br.ErrMsg = "编辑指标失败,Err:" + err.Error()
+		return
+	}
+
+	resp := response.EditSciHqIndexInfoResp{
+		BaseFromSciHqIndexId: sciIndexInfo.BaseFromSciHqIndexId,
+		IndexCode:            sciIndexInfo.IndexCode,
+	}
+	br.Data = resp
+	br.Ret = 200
+	br.Msg = "保存成功"
+	br.Success = true
+	br.IsAddLog = true
+}
+
+// DeleteSciHqData
+// @Title 删除指标
+// @Description 删除指标接口
+// @Param	request	body data_manage.DelBaseFromSciReq true "type json string"
+// @Success 200 Ret=200 删除成功
+// @router /sci_hq/del [post]
+func (this *SciHqDataController) DeleteSciHqData() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	var req request.DelBaseFromSciHqReq
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
@@ -113,13 +507,13 @@ func (this *SciHqDataController) DelClassify() {
 		return
 	}
 
-	if req.BaseFromSciIndexId < 0 {
+	if req.BaseFromSciHqIndexId < 0 {
 		br.Msg = "参数错误"
 		br.IsSendEmail = false
 		return
 	}
 
-	err, errMsg := data.DelSciData(req.BaseFromSciIndexId)
+	err, errMsg := data.DelSciHqData(req.BaseFromSciHqIndexId)
 	if errMsg != `` {
 		br.Msg = errMsg
 		br.ErrMsg = errMsg

+ 32 - 0
models/data_manage/base_from_sci_hq_classify.go

@@ -37,6 +37,12 @@ func (t *BaseFromSciHqClassify) Add() (insertId int64, err error) {
 	return
 }
 
+func (t *BaseFromSciHqClassify) Update(cols []string) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Update(t, cols...)
+	return
+}
+
 func BatchAddSciHqClassify(items []*BaseFromSciHqClassify) (err error) {
 	o := orm.NewOrm()
 	_, err = o.InsertMulti(len(items), items)
@@ -91,6 +97,19 @@ func GetSciHqClassifyById(classifyId int) (item *BaseFromSciHqClassify, err erro
 	return
 }
 
+// GetSciHqClassifyCountByName 通过分类名称获取分类
+func GetSciHqClassifyCountByName(classifyName string, lang string) (count int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT COUNT(*) AS count FROM base_from_sci_hq_classify WHERE 1=1`
+	if lang == utils.EnLangVersion {
+		sql += ` AND classify_name_en=? `
+	} else {
+		sql += ` AND classify_name=? `
+	}
+	err = o.Raw(sql, classifyName).QueryRow(&count)
+	return
+}
+
 func GetBaseFromSciHqClassifyEnCount(classifyNameEn string, parentId int) (count int, err error) {
 	o := orm.NewOrmUsingDB("data")
 	sql := `SELECT COUNT(1) AS count FROM base_from_sci_classify WHERE classify_name_en=? AND parent_id=? `
@@ -134,3 +153,16 @@ func BatchDeleteSciHqClassifyById(classifyId []int) (err error) {
 
 	return
 }
+
+// DeleteSciHqClassifyByClassifyId 根据分类id删除对应的指标分类
+func DeleteSciHqClassifyByClassifyId(classifyIdList []int) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	num := len(classifyIdList)
+	if num <= 0 {
+		return
+	}
+	//删除分类
+	sql := `DELETE FROM base_from_sci_hq_classify WHERE classify_id IN (` + utils.GetOrmInReplace(num) + `) `
+	_, err = o.Raw(sql, classifyIdList).Exec()
+	return
+}

+ 7 - 0
models/data_manage/base_from_sci_hq_data.go

@@ -24,3 +24,10 @@ func GetSciHqDataByIndexId(indexId int) (items []*BaseFromSciHqData, err error)
 	_, err = o.Raw(sql, indexId).QueryRows(&items)
 	return
 }
+
+func GetSciHqIndexDataByCode(indexCode string) (items []*BaseFromSciHqData, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT *  FROM base_from_sci_hq_data WHERE index_code=? ORDER BY data_time DESC  `
+	_, err = o.Raw(sql, indexCode).QueryRows(&items)
+	return
+}

+ 99 - 1
models/data_manage/base_from_sci_hq_index.go

@@ -1,6 +1,10 @@
 package data_manage
 
-import "time"
+import (
+	"time"
+
+	"github.com/beego/beego/v2/client/orm"
+)
 
 type BaseFromSciHqIndex struct {
 	BaseFromSciHqIndexId int    `orm:"pk"`
@@ -17,3 +21,97 @@ type BaseFromSciHqIndex struct {
 	CreateTime           time.Time
 	ModifyTime           time.Time
 }
+
+func (b *BaseFromSciHqIndex) Update(cols []string) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Update(b, cols...)
+	return
+}
+
+// GetSciHqIndexByCondition 根据条件获取卓创红期指标列表
+func GetSciHqIndexByCondition(condition string, pars []interface{}) (items []*BaseFromSciHqIndex, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT * FROM base_from_sci_hq_index WHERE 1=1 `
+
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` ORDER BY base_from_mysteel_chemical_index_id ASC `
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}
+
+// GetBaseFromSciHqIndexByIndexCode 根据指标编码获取指标信息
+func GetBaseFromSciHqIndexByIndexCode(indexCode string) (item *BaseFromSciHqIndex, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT * FROM base_from_sci_hq_index WHERE index_code=? `
+	err = o.Raw(sql, indexCode).QueryRow(&item)
+	return
+}
+
+// GetBaseFromSciHqIndexByIndexId 根据指标id获取指标信息
+func GetBaseFromSciHqIndexByIndexId(indexId int) (item *BaseFromSciHqIndex, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT * FROM base_from_sci_hq_index WHERE base_from_sci_hq_index_id=? `
+	err = o.Raw(sql, indexId).QueryRow(&item)
+	return
+}
+
+// GetSciHqIndexByClassifyId 根据分类id获取卓创红期指标列表
+func GetSciHqIndexByClassifyId(classifyId, startSize, pageSize int) (items []*BaseFromSciHqIndex, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT * FROM base_from_sci_hq_index WHERE classify_id = ?  ORDER BY sort ASC LIMIT ?,? `
+	_, err = o.Raw(sql, classifyId, startSize, pageSize).QueryRows(&items)
+	return
+}
+
+// GetSciHqIndexCountByClassifyId 根据分类id获取卓创红期指标数量
+func GetSciHqIndexCountByClassifyId(classifyId int) (count int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT COUNT(*) AS count FROM base_from_sci_hq_index WHERE classify_id = ? `
+	_, err = o.Raw(sql, classifyId).QueryRows(&count)
+	return
+}
+
+// GetSciHqIndexBaseInfoByClassifyId 根据分类id获取卓创红期指标列表
+func GetSciHqIndexBaseInfoByClassifyId(classifyId int) (items []*BaseFromSciHqIndex, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT base_from_sci_hq_index_id, classify_id, index_code, index_name  FROM base_from_sci_hq_index WHERE classify_id = ? ORDER BY sort ASC `
+	_, err = o.Raw(sql, classifyId).QueryRows(&items)
+	return
+}
+
+// GetSciHqIndexBaseInfoByClassifyId 根据分类id获取卓创红期指标列表
+func GetSciHqIndexBaseInfoByCondition(condition string, pars []interface{}) (items []*BaseFromSciHqIndex, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT base_from_sci_hq_index_id, index_code, index_name  FROM base_from_sci_hq_index WHERE 1=1 `
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` ORDER BY sort ASC `
+	_, err = o.Raw(sql, pars...).QueryRows(&items)
+	return
+}
+
+// GetBaseFromSciHqIndexMaxSortByClassifyId 根据分类id获取指标最大排序
+func GetBaseFromSciHqIndexMaxSortByClassifyId(classifyId int) (sort int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT max(sort) FROM base_from_sci_index WHERE classify_id=? `
+	err = o.Raw(sql, classifyId).QueryRow(&sort)
+	return
+}
+
+// MoveDownSciHqIndexBySort 往下移动
+func MoveDownSciHqIndexBySort(classifyId, prevSort, currentSort int) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `update base_from_sci_hq_index set sort = sort - 1 where classify_id=? and sort <= ? and sort> ? `
+	_, err = o.Raw(sql, classifyId, prevSort, currentSort).Exec()
+	return
+}
+
+func DeleteBaseFromSciHqIndexById(indexId int) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `DELETE FROM base_from_sci_hq_index WHERE base_from_sci_hq_index_id=? `
+	_, err = o.Raw(sql, indexId).Exec()
+	return
+}

+ 35 - 0
models/data_manage/request/sci_hq_data.go

@@ -4,3 +4,38 @@ type AddBaseFromSciHqClassifyReq struct {
 	ParentId     int    `description:"上级id"`
 	ClassifyName string `description:"分类名称"`
 }
+
+// DelBaseFromSciHqReq 删除卓创红期分类
+type DelBaseFromSciHqClassifyReq struct {
+	ClassifyId int `description:"分类id"`
+}
+
+// EditBaseFromSciClassifyReq 编辑卓创红期分类
+type EditBaseFromSciHqClassifyReq struct {
+	ClassifyName string `description:"分类名称"`
+	ClassifyId   int    `description:"分类id"`
+}
+
+// EditBaseFromSciHqReq 编辑卓创红期指标所属分类
+type EditBaseFromSciHqReq struct {
+	BaseFromSciHqIndexId int `description:"指标id"`
+	ClassifyId           int `description:"分类id"`
+}
+
+// DelBaseFromSciHqReq 删除卓创红期指标
+type DelBaseFromSciHqReq struct {
+	BaseFromSciHqIndexId int `description:"指标id"`
+}
+
+// ResetBaseFromSciHqReq 重置指标所属分类
+type ResetBaseFromSciHqReq struct {
+	BaseFromSciHqIndexId int `description:"指标id"`
+}
+
+// MoveBaseFromSciHqClassifyReq 移动分类请求参数
+type MoveBaseFromSciHqClassifyReq struct {
+	ClassifyId     int `description:"分类id"`
+	ParentId       int `description:"父级分类id"`
+	PrevClassifyId int `description:"上一个兄弟节点分类id"`
+	NextClassifyId int `description:"下一个兄弟节点分类id"`
+}

+ 35 - 0
models/data_manage/response/sci_hq_data.go

@@ -0,0 +1,35 @@
+package response
+
+import (
+	"eta/eta_api/models/data_manage"
+
+	"github.com/rdlucklib/rdluck_tools/paging"
+)
+
+type SciHqIndexPageListResp struct {
+	List   []*data_manage.BaseFromSciHqIndex
+	Paging *paging.PagingItem
+}
+
+type EditSciHqIndexInfoResp struct {
+	BaseFromSciHqIndexId int
+	IndexCode            string
+}
+
+type SciHqSingleDataResp struct {
+	BaseFromSciHqIndexId int
+	ClassifyId           int
+	EdbInfoId            int
+	Name                 string
+	IndexCode            string
+	IndexName            string
+	Frequency            string
+	Unit                 string
+	ApiStartTime         string
+	ApiUpdateTime        string
+	StartTime            string
+	FinishTime           string
+	CreateTime           string
+	ModifyTime           string
+	Data                 []*data_manage.BaseFromSciHqData
+}

+ 106 - 4
services/data/base_from_sci_hq.go

@@ -112,17 +112,119 @@ func DelSciHqClassify(classifyId int) (err error) {
 	if err != nil {
 		return
 	}
+	var classifyIds []int
 	if classify.ParentId == 0 {
-		childClassifyIds, er := data_manage.GetChildSciHqClassifyIdsById(classify.ClassifyId)
-		if er != nil {
-			return er
+		classifyIds, err = data_manage.GetChildSciHqClassifyIdsById(classify.ClassifyId)
+		if err != nil {
+			return
 		}
+	} else {
+		classifyIds = append(classifyIds, classify.ClassifyId)
+	}
+	// 获取分类下的所有指标
+	count, err := data_manage.GetBaseFromSciIndexCountByClassifyIds(classifyIds)
+	if err != nil {
+		err = errors.New("获取分类下的指标信息失败,Err:" + err.Error())
+		return
+	}
+	if count > 0 {
+		err = errors.New("该分类下有指标,不可删除")
+		return
+	}
+	// 删除对应的分类
+	err = data_manage.DeleteSciHqClassifyByClassifyId(classifyIds)
+	if err != nil {
+		return
+	}
+	return
+}
 
+// ResetSciHqIndex 指标数据清除分类接口
+func ResetSciHqIndex(indexId int) (err error) {
+	sciHqIndex, err := data_manage.GetBaseFromSciHqIndexByIndexId(indexId)
+	if err != nil {
+		return
+	}
+
+	// 更新指标在未分类下的排序,永远排在未分类的最后一个
+	//移动排序
+	classifyId := 0
+	updateCol := make([]string, 0)
+	var currentSort, prevSort int
+	currentSort = sciHqIndex.Sort
+	//未分类的最大的sort值
+	prevSort, err = data_manage.GetBaseFromSciHqIndexMaxSortByClassifyId(classifyId)
+	if err != nil {
+		err = errors.New("获取上一个兄弟节点指标信息失败,Err:" + err.Error())
+		return
+	}
+
+	//如果前面一个节点的sort值比当前大,则当前节点往下移动
+	if prevSort >= currentSort {
+		//往下移动
+		err = data_manage.MoveDownSciIndexBySort(classifyId, prevSort, currentSort)
+		if err != nil {
+			err = errors.New("向下移动出错:" + err.Error())
+			return
+		}
+		sciHqIndex.Sort = prevSort
+	}
+
+	//更新
+	sciHqIndex.ModifyTime = time.Now()
+	sciHqIndex.ClassifyId = classifyId
+	updateCol = append(updateCol, "Sort", "ModifyTime", "ClassifyId")
+	err = sciHqIndex.Update(updateCol)
+	if err != nil {
+		err = errors.New("移动失败,Err:" + err.Error())
+		return
 	}
 	return
+}
 
+// DelSciHqData 删除卓创红期指标
+func DelSciHqData(indexId int) (err error, errMsg string) {
+	baseFromSciHqIndex, err := data_manage.GetBaseFromSciHqIndexByIndexId(indexId)
+	if err != nil {
+		errMsg = `获取数据失败`
+		if err.Error() == utils.ErrNoRow() {
+			errMsg = `该指标未入库`
+			err = nil
+		}
+		return
+	}
+
+	// 获取已经加入到EDB指标库的Sci指标
+	edbInfo, err := data_manage.GetEdbInfoByEdbCode(utils.DATA_SOURCE_SCI_HQ, baseFromSciHqIndex.IndexCode)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		errMsg = "删除失败"
+		err = errors.New("获取分类下的指标信息失败,Err:" + err.Error())
+		return
+	}
+	if edbInfo != nil {
+		errMsg = "当前指标已被引用,不可删除"
+		err = nil
+		return
+	}
+
+	// 删除对应的分类和指标
+	err = data_manage.DeleteBaseFromSciIndexById(indexId)
+	if err != nil {
+		return
+	}
+
+	return
 }
 
-func DelSciHqData() {
+// EditSciHqIndex 编辑卓创红期指标
+func EditSciHqIndex(indexId, classifyId int) (baseFromSciHqIndex *data_manage.BaseFromSciHqIndex, err error) {
+	baseFromSciHqIndex, err = data_manage.GetBaseFromSciHqIndexByIndexId(indexId)
+	if err != nil {
+		return
+	}
 
+	baseFromSciHqIndex.ClassifyId = classifyId
+	baseFromSciHqIndex.ModifyTime = time.Now()
+	err = baseFromSciHqIndex.Update([]string{"ClassifyId", "ModifyTime"})
+	return
 }

+ 1 - 0
utils/constants.go

@@ -173,6 +173,7 @@ const (
 	DATA_SOURCE_BLOOMBERG                            = 83       // bloomberg彭博数据
 	DATA_SOURCE_BUSINESS                             = 84       // 来源于自有数据
 	DATA_SOURCE_SCI99                                = 85       // 卓创资讯 -> 85
+	DATA_SOURCE_SCI_HQ                               = 87       // 卓创红期->87
 )
 
 // 数据刷新频率