Kaynağa Gözat

Merge remote-tracking branch 'origin/master' into xy/2.0

Roc 8 saat önce
ebeveyn
işleme
8017ff9504
38 değiştirilmiş dosya ile 823 ekleme ve 121 silme
  1. 68 19
      controllers/base_auth.go
  2. 155 0
      controllers/edb.go
  3. 36 27
      controllers/xy/base_auth_xy.go
  4. 1 0
      main.go
  5. 8 1
      models/assessment_form.go
  6. 8 1
      models/assessment_researcher.go
  7. 8 1
      models/assessment_researcher_variety_mapping.go
  8. 1 1
      models/business_conf.go
  9. 7 1
      models/data_manage/base_from_business.go
  10. 9 3
      models/data_manage/base_from_eia_stero.go
  11. 8 1
      models/data_manage/base_from_trade_index.go
  12. 2 2
      models/data_manage/chart_classify.go
  13. 12 5
      models/data_manage/chart_info.go
  14. 10 2
      models/data_manage/com_trade_data.go
  15. 2 2
      models/data_manage/com_trade_index.go
  16. 59 1
      models/data_manage/edb_classify.go
  17. 1 1
      models/data_manage/edb_data.go
  18. 50 7
      models/data_manage/edb_info.go
  19. 1 1
      models/data_manage/edb_info_calculate_mapping.go
  20. 2 2
      models/data_manage/edb_source.go
  21. 13 5
      models/data_manage/eta_business_chart_permission.go
  22. 63 0
      models/data_manage/eta_business_edb_permission.go
  23. 1 1
      models/data_manage/variety.go
  24. 1 1
      models/data_manage/variety_edb_info.go
  25. 12 0
      models/db.go
  26. 14 4
      models/en_classify_permission.go
  27. 16 4
      models/english_report.go
  28. 23 0
      models/open_api_user.go
  29. 39 9
      models/report.go
  30. 1 1
      models/resource.go
  31. 26 5
      models/sandbox/sandbox.go
  32. 31 6
      models/sandbox/sandbox_classify.go
  33. 9 2
      models/smart_report.go
  34. 10 3
      models/smart_resource.go
  35. 2 2
      models/system/sys_user.go
  36. 18 0
      routers/commentsRouter.go
  37. 64 0
      services/edb_classify.go
  38. 32 0
      utils/common.go

+ 68 - 19
controllers/base_auth.go

@@ -2,6 +2,7 @@ package controllers
 
 import (
 	"encoding/json"
+	"errors"
 	"eta/eta_hub/models"
 	"eta/eta_hub/models/system"
 	"eta/eta_hub/utils"
@@ -9,17 +10,20 @@ import (
 	"github.com/beego/beego/v2/server/web"
 	"net/http"
 	"net/url"
+	"strings"
 )
 
 type BaseAuthController struct {
 	web.Controller
 	SysUser *system.Admin
+	Appid   string
 }
 
 func (this *BaseAuthController) Prepare() {
 	fmt.Println("enter prepare")
 	method := this.Ctx.Input.Method()
 	uri := this.Ctx.Input.URI()
+	ip := this.Ctx.Input.IP()
 	fmt.Println("Url:", uri)
 	if method != "HEAD" {
 		//校验签名
@@ -27,29 +31,14 @@ func (this *BaseAuthController) Prepare() {
 		timestamp := this.Ctx.Input.Header("timestamp")
 		appid := this.Ctx.Input.Header("appid")
 		signature := this.Ctx.Input.Header("signature")
+		this.Appid = appid
 
-		if nonce == "" {
-			errMsg := "随机字符串不能为空"
-			this.JSON(models.BaseResponse{Ret: 400, Msg: "", ErrMsg: errMsg}, false, false)
+		checkSign, errMsg, err := getCheckSignStr(appid, nonce, timestamp, ip)
+		if err != nil {
+			this.JSON(models.BaseResponse{Ret: 400, Msg: errMsg, ErrMsg: errMsg}, false, false)
 			this.StopRun()
 			return
 		}
-
-		if timestamp == "" {
-			errMsg := "时间戳不能为空"
-			this.JSON(models.BaseResponse{Ret: 400, Msg: "", ErrMsg: errMsg}, false, false)
-			this.StopRun()
-			return
-		}
-
-		if appid != utils.AppId {
-			errMsg := "商家AppId错误,请核查"
-			this.JSON(models.BaseResponse{Ret: 400, Msg: "", ErrMsg: errMsg}, false, false)
-			this.StopRun()
-			return
-		}
-
-		checkSign := utils.GetSign(nonce, timestamp)
 		if signature != checkSign {
 			fmt.Printf("用户提交签名:%s;\n系统生成签名:%s\n", signature, checkSign)
 			errMsg := "签名错误"
@@ -150,3 +139,63 @@ func (c *BaseAuthController) logUri(respContent []byte, requestBody, ip string)
 	}
 	return
 }
+
+// getCheckSignStr
+// @Description: 获取校验签名字符串
+// @author: Roc
+// @datetime 2025-07-03 16:51:30
+// @param appid string
+// @param nonce string
+// @param timestamp string
+// @param ip string
+// @return checkSignStr string
+// @return errMsg string
+// @return err error
+func getCheckSignStr(appid, nonce, timestamp, ip string) (checkSignStr, errMsg string, err error) {
+	if nonce == "" {
+		errMsg = "随机字符串不能为空"
+		err = errors.New(errMsg)
+		return
+	}
+
+	if timestamp == "" {
+		errMsg = "时间戳不能为空"
+		err = errors.New(errMsg)
+		return
+	}
+
+	secret := utils.Secret
+
+	if appid != utils.AppId {
+		openApiUserInfo, tmpErr := models.GetByAppid(appid)
+		if tmpErr != nil {
+			if utils.IsErrNoRow(tmpErr) {
+				errMsg = "商家AppId错误,请核查"
+			} else {
+				err = errors.New("系统异常,请联系管理员")
+			}
+			err = errors.New(errMsg)
+			return
+		}
+
+		if openApiUserInfo.Appid == `` {
+			errMsg = "商家AppId错误,请核查"
+			err = errors.New(errMsg)
+			return
+		}
+
+		//如果有ip限制,那么就添加ip
+		if openApiUserInfo.Ip != "" {
+			if !strings.Contains(openApiUserInfo.Ip, ip) {
+				errMsg = fmt.Sprintf("无权限访问该接口,ip:%v,请联系管理员", ip)
+				err = errors.New(errMsg)
+				return
+			}
+		}
+		secret = openApiUserInfo.Secret
+	}
+
+	checkSignStr = utils.GetSignV2(nonce, timestamp, appid, secret)
+
+	return
+}

+ 155 - 0
controllers/edb.go

@@ -259,6 +259,7 @@ func (this *EdbController) Detail() {
 	//}
 
 	resp := data_manage.FormatEdbInfo2Item(edb)
+
 	br.Data = resp
 	br.Ret = 200
 	br.Msg = "获取成功"
@@ -535,3 +536,157 @@ func (this *EdbController) EdbInfoDataSeasonal() {
 	br.Msg = "获取成功"
 	br.Data = resp
 }
+
+// AuthList
+// @Title 指标列表
+// @Description 指标列表
+// @Success 200 {object} data_manage.ChartInfoItem
+// @router /auth_list [get]
+func (this *EdbController) AuthList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	//classifyId, _ := this.GetInt("ClassifyId")
+	pageSize, _ := this.GetInt("PageSize")
+	currentIndex, _ := this.GetInt("CurrentIndex")
+	businessCode := this.GetString("BusinessCode")
+	if businessCode == "" {
+		br.Msg = "商家编码不允许为空"
+		return
+	}
+
+	// 如果不传入每页数据,那么就默认为10000条
+	if pageSize <= 0 {
+		pageSize = 10000
+	}
+	var startSize int
+	if currentIndex <= 0 {
+		currentIndex = 1
+	}
+	startSize = utils.StartIndex(currentIndex, pageSize)
+
+	edbPermissionOb := new(data_manage.EtaBusinessEdbPermission)
+
+	cond := ` AND a.appid = ? `
+	pars := []interface{}{this.Appid}
+
+	if businessCode != "" {
+		cond += ` AND a.business_code = ? `
+		pars = append(pars, businessCode)
+	}
+
+	total, e := edbPermissionOb.GetItemsTotal(cond, pars)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "EdbList GetItemsTotal err: " + e.Error()
+		return
+	}
+	resp := new(data_manage.BaseEdbInfoItemResp)
+	if total == 0 {
+		resp.List = make([]*data_manage.BaseEdbInfoItem, 0)
+		resp.Paging = paging.GetPaging(currentIndex, pageSize, 0)
+		br.Data = resp
+		br.Ret = 200
+		br.Msg = "获取成功"
+		return
+	}
+	edbList, e := edbPermissionOb.GetItemsPageByCondition(cond, pars, []string{}, "create_time DESC, sort ASC", startSize, pageSize)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "EdbList GetItemsPageByCondition err: " + e.Error()
+		return
+	}
+
+	list := make([]*data_manage.BaseEdbInfoItem, 0)
+	for _, v := range edbList {
+		list = append(list, data_manage.FormatEdbInfo2BaseItem(v))
+	}
+	page := paging.GetPaging(currentIndex, pageSize, total)
+
+	resp.List = list
+	resp.Paging = page
+
+	br.Data = resp
+	br.Ret = 200
+	br.Msg = "获取成功"
+	return
+}
+
+// Detail
+// @Title 指标详情
+// @Description 指标详情
+// @Success 200 {object} data_manage.EdbInfoItem
+// @router /base_detail [get]
+func (this *EdbController) BaseDetail() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	unicode := this.GetString("UniqueCode")
+	edbCode := this.GetString("EdbCode")
+	if unicode == "" && edbCode == "" {
+		br.Msg = "参数有误"
+		return
+	}
+
+	edbOb := new(data_manage.EdbInfo)
+	edb := new(data_manage.EdbInfo)
+	var e error
+	if unicode != "" {
+		edb, e = edbOb.GetItemByUniCode(unicode)
+		if e != nil {
+			if e.Error() == utils.ErrNoRow() {
+				br.Msg = "指标不存在"
+				return
+			}
+			br.Msg = "获取失败"
+			br.ErrMsg = "EdbDetail GetItemByUniCode err: " + e.Error()
+			return
+		}
+	} else if edbCode != "" {
+		edb, e = edbOb.GetItemByEdbCode(edbCode)
+		if e != nil {
+			if e.Error() == utils.ErrNoRow() {
+				br.Msg = "指标不存在"
+				return
+			}
+			br.Msg = "获取失败"
+			br.ErrMsg = "EdbDetail GetItemByEdbCode err: " + e.Error()
+			return
+		}
+	}
+
+	edbPermissionOb := new(data_manage.EtaBusinessEdbPermission)
+
+	cond := ` AND a.appid = ? AND a.edb_info_id = ? `
+	pars := []interface{}{this.Appid, edb.EdbInfoId}
+	total, e := edbPermissionOb.GetItemsTotal(cond, pars)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "BaseDetail GetItemsTotal err: " + e.Error()
+		return
+	}
+	if total <= 0 {
+		br.Msg = "您没有权限查看该指标"
+		return
+	}
+
+	classifyList, err, errMsg := services.GetFullClassifyByClassifyId(edb.ClassifyId)
+	if err != nil {
+		br.Msg = err.Error()
+		br.ErrMsg = errMsg
+		return
+	}
+
+	resp := data_manage.FormatEdbInfo2BaseItem(edb)
+	resp.ClassifyList = classifyList
+
+	br.Data = resp
+	br.Ret = 200
+	br.Msg = "获取成功"
+}

