Browse Source

add:卓创红期指标操作

zqbao 7 months ago
parent
commit
85339a0859

+ 607 - 9
controllers/data_manage/sci_hq_data.go

@@ -7,8 +7,15 @@ import (
 	"eta/eta_api/models/data_manage"
 	"eta/eta_api/models/data_manage/request"
 	"eta/eta_api/models/data_manage/response"
+	"eta/eta_api/models/system"
 	"eta/eta_api/services/data"
+	"eta/eta_api/services/data_stat"
+	etaTrialService "eta/eta_api/services/eta_trial"
 	"eta/eta_api/utils"
+	"fmt"
+	"strconv"
+	"strings"
+	"time"
 
 	"github.com/rdlucklib/rdluck_tools/paging"
 )
@@ -240,13 +247,13 @@ func (this *SciHqDataController) Move() {
 	}
 }
 
-// SciHqIndexList
+// IndexList
 // @Title 卓创红期指标列表
 // @Description 卓创红期数据指标列表接口
 // @Param   ClassifyId   query   int  true       "分类id"
 // @Success 200 {object} data_manage.BaseFromMysteelChemicalIndexResp
 // @router /sci_hq/index/list [get]
-func (this *SciHqDataController) SciHqIndexList() {
+func (this *SciHqDataController) IndexList() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
 		this.Data["json"] = br
@@ -266,7 +273,7 @@ func (this *SciHqDataController) SciHqIndexList() {
 	br.Data = indexList
 }
 
-// SciHqIndexPageList
+// IndexPageList
 // @Title 卓创红期指标列表
 // @Description 卓创红期数据指标列表接口
 // @Param   PageSize   query   int  true       "每页数据条数"
@@ -274,7 +281,7 @@ func (this *SciHqDataController) SciHqIndexList() {
 // @Param   ClassifyId   query   int  true       "分类id"
 // @Success 200 {object} data_manage.BaseFromMysteelChemicalIndexResp
 // @router /sci_hq/index/page/list [get]
-func (this *SciHqDataController) SciHqIndexPageList() {
+func (this *SciHqDataController) IndexPageList() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
 		this.Data["json"] = br
@@ -315,13 +322,13 @@ func (this *SciHqDataController) SciHqIndexPageList() {
 	br.Data = resp
 }
 
-// SciHqSearchList
+// SearchList
 // @Title 卓创红期模糊搜索
 // @Description 卓创红期模糊搜索
 // @Param   Keyword   query   string  ture       "关键字搜索"
 // @Success 200 {object} models.BaseResponse
 // @router /sci/search_list [get]
-func (this *SciHqDataController) SciHqSearchList() {
+func (this *SciHqDataController) SearchList() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
 		this.Data["json"] = br
@@ -353,20 +360,20 @@ func (this *SciHqDataController) SciHqSearchList() {
 	br.Data = list
 }
 
-// SciHqSingleData
+// SingleData
 // @Title 获取卓创红期据
 // @Description 获取卓创红期单条数据接口
 // @Param   IndexCode   query   string  true       "指标唯一编码"
 // @Success 200 {object} models.BaseResponse
 // @router /sci_hq/single_data [get]
-func (this *SciHqDataController) SciHqSingleData() {
+func (this *SciHqDataController) SingleData() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
 	indexCode := this.GetString("IndexCode")
-	indexInfo, err := data_manage.GetBaseFromSciHqIndexByIndexCode(indexCode)
+	indexInfo, err := data_manage.GetSciHqIndexByIndexCode(indexCode)
 	if err != nil {
 		br.Msg = "获取指标信息失败"
 		br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
@@ -434,6 +441,597 @@ func (this *SciHqDataController) ResetSciHqIndex() {
 	br.IsAddLog = true
 }
 
+// AddEdbInfo
+// @Title 新增指标接口
+// @Description 新增指标接口
+// @Param	request	body data_manage.AddEdbInfoReq true "type json string"
+// @Success Ret=200 保存成功
+// @router /sci_hq/edb_info/add [post]
+func (this *SciHqDataController) AddEdbInfo() {
+	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
+	}
+	deleteCache := true
+	cacheKey := "CACHE_EDB_INFO_ADD_" + strconv.Itoa(sysUser.AdminId)
+	defer func() {
+		if deleteCache {
+			utils.Rc.Delete(cacheKey)
+		}
+	}()
+	if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
+		deleteCache = false
+		br.Msg = "系统处理中,请稍后重试!"
+		br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
+		return
+	}
+	var req data_manage.AddEdbInfoReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+
+	req.EdbName = strings.Trim(req.EdbName, " ")
+	req.EdbCode = strings.Trim(req.EdbCode, " ")
+
+	if req.EdbCode == "" {
+		br.Msg = "指标ID不能为空"
+		return
+	}
+
+	if req.EdbName == "" {
+		br.Msg = "指标名称不能为空"
+		return
+	}
+
+	if req.Frequency == "" {
+		br.Msg = "频率不能为空"
+		return
+	}
+
+	if req.Unit == "" {
+		br.Msg = "单位不能为空"
+		return
+	}
+
+	if req.ClassifyId <= 0 {
+		br.Msg = "请选择分类"
+		return
+	}
+
+	_, err = data_manage.GetSciHqIndexByIndexCode(req.EdbCode)
+	if err != nil {
+		if err.Error() == utils.ErrNoRow() {
+			br.Msg = "指标不存在"
+			return
+		}
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	source := utils.DATA_SOURCE_SCI_HQ
+	// 指标入库
+	edbInfo, err, errMsg, isSendEmail := data.EdbInfoAdd(source, utils.DATA_SUB_SOURCE_EDB, req.ClassifyId, req.EdbCode, req.EdbName, req.Frequency, req.Unit, req.StartDate, req.EndDate, sysUser.AdminId, sysUser.RealName, this.Lang)
+	if err != nil {
+		br.Msg = "保存失败"
+		if errMsg != `` {
+			br.Msg = errMsg
+		}
+		br.ErrMsg = err.Error()
+		br.IsSendEmail = isSendEmail
+		return
+	}
+
+	// 试用平台更新用户累计新增指标数
+	adminItem, e := system.GetSysAdminById(sysUser.AdminId)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "获取系统用户数据失败,Err:" + e.Error()
+		return
+	}
+	if utils.BusinessCode == utils.BusinessCodeSandbox && adminItem.DepartmentName == "ETA试用客户" {
+		go func() {
+			var r etaTrialService.EtaTrialUserReq
+			r.Mobile = adminItem.Mobile
+			_, _ = etaTrialService.UpdateUserIndexNum(r)
+		}()
+	}
+
+	//新增操作日志
+	{
+		// 添加钢联指标更新日志
+		if edbInfo.Source == utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
+			go data_stat.AddEdbInfoUpdateLog(edbInfo.EdbInfoId, 1, "", sysUser, 2)
+		}
+
+		edbLog := new(data_manage.EdbInfoLog)
+		edbLog.EdbInfoId = edbInfo.EdbInfoId
+		edbLog.SourceName = edbInfo.SourceName
+		edbLog.Source = edbInfo.Source
+		edbLog.EdbCode = edbInfo.EdbCode
+		edbLog.EdbName = edbInfo.EdbName
+		edbLog.ClassifyId = edbInfo.ClassifyId
+		edbLog.SysUserId = sysUser.AdminId
+		edbLog.SysUserRealName = sysUser.RealName
+		edbLog.CreateTime = time.Now()
+		edbLog.Content = string(this.Ctx.Input.RequestBody)
+		edbLog.Status = "新增指标"
+		edbLog.Method = this.Ctx.Input.URI()
+		go data_manage.AddEdbInfoLog(edbLog)
+	}
+
+	// 更新es
+	go data.AddOrEditEdbInfoToEs(edbInfo.EdbInfoId)
+
+	resp := new(data_manage.AddEdbInfoResp)
+	resp.EdbInfoId = edbInfo.EdbInfoId
+	resp.UniqueCode = edbInfo.UniqueCode
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "保存成功"
+	br.Data = resp
+	br.IsAddLog = true
+}
+
+// AddCheck
+// @Title 新增校验
+// @Description 新增校验
+// @Param	request	body request.BusinessDataBatchAddCheckReq true "type json string"
+// @Success 200 string "操作成功"
+// @router /sci_hq/edb_info/add_check [post]
+func (this *SciHqDataController) AddCheck() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		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.SciHqDataBatchAddCheckReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + e.Error()
+		return
+	}
+	codeMax := 30
+	codeLen := len(req.IndexCodes)
+	if len(req.IndexCodes) == 0 {
+		br.Msg = "请选择指标"
+		return
+	}
+
+	if codeLen > codeMax {
+		br.Msg = fmt.Sprintf("最多只能选择%d个指标", codeMax)
+		return
+	}
+	// 获取指标库已有指标
+	existsEdb, e := data_manage.GetEdbCodesBySource(utils.DATA_SOURCE_SCI_HQ)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取自有数据已添加的指标失败, Err: " + e.Error()
+		return
+	}
+	existMap := make(map[string]*data_manage.EdbInfo)
+	for _, v := range existsEdb {
+		existMap[v.EdbCode] = v
+	}
+
+	// 查询选中的指标
+	cond := fmt.Sprintf(` AND index_code IN (%s)`, utils.GetOrmInReplace(codeLen))
+	pars := make([]interface{}, 0)
+	pars = append(pars, req.IndexCodes)
+	list, err := data_manage.GetSciHqIndexAndEdbInfoByCondition(cond, pars)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取卓创红期原始指标列表失败, Err: " + err.Error()
+		return
+	}
+
+	resp := make([]*data_manage.BaseFromSciHqIndexView, 0)
+	for _, v := range list {
+		if v.EdbInfoId > 0 {
+			v.EdbExist = 1
+		}
+		resp = append(resp, v)
+	}
+
+	br.Data = resp
+	br.Msg = "校验成功"
+	br.Ret = 200
+	br.Success = true
+}
+
+// NameCheck
+// @Title 重名校验
+// @Description 批量新增
+// @Param	request	body data_manage.AddEdbInfoReq true "type json string"
+// @Success 200 string "操作成功"
+// @router /sci_hq/edb_info/name_check [post]
+func (c *SciHqDataController) NameCheck() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		c.Data["json"] = br
+		c.ServeJSON()
+	}()
+	sysUser := c.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	var req []*data_manage.NameCheckEdbInfoReq
+	if err := json.Unmarshal(c.Ctx.Input.RequestBody, &req); err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if len(req) == 0 {
+		br.Msg = "请选择指标"
+		return
+	}
+	codeMax := 30
+	codeLen := len(req)
+	if codeLen > codeMax {
+		br.Msg = fmt.Sprintf("最多只能选择%d个指标", codeMax)
+		return
+	}
+
+	type NameCheckResult struct {
+		EdbCode string
+		EdbName string
+		Exist   bool
+	}
+	indexNames := make([]string, 0)
+	resp := make([]*NameCheckResult, 0)
+	for _, v := range req {
+		v.EdbCode = strings.TrimSpace(v.EdbCode)
+		if v.EdbCode == "" {
+			br.Msg = "指标ID不可为空"
+			return
+		}
+		v.EdbName = strings.TrimSpace(v.EdbName)
+		if v.EdbName == "" {
+			br.Msg = "请输入指标名称"
+			return
+		}
+		indexNames = append(indexNames, v.EdbName)
+		resp = append(resp, &NameCheckResult{
+			EdbCode: v.EdbCode,
+			EdbName: v.EdbName,
+		})
+		dataItems, err := data_manage.GetEdbDataAllByEdbCode(v.EdbCode, utils.DATA_SOURCE_SCI_HQ, 0, utils.EDB_DATA_LIMIT)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取卓创红期已存在信息失败,Err:" + err.Error()
+			return
+		}
+		if len(dataItems) <= 0 {
+			respItem, err := data.AddEdbData(utils.DATA_SOURCE_SCI_HQ, v.EdbCode, v.Frequency)
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取失败,Err:" + err.Error()
+				return
+			}
+			if respItem.Ret != 200 {
+				br.Msg = "未搜索到该指标"
+				br.ErrMsg = respItem.ErrMsg + ";EdbCode:" + v.EdbCode
+				return
+			}
+		}
+	}
+
+	// 重名校验
+	edbList, e := data_manage.GetEdbInfoByNameArr(indexNames, utils.EDB_INFO_TYPE)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "获取重名指标失败, Err: " + e.Error()
+		return
+	}
+	nameExists := make(map[string]bool)
+	for _, v := range edbList {
+		nameExists[v.EdbName] = true
+	}
+	if len(nameExists) > 0 {
+		for _, v := range resp {
+			v.Exist = nameExists[v.EdbName]
+		}
+	}
+
+	br.Data = resp
+	br.Msg = "校验成功"
+	br.Ret = 200
+	br.Success = true
+}
+
+// BatchAdd
+// @Title 批量新增
+// @Description 批量新增
+// @Param	request	body data_manage.AddEdbInfoReq true "type json string"
+// @Success 200 string "操作成功"
+// @router /sci_hq/edb_info/batch_add [post]
+func (this *SciHqDataController) BatchAdd() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	deleteCache := true
+	cacheKey := "CACHE_EDB_INFO_BATCH_ADD_SCI_HQ_" + strconv.Itoa(sysUser.AdminId)
+	defer func() {
+		if deleteCache {
+			_ = utils.Rc.Delete(cacheKey)
+		}
+	}()
+	if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
+		deleteCache = false
+		br.Msg = "系统处理中,请稍后重试!"
+		br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
+		return
+	}
+	var req []*data_manage.AddEdbInfoReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + e.Error()
+		return
+	}
+	if len(req) == 0 {
+		br.Msg = "请选择指标"
+		return
+	}
+	if len(req) > 30 {
+		br.Msg = "批量添加指标数量不得超过30个"
+		return
+	}
+	for _, v := range req {
+		v.EdbCode = strings.TrimSpace(v.EdbCode)
+		if v.EdbCode == "" {
+			br.Msg = "指标ID不可为空"
+			return
+		}
+		v.EdbName = strings.TrimSpace(v.EdbName)
+		if v.EdbName == "" {
+			br.Msg = "请输入指标名称"
+			return
+		}
+		v.Frequency = strings.TrimSpace(v.Frequency)
+		if v.Frequency == "" {
+			br.Msg = "请选择频度"
+			return
+		}
+		v.Unit = strings.TrimSpace(v.Unit)
+		if v.Unit == "" {
+			br.Msg = "请输入单位"
+			return
+		}
+		if v.ClassifyId <= 0 {
+			br.Msg = "请选择分类"
+			return
+		}
+	}
+
+	// 限定同一时间最多批量新增30个指标
+	for _, v := range req {
+		var r data.SciIndexSource2EdbReq
+		r.EdbCode = v.EdbCode
+		r.EdbName = v.EdbName
+		r.Frequency = v.Frequency
+		r.Unit = v.Unit
+		r.ClassifyId = v.ClassifyId
+		r.AdminId = sysUser.AdminId
+		r.AdminRealName = sysUser.RealName
+
+		edbInfo, errMsg, skip, e := data.SciHqIndexSource2Edb(r, this.Lang)
+		if e != nil {
+			br.Msg = "操作失败"
+			if errMsg != "" {
+				br.Msg = errMsg
+			}
+			br.ErrMsg = e.Error()
+			return
+		}
+		if skip {
+			continue
+		}
+
+		// 试用平台更新用户累计新增指标数
+		if utils.BusinessCode == utils.BusinessCodeSandbox {
+			go func() {
+				adminItem, e := system.GetSysAdminById(sysUser.AdminId)
+				if e != nil {
+					tips := fmt.Sprintf("试用平台更新用户累计新增指标数-获取用户失败, Err: " + e.Error())
+					utils.FileLog.Info(tips)
+					return
+				}
+				if adminItem.DepartmentName != "ETA试用客户" {
+					return
+				}
+				var ur etaTrialService.EtaTrialUserReq
+				ur.Mobile = adminItem.Mobile
+				_, _ = etaTrialService.UpdateUserIndexNum(ur)
+			}()
+		}
+
+		// 新增操作日志
+		{
+			edbLog := new(data_manage.EdbInfoLog)
+			edbLog.EdbInfoId = edbInfo.EdbInfoId
+			edbLog.SourceName = edbInfo.SourceName
+			edbLog.Source = edbInfo.Source
+			edbLog.EdbCode = edbInfo.EdbCode
+			edbLog.EdbName = edbInfo.EdbName
+			edbLog.ClassifyId = edbInfo.ClassifyId
+			edbLog.SysUserId = sysUser.AdminId
+			edbLog.SysUserRealName = sysUser.RealName
+			edbLog.CreateTime = time.Now()
+			edbLog.Content = string(this.Ctx.Input.RequestBody)
+			edbLog.Status = "新增指标"
+			edbLog.Method = this.Ctx.Input.URI()
+			go data_manage.AddEdbInfoLog(edbLog)
+		}
+	}
+
+	br.Msg = "操作成功"
+	br.Ret = 200
+	br.Success = true
+	br.IsAddLog = true
+}
+
+// BatchDelete
+// @Title 批量删除
+// @Description 批量删除
+// @Param	request	body []*request.DelBaseFromSciHqReq true "type json string"
+// @Success 200 string "操作成功"
+// @router /sci_hq/edb_info/batch_add [post]
+func (this *SciHqDataController) BatchDelete() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	var req []*request.DelBaseFromSciHqReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + e.Error()
+		return
+	}
+	if len(req) == 0 {
+		br.Msg = "请选择指标"
+		return
+	}
+	if len(req) > 30 {
+		br.Msg = "批量添加指标数量不得超过30个"
+		return
+	}
+	var deleteIds []int
+	for _, v := range req {
+		if v.BaseFromSciHqIndexId <= 0 {
+			continue
+		}
+		deleteIds = append(deleteIds, v.BaseFromSciHqIndexId)
+	}
+	existList, err := data.BatchDelSciHqData(deleteIds)
+	if err != nil {
+		br.Msg = "删除失败"
+		br.ErrMsg = "删除失败,Err:" + err.Error()
+		return
+	}
+
+	br.Data = existList
+	br.Msg = "操作成功"
+	br.Ret = 200
+	br.Success = true
+	br.IsAddLog = true
+}
+
+// BatchEdit
+// @Title 批量编辑
+// @Description 批量编辑
+// @Param	request	body []*request.DelBaseFromSciHqReq true "type json string"
+// @Success 200 string "操作成功"
+// @router /sci_hq/edb_info/batch_edit [post]
+func (this *SciHqDataController) BatchEdit() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	var req []*request.EditBaseFromSciHqReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + e.Error()
+		return
+	}
+	if len(req) == 0 {
+		br.Msg = "请选择指标"
+		return
+	}
+
+	indexIds := make([]int, 0)
+	classifyIds := make([]int, 0)
+	indexIdToclassifyId := make(map[int]int)
+	for _, v := range req {
+		if v.BaseFromSciHqIndexId <= 0 {
+			continue
+		}
+		if v.ClassifyId <= 0 {
+			continue
+		}
+		indexIds = append(indexIds, v.BaseFromSciHqIndexId)
+		classifyIds = append(classifyIds, v.ClassifyId)
+		indexIdToclassifyId[v.BaseFromSciHqIndexId] = v.ClassifyId
+	}
+	if len(indexIds) == 0 {
+		br.Msg = "请选择指标或指定正确的分类"
+		return
+	}
+	indexList, err := data_manage.GetSciHqIndexListByIndexIds(indexIds)
+	if err != nil {
+		br.Msg = "编辑失败"
+		br.ErrMsg = "获取指标失败,Err:" + err.Error()
+		return
+	}
+	classifyList, err := data_manage.GetSciHqClassifyListByIds(classifyIds)
+	if err != nil {
+		br.Msg = "编辑失败"
+		br.ErrMsg = "获取分类失败,Err:" + err.Error()
+		return
+	}
+	//编辑指标
+	updateIndexList := make([]*data_manage.BaseFromSciHqIndex, 0)
+	for _, v := range indexList {
+		v.ClassifyId = indexIdToclassifyId[v.BaseFromSciHqIndexId]
+
+		updateIndexList = append(updateIndexList, v)
+	}
+	fmt.Println(classifyList)
+
+	br.Msg = "操作成功"
+	br.Ret = 200
+	br.Success = true
+	br.IsAddLog = true
+
+}
+
 // EditSciHq
 // @Title 编辑卓创红期指标
 // @Description 编辑卓创红期指标接口

