Browse Source

test 图库框架

hsun 1 year ago
parent
commit
f5cc95b6bc

+ 195 - 30
controllers/data_manage/chart_framework.go

@@ -19,7 +19,8 @@ type ChartFrameworkController struct {
 // List
 // @Title 列表
 // @Description 列表
-// @Param   Visibility	query	int		false	"可见度: 0-所有(默认); 1-我的; 2-公开"
+// @Param   AdminId		query	int		false	"创建人ID"
+// @Param   Visibility	query	int		false	"范围: 0-所有; 1-私有; 2-公开"
 // @Param   Keyword		query	string	false	"关键词"
 // @Success 200 Ret=200 获取成功
 // @router /list [get]
@@ -40,6 +41,106 @@ func (this *ChartFrameworkController) List() {
 		return
 	}
 
+	adminId, _ := this.GetInt("AdminId")
+	visibility, _ := this.GetInt("Visibility")
+	if visibility == 1 && adminId <= 0 {
+		adminId = sysUser.AdminId
+	}
+	keyword := this.GetString("Keyword")
+	keyword = strings.TrimSpace(keyword)
+
+	frameworkOb := new(data_manage.ChartFramework)
+	cond := ``
+	pars := make([]interface{}, 0)
+	if adminId > 0 {
+		cond += fmt.Sprintf(` AND %s = ?`, data_manage.ChartFrameworkColumns.AdminId)
+		pars = append(pars, adminId)
+	}
+	if keyword != "" {
+		cond += fmt.Sprintf(` AND %s LIKE ?`, data_manage.ChartFrameworkColumns.FrameworkName)
+		pars = append(pars, "%"+keyword+"%")
+	}
+	if visibility > 0 {
+		visibilityArr := map[int]int{1: 0, 2: 1}
+		cond += fmt.Sprintf(` AND %s = ?`, data_manage.ChartFrameworkColumns.IsPublic)
+		pars = append(pars, visibilityArr[visibility])
+	}
+
+	orderRule := `sort ASC, create_time DESC`
+	list, e := frameworkOb.GetItemsByCondition(cond, pars, []string{}, orderRule)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取框架列表失败, Err: " + e.Error()
+		return
+	}
+	resp := make([]*data_manage.ChartFrameworkItem, 0)
+	for _, v := range list {
+		t := data_manage.FormatChartFramework2Item(v)
+		resp = append(resp, t)
+	}
+
+	br.Data = resp
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+}
+
+// PublicMenu
+// @Title 公开框架目录
+// @Description 公开框架目录
+// @Success 200 Ret=200 获取成功
+// @router /public_menu [get]
+func (this *ChartFrameworkController) PublicMenu() {
+	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
+	}
+
+	frameworkOb := new(data_manage.ChartFramework)
+	cond := fmt.Sprintf(` AND %s = ?`, data_manage.ChartFrameworkColumns.IsPublic)
+	pars := make([]interface{}, 0)
+	pars = append(pars, 1)
+	orderRule := `public_time ASC, sort ASC, create_time DESC`
+	list, e := frameworkOb.GetItemsByCondition(cond, pars, []string{}, orderRule)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取公开框架失败, Err: " + e.Error()
+		return
+	}
+
+	userExist := make(map[int]bool)
+	userFrameworks := make(map[int][]*data_manage.ChartFrameworkItem)
+	resp := make([]*data_manage.ChartFrameworkPublicMenuItem, 0)
+	for _, v := range list {
+		if !userExist[v.AdminId] {
+			u := new(data_manage.ChartFrameworkPublicMenuItem)
+			u.AdminId = v.AdminId
+			u.MenuName = fmt.Sprintf("%s的框架", v.AdminName)
+			resp = append(resp, u)
+			userExist[v.AdminId] = true
+		}
+		t := data_manage.FormatChartFramework2Item(v)
+		if userFrameworks[v.AdminId] == nil {
+			userFrameworks[v.AdminId] = make([]*data_manage.ChartFrameworkItem, 0)
+		}
+		userFrameworks[v.AdminId] = append(userFrameworks[v.AdminId], t)
+	}
+	for _, v := range resp {
+		v.Frameworks = userFrameworks[v.AdminId]
+	}
+
+	br.Data = resp
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "获取成功"
@@ -83,9 +184,9 @@ func (this *ChartFrameworkController) Add() {
 	// 重名校验
 	{
 		ob := new(data_manage.ChartFramework)
-		cond := fmt.Sprintf(` AND %s = ?`, data_manage.ChartFrameworkColumns.FrameworkName)
+		cond := fmt.Sprintf(` AND %s = ? AND %s = ?`, data_manage.ChartFrameworkColumns.FrameworkName, data_manage.ChartFrameworkColumns.AdminId)
 		pars := make([]interface{}, 0)
-		pars = append(pars, req.FrameworkName)
+		pars = append(pars, req.FrameworkName, sysUser.AdminId)
 		exist, e := ob.GetItemByCondition(cond, pars)
 		if e != nil && e.Error() != utils.ErrNoRow() {
 			br.Msg = "操作失败"
@@ -118,6 +219,7 @@ func (this *ChartFrameworkController) Add() {
 			t := new(data_manage.ChartFrameworkNode)
 			t.MyChartClassifyId = v
 			t.CreateTime = now
+			nodes = append(nodes, t)
 		}
 	}
 	if e := item.CreateFrameworkAndNodes(item, nodes); e != nil {
@@ -186,9 +288,9 @@ func (this *ChartFrameworkController) Edit() {
 	// 重名校验
 	{
 		ob := new(data_manage.ChartFramework)
-		cond := fmt.Sprintf(` AND %s <> ? AND %s = ?`, ob.PrimaryId(), data_manage.ChartFrameworkColumns.FrameworkName)
+		cond := fmt.Sprintf(` AND %s <> ? AND %s = ? AND %s = ?`, ob.PrimaryId(), data_manage.ChartFrameworkColumns.FrameworkName, data_manage.ChartFrameworkColumns.AdminId)
 		pars := make([]interface{}, 0)
-		pars = append(pars, req.FrameworkName)
+		pars = append(pars, req.ChartFrameworkId, req.FrameworkName, sysUser.AdminId)
 		exist, e := ob.GetItemByCondition(cond, pars)
 		if e != nil && e.Error() != utils.ErrNoRow() {
 			br.Msg = "操作失败"
@@ -217,6 +319,7 @@ func (this *ChartFrameworkController) Edit() {
 			t.ChartFrameworkId = item.ChartFrameworkId
 			t.MyChartClassifyId = v
 			t.CreateTime = now
+			nodes = append(nodes, t)
 		}
 	}
 	if e := item.EditFrameworkAndNodes(item, updateCols, nodes); e != nil {
@@ -278,6 +381,11 @@ func (this *ChartFrameworkController) Remove() {
 		br.ErrMsg = "获取框架失败, Err: " + e.Error()
 		return
 	}
+	if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN && item.AdminId != sysUser.AdminId {
+		br.Msg = "无权操作"
+		return
+	}
+
 	if e := item.RemoveFrameworkAndNodes(req.ChartFrameworkId); e != nil {
 		br.Msg = "操作失败"
 		br.ErrMsg = "删除框架失败, Err: " + e.Error()
@@ -344,9 +452,9 @@ func (this *ChartFrameworkController) Rename() {
 	// 重名校验
 	{
 		ob := new(data_manage.ChartFramework)
-		cond := fmt.Sprintf(` AND %s <> ? AND %s = ?`, ob.PrimaryId(), data_manage.ChartFrameworkColumns.FrameworkName)
+		cond := fmt.Sprintf(` AND %s <> ? AND %s = ? AND %s = ?`, ob.PrimaryId(), data_manage.ChartFrameworkColumns.FrameworkName, data_manage.ChartFrameworkColumns.AdminId)
 		pars := make([]interface{}, 0)
-		pars = append(pars, req.FrameworkName)
+		pars = append(pars, req.ChartFrameworkId, req.FrameworkName, sysUser.AdminId)
 		exist, e := ob.GetItemByCondition(cond, pars)
 		if e != nil && e.Error() != utils.ErrNoRow() {
 			br.Msg = "操作失败"
@@ -427,9 +535,14 @@ func (this *ChartFrameworkController) EditPublic() {
 	}
 
 	now := time.Now().Local()
+	updateCols := []string{"IsPublic", "PublicTime", "ModifyTime"}
 	item.IsPublic = req.IsPublic
+	if req.IsPublic == 1 {
+		item.PublicTime = time.Now().Local()
+	} else {
+		item.PublicTime = time.Time{}
+	}
 	item.ModifyTime = now
-	updateCols := []string{"IsPublic", "ModifyTime"}
 	if e := item.Update(updateCols); e != nil {
 		br.Msg = "操作失败"
 		br.ErrMsg = "更新框架是否公开失败, Err: " + e.Error()
@@ -476,29 +589,81 @@ func (this *ChartFrameworkController) Move() {
 		return
 	}
 
-	//frameworkOb := new(data_manage.ChartFramework)
-	//item, e := frameworkOb.GetItemById(req.ChartFrameworkId)
-	//if e != nil {
-	//	if e.Error() == utils.ErrNoRow() {
-	//		br.Msg = "框架不存在, 请刷新页面"
-	//		return
-	//	}
-	//	br.Msg = "操作失败"
-	//	br.ErrMsg = "获取框架失败, Err: " + e.Error()
-	//	return
-	//}
-
-	//now := time.Now().Local()
-	//item.IsPublic = req.IsPublic
-	//item.ModifyTime = now
-	//updateCols := []string{"IsPublic", "ModifyTime"}
-	//if e := item.Update(updateCols); e != nil {
-	//	br.Msg = "操作失败"
-	//	br.ErrMsg = "更新框架是否公开失败, Err: " + e.Error()
-	//	return
-	//}
+	frameworkOb := new(data_manage.ChartFramework)
+	item, e := frameworkOb.GetItemById(req.ChartFrameworkId)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Msg = "框架不存在, 请刷新页面"
+			return
+		}
+		br.Msg = "操作失败"
+		br.ErrMsg = "获取框架失败, Err: " + e.Error()
+		return
+	}
+
+	updateCols := make([]string, 0)
+	// 上一个兄弟节点
+	if req.PrevChartFrameworkId > 0 {
+		prev, e := frameworkOb.GetItemById(req.PrevChartFrameworkId)
+		if e != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = "获取上一个兄弟节点失败, Err: " + e.Error()
+			return
+		}
+
+		// 两个兄弟节点之间
+		if req.NextChartFrameworkId > 0 {
+			next, e := frameworkOb.GetItemById(req.PrevChartFrameworkId)
+			if e != nil {
+				br.Msg = "操作失败"
+				br.ErrMsg = "获取下一个兄弟节点失败, Err: " + e.Error()
+				return
+			}
+			// 如果上一个与下一个排序权重是一致的, 那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2, 自己变成上一个兄弟的排序权重+1
+			if prev.Sort == next.Sort || prev.Sort == item.Sort {
+				strUpdate := `sort + 2`
+				_ = data_manage.UpdateChartFrameworkSort(sysUser.AdminId, prev.ChartFrameworkId, prev.Sort, strUpdate)
+			} else {
+				// 如果下一个排序权重正好是上一个节点的下一层, 那么需要再加一层了
+				if next.Sort-prev.Sort == 1 {
+					//变更兄弟节点的排序
+					strUpdate := `sort + 1`
+					_ = data_manage.UpdateChartFrameworkSort(sysUser.AdminId, 0, prev.Sort, strUpdate)
+				}
+			}
+		}
+
+		// 上一个兄弟节点sort+1
+		item.Sort = prev.Sort + 1
+		item.ModifyTime = time.Now()
+		updateCols = append(updateCols, "Sort", "ModifyTime")
+	} else {
+		first, err := data_manage.GetFirstChartFramework(sysUser.AdminId)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "操作失败"
+			br.ErrMsg = "获取我的图库框架排首位的数据失败, Err:" + err.Error()
+			return
+		}
+		if first != nil && first.Sort == 0 {
+			strUpdate := ` sort + 1 `
+			_ = data_manage.UpdateChartFrameworkSort(sysUser.AdminId, first.ChartFrameworkId-1, 0, strUpdate)
+		}
+
+		// 排首位
+		item.Sort = 0
+		item.ModifyTime = time.Now()
+		updateCols = append(updateCols, "Sort", "ModifyTime")
+	}
+
+	if len(updateCols) > 0 {
+		if e := item.Update(updateCols); e != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = "更新框架排序失败, Err: " + e.Error()
+			return
+		}
+	}
 
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "操作成功"
-}
+}

+ 2 - 0
controllers/data_manage/my_chart.go

@@ -598,6 +598,8 @@ func (this *MyChartController) ClassifyDelete() {
 		return
 	}
 
+	// TODO:图库框架校验
+
 	//var condition string
 	//var pars []interface{}
 	//

+ 64 - 0
models/data_manage/chart_framework.go

@@ -1,6 +1,7 @@
 package data_manage
 
 import (
+	"eta/eta_api/utils"
 	"fmt"
 	"github.com/beego/beego/v2/client/orm"
 	"strings"
@@ -283,3 +284,66 @@ type ChartFrameworkMoveReq struct {
 	PrevChartFrameworkId int `description:"上一个框架ID"`
 	NextChartFrameworkId int `description:"下一个框架ID"`
 }
+
+// UpdateChartFrameworkSort 更新我的图库框架排序
+func UpdateChartFrameworkSort(adminId, frameworkId, current int, updates string) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := fmt.Sprintf(`UPDATE chart_framework SET sort = %s WHERE admin_id = ? and sort > ?`, updates)
+	if frameworkId > 0 {
+		sql += ` OR (chart_framework_id > ` + fmt.Sprint(frameworkId) + ` AND sort = ` + fmt.Sprint(current) + `)`
+	}
+	_, err = o.Raw(sql, adminId, current).Exec()
+	return
+}
+
+// GetFirstChartFramework 获取我的图库框架排首位的数据
+func GetFirstChartFramework(adminId int) (item *ChartFramework, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM chart_framework WHERE admin_id = ? ORDER BY sort ASC,chart_framework_id ASC LIMIT 1`
+	err = o.Raw(sql, adminId).QueryRow(&item)
+	return
+}
+
+// ChartFrameworkItem 图库框架表信息
+type ChartFrameworkItem struct {
+	ChartFrameworkId int    `description:"框架ID"`
+	FrameworkCode    string `description:"框架唯一编码"`
+	FrameworkName    string `description:"框架名称"`
+	FrameworkImg     string `description:"框架图片"`
+	FrameworkContent string `description:"框架内容"`
+	IsPublic         int    `description:"是否公开:0-私有;1-公开"`
+	PublicTime       string `description:"公开时间"`
+	Sort             int    `description:"排序"`
+	AdminId          int    `description:"创建人ID"`
+	AdminName        string `description:"创建人姓名"`
+	CreateTime       string `description:"创建时间"`
+	ModifyTime       string `description:"更新时间"`
+}
+
+// FormatChartFramework2Item 格式化框架信息
+func FormatChartFramework2Item(origin *ChartFramework) (item *ChartFrameworkItem) {
+	if origin == nil {
+		return
+	}
+	item = new(ChartFrameworkItem)
+	item.ChartFrameworkId = origin.ChartFrameworkId
+	item.FrameworkCode = origin.FrameworkCode
+	item.FrameworkName = origin.FrameworkName
+	item.FrameworkImg = origin.FrameworkImg
+	item.FrameworkContent = origin.FrameworkContent
+	item.IsPublic = origin.IsPublic
+	item.PublicTime = utils.TimeTransferString(utils.FormatDateTime, origin.PublicTime)
+	item.Sort = origin.Sort
+	item.AdminId = origin.AdminId
+	item.AdminName = origin.AdminName
+	item.CreateTime = utils.TimeTransferString(utils.FormatDateTime, origin.CreateTime)
+	item.ModifyTime = utils.TimeTransferString(utils.FormatDateTime, origin.ModifyTime)
+	return
+}
+
+// ChartFrameworkPublicMenuItem 公开框架目录
+type ChartFrameworkPublicMenuItem struct {
+	AdminId    int                   `description:"创建人ID"`
+	MenuName   string                `description:"目录名称"`
+	Frameworks []*ChartFrameworkItem `description:"框架列表"`
+}

+ 72 - 0
routers/commentsRouter.go

@@ -1141,6 +1141,78 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"],
+        beego.ControllerComments{
+            Method: "Add",
+            Router: `/add`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"],
+        beego.ControllerComments{
+            Method: "Edit",
+            Router: `/edit`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"],
+        beego.ControllerComments{
+            Method: "EditPublic",
+            Router: `/edit_public`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"],
+        beego.ControllerComments{
+            Method: "List",
+            Router: `/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"],
+        beego.ControllerComments{
+            Method: "Move",
+            Router: `/move`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"],
+        beego.ControllerComments{
+            Method: "PublicMenu",
+            Router: `/public_menu`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"],
+        beego.ControllerComments{
+            Method: "Remove",
+            Router: `/remove`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"],
+        beego.ControllerComments{
+            Method: "Rename",
+            Router: `/rename`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartInfoController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartInfoController"],
         beego.ControllerComments{
             Method: "ChartInfoAdd",