+ 36 - 27
controllers/xy/base_auth_xy.go

@@ -9,6 +9,7 @@ import (
 	"github.com/beego/beego/v2/server/web"
 	"net/http"
 	"net/url"
+	"strings"
 )
 
 type BaseAuthXyController struct {
@@ -22,44 +23,59 @@ func (this *BaseAuthXyController) Prepare() {
 	uri := this.Ctx.Input.URI()
 	fmt.Println("Url:", uri)
 	if method != "HEAD" {
-		//校验签名
-		nonce := this.Ctx.Input.Header("nonce")
-		timestamp := this.Ctx.Input.Header("timestamp")
-		appid := this.Ctx.Input.Header("appid")
-		signature := this.Ctx.Input.Header("signature")
+		var nonce, timestamp, appid, signature string
+		headers := this.Ctx.Request.Header
+		for name, values := range headers {
+			fmt.Println(fmt.Sprintf("%s: %v\n", name, values))
+			switch strings.ToLower(name) {
+			case `nonce`:
+				nonce = values[0]
+			case `timestamp`:
+				timestamp = values[0]
+			case `appid`:
+				appid = values[0]
+			case `signature`:
+				signature = values[0]
+			}
+		}
 
+		//校验签名
+		//nonce := this.Ctx.Input.Header("nonce")
+		//timestamp := this.Ctx.Input.Header("timestamp")
+		//appid := this.Ctx.Input.Header("appid")
+		//signature := this.Ctx.Input.Header("signature")
 		if nonce == "" {
 			errMsg := "随机字符串不能为空"
-			this.JSON(xy.BaseResponse{ReturnCode: "E", Status: "E", Msg: "", ErrMsg: errMsg}, false, false)
+			this.JSON(xy.BaseResponse{ReturnCode: "E", Status: "E", Msg: errMsg, ErrMsg: errMsg}, false, false)
 			this.StopRun()
 			return
 		}
 
 		if timestamp == "" {
 			errMsg := "时间戳不能为空"
-			this.JSON(xy.BaseResponse{ReturnCode: "E", Status: "E", Msg: "", ErrMsg: errMsg}, false, false)
+			this.JSON(xy.BaseResponse{ReturnCode: "E", Status: "E", Msg: errMsg, ErrMsg: errMsg}, false, false)
 			this.StopRun()
 			return
 		}
 
 		if appid != utils.AppId {
 			errMsg := "商家AppId错误,请核查"
-			this.JSON(xy.BaseResponse{ReturnCode: "E", Status: "E", Msg: "", ErrMsg: errMsg}, false, false)
+			this.JSON(xy.BaseResponse{ReturnCode: "E", Status: "E", Msg: errMsg, ErrMsg: errMsg}, false, false)
 			this.StopRun()
 			return
 		}
 
 		checkSign := utils.GetSign(nonce, timestamp)
 		if signature != checkSign {
-			fmt.Printf("用户提交签名:%s;\n系统生成签名:%s\n", signature, checkSign)
+			utils.FileLog.Debug("用户提交签名:%s;\n系统生成签名:%s\n", signature, checkSign)
 			errMsg := "签名错误"
-			this.JSON(xy.BaseResponse{ReturnCode: "E", Status: "E", Msg: "", ErrMsg: errMsg}, false, false)
+			this.JSON(xy.BaseResponse{ReturnCode: "E", Status: "E", Msg: errMsg, ErrMsg: errMsg}, false, false)
 			this.StopRun()
 			return
 		}
 		if method != "GET" && method != "POST" {
 			errMsg := "无效的请求方式"
-			this.JSON(xy.BaseResponse{ReturnCode: "E", Status: "E", Msg: "", ErrMsg: errMsg}, false, false)
+			this.JSON(xy.BaseResponse{ReturnCode: "E", Status: "E", Msg: "无效的请求方式", ErrMsg: errMsg}, false, false)
 			this.StopRun()
 			return
 		}
@@ -88,27 +104,20 @@ func (c *BaseAuthXyController) ServeJSON(encoding ...bool) {
 		return
 	}
 
-	//baseRes := c.Data["json"].(*xy.BaseResponse)
-	//if baseRes != nil {
-	//	body, _ := json.Marshal(baseRes)
-	//	var requestBody string
-	//	method := c.Ctx.Input.Method()
-	//	if method == "GET" {
-	//		requestBody = c.Ctx.Request.RequestURI
-	//	} else {
-	//		requestBody, _ = url.QueryUnescape(string(c.Ctx.Input.RequestBody))
-	//	}
-	//	//记录错误日志, 并清掉错误信息避免暴露给外部
-	//	if baseRes.ErrMsg != "" {
-	//		utils.FileLog.Info(baseRes.ErrMsg)
-	//		baseRes.ErrMsg = ""
-	//	}
-	//}
 	c.JSON(c.Data["json"], hasIndent, hasEncoding)
 }
 
 func (c *BaseAuthXyController) JSON(data interface{}, hasIndent bool, coding bool) error {
 	c.Ctx.Output.Header("Content-Type", "application/json; charset=utf-8")
+	baseRes := data.(*xy.BaseResponse)
+	if baseRes != nil {
+		//记录错误日志, 并清掉错误信息避免暴露给外部
+		if baseRes.ErrMsg != "" {
+			utils.FileLog.Info(baseRes.ErrMsg)
+			c.Ctx.Input.Header("signature")
+			baseRes.ErrMsg = ""
+		}
+	}
 	var content []byte
 	var err error
 	if hasIndent {

+ 1 - 0
main.go

@@ -1,6 +1,7 @@
 package main
 
 import (
+	_ "eta/eta_hub/models"
 	_ "eta/eta_hub/routers"
 
 	"github.com/beego/beego/v2/server/web"

+ 8 - 1
models/assessment_form.go

@@ -1,6 +1,7 @@
 package models
 
 import (
+	sql2 "database/sql"
 	"eta/eta_hub/global"
 	"eta/eta_hub/utils"
 	"fmt"
@@ -133,8 +134,14 @@ func (m *AssessmentForm) GetItemByCondition(condition string, pars []interface{}
 }
 
 func (m *AssessmentForm) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
+	var totalNull sql2.NullInt64
 	sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, m.TableName(), condition)
-	err = global.DEFAULT_DB.Raw(sql, pars...).Scan(&count).Error
+	err = global.DEFAULT_DB.Raw(sql, pars...).Scan(&totalNull).Error
+	if err != nil {
+		return
+	}
+	count = int(totalNull.Int64)
+
 	return
 }
 

+ 8 - 1
models/assessment_researcher.go

@@ -1,6 +1,7 @@
 package models
 
 import (
+	sql2 "database/sql"
 	"eta/eta_hub/global"
 	"eta/eta_hub/utils"
 	"fmt"
@@ -100,8 +101,14 @@ func (m *AssessmentResearcher) GetItemByCondition(condition string, pars []inter
 }
 
 func (m *AssessmentResearcher) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
+	var totalNull sql2.NullInt64
 	sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, m.TableName(), condition)
-	err = global.DEFAULT_DB.Raw(sql, pars...).Scan(&count).Error
+	err = global.DEFAULT_DB.Raw(sql, pars...).Scan(&totalNull).Error
+	if err != nil {
+		return
+	}
+	count = int(totalNull.Int64)
+
 	return
 }
 

+ 8 - 1
models/assessment_researcher_variety_mapping.go

@@ -1,6 +1,7 @@
 package models
 
 import (
+	sql2 "database/sql"
 	"eta/eta_hub/global"
 	"eta/eta_hub/utils"
 	"fmt"
@@ -100,7 +101,13 @@ func (m *AssessmentResearcherVarietyMapping) GetItemsByCondition(condition strin
 }
 
 func (m *AssessmentResearcherVarietyMapping) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
+	var totalNull sql2.NullInt64
 	sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, m.TableName(), condition)
-	err = global.DEFAULT_DB.Raw(sql, pars...).Scan(&count).Error
+	err = global.DEFAULT_DB.Raw(sql, pars...).Scan(&totalNull).Error
+	if err != nil {
+		return
+	}
+	count = int(totalNull.Int64)
+
 	return
 }

+ 1 - 1
models/business_conf.go

@@ -60,7 +60,7 @@ func GetBusinessConf() (list map[string]string, err error) {
 func GetBusinessConfByKey(key string) (item *BusinessConf, err error) {
 	//o := orm.NewOrm()
 	sql := fmt.Sprintf(`SELECT * FROM business_conf WHERE conf_key = ? LIMIT 1`)
-	err = global.DEFAULT_DB.Raw(sql, key).Scan(&item).Error
+	err = global.DEFAULT_DB.Raw(sql, key).First(&item).Error
 	return
 }
 

+ 7 - 1
models/data_manage/base_from_business.go

@@ -1,6 +1,7 @@
 package data_manage
 
 import (
+	sql2 "database/sql"
 	"eta/eta_hub/global"
 	"eta/eta_hub/utils"
 	"fmt"
@@ -57,7 +58,12 @@ func (m *BaseFromBusinessIndex) GetItemsByCondition(cond string, pars []interfac
 	//if err != nil {
 	//	return
 	//}
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Scan(&total).Error
+	var totalNull sql2.NullInt64
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Scan(&totalNull).Error
+	if err != nil {
+		return
+	}
+	total = int(totalNull.Int64)
 	// 排序字段
 	order := `ORDER BY create_time DESC`
 	if orderRule != "" {

+ 9 - 3
models/data_manage/base_from_eia_stero.go

@@ -1,6 +1,7 @@
 package data_manage
 
 import (
+	sql2 "database/sql"
 	"eta/eta_hub/global"
 	"eta/eta_hub/utils"
 	"github.com/rdlucklib/rdluck_tools/paging"
@@ -111,17 +112,22 @@ func GetEiaSteoIndexList(condition string, pars []interface{}) (items []*BaseFro
 	sql += ` ORDER BY base_from_eia_steo_index_id ASC `
 	//o := orm.NewOrmUsingDB("data")
 	//_, err = o.Raw(sql, pars).QueryRows(&items)
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars).Find(&items).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&items).Error
 	return
 }
 
 // GetEiaSteoIndexDataCount 获取指标数据总数
 func GetEiaSteoIndexDataCount(indexCode string) (count int, err error) {
+	var totalNull sql2.NullInt64
 	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT COUNT(1) AS count FROM base_from_eia_steo_data where index_code = ? `
 	//err = o.Raw(sql, indexCode).QueryRow(&count)
 
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, indexCode).Scan(&count).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, indexCode).Scan(&totalNull).Error
+	if err != nil {
+		return
+	}
+	count = int(totalNull.Int64)
 
 	return
 }
@@ -166,6 +172,6 @@ func GetBaseFromEiaSteoIndexByCode(indexCode string) (item *BaseFromEiaSteoIndex
 	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM base_from_eia_steo_index WHERE index_code=? `
 	//err = o.Raw(sql, indexCode).QueryRow(&item)
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, indexCode).Scan(&item).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, indexCode).First(&item).Error
 	return
 }

+ 8 - 1
models/data_manage/base_from_trade_index.go

@@ -1,6 +1,7 @@
 package data_manage
 
 import (
+	sql2 "database/sql"
 	"eta/eta_hub/global"
 	"eta/eta_hub/utils"
 	"fmt"
@@ -258,9 +259,15 @@ func GetExchangeClassify(exchange, dataTime string) (classifyName []string, err
 }
 
 func GetLatestDate(exchange string) (dataTime string, err error) {
+	var stringNull sql2.NullString
 	//o := orm.NewOrmUsingDB("data")
 	sql := "SELECT data_time FROM base_from_trade_" + exchange + "_index ORDER BY data_time desc limit 1"
-	err = global.DbMap[utils.DbNameIndex].Raw(sql).Scan(&dataTime).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql).Scan(&stringNull).Error
+	if err != nil {
+		return
+	}
+	dataTime = stringNull.String
+
 	return
 }
 

+ 2 - 2
models/data_manage/chart_classify.go

@@ -35,7 +35,7 @@ func (m *ChartClassify) GetItemsByCondition(cond string, pars []interface{}, fie
 		order = ` ORDER BY ` + orderRule
 	}
 	sql := fmt.Sprintf(`SELECT %s FROM chart_classify WHERE 1=1 %s %s`, fields, cond, order)
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars).Find(&items).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&items).Error
 	return
 }
 