+ 11 - 0
models/data_manage/base_from_sci_hq_classify.go

@@ -97,6 +97,17 @@ func GetSciHqClassifyById(classifyId int) (item *BaseFromSciHqClassify, err erro
 	return
 }
 
+// GetSciHqClassifyListByIds 通过分类id获取分类列表
+func GetSciHqClassifyListByIds(classifyIds []int) (items []*BaseFromSciHqClassify, err error) {
+	if len(classifyIds) == 0 {
+		return
+	}
+	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)
+	return
+}
+
 // GetSciHqClassifyCountByName 通过分类名称获取分类
 func GetSciHqClassifyCountByName(classifyName string, lang string) (count int, err error) {
 	o := orm.NewOrmUsingDB("data")

+ 57 - 8
models/data_manage/base_from_sci_hq_index.go

@@ -1,6 +1,7 @@
 package data_manage
 
 import (
+	"eta/eta_api/utils"
 	"time"
 
 	"github.com/beego/beego/v2/client/orm"
@@ -22,6 +23,20 @@ type BaseFromSciHqIndex struct {
 	ModifyTime           time.Time
 }
 
+type BaseFromSciHqIndexView struct {
+	BaseFromSciHqIndexId int    `orm:"pk"`
+	EdbInfoId            int    `description:"指标库id"`
+	ClassifyId           int    `description:"指标分类id"`
+	IndexCode            string `description:"指标编码"`
+	IndexName            string `description:"指标名称"`
+	Unit                 string `description:"单位"`
+	Frequency            string `description:"频度"`
+	StartDate            string `description:"开始日期"`
+	EndDate              string `description:"结束日期"`
+	Sort                 int    `description:"排序"`
+	EdbExist             int    `description:"edb是否存在"`
+}
+
 func (b *BaseFromSciHqIndex) Update(cols []string) (err error) {
 	o := orm.NewOrmUsingDB("data")
 	_, err = o.Update(b, cols...)
@@ -36,27 +51,51 @@ func GetSciHqIndexByCondition(condition string, pars []interface{}) (items []*Ba
 	if condition != "" {
 		sql += condition
 	}
-	sql += ` ORDER BY base_from_mysteel_chemical_index_id ASC `
+	sql += ` ORDER BY sort ASC `
 	_, err = o.Raw(sql, pars).QueryRows(&items)
 	return
 }
 
-// GetBaseFromSciHqIndexByIndexCode 根据指标编码获取指标信息
-func GetBaseFromSciHqIndexByIndexCode(indexCode string) (item *BaseFromSciHqIndex, err error) {
+// GetSciHqIndexAndEdbInfoByCondition 根据条件获取卓创红期index和指标库的信息
+func GetSciHqIndexAndEdbInfoByCondition(condition string, pars []interface{}) (items []*BaseFromSciHqIndexView, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT b.*, e.edb_info_id FROM base_from_sci_hq_index AS b LEFT JOIN edb_info AS e ON b.index_code=e.edb_code AND e.source=? WHERE 1=1 `
+
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` ORDER BY sort ASC `
+	_, err = o.Raw(sql, utils.DATA_SOURCE_SCI_HQ, pars).QueryRows(&items)
+	return
+}
+
+// GetSciHqIndexByIndexCode 根据指标编码获取指标信息
+func GetSciHqIndexByIndexCode(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) {
+// GetSciHqIndexByIndexId 根据指标id获取指标信息
+func GetSciHqIndexByIndexId(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
 }
 
+// GetSciHqIndexListByIndexIds 根据指标id获取指标信息
+func GetSciHqIndexListByIndexIds(indexIds []int) (items []*BaseFromSciHqIndex, err error) {
+	if len(indexIds) == 0 {
+		return
+	}
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT * FROM base_from_sci_hq_index WHERE base_from_sci_hq_index_id IN (` + utils.GetOrmInReplace(len(indexIds)) + `) `
+	_, err = o.Raw(sql, indexIds).QueryRows(&items)
+	return
+}
+
 // GetSciHqIndexByClassifyId 根据分类id获取卓创红期指标列表
 func GetSciHqIndexByClassifyId(classifyId, startSize, pageSize int) (items []*BaseFromSciHqIndex, err error) {
 	o := orm.NewOrmUsingDB("data")
@@ -93,8 +132,8 @@ func GetSciHqIndexBaseInfoByCondition(condition string, pars []interface{}) (ite
 	return
 }
 
-// GetBaseFromSciHqIndexMaxSortByClassifyId 根据分类id获取指标最大排序
-func GetBaseFromSciHqIndexMaxSortByClassifyId(classifyId int) (sort int, err error) {
+// 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=? `
 	err = o.Raw(sql, classifyId).QueryRow(&sort)
@@ -109,9 +148,19 @@ func MoveDownSciHqIndexBySort(classifyId, prevSort, currentSort int) (err error)
 	return
 }
 
-func DeleteBaseFromSciHqIndexById(indexId int) (err error) {
+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=? `
 	_, err = o.Raw(sql, indexId).Exec()
 	return
 }
+
+func DeleteSciHqIndexByIds(indexIds []int) (err error) {
+	if len(indexIds) == 0 {
+		return
+	}
+	o := orm.NewOrmUsingDB("data")
+	sql := `DELETE FROM base_from_sci_hq_index WHERE base_from_sci_hq_index_id IN (` + utils.GetOrmInReplace(len(indexIds)) + `) `
+	_, err = o.Raw(sql, indexIds).Exec()
+	return
+}

+ 10 - 0
models/data_manage/edb_info.go

@@ -168,6 +168,16 @@ func GetEdbInfoByEdbCode(source int, edbCode string) (item *EdbInfo, err error)
 	return
 }
 
+func GetEdbInfoListByEdbCodes(source int, edbCodes []string) (items []*EdbInfo, err error) {
+	if len(edbCodes) == 0 {
+		return
+	}
+	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)
+	return
+}
+
 func GetEdbInfoById(edbInfoId int) (item *EdbInfo, err error) {
 	o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM edb_info WHERE edb_info_id=? `

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

@@ -32,6 +32,12 @@ type ResetBaseFromSciHqReq struct {
 	BaseFromSciHqIndexId int `description:"指标id"`
 }
 
+// SciHqDataBatchAddCheckReq 卓创红期指标批量添加校验
+type SciHqDataBatchAddCheckReq struct {
+	// MysteelChemicalDataListReq
+	IndexCodes []string `description:"指标编码"`
+}
+
 // MoveBaseFromSciHqClassifyReq 移动分类请求参数
 type MoveBaseFromSciHqClassifyReq struct {
 	ClassifyId     int `description:"分类id"`

+ 2 - 0
services/data/base_edb_lib.go

@@ -74,6 +74,8 @@ func AddEdbData(source int, edbCode, frequency string) (resp *models.BaseRespons
 		urlStr = "icpi/add"
 	case utils.DATA_SOURCE_SCI99:
 		urlStr = "sci99/add"
+	case utils.DATA_SOURCE_SCI_HQ:
+		urlStr = "sci_hq/add"
 	default:
 		edbSource := data_manage.EdbSourceIdMap[source]
 		if edbSource != nil {

+ 92 - 6
services/data/base_from_sci_hq.go

@@ -4,6 +4,7 @@ import (
 	"errors"
 	"eta/eta_api/models/data_manage"
 	"eta/eta_api/utils"
+	"fmt"
 	"time"
 )
 
@@ -141,7 +142,7 @@ func DelSciHqClassify(classifyId int) (err error) {
 
 // ResetSciHqIndex 指标数据清除分类接口
 func ResetSciHqIndex(indexId int) (err error) {
-	sciHqIndex, err := data_manage.GetBaseFromSciHqIndexByIndexId(indexId)
+	sciHqIndex, err := data_manage.GetSciHqIndexByIndexId(indexId)
 	if err != nil {
 		return
 	}
@@ -153,7 +154,7 @@ func ResetSciHqIndex(indexId int) (err error) {
 	var currentSort, prevSort int
 	currentSort = sciHqIndex.Sort
 	//未分类的最大的sort值
-	prevSort, err = data_manage.GetBaseFromSciHqIndexMaxSortByClassifyId(classifyId)
+	prevSort, err = data_manage.GetSciHqIndexMaxSortByClassifyId(classifyId)
 	if err != nil {
 		err = errors.New("获取上一个兄弟节点指标信息失败,Err:" + err.Error())
 		return
@@ -182,9 +183,42 @@ func ResetSciHqIndex(indexId int) (err error) {
 	return
 }
 
+// 批量删除卓创红期指标
+func BatchDelSciHqData(indexIds []int) (existIndex []*data_manage.BaseFromSciHqIndex, err error) {
+	sciHqIndexList, err := data_manage.GetSciHqIndexListByIndexIds(indexIds)
+	if err != nil {
+		return
+	}
+
+	indexCodes := make([]string, 0)
+	codeToIndex := make(map[string]*data_manage.BaseFromSciHqIndex)
+	for _, v := range sciHqIndexList {
+		indexCodes = append(indexCodes, v.IndexCode)
+		codeToIndex[v.IndexCode] = v
+	}
+
+	edbInfoList, err := data_manage.GetEdbInfoListByEdbCodes(utils.DATA_SOURCE_SCI_HQ, indexCodes)
+	if err != nil {
+		return
+	}
+	for _, v := range edbInfoList {
+		if index, ok := codeToIndex[v.EdbCode]; ok {
+			existIndex = append(existIndex, index)
+			delete(codeToIndex, v.EdbCode)
+		}
+	}
+
+	// 删除对应的指标
+	err = data_manage.DeleteSciHqIndexByIds(indexIds)
+	if err != nil {
+		return
+	}
+	return
+}
+
 // DelSciHqData 删除卓创红期指标
 func DelSciHqData(indexId int) (err error, errMsg string) {
-	baseFromSciHqIndex, err := data_manage.GetBaseFromSciHqIndexByIndexId(indexId)
+	baseFromSciHqIndex, err := data_manage.GetSciHqIndexByIndexId(indexId)
 	if err != nil {
 		errMsg = `获取数据失败`
 		if err.Error() == utils.ErrNoRow() {
@@ -207,8 +241,8 @@ func DelSciHqData(indexId int) (err error, errMsg string) {
 		return
 	}
 
-	// 删除对应的分类和指标
-	err = data_manage.DeleteBaseFromSciIndexById(indexId)
+	// 删除对应的指标
+	err = data_manage.DeleteSciHqIndexById(indexId)
 	if err != nil {
 		return
 	}
@@ -218,7 +252,7 @@ func DelSciHqData(indexId int) (err error, errMsg string) {
 
 // EditSciHqIndex 编辑卓创红期指标
 func EditSciHqIndex(indexId, classifyId int) (baseFromSciHqIndex *data_manage.BaseFromSciHqIndex, err error) {
-	baseFromSciHqIndex, err = data_manage.GetBaseFromSciHqIndexByIndexId(indexId)
+	baseFromSciHqIndex, err = data_manage.GetSciHqIndexByIndexId(indexId)
 	if err != nil {
 		return
 	}
@@ -228,3 +262,55 @@ func EditSciHqIndex(indexId, classifyId int) (baseFromSciHqIndex *data_manage.Ba
 	err = baseFromSciHqIndex.Update([]string{"ClassifyId", "ModifyTime"})
 	return
 }
+
+type SciIndexSource2EdbReq struct {
+	EdbCode       string
+	EdbName       string
+	Frequency     string
+	Unit          string
+	ClassifyId    int
+	AdminId       int
+	AdminRealName string
+}
+
+// SciHqIndexSource2Edb 新增卓创红期数据从数据源到指标库
+func SciHqIndexSource2Edb(req SciIndexSource2EdbReq, lang string) (edb *data_manage.EdbInfo, errMsg string, skip bool, err error) {
+	if req.EdbCode == "" {
+		err = fmt.Errorf("指标ID为空")
+		return
+	}
+	defer func() {
+		if err != nil {
+			tips := fmt.Sprintf("SciHqIndexSource2Edb新增失败, Err: %s", err.Error())
+			fmt.Println(tips)
+			utils.FileLog.Info(tips)
+		}
+	}()
+	source := utils.DATA_SOURCE_SCI_HQ
+
+	// 是否新增过指标
+	exist, e := data_manage.GetEdbInfoByEdbCode(source, req.EdbCode)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = fmt.Errorf("获取指标是否存在失败, err: %s", e.Error())
+		return
+	}
+	if exist != nil {
+		skip = true
+		return
+	}
+
+	// 开始结束时间
+	var startDate, endDate string
+
+	// 新增指标库
+	edbInfo, e, msg, _ := EdbInfoAdd(source, utils.DATA_SUB_SOURCE_EDB, req.ClassifyId, req.EdbCode, req.EdbName, req.Frequency, req.Unit, startDate, endDate, req.AdminId, req.AdminRealName, lang)
+	if e != nil {
+		errMsg = msg
+		err = fmt.Errorf("EdbInfo: 新增指标失败, err: %s", e.Error())
+		return
+	}
+
+	edb = edbInfo
+
+	return
+}

+ 1 - 0
services/data/edb_info.go

@@ -1829,6 +1829,7 @@ func EdbInfoAdd(source, subSource, classifyId int, edbCode, edbName, frequency,
 		utils.DATA_SOURCE_NATIONAL_STATISTICS: "国家统计局",
 		utils.DATA_SOURCE_FUBAO:               "富宝数据",
 		utils.DATA_SOURCE_GFEX:                "广期所",
+		utils.DATA_SOURCE_SCI_HQ:              "卓创红期",
 	}
 
 	sourceName, ok := sourceNameMap[source]