Explorar o código

fix:卓创红期bug

zqbao hai 7 meses
pai
achega
9d15f49ab8

+ 362 - 26
controllers/data_manage/sci_hq_data.go

@@ -13,11 +13,14 @@ import (
 	etaTrialService "eta/eta_api/services/eta_trial"
 	"eta/eta_api/utils"
 	"fmt"
+	"os"
+	"path/filepath"
 	"strconv"
 	"strings"
 	"time"
 
 	"github.com/rdlucklib/rdluck_tools/paging"
+	"github.com/tealeg/xlsx"
 )
 
 type SciHqDataController struct {
@@ -193,6 +196,8 @@ func (this *SciHqDataController) EditClassify() {
 				br.Msg = "分类名称已存在"
 				return
 			}
+			classify.ClassifyNameEn = req.ClassifyName
+			classify.ModifyTime = time.Now()
 			err = classify.Update([]string{"classify_name_en", "modify_time"})
 			if err != nil {
 				br.Msg = "编辑失败"
@@ -212,6 +217,8 @@ func (this *SciHqDataController) EditClassify() {
 				br.Msg = "分类名称已存在"
 				return
 			}
+			classify.ClassifyName = req.ClassifyName
+			classify.ModifyTime = time.Now()
 			err = classify.Update([]string{"classify_name", "modify_time"})
 			if err != nil {
 				br.Msg = "编辑失败"
@@ -227,12 +234,12 @@ func (this *SciHqDataController) EditClassify() {
 	br.IsAddLog = true
 }
 
-// Move
+// MoveClassify
 // @Title 分类移动接口
 // @Description 分类移动接口
 // @Success 200 {object} data_manage.MoveBaseFromMysteelChemicalClassifyReq
-// @router /sci/classify/move [post]
-func (this *SciHqDataController) Move() {
+// @router /sci_hq/classify/move [post]
+func (this *SciHqDataController) MoveClassify() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
 		this.Data["json"] = br
@@ -279,6 +286,7 @@ func (this *SciHqDataController) IndexList() {
 // @Param   PageSize   query   int  true       "每页数据条数"
 // @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
 // @Param   ClassifyId   query   int  true       "分类id"
+// @Param   IsListAll   query   int  true       "是否展示全部"
 // @Success 200 {object} data_manage.BaseFromMysteelChemicalIndexResp
 // @router /sci_hq/index/page/list [get]
 func (this *SciHqDataController) IndexPageList() {
@@ -290,6 +298,7 @@ func (this *SciHqDataController) IndexPageList() {
 	classifyId, _ := this.GetInt("ClassifyId", 0)
 	pageSize, _ := this.GetInt("PageSize")
 	currrentIndex, _ := this.GetInt("CurrentIndex")
+	isListAll, _ := this.GetBool("IsListAll")
 	var startSize int
 	if pageSize <= 0 {
 		pageSize = utils.PageSize20
@@ -298,17 +307,38 @@ func (this *SciHqDataController) IndexPageList() {
 		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
+	var total int
+	var indexList []*data_manage.BaseFromSciHqIndex
+	if isListAll {
+		tmpTotal, err := data_manage.GetSciHqIndexCount()
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
+			return
+		}
+		total = tmpTotal
+		tmpIndexList, err := data_manage.GetSciHqIndexByPage(startSize, pageSize)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
+			return
+		}
+		indexList = tmpIndexList
+	} else {
+		tmpTotal, err := data_manage.GetSciHqIndexCountByClassifyId(classifyId)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
+			return
+		}
+		total = tmpTotal
+		tmpIndexList, err := data_manage.GetSciHqIndexByClassifyId(classifyId, startSize, pageSize)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
+			return
+		}
+		indexList = tmpIndexList
 	}
 
 	page := paging.GetPaging(currrentIndex, pageSize, total)
@@ -327,7 +357,7 @@ func (this *SciHqDataController) IndexPageList() {
 // @Description 卓创红期模糊搜索
 // @Param   Keyword   query   string  ture       "关键字搜索"
 // @Success 200 {object} models.BaseResponse
-// @router /sci/search_list [get]
+// @router /sci_hq/search_list [get]
 func (this *SciHqDataController) SearchList() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
@@ -845,7 +875,7 @@ func (this *SciHqDataController) BatchAdd() {
 
 	// 限定同一时间最多批量新增30个指标
 	for _, v := range req {
-		var r data.SciIndexSource2EdbReq
+		var r data.SciHqIndexSource2EdbReq
 		r.EdbCode = v.EdbCode
 		r.EdbName = v.EdbName
 		r.Frequency = v.Frequency
@@ -915,7 +945,7 @@ func (this *SciHqDataController) BatchAdd() {
 // @Description 批量删除
 // @Param	request	body []*request.DelBaseFromSciHqReq true "type json string"
 // @Success 200 string "操作成功"
-// @router /sci_hq/edb_info/batch_add [post]
+// @router /sci_hq/edb_info/batch_delete [post]
 func (this *SciHqDataController) BatchDelete() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
@@ -1010,20 +1040,43 @@ func (this *SciHqDataController) BatchEdit() {
 		br.ErrMsg = "获取指标失败,Err:" + err.Error()
 		return
 	}
+	classifySort, err := data_manage.GetSciHqClassifyMaxSortByClassifyIds(classifyIds)
+	if err != nil {
+		br.Msg = "编辑失败"
+		br.ErrMsg = "获取分类最大排序失败,Err:" + err.Error()
+		return
+	}
+	classifySortMap := make(map[int]int)
+	for _, v := range classifySort {
+		classifySortMap[v.ClassifyId] = v.MaxSort
+	}
 	classifyList, err := data_manage.GetSciHqClassifyListByIds(classifyIds)
 	if err != nil {
 		br.Msg = "编辑失败"
 		br.ErrMsg = "获取分类失败,Err:" + err.Error()
 		return
 	}
+	existClassifyList := make(map[int]struct{})
+	for _, v := range classifyList {
+		existClassifyList[v.ClassifyId] = struct{}{}
+	}
 	//编辑指标
 	updateIndexList := make([]*data_manage.BaseFromSciHqIndex, 0)
 	for _, v := range indexList {
-		v.ClassifyId = indexIdToclassifyId[v.BaseFromSciHqIndexId]
-
-		updateIndexList = append(updateIndexList, v)
+		tmpClassifyId := indexIdToclassifyId[v.BaseFromSciHqIndexId]
+		if _, ok := existClassifyList[tmpClassifyId]; ok {
+			v.ClassifyId = tmpClassifyId
+			v.Sort = classifySortMap[tmpClassifyId] + 1
+			classifySortMap[tmpClassifyId] += 1
+			updateIndexList = append(updateIndexList, v)
+		}
+	}
+	err = data_manage.BatchModifySciHqIndexClassify(updateIndexList)
+	if err != nil {
+		br.Msg = "编辑失败"
+		br.ErrMsg = "编辑指标失败,Err:" + err.Error()
+		return
 	}
-	fmt.Println(classifyList)
 
 	br.Msg = "操作成功"
 	br.Ret = 200
@@ -1063,12 +1116,11 @@ func (this *SciHqDataController) EditSciHq() {
 	}
 
 	//编辑指标
-	sciIndexInfo, err := data.EditSciHqIndex(req.BaseFromSciHqIndexId, req.ClassifyId)
+	sciIndexInfo, errMsg, err := data.EditSciHqIndex(req.BaseFromSciHqIndexId, req.ClassifyId)
+	if errMsg != `` {
+		br.Msg = errMsg
+	}
 	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
-			br.Msg = "指标不存在或已删除"
-			return
-		}
 		br.Msg = "编辑失败"
 		br.ErrMsg = "编辑指标失败,Err:" + err.Error()
 		return
@@ -1129,6 +1181,290 @@ func (this *SciHqDataController) DeleteSciHqData() {
 	br.IsAddLog = true
 }
 
+// ExportSciHqList
+// @Title 导出Sci数据
+// @Description 导出Sci数据
+// @Param   IndexName   query   string  false       "名称关键词"
+// @Param   IndexCode   query   string  false       "指标唯一编码"
+// @Param   ClassifyId   query   string  true       "分类"
+// @Param   Frequency   query   string  true       "频度"
+// @Param   UnitName   query   string  false       "单位"
+// @Param   ModifyTime   query   string  false       "更新时间"
+// @Success 200  导出成功
+// @router /export/sciHqList [get]
+func (this *SciHqDataController) ExportSciHqList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请重新登录"
+		return
+	}
+
+	//typeName := this.GetString("TypeName") //分类
+	//frequency := this.GetString("Frequency")
+
+	indexCode := this.GetString("IndexCode") //指标唯一编码
+	classifyId, _ := this.GetInt("ClassifyId")
+	secNameList := make([]*models.EdbdataExportList, 0)
+
+	dir, _ := os.Executable()
+	exPath := filepath.Dir(dir)
+
+	downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
+	xlsxFile := xlsx.NewFile()
+
+	if classifyId >= 0 && indexCode == "" {
+
+		frequencies, err := data_manage.GetSciHqFrequency(classifyId)
+		if err != nil {
+			fmt.Println("GetSciFrequency err:", err.Error())
+			utils.FileLog.Info("GetSciFrequency err:" + err.Error())
+			return
+		}
+		for _, frequency := range frequencies {
+
+			//获取指标
+			var pars []interface{}
+			pars = append(pars, classifyId)
+			pars = append(pars, frequency)
+			condition := " AND classify_id=? AND frequency=? "
+			secNameList, err := data_manage.GetSciHqIndexByCondition(condition, pars)
+			if err != nil {
+				fmt.Println("获取数据失败,Err:" + err.Error())
+				return
+			}
+			if len(secNameList) <= 0 {
+				fmt.Println("secNameList长度为0")
+				return
+			}
+			sheetNew, err := xlsxFile.AddSheet(*frequency)
+
+			if err != nil {
+				fmt.Println("新增Sheet失败", err.Error())
+				return
+			}
+			//sheetNew.SetColWidth()
+			//获取指标数据
+			windRow := sheetNew.AddRow()
+			secNameRow := sheetNew.AddRow()
+			indexCodeRow := sheetNew.AddRow()
+			frequencyRow := sheetNew.AddRow()
+			unitRow := sheetNew.AddRow()
+			lastModifyDateRow := sheetNew.AddRow()
+			//获取分类下指标最大数据量
+			dataMax, err := data_manage.GetSciHqDataMaxCount(classifyId)
+			if err != nil {
+				fmt.Println("获取指标最大数据量失败", err.Error())
+				return
+			}
+			fmt.Println("dataMax:", dataMax)
+			setRowIndex := 6
+			for k, sv := range secNameList {
+				//获取数据
+				dataList, err := data_manage.GetSciIndexDataByCode(sv.IndexCode)
+				if err != nil {
+					br.Msg = "获取数据失败"
+					br.ErrMsg = "获取数据失败,Err:" + err.Error()
+					return
+				}
+				if len(dataList) > 0 {
+					windRow.AddCell().SetValue("Sci")
+					secNameRow.AddCell().SetValue("指标名称")
+					indexCodeRow.AddCell().SetValue("指标ID")
+					frequencyRow.AddCell().SetValue("频率")
+					unitRow.AddCell().SetValue("单位")
+					lastModifyDateRow.AddCell().SetValue("更新时间")
+
+					secNameRow.AddCell().SetValue(sv.IndexName)
+					indexCodeRow.AddCell().SetValue(sv.IndexCode)
+					frequencyRow.AddCell().SetValue(sv.Frequency)
+
+					unitRow.AddCell().SetValue(sv.Unit)
+					lastModifyDateRow.AddCell().SetValue(sv.ModifyTime)
+
+					windRow.AddCell()
+					windRow.AddCell()
+					secNameRow.AddCell()
+					indexCodeRow.AddCell()
+					frequencyRow.AddCell()
+					unitRow.AddCell()
+					lastModifyDateRow.AddCell()
+					min := k * 3
+					sheetNew.SetColWidth(min, min, 15)
+
+					if len(dataList) <= 0 {
+						for n := 0; n < dataMax; n++ {
+							rowIndex := setRowIndex + n
+							row := sheetNew.Row(rowIndex)
+							row.AddCell()
+							row.AddCell()
+							row.AddCell()
+						}
+					} else {
+						endRowIndex := 0
+						for rk, dv := range dataList {
+							rowIndex := setRowIndex + rk
+							row := sheetNew.Row(rowIndex)
+							displayDate, _ := time.Parse(utils.FormatDate, dv.DataTime)
+							displayDateCell := row.AddCell()
+							style := new(xlsx.Style)
+							style.ApplyAlignment = true
+							style.Alignment.WrapText = true
+							displayDateCell.SetStyle(style)
+							displayDateCell.SetDate(displayDate)
+
+							row.AddCell().SetValue(dv.Value)
+							row.AddCell()
+							endRowIndex = rowIndex
+						}
+						if len(dataList) < dataMax {
+							dataLen := dataMax - len(dataList)
+							for n := 0; n < dataLen; n++ {
+								rowIndex := (endRowIndex + 1) + n
+								row := sheetNew.Row(rowIndex)
+								row.AddCell()
+								row.AddCell()
+								row.AddCell()
+							}
+						}
+					}
+				}
+			}
+		}
+	} else {
+		frequencies, err := data_manage.GetSciHqFrequencyByCode(indexCode)
+		if err != nil {
+			fmt.Println("GetSciFrequencyByCode err:", err.Error())
+			utils.FileLog.Info("GetSciFrequencyByCode err:" + err.Error())
+			return
+		}
+		for _, frequency := range frequencies {
+			//获取数据
+			dataList, err := data_manage.GetSciHqIndexDataByCode(indexCode)
+			if err != nil {
+				br.Msg = "获取数据失败"
+				br.ErrMsg = "获取数据失败,Err:" + err.Error()
+				return
+			}
+			if len(dataList) > 0 {
+				name := this.GetString("IndexName")
+				unit := this.GetString("UnitName")
+				modifyTime := this.GetString("ModifyTime")
+
+				sheet, err := xlsxFile.AddSheet(*frequency)
+				if err != nil {
+					br.Msg = "新增Sheet失败"
+					br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
+					return
+				}
+				//获取指标数据
+				windRow := sheet.AddRow()
+				windRow.AddCell().SetValue("Sci")
+				rowSecName := sheet.AddRow()
+				celSecName := rowSecName.AddCell()
+				celSecName.SetValue("指标名称")
+				cellSenName := rowSecName.AddCell()
+				cellSenName.SetValue(name)
+				indexCodeRow := sheet.AddRow()
+				indexCodeRow.AddCell().SetValue("指标ID")
+				indexCodeRow.AddCell().SetValue(indexCode)
+
+				rowFrequency := sheet.AddRow()
+				celFrequency := rowFrequency.AddCell()
+				celFrequency.SetValue("频率")
+				cellFrequency := rowFrequency.AddCell()
+				cellFrequency.SetValue(frequency)
+
+				rowUnit := sheet.AddRow()
+				celUnit := rowUnit.AddCell()
+				celUnit.SetValue("单位")
+				cellUnit := rowUnit.AddCell()
+				cellUnit.SetValue(unit)
+
+				rowModifyDate := sheet.AddRow()
+				rowModifyCell := rowModifyDate.AddCell()
+				rowModifyCell.SetValue("更新时间")
+				rowModifyCell = rowModifyDate.AddCell()
+				rowModifyCell.SetValue(modifyTime)
+				dataMax, err := data_manage.GetSciHqIndexDataCount(indexCode)
+				if len(dataList) <= 0 {
+					for n := 0; n < dataMax; n++ {
+						rowIndex := 6 + n
+						row := sheet.Row(rowIndex)
+						row.AddCell()
+						row.AddCell()
+						row.AddCell()
+					}
+				} else {
+					endRowIndex := 0
+					for rk, dv := range dataList {
+						rowIndex := 6 + rk
+						row := sheet.Row(rowIndex)
+						displayDate, _ := time.Parse(utils.FormatDate, dv.DataTime)
+						displayDateCell := row.AddCell()
+						style := new(xlsx.Style)
+						style.ApplyAlignment = true
+						style.Alignment.WrapText = true
+						displayDateCell.SetStyle(style)
+						displayDateCell.SetDate(displayDate)
+
+						row.AddCell().SetValue(dv.Value)
+						row.AddCell()
+						endRowIndex = rowIndex
+					}
+					if len(dataList) < dataMax {
+						dataLen := dataMax - len(dataList)
+						for n := 0; n < dataLen; n++ {
+							rowIndex := (endRowIndex + 1) + n
+							row := sheet.Row(rowIndex)
+							row.AddCell()
+							row.AddCell()
+							row.AddCell()
+						}
+					}
+				}
+			}
+		}
+	}
+
+	err := xlsxFile.Save(downLoadnFilePath)
+	if err != nil {
+		//有指标无数据时先导出一遍空表
+		sheet, err := xlsxFile.AddSheet("无数据")
+		if err != nil {
+			br.Msg = "新增Sheet失败"
+			br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
+			return
+		}
+		rowSecName := sheet.AddRow()
+		celSecName := rowSecName.AddCell()
+		celSecName.SetValue("")
+		err = xlsxFile.Save(downLoadnFilePath)
+		if err != nil {
+			br.Msg = "保存文件失败"
+			br.ErrMsg = "保存文件失败"
+			return
+		}
+	}
+	fileName := `卓创红期`
+	if len(secNameList) > 0 {
+		fileName = secNameList[0].ClassifyName
+	}
+	fileName += time.Now().Format("2006.01.02") + `.xlsx` //文件名称
+	this.Ctx.Output.Download(downLoadnFilePath, fileName)
+	defer func() {
+		os.Remove(downLoadnFilePath)
+	}()
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "success"
+}
+
 // getSciHqClassifyTree 返回卓创红旗的树形结构
 func getSciHqClassifyTree(items []*data_manage.BaseFromSciHqClassifyItem, parentId int) []*data_manage.BaseFromSciHqClassifyItem {
 	res := make([]*data_manage.BaseFromSciHqClassifyItem, 0)

+ 3 - 2
models/data_manage/base_from_sci.go

@@ -1,10 +1,11 @@
 package data_manage
 
 import (
-	"fmt"
-	"github.com/beego/beego/v2/client/orm"
 	"eta/eta_api/utils"
+	"fmt"
 	"time"
+
+	"github.com/beego/beego/v2/client/orm"
 )
 
 type BaseFromSci struct {

+ 8 - 3
models/data_manage/base_from_sci_hq_classify.go

@@ -31,20 +31,25 @@ type BaseFromSciHqClassifyItem struct {
 	Children       []*BaseFromSciHqClassifyItem `description:"子分类"`
 }
 
+type BaseFromSciHqClassifyMaxSort struct {
+	ClassifyId int `description:"分类id"`
+	MaxSort    int `description:"最大排序"`
+}
+
 func (t *BaseFromSciHqClassify) Add() (insertId int64, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("data")
 	insertId, err = o.Insert(t)
 	return
 }
 
 func (t *BaseFromSciHqClassify) Update(cols []string) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("data")
 	_, err = o.Update(t, cols...)
 	return
 }
 
 func BatchAddSciHqClassify(items []*BaseFromSciHqClassify) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("data")
 	_, err = o.InsertMulti(len(items), items)
 	return
 }

+ 7 - 0
models/data_manage/base_from_sci_hq_data.go

@@ -31,3 +31,10 @@ func GetSciHqIndexDataByCode(indexCode string) (items []*BaseFromSciHqData, err
 	_, err = o.Raw(sql, indexCode).QueryRows(&items)
 	return
 }
+
+func GetSciHqIndexDataCount(indexCode string) (count int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT COUNT(1) AS count  FROM base_from_sci_hq_data WHERE index_code=? `
+	err = o.Raw(sql, indexCode).QueryRow(&count)
+	return
+}

+ 86 - 3
models/data_manage/base_from_sci_hq_index.go

@@ -51,7 +51,7 @@ func GetSciHqIndexByCondition(condition string, pars []interface{}) (items []*Ba
 	if condition != "" {
 		sql += condition
 	}
-	sql += ` ORDER BY sort ASC `
+	sql += ` ORDER BY sort ASC, base_from_sci_hq_index_id ASC`
 	_, err = o.Raw(sql, pars).QueryRows(&items)
 	return
 }
@@ -96,6 +96,18 @@ func GetSciHqIndexListByIndexIds(indexIds []int) (items []*BaseFromSciHqIndex, e
 	return
 }
 
+// GetSciHqIndexCountByClassifyIds 获取分类下指标的个数
+func GetSciHqIndexCountByClassifyIds(classifyIds []int) (count int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	num := len(classifyIds)
+	if num <= 0 {
+		return
+	}
+	sql := `SELECT COUNT(1) AS count FROM base_from_sci_hq_index WHERE classify_id IN (` + utils.GetOrmInReplace(num) + `) `
+	err = o.Raw(sql, classifyIds).QueryRow(&count)
+	return
+}
+
 // GetSciHqIndexByClassifyId 根据分类id获取卓创红期指标列表
 func GetSciHqIndexByClassifyId(classifyId, startSize, pageSize int) (items []*BaseFromSciHqIndex, err error) {
 	o := orm.NewOrmUsingDB("data")
@@ -108,7 +120,22 @@ func GetSciHqIndexByClassifyId(classifyId, startSize, pageSize int) (items []*Ba
 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)
+	err = o.Raw(sql, classifyId).QueryRow(&count)
+	return
+}
+
+// GetSciHqIndexCount 获取卓创红期指标数量
+func GetSciHqIndexCount() (count int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT COUNT(*) AS count FROM base_from_sci_hq_index `
+	err = o.Raw(sql).QueryRow(&count)
+	return
+}
+
+func GetSciHqIndexByPage(startSize, pageSize int) (items []*BaseFromSciHqIndex, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT * FROM base_from_sci_hq_index ORDER BY modify_time DESC LIMIT ?,?`
+	_, err = o.Raw(sql, startSize, pageSize).QueryRows(&items)
 	return
 }
 
@@ -132,14 +159,70 @@ func GetSciHqIndexBaseInfoByCondition(condition string, pars []interface{}) (ite
 	return
 }
 
+func GetSciHqDataMaxCount(classifyId int) (count int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT MAX(t.num) AS count FROM (
+				SELECT COUNT(1) AS num  FROM base_from_sci_hq_index AS a
+				INNER JOIN base_from_sci_hq_data AS b ON a.index_code=b.index_code
+				WHERE a.classify_id=?
+				GROUP BY a.base_from_sci_index_id
+			)AS t `
+	err = o.Raw(sql, classifyId).QueryRow(&count)
+	return
+}
+
 // GetSciHqIndexMaxSortByClassifyId 根据分类id获取指标最大排序
 func GetSciHqIndexMaxSortByClassifyId(classifyId int) (sort int, err error) {
 	o := orm.NewOrmUsingDB("data")
-	sql := `SELECT max(sort) FROM base_from_sci_index WHERE classify_id=? `
+	sql := `SELECT MAX(sort) FROM base_from_sci_index WHERE classify_id=? `
 	err = o.Raw(sql, classifyId).QueryRow(&sort)
 	return
 }
 
+func GetSciHqFrequency(classifyId int) (items []*string, err error) {
+	sql := `SELECT DISTINCT frequency FROM base_from_sci_hq_index WHERE classify_id=? ORDER BY FIELD(frequency,'日度','周度','月度','季度','半年','年度') `
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Raw(sql, classifyId).QueryRows(&items)
+	return
+}
+
+func GetSciHqFrequencyByCode(code string) (items []*string, err error) {
+	sql := `SELECT DISTINCT frequency FROM base_from_sci_hq_index WHERE index_code=? ORDER BY FIELD(frequency,'日度','周度','月度','季度','半年','年度') `
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Raw(sql, code).QueryRows(&items)
+	return
+}
+
+// GetSciHqClassifyMaxSortByClassifyIds 通过分类id获取对应分类的最大sort
+func GetSciHqClassifyMaxSortByClassifyIds(classifyIds []int) (items []*BaseFromSciHqClassifyMaxSort, err error) {
+	if len(classifyIds) == 0 {
+		return
+	}
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT classify_id, MAX(sort) AS max_sort FROM base_from_sci_hq_index WHERE classify_id IN (` + utils.GetOrmInReplace(len(classifyIds)) + `) GROUP BY classify_id `
+	err = o.Raw(sql, classifyIds).QueryRow(&items)
+	return
+}
+
+func BatchModifySciHqIndexClassify(items []*BaseFromSciHqIndex) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `UPDATE base_from_sci_hq_index SET classify_id=?, sort=? WHERE base_from_sci_hq_index_id=? `
+	p, err := o.Raw(sql).Prepare()
+	if err != nil {
+		return
+	}
+	defer func() {
+		p.Close()
+	}()
+	for _, v := range items {
+		_, err = p.Exec(v.ClassifyId, v.Sort, v.BaseFromSciHqIndexId)
+		if err != nil {
+			return
+		}
+	}
+	return
+}
+
 // MoveDownSciHqIndexBySort 往下移动
 func MoveDownSciHqIndexBySort(classifyId, prevSort, currentSort int) (err error) {
 	o := orm.NewOrmUsingDB("data")

+ 5 - 1
models/db.go

@@ -24,9 +24,10 @@ import (
 	"eta/eta_api/models/system"
 	"eta/eta_api/models/yb"
 	"eta/eta_api/utils"
-	_ "github.com/go-sql-driver/mysql"
 	"time"
 
+	_ "github.com/go-sql-driver/mysql"
+
 	"github.com/beego/beego/v2/client/orm"
 )
 
@@ -348,6 +349,9 @@ func initEdbData() {
 		new(data_manage.BaseFromThsHfClassify),
 		new(data_manage.BaseFromEdbMapping),
 		new(data_manage.EdbInfoRelation), //指标关系表
+		new(data_manage.BaseFromSciHqClassify),
+		new(data_manage.BaseFromSciHqIndex),
+		new(data_manage.BaseFromSciHqData),
 	)
 }
 

+ 171 - 0
routers/commentsRouter.go

@@ -5254,6 +5254,177 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"],
+        beego.ControllerComments{
+            Method: "ExportSciHqList",
+            Router: `/export/sciHqList`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"],
+        beego.ControllerComments{
+            Method: "Classify",
+            Router: `/sci_hq/classify`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"],
+        beego.ControllerComments{
+            Method: "AddClassify",
+            Router: `/sci_hq/classify/add`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"],
+        beego.ControllerComments{
+            Method: "DelClassify",
+            Router: `/sci_hq/classify/del`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"],
+        beego.ControllerComments{
+            Method: "EditClassify",
+            Router: `/sci_hq/classify/edit`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"],
+        beego.ControllerComments{
+            Method: "MoveClassify",
+            Router: `/sci_hq/classify/move`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"],
+        beego.ControllerComments{
+            Method: "DeleteSciHqData",
+            Router: `/sci_hq/del`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"],
+        beego.ControllerComments{
+            Method: "AddEdbInfo",
+            Router: `/sci_hq/edb_info/add`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"],
+        beego.ControllerComments{
+            Method: "AddCheck",
+            Router: `/sci_hq/edb_info/add_check`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"],
+        beego.ControllerComments{
+            Method: "BatchAdd",
+            Router: `/sci_hq/edb_info/batch_add`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"],
+        beego.ControllerComments{
+            Method: "BatchDelete",
+            Router: `/sci_hq/edb_info/batch_delete`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"],
+        beego.ControllerComments{
+            Method: "BatchEdit",
+            Router: `/sci_hq/edb_info/batch_edit`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"],
+        beego.ControllerComments{
+            Method: "NameCheck",
+            Router: `/sci_hq/edb_info/name_check`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"],
+        beego.ControllerComments{
+            Method: "EditSciHq",
+            Router: `/sci_hq/edit`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"],
+        beego.ControllerComments{
+            Method: "IndexList",
+            Router: `/sci_hq/index/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"],
+        beego.ControllerComments{
+            Method: "IndexPageList",
+            Router: `/sci_hq/index/page/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"],
+        beego.ControllerComments{
+            Method: "ResetSciHqIndex",
+            Router: `/sci_hq/reset`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"],
+        beego.ControllerComments{
+            Method: "SearchList",
+            Router: `/sci_hq/search_list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:SciHqDataController"],
+        beego.ControllerComments{
+            Method: "SingleData",
+            Router: `/sci_hq/single_data`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_api/controllers/data_source:DataSourceController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_source:DataSourceController"],
         beego.ControllerComments{
             Method: "GfexClassifyList",

+ 2 - 0
routers/router.go

@@ -31,6 +31,7 @@ import (
 	"eta/eta_api/controllers/smart_report"
 	"eta/eta_api/controllers/speech_recognition"
 	"eta/eta_api/controllers/trade_analysis"
+
 	"github.com/beego/beego/v2/server/web"
 	"github.com/beego/beego/v2/server/web/filter/cors"
 )
@@ -173,6 +174,7 @@ func init() {
 				&data_manage.BaseFromThsHfController{},
 				&data_manage.EdbInfoRelationController{},
 				&data_manage.FactorEdbSeriesController{},
+				&data_manage.SciHqDataController{},
 			),
 		),
 		web.NSNamespace("/my_chart",

+ 27 - 9
services/data/base_from_sci_hq.go

@@ -114,16 +114,17 @@ func DelSciHqClassify(classifyId int) (err error) {
 		return
 	}
 	var classifyIds []int
+	classifyIds = append(classifyIds, classify.ClassifyId)
 	if classify.ParentId == 0 {
-		classifyIds, err = data_manage.GetChildSciHqClassifyIdsById(classify.ClassifyId)
-		if err != nil {
+		tmpClassifyIds, er := data_manage.GetChildSciHqClassifyIdsById(classify.ClassifyId)
+		if er != nil {
+			err = er
 			return
 		}
-	} else {
-		classifyIds = append(classifyIds, classify.ClassifyId)
+		classifyIds = append(classifyIds, tmpClassifyIds...)
 	}
 	// 获取分类下的所有指标
-	count, err := data_manage.GetBaseFromSciIndexCountByClassifyIds(classifyIds)
+	count, err := data_manage.GetSciHqIndexCountByClassifyIds(classifyIds)
 	if err != nil {
 		err = errors.New("获取分类下的指标信息失败,Err:" + err.Error())
 		return
@@ -251,19 +252,36 @@ func DelSciHqData(indexId int) (err error, errMsg string) {
 }
 
 // EditSciHqIndex 编辑卓创红期指标
-func EditSciHqIndex(indexId, classifyId int) (baseFromSciHqIndex *data_manage.BaseFromSciHqIndex, err error) {
+func EditSciHqIndex(indexId, classifyId int) (baseFromSciHqIndex *data_manage.BaseFromSciHqIndex, errMsg string, err error) {
 	baseFromSciHqIndex, err = data_manage.GetSciHqIndexByIndexId(indexId)
+	if err != nil {
+		if err.Error() == utils.ErrNoRow() {
+			errMsg = `该指标未入库`
+			err = nil
+		}
+		return
+	}
+	_, err = data_manage.GetSciHqClassifyById(classifyId)
+	if err != nil {
+		if err.Error() == utils.ErrNoRow() {
+			errMsg = `该分类不存在或已删除`
+			err = nil
+		}
+		return
+	}
+	maxSort, err := data_manage.GetChildSciHqClassifyMaxSortById(classifyId)
 	if err != nil {
 		return
 	}
 
 	baseFromSciHqIndex.ClassifyId = classifyId
+	baseFromSciHqIndex.Sort = maxSort + 1
 	baseFromSciHqIndex.ModifyTime = time.Now()
-	err = baseFromSciHqIndex.Update([]string{"ClassifyId", "ModifyTime"})
+	err = baseFromSciHqIndex.Update([]string{"classify_id", "sort", "modify_time"})
 	return
 }
 
-type SciIndexSource2EdbReq struct {
+type SciHqIndexSource2EdbReq struct {
 	EdbCode       string
 	EdbName       string
 	Frequency     string
@@ -274,7 +292,7 @@ type SciIndexSource2EdbReq struct {
 }
 
 // SciHqIndexSource2Edb 新增卓创红期数据从数据源到指标库
-func SciHqIndexSource2Edb(req SciIndexSource2EdbReq, lang string) (edb *data_manage.EdbInfo, errMsg string, skip bool, err error) {
+func SciHqIndexSource2Edb(req SciHqIndexSource2EdbReq, lang string) (edb *data_manage.EdbInfo, errMsg string, skip bool, err error) {
 	if req.EdbCode == "" {
 		err = fmt.Errorf("指标ID为空")
 		return