@@ -80,6 +80,6 @@ type ChartClassifyView struct {
 func GetChartClassifyViewById(classifyId int) (item *ChartClassifyView, err error) {
 	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM chart_classify WHERE chart_classify_id=? `
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, classifyId).Scan(&item).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, classifyId).First(&item).Error
 	return
 }

+ 12 - 5
models/data_manage/chart_info.go

@@ -1,6 +1,7 @@
 package data_manage
 
 import (
+	sql2 "database/sql"
 	"eta/eta_hub/global"
 	"eta/eta_hub/utils"
 	"fmt"
@@ -55,14 +56,20 @@ func (m *ChartInfo) GetItemsByCondition(cond string, pars []interface{}, fieldAr
 		order = ` ORDER BY ` + orderRule
 	}
 	sql := fmt.Sprintf(`SELECT %s FROM chart_info WHERE 1=1 %s %s`, fields, cond, order)
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars).Find(&items).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&items).Error
 	return
 }
 
 func (m *ChartInfo) GetItemTotal(cond string, pars []interface{}) (total int, err error) {
 	//o := orm.NewOrmUsingDB("data")
+	var totalNull sql2.NullInt64
 	sql := fmt.Sprintf(`SELECT COUNT(*) FROM chart_info WHERE 1=1 %s`, cond)
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars).Scan(&total).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Scan(&totalNull).Error
+	if err != nil {
+		return
+	}
+	total = int(totalNull.Int64)
+
 	return
 }
 
@@ -78,14 +85,14 @@ func (m *ChartInfo) GetItemsPageByCondition(cond string, pars []interface{}, fie
 	}
 	sql := fmt.Sprintf(`SELECT %s FROM chart_info WHERE 1=1 %s %s`, fields, cond, order)
 	sql += fmt.Sprintf(` LIMIT %d,%d`, startSize, pageSize)
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars).Find(&items).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&items).Error
 	return
 }
 
 func (m *ChartInfo) GetItemByCode(code string) (item *ChartInfo, err error) {
 	//o := orm.NewOrmUsingDB("data")
 	sql := fmt.Sprintf(`SELECT * FROM chart_info WHERE unique_code = ? LIMIT 1`)
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, code).Scan(&item).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, code).First(&item).Error
 	return
 }
 
@@ -486,7 +493,7 @@ func GetChartInfoByUniqueCode(uniqueCode string) (chartInfo *ChartInfo, err erro
 	sql := `
 		SELECT * FROM chart_info WHERE unique_code = ?
 	`
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, uniqueCode).Scan(&chartInfo).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, uniqueCode).First(&chartInfo).Error
 	if err != nil {
 		return nil, err
 	}

+ 10 - 2
models/data_manage/com_trade_data.go

@@ -1,6 +1,7 @@
 package data_manage
 
 import (
+	sql2 "database/sql"
 	"eta/eta_hub/global"
 	"eta/eta_hub/utils"
 	"github.com/rdlucklib/rdluck_tools/paging"
@@ -63,11 +64,17 @@ type ComTradeDataListResp struct {
 // GetComTradeListCount 获取指标数据汇总数
 func GetComTradeListCount(condition string, pars []interface{}) (count int, err error) {
 	//o := orm.NewOrmUsingDB("data")
+	var totalNull sql2.NullInt64
 	sql := `SELECT COUNT(1) AS count FROM com_trade_data WHERE 1=1 `
 	if condition != "" {
 		sql += condition
 	}
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars).Scan(&count).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Scan(&totalNull).Error
+	if err != nil {
+		return
+	}
+	count = int(totalNull.Int64)
+
 	return
 }
 
@@ -80,6 +87,7 @@ func GetComTradeList(condition string, pars []interface{}, startSize, pageSize i
 	}
 	sql += ` ORDER BY ` + orderBy
 	sql += `  limit ?,? `
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars, startSize, pageSize).Find(&list).Error
+	pars = append(pars, startSize, pageSize)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&list).Error
 	return
 }

+ 2 - 2
models/data_manage/com_trade_index.go

@@ -24,7 +24,7 @@ func GetComTradeIndexList(condition string, pars []interface{}) (list []*ComTrad
 		sql += condition
 	}
 	sql += `ORDER BY com_trade_id DESC `
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars).Find(&list).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&list).Error
 	return
 }
 
@@ -61,6 +61,6 @@ type ComTradeCodeMapping struct {
 func GetComTradeIndex(indexCode string) (item *ComTradeCodeMapping, err error) {
 	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM com_trade_code_mapping WHERE code=? `
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, indexCode).Scan(&item).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, indexCode).First(&item).Error
 	return
 }

