zqbao 7 місяців тому
батько
коміт
ef489384c5

+ 237 - 173
controllers/data_manage/sci_hq_data.go

@@ -252,6 +252,28 @@ func (this *SciHqDataController) MoveClassify() {
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
 		return
 	}
+	if req.ClassifyId <= 0 {
+		br.Msg = "参数错误"
+		br.ErrMsg = "分类id小于等于0"
+		br.IsSendEmail = false
+		return
+	}
+
+	err, errMsg := data.MoveSciHqClassify(req.ClassifyId, req.ParentId, req.PrevClassifyId, req.NextClassifyId)
+	if errMsg != `` {
+		br.Msg = errMsg
+		br.ErrMsg = errMsg
+		if err != nil {
+			br.ErrMsg = err.Error()
+		} else {
+			br.IsSendEmail = false
+		}
+		return
+	}
+	br.Ret = 200
+	br.Success = true
+	br.IsAddLog = true
+	br.Msg = "移动成功"
 }
 
 // IndexList
@@ -280,6 +302,70 @@ func (this *SciHqDataController) IndexList() {
 	br.Data = indexList
 }
 
+// BatchIndexList
+// @Title 卓创红期批量操作指标列表
+// @Description 卓创红期批量操作指标列表
+// @Param   request	body   request.SciHqDataBatchListReq true "type json string"
+// @Success 200 {object} data_manage.BaseFromMysteelChemicalIndexResp
+// @router /sci_hq/index/batch_list [post]
+func (this *SciHqDataController) BatchIndexList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	var req request.SciHqDataBatchListReq
+	if err := json.Unmarshal(this.Ctx.Input.RequestBody, &req); err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	var condition string
+	var pars []interface{}
+	if req.KeyWord != "" {
+		condition += `AND (index_code=? OR index_name=?)`
+		pars = utils.GetLikeKeywordPars(pars, req.KeyWord, 2)
+	}
+	if req.IsSelectAll {
+		if len(req.SelectedId) > 0 {
+			condition += ` AND base_from_sci_hq_index_id NOT IN (` + utils.GetOrmInReplace(len(req.SelectedId)) + `)`
+			pars = append(pars, req.SelectedId)
+		}
+	} else {
+		if len(req.SelectedId) > 0 {
+			condition += ` AND base_from_sci_hq_index_id IN (` + utils.GetOrmInReplace(len(req.SelectedId)) + `)`
+			pars = append(pars, req.SelectedId)
+		}
+	}
+	if req.ClassifyId >= 0 {
+		condition += ` AND classify_id=?`
+		pars = append(pars, req.ClassifyId)
+	}
+
+	count, err := data_manage.GetSciHqIndexCountByCondition(condition, pars)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
+		return
+	}
+	MaxLen := 30
+	if count > MaxLen {
+		br.Msg = "批量操作数量不能超过" + strconv.Itoa(MaxLen)
+		return
+	}
+	indexList, err := data_manage.GetSciHqIndexByCondition(condition, pars)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = indexList
+}
+
 // IndexPageList
 // @Title 卓创红期指标列表
 // @Description 卓创红期数据指标列表接口
@@ -432,6 +518,65 @@ func (this *SciHqDataController) SingleData() {
 	br.Data = ret
 }
 
+// MoveSciHqData
+// @Title 卓创红期指标移动接口
+// @Description 卓创红期指标移动接口
+// @Success 200 {object} request.MoveBaseFromSciHqReq
+// @router /sci_hq/move [post]
+func (this *SciHqDataController) MoveSciHqData() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	var req request.MoveBaseFromSciHqReq
+	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.ErrMsg = "指标id小于等于0"
+		br.IsSendEmail = false
+		return
+	}
+
+	if req.ClassifyId < 0 {
+		br.Msg = "请选择分类"
+		br.ErrMsg = "请选择分类"
+		br.IsSendEmail = false
+		return
+	}
+
+	err, errMsg := data.MoveSciHqData(req.BaseFromSciHqIndexId, req.ClassifyId, req.PrevBaseFromSciHqIndexId, req.NextBaseFromSciHqIndexId)
+	if errMsg != `` {
+		br.Msg = errMsg
+		br.ErrMsg = errMsg
+		if err != nil {
+			br.ErrMsg = err.Error()
+		} else {
+			br.IsSendEmail = false
+		}
+		return
+	}
+	br.Ret = 200
+	br.Success = true
+	br.IsAddLog = true
+	br.Msg = "移动成功"
+}
+
 // ResetSciHqIndex
 // @Title 指标数据清除分类
 // @Description 指标数据清除分类
