Roc 4 napja
szülő
commit
76e134e680

+ 2 - 0
controllers/base_auth.go

@@ -14,6 +14,7 @@ import (
 type BaseAuthController struct {
 	web.Controller
 	SysUser *system.Admin
+	Appid   string
 }
 
 func (this *BaseAuthController) Prepare() {
@@ -27,6 +28,7 @@ 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 := "随机字符串不能为空"

+ 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 = "获取成功"
+}

+ 58 - 0
models/data_manage/edb_classify.go

@@ -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
+}

+ 50 - 14
models/data_manage/edb_info.go

@@ -138,6 +138,7 @@ type EdbInfoItem struct {
 	SysUserRealName  string  `description:"创建人姓名"`
 	ErDataUpdateDate string  `description:"本次更新,数据发生变化的最早日期"`
 	//EdbData      []*EdbDataItem `description:"指标数据"`
+	ClassifyList []*EdbClassifyIdItems `description:"分类列表"`
 }
 
 type EdbInfoItemResp struct {
@@ -182,21 +183,21 @@ func FormatEdbInfo2Item(origin *EdbInfo) (item *EdbInfoItem) {
 
 // TraceEdbInfoResp 指标追溯数据返回
 type TraceEdbInfoMoreResp struct {
-	EdbInfoId   int                `description:"指标id"`
-	EdbCode     string             `description:"指标编码"`
-	EdbInfoType int                `description:"指标类型: 0-普通指标; 1-预测指标"`
-	EdbName     string             `description:"指标名称"`
-	EdbType     int                `description:"指标类型: 1-基础指标; 2-计算指标"`
-	RuleTitle   string             `description:"指标规则"`
-	UniqueCode  string             `description:"唯一编码"`
-	Frequency   string             `description:"频率"`
-	Unit        string             `description:"单位"`
-	EndDate     string             `description:"终止日期"`
-	EndValue    float64            `description:"终止值"`
-	LatestDate  string             `description:"最新日期"`
-	LatestValue float64            `description:"最新值"`
+	EdbInfoId   int                    `description:"指标id"`
+	EdbCode     string                 `description:"指标编码"`
+	EdbInfoType int                    `description:"指标类型: 0-普通指标; 1-预测指标"`
+	EdbName     string                 `description:"指标名称"`
+	EdbType     int                    `description:"指标类型: 1-基础指标; 2-计算指标"`
+	RuleTitle   string                 `description:"指标规则"`
+	UniqueCode  string                 `description:"唯一编码"`
+	Frequency   string                 `description:"频率"`
+	Unit        string                 `description:"单位"`
+	EndDate     string                 `description:"终止日期"`
+	EndValue    float64                `description:"终止值"`
+	LatestDate  string                 `description:"最新日期"`
+	LatestValue float64                `description:"最新值"`
 	Child       []TraceEdbInfoMoreResp `description:"下级来源"`
-	EdbInfo     *EdbInfo           `description:"指标信息" json:"-"`
+	EdbInfo     *EdbInfo               `description:"指标信息" json:"-"`
 }
 
 type TraceEdbInfoResp struct {
@@ -242,3 +243,38 @@ func GetEdbInfoByEdbCodeList(source int, edbCodeList []string) (items []*EdbInfo
 	_, err = o.Raw(sql, source, edbCodeList).QueryRows(&items)
 	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
+}

+ 53 - 0
models/data_manage/eta_business_edb_permission.go

@@ -0,0 +1,53 @@
+package data_manage
+
+import (
+	"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")
+	sql := fmt.Sprintf(`SELECT COUNT(*) FROM eta_business_edb_permission AS a 
+          JOIN edb_info AS b WHERE 1=1 %s`, cond)
+	err = o.Raw(sql, pars).QueryRow(&total)
+	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 
+          JOIN edb_info AS b WHERE 1=1 %s %s`, fields, cond, order)
+	sql += fmt.Sprintf(` LIMIT %d,%d`, startSize, pageSize)
+
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}

+ 18 - 0
routers/commentsRouter.go

@@ -79,6 +79,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
+}