+ 59 - 1
models/data_manage/edb_classify.go

@@ -36,7 +36,7 @@ func (m *EdbClassify) GetItemsByCondition(cond string, pars []interface{}, field
 		order = ` ORDER BY ` + orderRule
 	}
 	sql := fmt.Sprintf(`SELECT %s FROM edb_classify WHERE 1=1 %s %s`, fields, cond, order)
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars).Find(&items).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&items).Error
 	return
 }
 
@@ -69,3 +69,61 @@ func FormatEdbClassify2Item(origin *EdbClassify) (item *EdbClassifyItem) {
 	item.Child = make([]*EdbClassifyItem, 0)
 	return
 }
+
+type EdbClassifyIdItems struct {
+	ClassifyId   int `description:"分类id" json:"-"`
+	ClassifyName string
+	//ClassifyNameEn   string
+	UniqueCode string `description:"唯一编码"`
+	ParentId   int    `description:"父级分类id" json:"-"`
+	Level      int    `description:"层级"`
+	RootId     int    `description:"顶级分类id" json:"-"`
+	//IsJoinPermission int    `description:"是否加入权限管控,0:不加入;1:加入;默认:0" json:"-"`
+	//HaveOperaAuth    bool   `description:"是否有该数据权限,默认:false"`
+}
+
+func GetEdbClassifyById(classifyId int) (item *EdbClassify, err error) {
+	//o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM edb_classify WHERE classify_id=? `
+	//err = o.Raw(sql, classifyId).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, classifyId).First(&item).Error
+	return
+}
+
+type EdbClassifyItems struct {
+	ClassifyId      int `description:"分类id"`
+	EdbInfoId       int `description:"指标id"`
+	ClassifyName    string
+	ClassifyNameEn  string
+	ParentId        int
+	RootId          int    `description:"顶级id"`
+	Level           int    `description:"层级"`
+	Sort            int    `description:"排序字段,越小越靠前,默认值:10"`
+	UniqueCode      string `description:"唯一编码"`
+	Source          int    `description:"来源id"`
+	SourceName      string `description:"来源名称"`
+	SysUserId       int    `description:"创建人id"`
+	SysUserRealName string `description:"创建人姓名"`
+	StartDate       string
+	EdbCode         string
+	EdbType         int                 `description:"指标类型:1:基础指标,2:计算指标"`
+	Children        []*EdbClassifyItems `gorm:"-"`
+	//Button           EdbClassifyItemsButton `description:"操作权限" gorm:"-"`
+	IsJoinPermission int  `description:"是否加入权限管控,0:不加入;1:加入;默认:0"`
+	HaveOperaAuth    bool `description:"是否有数据权限"`
+	SelectDisable    bool `description:"是否可以被选中 前端用"`
+}
+
+func GetEdbClassifyByRootIdLevel(rootId int, classifyType uint8, orderStr string) (items []*EdbClassifyItems, err error) {
+	//o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT * FROM edb_classify WHERE root_id=? AND classify_type = ? `
+	if orderStr != "" {
+		sql += orderStr
+	} else {
+		sql += ` order by level desc, sort asc, classify_id asc`
+	}
+
+	//_, err = o.Raw(sql, rootId, classifyType).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, rootId, classifyType).Find(&items).Error
+	return
+}

+ 1 - 1
models/data_manage/edb_data.go

@@ -235,7 +235,7 @@ func (m *EdbData) getItemsBySourceAndCodeByMysql(source, subSource int, edbCode,
 		pars = append(pars, startDate)
 	}
 	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE %s %s`, fields, tableName, cond, order)
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars).Find(&items).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&items).Error
 	return
 }
 

+ 50 - 7
models/data_manage/edb_info.go

@@ -1,6 +1,7 @@
 package data_manage
 
 import (
+	sql2 "database/sql"
 	"eta/eta_hub/global"
 	"eta/eta_hub/utils"
 	"fmt"
@@ -68,7 +69,7 @@ func (m *EdbInfo) GetItemsByCondition(cond string, pars []interface{}, fieldArr
 		order = ` ORDER BY ` + orderRule
 	}
 	sql := fmt.Sprintf(`SELECT %s FROM edb_info WHERE 1=1 %s %s`, fields, cond, order)
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars).Find(&items).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&items).Error
 	return
 }
 
@@ -84,28 +85,34 @@ func (m *EdbInfo) GetItemsPageByCondition(cond string, pars []interface{}, field
 	}
 	sql := fmt.Sprintf(`SELECT %s FROM edb_info WHERE 1=1 %s %s`, fields, cond, order)
 	sql += fmt.Sprintf(` LIMIT %d,%d`, startSize, pageSize)
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars).Find(&items).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&items).Error
 	return
 }
 
 func (m *EdbInfo) GetItemsTotal(cond string, pars []interface{}) (total int, err error) {
+	var totalNull sql2.NullInt64
 	//o := orm.NewOrmUsingDB("data")
 	sql := fmt.Sprintf(`SELECT COUNT(*) FROM edb_info WHERE 1=1 %s`, cond)
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars).Scan(&total).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Scan(&totalNull).Error
+	if err != nil {
+		return
+	}
+	total = int(totalNull.Int64)
+
 	return
 }
 
 func (m *EdbInfo) GetItemByUniCode(code string) (item *EdbInfo, err error) {
 	//o := orm.NewOrmUsingDB("data")
 	sql := fmt.Sprintf(`SELECT * FROM edb_info WHERE unique_code = ? LIMIT 1`)
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, code).Scan(&item).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, code).First(&item).Error
 	return
 }
 
 func (m *EdbInfo) GetItemByEdbCode(code string) (item *EdbInfo, err error) {
 	//o := orm.NewOrmUsingDB("data")
 	sql := fmt.Sprintf(`SELECT * FROM edb_info WHERE edb_code = ? LIMIT 1`)
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, code).Scan(&item).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, code).First(&item).Error
 	return
 }
 
@@ -138,6 +145,7 @@ type EdbInfoItem struct {
 	SysUserRealName  string  `description:"创建人姓名"`
 	ErDataUpdateDate string  `description:"本次更新,数据发生变化的最早日期"`
 	//EdbData      []*EdbDataItem `description:"指标数据"`
+	ClassifyList []*EdbClassifyIdItems `description:"分类列表"`
 }
 
 type EdbInfoItemResp struct {
@@ -215,7 +223,7 @@ type TraceEdbInfoResp struct {
 func GetEdbInfoById(edbInfoId int) (item *EdbInfo, err error) {
 	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM edb_info WHERE edb_info_id=? `
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, edbInfoId).Scan(&item).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, edbInfoId).First(&item).Error
 	return
 }
 