@@ -1119,6 +1264,7 @@ func (this *SciHqDataController) EditSciHq() {
 	sciIndexInfo, errMsg, err := data.EditSciHqIndex(req.BaseFromSciHqIndexId, req.ClassifyId)
 	if errMsg != `` {
 		br.Msg = errMsg
+		return
 	}
 	if err != nil {
 		br.Msg = "编辑失败"
@@ -1184,14 +1330,9 @@ func (this *SciHqDataController) DeleteSciHqData() {
 // 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       "更新时间"
+// @Param   request	body request.ExportSciHqExcelReq true "type json string"
 // @Success 200  导出成功
-// @router /export/sciHqList [get]
+// @router /export/sciHqList [post]
 func (this *SciHqDataController) ExportSciHqList() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
@@ -1207,9 +1348,12 @@ func (this *SciHqDataController) ExportSciHqList() {
 
 	//typeName := this.GetString("TypeName") //分类
 	//frequency := this.GetString("Frequency")
-
-	indexCode := this.GetString("IndexCode") //指标唯一编码
-	classifyId, _ := this.GetInt("ClassifyId")
+	var req request.ExportSciHqExcelReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + e.Error()
+		return
+	}
 	secNameList := make([]*models.EdbdataExportList, 0)
 
 	dir, _ := os.Executable()
@@ -1218,184 +1362,104 @@ func (this *SciHqDataController) ExportSciHqList() {
 	downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
 	xlsxFile := xlsx.NewFile()
 
-	if classifyId >= 0 && indexCode == "" {
+	var condition string
+	var pars []interface{}
+	if req.KeyWord != "" {
+		condition += `AND (index_code=? OR index_name=?)`
+		pars = utils.GetLikeKeywordPars(pars, req.KeyWord, 2)
+	}
+	if req.IsSelectedAll {
+		if len(req.IndexCode) > 0 {
+			condition += ` AND index_code NOT IN (` + utils.GetOrmInReplace(len(req.IndexCode)) + `)`
+			pars = append(pars, req.IndexCode)
+		}
+	} else {
+		if len(req.IndexCode) > 0 {
+			condition += ` AND index_code IN (` + utils.GetOrmInReplace(len(req.IndexCode)) + `)`
+			pars = append(pars, req.IndexCode)
+		}
+	}
+	if req.ClassifyId >= 0 {
+		condition += ` AND classify_id=?`
+		pars = append(pars, req.ClassifyId)
+	}
+	frequencies, err := data_manage.GetSciHqFrequencyByCondition(condition, pars)
+	if err != nil {
+		fmt.Println("GetSciFrequency err:", err.Error())
+		utils.FileLog.Info("GetSciFrequency err:" + err.Error())
+		return
+	}
+	for _, frequency := range frequencies {
 
-		frequencies, err := data_manage.GetSciHqFrequency(classifyId)
+		//获取指标
+		secNameList, err := data_manage.GetSciHqIndexByConditionAndFrequency(condition, *frequency, pars)
 		if err != nil {
-			fmt.Println("GetSciFrequency err:", err.Error())
-			utils.FileLog.Info("GetSciFrequency err:" + err.Error())
+			fmt.Println("获取数据失败,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 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()
-							}
-						}
-					}
-				}
-			}
+		if err != nil {
+			fmt.Println("新增Sheet失败", err.Error())
+			return
 		}
-	} else {
-		frequencies, err := data_manage.GetSciHqFrequencyByCode(indexCode)
+		//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(req.ClassifyId)
 		if err != nil {
-			fmt.Println("GetSciFrequencyByCode err:", err.Error())
-			utils.FileLog.Info("GetSciFrequencyByCode err:" + err.Error())
+			fmt.Println("获取指标最大数据量失败", err.Error())
 			return
 		}
-		for _, frequency := range frequencies {
+		fmt.Println("dataMax:", dataMax)
+		setRowIndex := 6
+		for k, sv := range secNameList {
 			//获取数据
-			dataList, err := data_manage.GetSciHqIndexDataByCode(indexCode)
+			dataList, err := data_manage.GetSciHqIndexDataByCode(sv.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()
+				windRow.AddCell().SetValue("Sci_Hq")
+				secNameRow.AddCell().SetValue("指标名称")
 				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)
+				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 := 6 + n
-						row := sheet.Row(rowIndex)
+						rowIndex := setRowIndex + n
+						row := sheetNew.Row(rowIndex)
 						row.AddCell()
 						row.AddCell()
 						row.AddCell()
@@ -1403,8 +1467,8 @@ func (this *SciHqDataController) ExportSciHqList() {
 				} else {
 					endRowIndex := 0
 					for rk, dv := range dataList {
-						rowIndex := 6 + rk
-						row := sheet.Row(rowIndex)
+						rowIndex := setRowIndex + rk
+						row := sheetNew.Row(rowIndex)
 						displayDate, _ := time.Parse(utils.FormatDate, dv.DataTime)
 						displayDateCell := row.AddCell()
 						style := new(xlsx.Style)
@@ -1421,7 +1485,7 @@ func (this *SciHqDataController) ExportSciHqList() {
 						dataLen := dataMax - len(dataList)
 						for n := 0; n < dataLen; n++ {
 							rowIndex := (endRowIndex + 1) + n
-							row := sheet.Row(rowIndex)
+							row := sheetNew.Row(rowIndex)
 							row.AddCell()
 							row.AddCell()
 							row.AddCell()
@@ -1432,7 +1496,7 @@ func (this *SciHqDataController) ExportSciHqList() {
 		}
 	}
 
-	err := xlsxFile.Save(downLoadnFilePath)
+	err = xlsxFile.Save(downLoadnFilePath)
 	if err != nil {
 		//有指标无数据时先导出一遍空表
 		sheet, err := xlsxFile.AddSheet("无数据")

+ 26 - 2
models/data_manage/base_from_sci_hq_classify.go

@@ -57,7 +57,7 @@ func BatchAddSciHqClassify(items []*BaseFromSciHqClassify) (err error) {
 // 获取所有分类
 func GetSciHqClassifyAll() (items []*BaseFromSciHqClassifyItem, err error) {
 	o := orm.NewOrmUsingDB("data")
-	sql := ` SELECT * FROM base_from_sci_hq_classify `
+	sql := ` SELECT * FROM base_from_sci_hq_classify ORDER BY sort ASC, classify_id ASC`
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
@@ -109,7 +109,7 @@ func GetSciHqClassifyListByIds(classifyIds []int) (items []*BaseFromSciHqClassif
 	}
 	o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM base_from_sci_hq_classify WHERE classify_id IN (` + utils.GetOrmInReplace(len(classifyIds)) + `)`
-	err = o.Raw(sql, classifyIds).QueryRow(&items)
+	_, err = o.Raw(sql, classifyIds).QueryRows(&items)
 	return
 }
 
@@ -182,3 +182,27 @@ func DeleteSciHqClassifyByClassifyId(classifyIdList []int) (err error) {
 	_, err = o.Raw(sql, classifyIdList).Exec()
 	return
 }
+
+// GetSciHqIndexClassifyMinSort 获取最小不等于0的排序
+func GetSciHqIndexClassifyMinSort(parentId int) (sort int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT MIN(sort) FROM base_from_sci_hq_classify WHERE parent_id=? AND sort <> 0 `
+	err = o.Raw(sql, parentId).QueryRow(&sort)
+	return
+}
+
+// MoveUpSciHqIndexClassifyBySort 往上移动
+func MoveUpSciHqIndexClassifyBySort(parentId, nextSort, currentSort int) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `update base_from_sci_hq_classify set sort = sort + 1 where parent_id=? and sort >= ? and sort< ?`
+	_, err = o.Raw(sql, parentId, nextSort, currentSort).Exec()
+	return
+}
+
+// MoveDownSciHqIndexClassifyBySort 往下移动
+func MoveDownSciHqIndexClassifyBySort(parentId, prevSort, currentSort int) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `update base_from_sci_hq_classify set sort = sort - 1 where parent_id=? and sort <= ? and sort> ? `
+	_, err = o.Raw(sql, parentId, prevSort, currentSort).Exec()
+	return
+}

+ 73 - 3
models/data_manage/base_from_sci_hq_index.go

@@ -56,6 +56,32 @@ func GetSciHqIndexByCondition(condition string, pars []interface{}) (items []*Ba
 	return
 }
 
+// GetSciHqIndexByCondition 根据条件获取卓创红期指标列表
+func GetSciHqIndexByConditionAndFrequency(condition, frequency 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 += ` AND frequency=?`
+	sql += ` ORDER BY sort ASC, base_from_sci_hq_index_id ASC`
+	_, err = o.Raw(sql, pars, frequency).QueryRows(&items)
+	return
+}
+
+func GetSciHqIndexCountByCondition(condition string, pars []interface{}) (count int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT COUNT(*) AS count FROM base_from_sci_hq_index WHERE 1=1 `
+
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` ORDER BY sort ASC, base_from_sci_hq_index_id ASC`
+	err = o.Raw(sql, pars).QueryRow(&count)
+	return
+}
+
 // GetSciHqIndexAndEdbInfoByCondition 根据条件获取卓创红期index和指标库的信息
 func GetSciHqIndexAndEdbInfoByCondition(condition string, pars []interface{}) (items []*BaseFromSciHqIndexView, err error) {
 	o := orm.NewOrmUsingDB("data")
@@ -165,7 +191,7 @@ func GetSciHqDataMaxCount(classifyId int) (count int, err error) {
 				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
+				GROUP BY a.base_from_sci_hq_index_id
 			)AS t `
 	err = o.Raw(sql, classifyId).QueryRow(&count)
 	return
@@ -186,6 +212,17 @@ func GetSciHqFrequency(classifyId int) (items []*string, err error) {
 	return
 }
 
+func GetSciHqFrequencyByCondition(condition string, pars []interface{}) (items []*string, err error) {
+	sql := `SELECT DISTINCT frequency FROM base_from_sci_hq_index WHERE 1=1 `
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` ORDER BY FIELD(frequency,'日度','周度','月度','季度','半年','年度') `
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Raw(sql, pars...).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")
@@ -199,8 +236,14 @@ func GetSciHqClassifyMaxSortByClassifyIds(classifyIds []int) (items []*BaseFromS
 		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)
+	sql := `SELECT bc.classify_id, COALESCE(MAX(bi.sort), 0) AS max_sort FROM base_from_sci_hq_classify  AS bc
+	LEFT JOIN base_from_sci_hq_index AS bi
+	ON bc.classify_id=bi.classify_id  
+	WHERE bc.classify_id IN (` + utils.GetOrmInReplace(len(classifyIds)) + `)
+	GROUP BY bc.classify_id
+	`
+	// 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).QueryRows(&items)
 	return
 }
 
@@ -231,6 +274,14 @@ func MoveDownSciHqIndexBySort(classifyId, prevSort, currentSort int) (err error)
 	return
 }
 
+// MoveUpSciHqIndexBySort 往上移动
+func MoveUpSciHqIndexBySort(classifyId, nextSort, 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, nextSort, currentSort).Exec()
+	return
+}
+
 func DeleteSciHqIndexById(indexId int) (err error) {
 	o := orm.NewOrmUsingDB("data")
 	sql := `DELETE FROM base_from_sci_hq_index WHERE base_from_sci_hq_index_id=? `
@@ -247,3 +298,22 @@ func DeleteSciHqIndexByIds(indexIds []int) (err error) {
 	_, err = o.Raw(sql, indexIds).Exec()
 	return
 }
+
+// MoveSciHqIndex 移动指标分类
+func MoveSciHqIndex(indexId, classifyId int) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` UPDATE base_from_sci_hq_index
+			SET
+			  classify_id = ?, modify_time=NOW() 
+			WHERE base_from_sci_hq_index_id = ?`
+	_, err = o.Raw(sql, classifyId, indexId).Exec()
+	return
+}
+
+// GetSciHqIndexMinSortByClassifyId 获取最小不等于0的排序
+func GetSciHqIndexMinSortByClassifyId(classifyId int) (sort int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT min(sort) FROM base_from_sci_hq_index WHERE classify_id=? and sort <> 0 `
+	err = o.Raw(sql, classifyId).QueryRow(&sort)
+	return
+}

+ 1 - 1
models/data_manage/edb_info.go

@@ -174,7 +174,7 @@ func GetEdbInfoListByEdbCodes(source int, edbCodes []string) (items []*EdbInfo,
 	}
 	o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM edb_info WHERE source=? AND edb_code IN (` + utils.GetOrmInReplace(len(edbCodes)) + `) `
-	err = o.Raw(sql, source, edbCodes).QueryRow(&items)
+	_, err = o.Raw(sql, source, edbCodes).QueryRows(&items)
 	return
 }
 

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

@@ -38,6 +38,14 @@ type SciHqDataBatchAddCheckReq struct {
 	IndexCodes []string `description:"指标编码"`
 }
 
+// SciHqDataBatchListReq 卓创红期指标批量列表
+type SciHqDataBatchListReq struct {
+	ClassifyId  int    `description:"分类id"`
+	KeyWord     string `description:"关键字"`
+	SelectedId  []int  `description:"已选指标id, 为true时表示反选"`
+	IsSelectAll bool   `description:"是否查询全部, 默认false, true:全选, false:查询已选"`
+}
+
 // MoveBaseFromSciHqClassifyReq 移动分类请求参数
 type MoveBaseFromSciHqClassifyReq struct {
 	ClassifyId     int `description:"分类id"`
@@ -45,3 +53,19 @@ type MoveBaseFromSciHqClassifyReq struct {
 	PrevClassifyId int `description:"上一个兄弟节点分类id"`
 	NextClassifyId int `description:"下一个兄弟节点分类id"`
 }
+
+// MoveBaseFromSciHqReq 移动指标请求参数
+type MoveBaseFromSciHqReq struct {
+	ClassifyId               int `description:"分类id"`
+	BaseFromSciHqIndexId     int `description:"指标id"`
+	PrevBaseFromSciHqIndexId int `description:"上一个兄弟节点id"`
+	NextBaseFromSciHqIndexId int `description:"下一个兄弟节点id"`
+}
+
+// ExportSciHqExcelReq导出卓创红期excel指标
+type ExportSciHqExcelReq struct {
+	KeyWord       string   `description:"关键字, 指标编码或指标ID"`
+	IndexCode     []string `description:"指标编码,全选时,表示反选"`
+	IsSelectedAll bool     `description:"是否全选:true:全选|false: 无"`
+	ClassifyId    int      `description:"指标id"`
+}

+ 19 - 1
routers/commentsRouter.go

@@ -5258,7 +5258,7 @@ func init() {
         beego.ControllerComments{
             Method: "ExportSciHqList",
             Router: `/export/sciHqList`,
-            AllowHTTPMethods: []string{"get"},
+            AllowHTTPMethods: []string{"post"},
             MethodParams: param.Make(),
             Filters: nil,
             Params: nil})
@@ -5380,6 +5380,15 @@ 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: "BatchIndexList",
+            Router: `/sci_hq/index/batch_list`,
+            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",
@@ -5398,6 +5407,15 @@ 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: "MoveSciHqData",
+            Router: `/sci_hq/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: "ResetSciHqIndex",

+ 246 - 1
services/data/base_from_sci_hq.go

@@ -261,7 +261,7 @@ func EditSciHqIndex(indexId, classifyId int) (baseFromSciHqIndex *data_manage.Ba
 		}
 		return
 	}
-	_, err = data_manage.GetSciHqClassifyById(classifyId)
+	classify, err := data_manage.GetSciHqClassifyById(classifyId)
 	if err != nil {
 		if err.Error() == utils.ErrNoRow() {
 			errMsg = `该分类不存在或已删除`
@@ -269,6 +269,11 @@ func EditSciHqIndex(indexId, classifyId int) (baseFromSciHqIndex *data_manage.Ba
 		}
 		return
 	}
+	if classify.Level == 1 { // 顶级分类
+		errMsg = `不合法的编辑`
+		err = nil
+		return
+	}
 	maxSort, err := data_manage.GetChildSciHqClassifyMaxSortById(classifyId)
 	if err != nil {
 		return
@@ -332,3 +337,243 @@ func SciHqIndexSource2Edb(req SciHqIndexSource2EdbReq, lang string) (edb *data_m
 
 	return
 }
+
+// MoveSciHqClassify 移动卓创红期分类
+func MoveSciHqClassify(classifyId, parentClassifyId, prevClassifyId, nextClassifyId int) (err error, errMsg string) {
+	//判断分类是否存在
+	classifyInfo, err := data_manage.GetSciHqClassifyById(classifyId)
+	if err != nil {
+		errMsg = "移动失败"
+		err = errors.New("获取分类信息失败,Err:" + err.Error())
+		return
+	}
+
+	updateCol := make([]string, 0)
+
+	//判断上级id是否一致,如果不一致的话,那么需要移动该分类层级
+	if classifyInfo.ParentId != parentClassifyId && parentClassifyId != 0 {
+		parentClassifyInfo, tmpErr := data_manage.GetSciHqClassifyById(parentClassifyId)
+		if tmpErr != nil {
+			errMsg = "移动失败"
+			err = errors.New("获取上级分类信息失败,Err:" + tmpErr.Error())
+			return
+		}
+		classifyInfo.ParentId = parentClassifyInfo.ClassifyId
+		classifyInfo.Level = parentClassifyInfo.Level + 1
+		updateCol = append(updateCol, "ParentId", "Level")
+	}
+	var currentSort, prevSort, nextSort int
+	currentSort = classifyInfo.Sort
+
+	var prevClassify *data_manage.BaseFromSciHqClassify
+	var nextClassify *data_manage.BaseFromSciHqClassify
+	//如果有传入 上一个兄弟节点分类id
+	if prevClassifyId > 0 {
+		prevClassify, err = data_manage.GetSciHqClassifyById(prevClassifyId)
+		if err != nil {
+			if err.Error() == utils.ErrNoRow() {
+				errMsg = "移动失败"
+				err = errors.New("上一个兄弟节点分类信息不存在" + err.Error())
+				return
+			}
+			errMsg = "移动失败"
+			err = errors.New("获取上一个兄弟节点分类信息失败,Err:" + err.Error())
+			return
+		}
+		prevSort = prevClassify.Sort
+	}
+	if nextClassifyId > 0 {
+		//下一个兄弟节点
+		nextClassify, err = data_manage.GetSciHqClassifyById(nextClassifyId)
+		if err != nil {
+			if err.Error() == utils.ErrNoRow() {
+				errMsg = "移动失败"
+				err = errors.New("下一个兄弟节点分类信息不存在" + err.Error())
+				return
+			}
+			errMsg = "移动失败"
+			err = errors.New("获取下一个兄弟节点分类信息失败,Err:" + err.Error())
+			return
+		}
+		nextSort = nextClassify.Sort
+	}
+	// 修改历史数据中的排序为0的情况
+	if prevSort == 0 && nextSort == 0 { //目标是让当前分类处于目录的最顶部
+		//更新为0排序的数据为当前最小排序
+		if nextClassify != nil {
+			minSort, e := data_manage.GetSciHqIndexClassifyMinSort(parentClassifyId)
+			if e != nil {
+				errMsg = "移动失败"
+				err = errors.New("获取下一个兄弟节点分类信息失败,Err:" + e.Error())
+				return
+			}
+			if minSort > 1 {
+				minSort -= 1
+			}
+			nextClassify.Sort = minSort
+			err = nextClassify.Update([]string{"sort"})
+			if err != nil {
+				errMsg = "移动失败"
+				err = errors.New("更新下一个兄弟节点分类信息失败,Err:" + err.Error())
+				return
+			}
+			nextSort = minSort
+		}
+	}
+	//移到两个排序值中间操作
+	if prevSort >= currentSort {
+		//往下移动
+		err = data_manage.MoveDownSciHqIndexClassifyBySort(parentClassifyId, prevSort, currentSort)
+		if err != nil {
+			err = errors.New("向下移动出错:" + err.Error())
+			return
+		}
+		classifyInfo.Sort = prevSort
+	} else if nextSort <= currentSort && nextSort != 0 {
+		//往上移动
+		err = data_manage.MoveUpSciHqIndexClassifyBySort(parentClassifyId, nextSort, currentSort)
+		if err != nil {
+			err = errors.New("向上移动出错:" + err.Error())
+			return
+		}
+		classifyInfo.Sort = nextSort
+	}
+	classifyInfo.ModifyTime = time.Now()
+	updateCol = append(updateCol, "Sort", "ModifyTime")
+	err = classifyInfo.Update(updateCol)
+	if err != nil {
+		errMsg = "移动失败"
+		err = errors.New("修改失败,Err:" + err.Error())
+		return
+	}
+	return
+}
+
+// MoveSciHqData 移动卓创红期指标
+func MoveSciHqData(indexId, classifyId, prevIndexId, nextIndexId int) (err error, errMsg string) {
+	//分类信息
+	sciHqIndex, err := data_manage.GetSciHqIndexByIndexId(indexId)
+	if err != nil {
+		errMsg = `获取数据失败`
+		if err.Error() == utils.ErrNoRow() {
+			errMsg = `该指标未入库`
+			err = nil
+		}
+		return
+	}
+
+	//判断分类是否存在
+	if classifyId > 0 {
+		_, err = data_manage.GetSciHqClassifyById(classifyId)
+		if err != nil {
+			errMsg = "移动失败"
+			err = errors.New("获取分类信息失败,Err:" + err.Error())
+			if err.Error() == utils.ErrNoRow() {
+				errMsg = "找不到该分类"
+				err = nil
+			}
+			return
+		}
+	}
+
+	//如果改变了分类,那么移动该图表数据
+	if sciHqIndex.ClassifyId != classifyId {
+		tmpErr := data_manage.MoveSciHqIndex(indexId, classifyId)
+		if tmpErr != nil {
+			errMsg = "移动失败"
+			err = errors.New("移动失败,Err:" + tmpErr.Error())
+			return
+		}
+	}
+
+	//移动排序
+	updateCol := make([]string, 0)
+	var currentSort, prevSort, nextSort int
+	currentSort = sciHqIndex.Sort
+	//如果有传入 上一个兄弟节点分类id
+	var prevIndex *data_manage.BaseFromSciHqIndex
+	var nextIndex *data_manage.BaseFromSciHqIndex
+	if prevIndexId > 0 {
+		prevIndex, err = data_manage.GetSciHqIndexByIndexId(prevIndexId)
+		if err != nil {
+			if err.Error() == utils.ErrNoRow() {
+				errMsg = "移动失败"
+				err = errors.New("上一个兄弟节点指标信息不存在" + err.Error())
+				return
+			}
+			errMsg = "移动失败"
+			err = errors.New("获取上一个兄弟节点指标信息失败,Err:" + err.Error())
+			return
+		}
+		prevSort = prevIndex.Sort
+	}
+
+	if nextIndexId > 0 {
+		//下一个兄弟节点
+		nextIndex, err = data_manage.GetSciHqIndexByIndexId(nextIndexId)
+		if err != nil {
+			if err.Error() == utils.ErrNoRow() {
+				errMsg = "移动失败"
+				err = errors.New("下一个兄弟节点指标信息不存在" + err.Error())
+				return
+			}
+			errMsg = "移动失败"
+			err = errors.New("获取下一个兄弟节点指标信息失败,Err:" + err.Error())
+			return
+		}
+		nextSort = nextIndex.Sort
+	}
+
+	// 修改历史数据中的排序为0的情况
+	if prevSort == 0 && nextSort == 0 { //目标是让当前分类处于目录的最顶部, 但是历史数据里下个节点的sort为0的情况
+		//更新为0排序的数据为当前最小排序
+		if nextIndex != nil {
+			minSort, e := data_manage.GetSciHqIndexMinSortByClassifyId(classifyId)
+			if e != nil {
+				errMsg = "移动失败"
+				err = errors.New("获取下一个兄弟节点分类信息失败,Err:" + e.Error())
+				return
+			}
+			if minSort > 1 {
+				minSort -= 1
+			}
+			nextIndex.Sort = minSort
+			err = nextIndex.Update([]string{"Sort"})
+			if err != nil {
+				errMsg = "移动失败"
+				err = errors.New("更新下一个兄弟节点分类信息失败,Err:" + err.Error())
+				return
+			}
+			nextSort = minSort
+		}
+	}
+	//移到两个排序值中间操作
+	if prevSort >= currentSort {
+		//往下移动
+		err = data_manage.MoveDownSciHqIndexBySort(classifyId, prevSort, currentSort)
+		if err != nil {
+			err = errors.New("向下移动出错:" + err.Error())
+			return
+		}
+		sciHqIndex.Sort = prevSort
+	} else if nextSort <= currentSort && nextSort != 0 {
+		//往上移动
+		err = data_manage.MoveUpSciHqIndexBySort(classifyId, nextSort, currentSort)
+		if err != nil {
+			err = errors.New("向上移动出错:" + err.Error())
+			return
+		}
+		sciHqIndex.Sort = nextSort
+	}
+
+	//更新
+	sciHqIndex.ModifyTime = time.Now()
+	updateCol = append(updateCol, "Sort", "ModifyTime")
+	err = sciHqIndex.Update(updateCol)
+	if err != nil {
+		errMsg = "移动失败"
+		err = errors.New("修改失败,Err:" + err.Error())
+		return
+	}
+	return
+}