@@ -239,6 +247,41 @@ func GetEdbInfoByEdbCodeList(source int, edbCodeList []string) (items []*EdbInfo
 	}
 	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM edb_info WHERE source=? AND edb_code in (` + utils.GetOrmInReplace(num) + `) `
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, source, edbCodeList).Scan(&items).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, source, edbCodeList).Find(&items).Error
+	return
+}
+
+type BaseEdbInfoItemResp struct {
+	List   []*BaseEdbInfoItem `description:"指标列表"`
+	Paging *paging.PagingItem `description:"分页"`
+}
+
+// BaseEdbInfoItem 指标信息
+type BaseEdbInfoItem struct {
+	UniqueCode   string                `description:"指标唯一编码"`
+	EdbCode      string                `description:"指标编码"`
+	EdbName      string                `description:"指标名称"`
+	SourceName   string                `description:"来源名称"`
+	Frequency    string                `description:"频率"`
+	Unit         string                `description:"单位"`
+	StartDate    string                `description:"起始日期"`
+	EndDate      string                `description:"终止日期"`
+	ClassifyList []*EdbClassifyIdItems `description:"分类列表"`
+}
+
+func FormatEdbInfo2BaseItem(origin *EdbInfo) (item *BaseEdbInfoItem) {
+	if origin == nil {
+		return
+	}
+	item = new(BaseEdbInfoItem)
+	item.SourceName = origin.SourceName
+	item.EdbCode = origin.EdbCode
+	item.EdbName = origin.EdbName
+	item.Frequency = origin.Frequency
+	item.Unit = origin.Unit
+	item.StartDate = origin.StartDate
+	item.EndDate = origin.EndDate
+	item.UniqueCode = origin.UniqueCode
+	//item.EdbData = edbData
 	return
 }

+ 1 - 1
models/data_manage/edb_info_calculate_mapping.go

@@ -109,6 +109,6 @@ func GetRelationEdbInfoListMappingByCondition(condition string, pars []interface
 	if condition != "" {
 		sql += condition
 	}
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars).Find(&item).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&item).Error
 	return
 }

+ 2 - 2
models/data_manage/edb_source.go

@@ -37,7 +37,7 @@ func GetEdbSourceItemsByCondition(condition string, pars []interface{}, fieldArr
 		order = ` ORDER BY ` + orderRule
 	}
 	sql := fmt.Sprintf(`SELECT %s FROM edb_source WHERE 1=1 %s %s`, fields, condition, order)
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars).Find(&items).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&items).Error
 	return
 }
 
@@ -45,7 +45,7 @@ func GetEdbSourceItemsByCondition(condition string, pars []interface{}, fieldArr
 func GetEdbSourceItemByCondition(condition string, pars []interface{}) (item *EdbSource, err error) {
 	//o := orm.NewOrmUsingDB("data")
 	sql := fmt.Sprintf(`SELECT * FROM edb_source WHERE 1=1 %s`, condition)
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars).Scan(&item).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).First(&item).Error
 	return
 }
 

+ 13 - 5
models/data_manage/eta_business_chart_permission.go

@@ -1,6 +1,7 @@
 package data_manage
 
 import (
+	sql2 "database/sql"
 	"eta/eta_hub/global"
 	"eta/eta_hub/utils"
 	"fmt"
@@ -66,7 +67,7 @@ func (m *EtaBusinessChartPermission) GetChartListByBusinessCode(businessCode str
 	return chartList, nil
 }
 
-func (m *EtaBusinessChartPermission) GetChartListByBusinessCodeTotal(businessCode string) (int64, error) {
+func (m *EtaBusinessChartPermission) GetChartListByBusinessCodeTotal(businessCode string) (total int64, err error) {
 	//o := orm.NewOrmUsingDB("data")
 	sql := `
 		SELECT COUNT(*) FROM eta_business_chart_permission p
@@ -75,11 +76,12 @@ func (m *EtaBusinessChartPermission) GetChartListByBusinessCodeTotal(businessCod
 		WHERE 
 			p.business_code = ?
 	`
-	var total int64
-	err := global.DbMap[utils.DbNameIndex].Raw(sql, businessCode).Scan(&total)
+	var totalNull sql2.NullInt64
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, businessCode).Scan(&totalNull).Error
 	if err != nil {
 		return 0, fmt.Errorf("failed to get chart list total: %v", err)
 	}
+	total = totalNull.Int64
 	return total, nil
 }
 
@@ -96,7 +98,7 @@ func (m *EtaBusinessChartPermission) GetChartInfoByUniqueCode(businessCode strin
 		WHERE 
 			p.business_code = ? AND c.unique_code = ?
 	`
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, businessCode, uniqueCode).Scan(&chartInfo).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, businessCode, uniqueCode).First(&chartInfo).Error
 	return
 }
 
@@ -180,6 +182,12 @@ func (m *EtaBusinessChartPermission) GetChartCountByBusinessCodeAndEdbInfoId(bus
 			p.business_code = ? AND c.edb_info_id = ?
 	`
 
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, businessCode, edbInfoId).Scan(&count).Error
+	var totalNull sql2.NullInt64
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, businessCode, edbInfoId).Scan(&totalNull).Error
+	if err != nil {
+		return 0, fmt.Errorf("failed to get chart list total: %v", err)
+	}
+	count = totalNull.Int64
+
 	return
 }

+ 63 - 0
models/data_manage/eta_business_edb_permission.go

@@ -0,0 +1,63 @@
+package data_manage
+
+import (
+	sql2 "database/sql"
+	"eta/eta_hub/global"
+	"eta/eta_hub/utils"
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"strings"
+	"time"
+)
+
+type EtaBusinessEdbPermission struct {
+	EtaBusinessEdbPermissionId int       `orm:"column(eta_business_edb_permission_id);pk;auto"`
+	EdbInfoId                  int       `description:"指标id"`
+	BusinessCode               string    `description:"商家编码"`
+	Appid                      string    `description:"appid"`
+	ModifyTime                 time.Time `description:"修改时间"`
+	CreateTime                 time.Time `description:"创建时间"`
+}
+
+// TableName 设置表名
+func (m *EtaBusinessEdbPermission) TableName() string {
+	return "eta_business_edb_permission"
+}
+
+// Init 初始化表结构
+func init() {
+	orm.RegisterModel(new(EtaBusinessEdbPermission))
+}
+
+func (m *EtaBusinessEdbPermission) GetItemsTotal(cond string, pars []interface{}) (total int, err error) {
+	//o := orm.NewOrmUsingDB("data")
+	var totalNull sql2.NullInt64
+	sql := fmt.Sprintf(`SELECT COUNT(*) total FROM eta_business_edb_permission AS a 
+          LEFT JOIN edb_info AS b on a.edb_info_id = b.edb_info_id WHERE 1=1 %s`, cond)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Scan(&totalNull).Error
+	if err != nil {
+		return
+	}
+	total = int(totalNull.Int64)
+
+	return
+}
+
+func (m *EtaBusinessEdbPermission) GetItemsPageByCondition(cond string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (items []*EdbInfo, err error) {
+	//o := orm.NewOrmUsingDB("data")
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `b.*`
+	}
+	order := `ORDER BY b.create_time DESC`
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT %s FROM eta_business_edb_permission AS a 
+          LEFT JOIN edb_info AS b on a.edb_info_id = b.edb_info_id WHERE 1=1 %s %s`, fields, cond, order)
+	sql += fmt.Sprintf(` LIMIT %d,%d`, startSize, pageSize)
+
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&items).Error
+
+	return
+}

+ 1 - 1
models/data_manage/variety.go

@@ -32,7 +32,7 @@ func (m *Variety) GetItemsByCondition(cond string, pars []interface{}, fieldArr
 		order = ` ORDER BY ` + orderRule
 	}
 	sql := fmt.Sprintf(`SELECT %s FROM variety WHERE 1=1 %s %s`, fields, cond, order)
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars).Find(&items).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&items).Error
 	return
 }
 

+ 1 - 1
models/data_manage/variety_edb_info.go

@@ -35,7 +35,7 @@ func (m *VarietyEdbInfo) GetItemsByCondition(cond string, pars []interface{}, fi
 		order = ` ORDER BY ` + orderRule
 	}
 	sql := fmt.Sprintf(`SELECT %s FROM variety_edb_info WHERE 1=1 %s %s`, fields, cond, order)
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars).Find(&items).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&items).Error
 	return
 }
 

+ 12 - 0
models/db.go

@@ -62,3 +62,15 @@ func afterInitTable() {
 	// 初始化是否启用mongo配置
 	InitUseMongoConf()
 }
+
+// AfterInitTable
+// @Description: 初始化表结构的的后置操作
+// @author: Roc
+// @datetime 2024-07-01 13:31:09
+func init() {
+	// 初始化指标来源配置
+	data_manage.InitEdbSource()
+
+	// 初始化是否启用mongo配置
+	InitUseMongoConf()
+}

+ 14 - 4
models/en_classify_permission.go

@@ -1,6 +1,7 @@
 package models
 
 import (
+	sql2 "database/sql"
 	"eta/eta_hub/global"
 	"eta/eta_hub/utils"
 	"fmt"
@@ -57,7 +58,7 @@ func (m *EnClassifyPermission) Del() (err error) {
 func (m *EnClassifyPermission) GetItemById(id int) (item *EnClassifyPermission, err error) {
 	//o := orm.NewOrmUsingDB("rddp")
 	sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), EnClassifyPermissionColumns.EnClassifyPermissionId)
-	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, id).Scan(&item).Error
+	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, id).First(&item).Error
 	return
 }
 
@@ -66,14 +67,20 @@ func (m *EnClassifyPermission) GetItemByCondition(condition string, pars []inter
 	sql := fmt.Sprintf(`SELECT * FROM %s WHERE 1=1 `, m.TableName())
 	sql += condition
 	sql += ` LIMIT 1`
-	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, pars...).Scan(&item).Error
+	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, pars...).First(&item).Error
 	return
 }
 
 func (m *EnClassifyPermission) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
 	//o := orm.NewOrmUsingDB("rddp")
+	var totalNull sql2.NullInt64
 	sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, m.TableName(), condition)
-	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, pars...).Scan(&count).Error
+	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, pars...).Scan(&totalNull).Error
+	if err != nil {
+		return
+	}
+	count = int(totalNull.Int64)
+
 	return
 }
 
@@ -94,6 +101,7 @@ func (m *EnClassifyPermission) GetItemsByCondition(condition string, pars []inte
 
 func (m *EnClassifyPermission) GetPageItemsByCondition(startSize, pageSize int, condition string, pars []interface{}, fieldArr []string, orderRule string) (total int, items []*EnClassifyPermission, err error) {
 	//o := orm.NewOrmUsingDB("rddp")
+	var totalNull sql2.NullInt64
 	fields := strings.Join(fieldArr, ",")
 	if len(fieldArr) == 0 {
 		fields = `*`
@@ -104,9 +112,11 @@ func (m *EnClassifyPermission) GetPageItemsByCondition(startSize, pageSize int,
 	}
 	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
 	totalSql := `SELECT COUNT(1) total FROM (` + sql + `) z`
-	if err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(totalSql, pars...).Scan(&total).Error; err != nil {
+	if err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(totalSql, pars...).Scan(&totalNull).Error; err != nil {
 		return
 	}
+	total = int(totalNull.Int64)
+
 	sql += ` LIMIT ?,?`
 	pars = append(pars, startSize, pageSize)
 	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, pars...).Find(&items).Error

+ 16 - 4
models/english_report.go

@@ -1,6 +1,7 @@
 package models
 
 import (
+	sql2 "database/sql"
 	"eta/eta_hub/global"
 	"eta/eta_hub/utils"
 	"fmt"
@@ -54,14 +55,20 @@ func (m *EnglishReport) Update(cols []string) (err error) {
 func (m *EnglishReport) GetItemById(id int) (item *EnglishReport, err error) {
 	//o := orm.NewOrmUsingDB("rddp")
 	sql := `SELECT * FROM english_report WHERE id = ? LIMIT 1`
-	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, id).Scan(&item).Error
+	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, id).First(&item).Error
 	return
 }
 
 func (m *EnglishReport) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
 	//o := orm.NewOrmUsingDB("rddp")
+	var totalNull sql2.NullInt64
 	sql := fmt.Sprintf(`SELECT COUNT(1) FROM english_report WHERE 1=1 %s`, condition)
-	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, pars...).Scan(&count).Error
+	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, pars...).Scan(&totalNull).Error
+	if err != nil {
+		return
+	}
+	count = int(totalNull.Int64)
+
 	return
 }
 
@@ -233,6 +240,7 @@ func GetEnglishClassifyRootId(startSize, pageSize int, keyword string) (items []
 }
 
 func GetEnglishClassifyListCount(keyword string) (count int, err error) {
+	var totalNull sql2.NullInt64
 	sqlCount := ``
 	//o := orm.NewOrmUsingDB("rddp")
 	if keyword != "" {
@@ -244,11 +252,15 @@ func GetEnglishClassifyListCount(keyword string) (count int, err error) {
                WHERE id IN(SELECT parent_id FROM english_classify
                WHERE parent_id>0 AND classify_name LIKE ?)
                )AS t `
-		err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sqlCount, utils.GetLikeKeyword(keyword), utils.GetLikeKeyword(keyword)).Scan(&count).Error
+		err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sqlCount, utils.GetLikeKeyword(keyword), utils.GetLikeKeyword(keyword)).Scan(&totalNull).Error
 	} else {
 		sqlCount = `SELECT COUNT(1) AS count FROM english_classify WHERE parent_id=0`
-		err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sqlCount).Scan(&count).Error
+		err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sqlCount).Scan(&totalNull).Error
+	}
+	if err != nil {
+		return
 	}
+	count = int(totalNull.Int64)
 
 	return
 }

+ 23 - 0
models/open_api_user.go

@@ -0,0 +1,23 @@
+package models
+
+import (
+	"eta/eta_hub/global"
+)
+
+type OpenApiUser struct {
+	Appid      string `orm:"column(appid);pk" json:"appid" description:"开放平台appid"`
+	Secret     string `orm:"column(secret);" json:"secret" description:"开放平台秘钥"`
+	Ip         string `orm:"column(ip);" json:"ip" description:"限制请求来源ip,多个ip用英文,隔开"`
+	Remark     string `orm:"column(remark);" json:"remark" description:"备注信息"`
+	CreateTime string `orm:"column(create_time);" json:"create_time" description:"创建时间"`
+	ModifyTime string `orm:"column(modify_time);" json:"modify_time" description:"最近一次更新时间"`
+}
+
+// GetByAppid 根据appid获取开放api用户信息
+func GetByAppid(appid string) (item *OpenApiUser, err error) {
+	sql := `SELECT * FROM open_api_user WHERE appid=? LIMIT 1`
+	//o := orm.NewOrm()
+	err = global.DEFAULT_DB.Raw(sql, appid).First(&item).Error
+
+	return
+}

+ 39 - 9
models/report.go

@@ -1,6 +1,7 @@
 package models
 
 import (
+	sql2 "database/sql"
 	"eta/eta_hub/global"
 	"eta/eta_hub/utils"
 	"github.com/beego/beego/v2/client/orm"
@@ -101,6 +102,7 @@ type ReportListResp struct {
 }
 
 func GetReportListCount(condition string, pars []interface{}, companyType string) (count int, err error) {
+	var totalNull sql2.NullInt64
 	//产品权限
 	companyTypeSqlStr := ``
 	if companyType == "ficc" {
@@ -114,7 +116,12 @@ func GetReportListCount(condition string, pars []interface{}, companyType string
 	if condition != "" {
 		sql += condition
 	}
-	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, pars...).Scan(&count).Error
+	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, pars...).Scan(&totalNull).Error
+	if err != nil {
+		return
+	}
+	count = int(totalNull.Int64)
+
 	return
 }
 
@@ -195,33 +202,45 @@ type ReportDetail struct {
 func GetReportById(reportId int) (item *Report, err error) {
 	//o := orm.NewOrmUsingDB("rddp")
 	sql := `SELECT * FROM report WHERE id=?`
-	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, reportId).Scan(&item).Error
+	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, reportId).First(&item).Error
 	return
 }
 
 func GetReportStage(classifyIdFirst, classifyIdSecond int) (count int, err error) {
+	var totalNull sql2.NullInt64
 	//o := orm.NewOrmUsingDB("rddp")
 	sql := ``
 	if classifyIdSecond > 0 {
 		sql = "SELECT MAX(stage) AS max_stage FROM report WHERE classify_id_second=? "
-		global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, classifyIdSecond).Scan(&count)
+		global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, classifyIdSecond).Scan(&totalNull)
 	} else {
 		sql = "SELECT MAX(stage) AS max_stage FROM report WHERE classify_id_first=? "
-		global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, classifyIdFirst).Scan(&count)
+		global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, classifyIdFirst).Scan(&totalNull)
+	}
+	if err != nil {
+		return
 	}
+	count = int(totalNull.Int64)
+
 	return
 }
 
 func GetReportStageEdit(classifyIdFirst, classifyIdSecond, reportId int) (count int, err error) {
+	var totalNull sql2.NullInt64
 	//o := orm.NewOrmUsingDB("rddp")
 	sql := ``
 	if classifyIdSecond > 0 {
 		sql = "SELECT MAX(stage) AS max_stage FROM report WHERE classify_id_second=? AND id<>? "
-		global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, classifyIdSecond, reportId).Scan(&count)
+		global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, classifyIdSecond, reportId).Scan(&totalNull)
 	} else {
 		sql = "SELECT MAX(stage) AS max_stage FROM report WHERE classify_id_first=? AND id<>? "
-		global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, classifyIdFirst, reportId).Scan(&count)
+		global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, classifyIdFirst, reportId).Scan(&totalNull)
 	}
+	if err != nil {
+		return
+	}
+	count = int(totalNull.Int64)
+
 	return
 }
 
@@ -371,9 +390,14 @@ func ModifyReportThsMsgIsSend(item *ReportDetail) (err error) {
 
 // GetDayWeekReportStage 获取晨报周报期数
 func GetDayWeekReportStage(classifyIdFirst int, yearStart time.Time) (count int, err error) {
+	var totalNull sql2.NullInt64
 	//o := orm.NewOrmUsingDB("rddp")
 	sql := " SELECT MAX(stage) AS max_stage FROM report WHERE classify_id_first = ? AND create_time > ? "
-	global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, classifyIdFirst, yearStart).Scan(&count)
+	global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, classifyIdFirst, yearStart).Scan(&totalNull)
+	if err != nil {
+		return
+	}
+	count = int(totalNull.Int64)
 
 	return
 }
@@ -382,7 +406,7 @@ func GetDayWeekReportStage(classifyIdFirst int, yearStart time.Time) (count int,
 func GetReportByReportId(reportId int) (item *Report, err error) {
 	//o := orm.NewOrmUsingDB("rddp")
 	sql := `SELECT * FROM report WHERE id = ?`
-	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, reportId).Scan(&item).Error
+	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, reportId).First(&item).Error
 	return
 }
 
@@ -636,7 +660,13 @@ func GetClassifyListCount(keyWord, companyType string) (count int, err error) {
 		sqlCount = `SELECT COUNT(1) AS count FROM classify WHERE parent_id=0 ` + companyTypeSqlStr
 	}
 	//o := orm.NewOrmUsingDB("rddp")
-	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sqlCount, pars...).Scan(&count).Error
+	var totalNull sql2.NullInt64
+	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sqlCount, pars...).Scan(&totalNull).Error
+	if err != nil {
+		return
+	}
+	count = int(totalNull.Int64)
+
 	return
 }
 

+ 1 - 1
models/resource.go

@@ -43,7 +43,7 @@ func AddResource(item *Resource) (newId int64, err error) {
 func GetResourceById(id string) (item *Resource, err error) {
 	//o := orm.NewOrmUsingDB("rddp")
 	sql := "SELECT * FROM resource WHERE id=? "
-	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, id).Scan(&item).Error
+	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, id).First(&item).Error
 	return
 }
 

+ 26 - 5
models/sandbox/sandbox.go

@@ -1,6 +1,7 @@
 package sandbox
 
 import (
+	sql2 "database/sql"
 	"eta/eta_hub/global"
 	"eta/eta_hub/utils"
 	"github.com/rdlucklib/rdluck_tools/paging"
@@ -41,7 +42,7 @@ func (sandbox *Sandbox) Update(cols []string) (err error) {
 func GetSandboxById(sandboxId int) (sandboxInfo *SandboxItem, err error) {
 	//o := orm.NewOrmUsingDB("data")
 	sql := `select * from sandbox where sandbox_id = ? and is_delete = 0`
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, sandboxId).Scan(&sandboxInfo).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, sandboxId).First(&sandboxInfo).Error
 	return
 }
 
@@ -74,6 +75,7 @@ type SandboxListItem struct {
 
 func GetSandboxClassify(sandboxClassifyId int) (sandbox_classify_id string, err error) {
 	//o := orm.NewOrmUsingDB("data")
+	var stringNull sql2.NullString
 	sql := `SELECT GROUP_CONCAT(t.sandbox_classify_id) AS sandbox_classify_id FROM (
 			SELECT a.sandbox_classify_id FROM sandbox_classify AS a 
 			WHERE a.sandbox_classify_id=?
@@ -87,7 +89,12 @@ func GetSandboxClassify(sandboxClassifyId int) (sandbox_classify_id string, err
 WHERE
 	parent_id IN ( SELECT sandbox_classify_id FROM sandbox_classify WHERE parent_id = ? )
 			)AS t`
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, sandboxClassifyId, sandboxClassifyId, sandboxClassifyId).Scan(&sandbox_classify_id).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, sandboxClassifyId, sandboxClassifyId, sandboxClassifyId).Scan(&stringNull).Error
+	if err != nil {
+		return
+	}
+	sandbox_classify_id = stringNull.String
+
 	return
 }
 
@@ -103,17 +110,24 @@ func GetSandboxListByCondition(condition string, pars []interface{}, startSize,
 		sql += condition
 	}
 	sql += " ORDER BY create_time DESC LIMIT ?,? "
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars, startSize, pageSize).Find(&item).Error
+	pars = append(pars, startSize, pageSize)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&item).Error
 	return
 }
 
 func GetSandboxListCountByCondition(condition string, pars []interface{}) (count int, err error) {
 	//o := orm.NewOrmUsingDB("data")
+	var totalNull sql2.NullInt64
 	sql := ` SELECT COUNT(1) AS count FROM sandbox WHERE 1=1 `
 	if condition != "" {
 		sql += condition
 	}
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars).Scan(&count).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Scan(&totalNull).Error
+	if err != nil {
+		return
+	}
+	count = int(totalNull.Int64)
+
 	return
 }
 
@@ -155,7 +169,14 @@ FROM
 	INNER JOIN sandbox_classify m 
 WHERE
 	sandbox_classify_id = vm._id `
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, sandboxClassifyId).Scan(&ids).Error
+
+	var stringNull sql2.NullString
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, sandboxClassifyId).Scan(&stringNull).Error
+	if err != nil {
+		return
+	}
+	ids = stringNull.String
+
 	return
 }
 

+ 31 - 6
models/sandbox/sandbox_classify.go

@@ -1,6 +1,7 @@
 package sandbox
 
 import (
+	sql2 "database/sql"
 	"eta/eta_hub/global"
 	"eta/eta_hub/utils"
 	"fmt"
@@ -76,16 +77,28 @@ type AddSandboxClassifyReq struct {
 
 func GetSandboxClassifyCount(sandboxClassifyName string, parentId int) (count int, err error) {
 	//o := orm.NewOrmUsingDB("data")
+	var totalNull sql2.NullInt64
 	sql := `SELECT COUNT(1) AS count FROM sandbox_classify WHERE parent_id=? AND sandbox_classify_name=? `
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, parentId, sandboxClassifyName).Scan(&count).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, parentId, sandboxClassifyName).Scan(&totalNull).Error
+	if err != nil {
+		return
+	}
+	count = int(totalNull.Int64)
+
 	return
 }
 
 // GetSandboxClassifyMaxSort 获取沙盘分类下最大的排序数
 func GetSandboxClassifyMaxSort(parentId int) (sort int, err error) {
 	//o := orm.NewOrmUsingDB("data")
+	var totalNull sql2.NullInt64
 	sql := `SELECT Max(sort) AS sort FROM sandbox_classify WHERE parent_id=? `
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, parentId).Scan(&sort).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, parentId).Scan(&totalNull).Error
+	if err != nil {
+		return
+	}
+	sort = int(totalNull.Int64)
+
 	return
 }
 
@@ -99,7 +112,7 @@ type EditSandboxClassifyReq struct {
 func GetSandboxClassifyById(classifyId int) (item *SandboxClassify, err error) {
 	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM sandbox_classify WHERE sandbox_classify_id=? `
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, classifyId).Scan(&item).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, classifyId).First(&item).Error
 	return
 }
 
@@ -116,6 +129,7 @@ type SandboxClassifyDeleteCheckReq struct {
 
 func GetSandboxInfoCountByClassifyId(classifyId int) (count int, err error) {
 	//o := orm.NewOrmUsingDB("data")
+	var totalNull sql2.NullInt64
 	sql := ` SELECT COUNT(1) AS count FROM sandbox AS a
 				WHERE a.sandbox_classify_id IN(
 				SELECT t.sandbox_classify_id FROM 
@@ -128,7 +142,12 @@ func GetSandboxInfoCountByClassifyId(classifyId int) (count int, err error) {
 				UNION SELECT * FROM sandbox_classify WHERE sandbox_classify_id = @pid 
 				)AS t
 				) AND a.is_delete = 0 `
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, classifyId).Scan(&count).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, classifyId).Scan(&totalNull).Error
+	if err != nil {
+		return
+	}
+	count = int(totalNull.Int64)
+
 	return
 }
 
@@ -186,7 +205,7 @@ func UpdateSandboxClassifySortByParentId(parentId, classifyId, nowSort int, upda
 func GetFirstSandboxClassifyByParentId(parentId int) (item *SandboxClassify, err error) {
 	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM sandbox_classify WHERE parent_id=? order by sort asc,sandbox_classify_id asc limit 1`
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, parentId).Scan(&item).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, parentId).First(&item).Error
 	return
 }
 
@@ -274,7 +293,13 @@ FROM sandbox_classify sc
 JOIN (SELECT @pv := ?) initial
 WHERE sc.parent_id = @pv
 ) subcategories; `
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, classifyId, classifyId).Scan(&Ids).Error
+	var stringNull sql2.NullString
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, classifyId, classifyId).Scan(&stringNull).Error
+	if err != nil {
+		return
+	}
+	Ids = stringNull.String
+
 	return
 }
 

+ 9 - 2
models/smart_report.go

@@ -1,6 +1,7 @@
 package models
 
 import (
+	sql2 "database/sql"
 	"eta/eta_hub/global"
 	"eta/eta_hub/utils"
 	"fmt"
@@ -103,7 +104,7 @@ func (m *SmartReport) MultiDel(menuIds []int) (err error) {
 func (m *SmartReport) GetItemById(id int) (item *SmartReport, err error) {
 	//o := orm.NewOrmUsingDB("rddp")
 	sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.PrimaryId())
-	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, id).Scan(&item).Error
+	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, id).First(&item).Error
 	return
 }
 
@@ -160,8 +161,14 @@ func (m *SmartReport) GetPageItemsByCondition(condition string, pars []interface
 
 func (m *SmartReport) GetMaxStageByClassifyId(classifyId int) (stage int, err error) {
 	//o := orm.NewOrmUsingDB("rddp")
+	var totalNull sql2.NullInt64
 	sql := fmt.Sprintf(`SELECT MAX(stage) AS max_stage FROM %s WHERE classify_id_second = ?`, m.TableName())
-	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, classifyId).Scan(&stage).Error
+	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, classifyId).Scan(&totalNull).Error
+	if err != nil {
+		return
+	}
+	stage = int(totalNull.Int64)
+
 	return
 }
 

+ 10 - 3
models/smart_resource.go

@@ -1,6 +1,7 @@
 package models
 
 import (
+	sql2 "database/sql"
 	"eta/eta_hub/global"
 	"eta/eta_hub/utils"
 	"fmt"
@@ -65,8 +66,14 @@ type SmartReportResourceListResp struct {
 
 func (m *SmartReportResource) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
 	//o := orm.NewOrmUsingDB("rddp")
+	var totalNull sql2.NullInt64
 	sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, m.TableName(), condition)
-	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, pars...).Scan(&count).Error
+	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, pars...).Scan(&totalNull).Error
+	if err != nil {
+		return
+	}
+	count = int(totalNull.Int64)
+
 	return
 }
 
@@ -95,7 +102,7 @@ type SmartReportResourceEditReq struct {
 func (m *SmartReportResource) GetItemById(id int) (item *SmartReportResource, err error) {
 	//o := orm.NewOrmUsingDB("rddp")
 	sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.PrimaryId())
-	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, id).Scan(&item).Error
+	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, id).First(&item).Error
 	return
 }
 
@@ -115,6 +122,6 @@ type SmartReportResourceAddReq struct {
 func GetResourceItemById(id int) (item *SmartReportResource, err error) {
 	//o := orm.NewOrmUsingDB("rddp")
 	sql := fmt.Sprintf(`SELECT * FROM smart_report_resource WHERE resource_id = ? LIMIT 1`)
-	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, id).Scan(&item).Error
+	err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, id).First(&item).Error
 	return
 }

+ 2 - 2
models/system/sys_user.go

@@ -97,7 +97,7 @@ func GetSysUserByAdminName(adminName string) (item *AdminItem, err error) {
 			WHERE
 				a.admin_name = ?
 			LIMIT 1`
-	err = global.DEFAULT_DB.Raw(sql, adminName).Scan(&item).Error
+	err = global.DEFAULT_DB.Raw(sql, adminName).First(&item).Error
 	return
 }
 
@@ -105,7 +105,7 @@ func GetSysUserByAdminName(adminName string) (item *AdminItem, err error) {
 func GetUserByAdminName(adminName string) (item *AdminItem, err error) {
 	//o := orm.NewOrm()
 	sql := `SELECT * FROM admin WHERE admin_name = ? LIMIT 1`
-	err = global.DEFAULT_DB.Raw(sql, adminName).Scan(&item).Error
+	err = global.DEFAULT_DB.Raw(sql, adminName).First(&item).Error
 
 	if err != nil && err.Error() == utils.ErrNoRow() {
 		return nil, nil

+ 18 - 0
routers/commentsRouter.go

@@ -106,6 +106,24 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_hub/controllers:EdbController"] = append(beego.GlobalControllerRouter["eta/eta_hub/controllers:EdbController"],
+        beego.ControllerComments{
+            Method: "AuthList",
+            Router: `/auth_list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_hub/controllers:EdbController"] = append(beego.GlobalControllerRouter["eta/eta_hub/controllers:EdbController"],
+        beego.ControllerComments{
+            Method: "BaseDetail",
+            Router: `/base_detail`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_hub/controllers:EdbController"] = append(beego.GlobalControllerRouter["eta/eta_hub/controllers:EdbController"],
         beego.ControllerComments{
             Method: "BusinessEdbDataDel",

+ 64 - 0
services/edb_classify.go

@@ -1,7 +1,9 @@
 package services
 
 import (
+	"errors"
 	"eta/eta_hub/models/data_manage"
+	"eta/eta_hub/utils"
 )
 
 // GetEdbClassifyTreeRecursive 递归指标分类树
@@ -21,3 +23,65 @@ func GetEdbClassifyTreeRecursive(list []*data_manage.EdbClassify, parentId int)
 	}
 	return res
 }
+func GetFullClassifyByClassifyId(targetClassifyId int) (targetList []*data_manage.EdbClassifyIdItems, err error, errMsg string) {
+	//判断是否是挂在顶级目录下
+	targetClassify, err := data_manage.GetEdbClassifyById(targetClassifyId)
+	if err != nil {
+		if err.Error() != utils.ErrNoRow() {
+			errMsg = "当前分类不存在"
+			err = errors.New(errMsg)
+			return
+		}
+		errMsg = "获取失败"
+		err = errors.New("获取分类信息失败,Err:" + err.Error())
+		return
+	}
+	if targetClassify.ParentId == 0 {
+		targetItem := new(data_manage.EdbClassifyIdItems)
+		targetItem.ClassifyId = targetClassify.ClassifyId
+		targetItem.ParentId = targetClassify.ParentId
+		targetItem.RootId = targetClassify.RootId
+		targetItem.UniqueCode = targetClassify.UniqueCode
+		targetItem.Level = targetClassify.Level
+		targetItem.ClassifyName = targetClassify.ClassifyName
+		//targetItem.ClassifyNameEn = targetClassify.ClassifyNameEn
+		//targetItem.IsJoinPermission = targetClassify.IsJoinPermission
+		targetList = append(targetList, targetItem)
+		return
+	}
+	tmpList, err := data_manage.GetEdbClassifyByRootIdLevel(targetClassify.RootId, targetClassify.ClassifyType, "")
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		errMsg = "获取失败"
+		err = errors.New("获取数据失败,Err:" + err.Error())
+		return
+	}
+	idMap := make(map[int]struct{})
+	if len(tmpList) > 0 {
+		for _, v := range tmpList {
+			if v.ClassifyId == targetClassify.ClassifyId {
+				idMap[v.ClassifyId] = struct{}{}
+				idMap[v.ParentId] = struct{}{}
+			}
+		}
+		for _, v := range tmpList {
+			if _, ok := idMap[v.ClassifyId]; ok {
+				idMap[v.ParentId] = struct{}{}
+			}
+		}
+		for _, v := range tmpList {
+			if _, ok := idMap[v.ClassifyId]; ok {
+				targetItem := new(data_manage.EdbClassifyIdItems)
+				targetItem.ClassifyId = v.ClassifyId
+				targetItem.ParentId = v.ParentId
+				targetItem.RootId = v.RootId
+				targetItem.UniqueCode = v.UniqueCode
+				targetItem.Level = v.Level
+				targetItem.ClassifyName = v.ClassifyName
+				//targetItem.ClassifyNameEn = v.ClassifyNameEn
+				//targetItem.IsJoinPermission = v.IsJoinPermission
+				targetList = append(targetList, targetItem)
+			}
+		}
+	}
+	return
+}

+ 32 - 0
utils/common.go

@@ -924,6 +924,7 @@ func getMonthDay(year, month int) (days int) {
 
 // GetOrmInReplace 获取orm的in查询替换?的方法
 func GetOrmInReplace(num int) string {
+	return `?`
 	template := make([]string, num)
 	for i := 0; i < num; i++ {
 		template[i] = "?"
@@ -1028,6 +1029,37 @@ func GetSign(nonce, timestamp string) (sign string) {
 	return
 }
 
+// GetSignV2
+// @Description: 获取签名
+// @author: Roc
+// @datetime 2025-07-03 16:43:03
+// @param nonce string
+// @param timestamp string
+// @param appid string
+// @param secret string
+// @return sign string
+func GetSignV2(nonce, timestamp, appid, secret string) (sign string) {
+	signStrMap := map[string]string{
+		"nonce":     nonce,
+		"timestamp": timestamp,
+		"appid":     appid,
+	}
+	keys := make([]string, 0, len(signStrMap))
+	for k := range signStrMap {
+		keys = append(keys, k)
+	}
+	sort.Strings(keys)
+	var signStr string
+	for _, k := range keys {
+		signStr += k + "=" + signStrMap[k] + "&"
+	}
+	signStr = strings.Trim(signStr, "&")
+	fmt.Println("signStr:" + signStr)
+	sign = HmacSha256ToBase64(secret, signStr)
+	fmt.Println("sign:" + sign)
+	return
+}
+
 // GetLikeKeywordPars
 //
 //	@Description: 获取sql查询中的参数切片