Browse Source

我的图表分类、我的图表

hsun 2 years ago
parent
commit
a460e9a7d8

+ 27 - 0
controller/chart/chart_info.go

@@ -6,11 +6,13 @@ import (
 	"github.com/gin-gonic/gin"
 	"hongze/hongze_yb/controller/response"
 	"hongze/hongze_yb/global"
+	responseModel "hongze/hongze_yb/models/response"
 	"hongze/hongze_yb/models/response/chart_info"
 	chartEdbMappingModel "hongze/hongze_yb/models/tables/chart_edb_mapping"
 	chartInfoModel "hongze/hongze_yb/models/tables/chart_info"
 	"hongze/hongze_yb/models/tables/chart_info_log"
 	edbInfoModel "hongze/hongze_yb/models/tables/edb_info"
+	"hongze/hongze_yb/models/tables/yb_my_chart"
 	"hongze/hongze_yb/services/alarm_msg"
 	"hongze/hongze_yb/services/chart"
 	"hongze/hongze_yb/services/user"
@@ -194,9 +196,34 @@ func GetChartInfoDetail(c *gin.Context) {
 		go chart.SaveChartVisitLog(userInfo, chartInfo, myChartClassifyId)
 	}
 
+	// 用户是否有收藏该图表
+	ob := new(yb_my_chart.YbMyChart)
+	cond := `user_id = ? AND chart_info_id = ?`
+	pars := make([]interface{}, 0)
+	pars = append(pars, userInfo.UserID, chartInfo.ChartInfoId)
+	exists, e := ob.FetchByCondition(cond, pars)
+	if e != nil && e != utils.ErrNoRow {
+		response.FailMsg("操作失败", "获取用户图表失败, Err: "+e.Error(), c)
+		return
+	}
+	myChartInfo := new(responseModel.MyChartItem)
+	if exists != nil && exists.MyChartID > 0 {
+		myChartInfo.MyChartID = exists.MyChartID
+		myChartInfo.MyChartClassifyID = exists.MyChartClassifyID
+		myChartInfo.ChartInfoID = exists.ChartInfoID
+		myChartInfo.ChartName = exists.ChartName
+		myChartInfo.UniqueCode = exists.UniqueCode
+		myChartInfo.ChartImage = exists.ChartImage
+		myChartInfo.UserID = exists.UserID
+		myChartInfo.ReportID = exists.ReportID
+		myChartInfo.ReportChapterID = exists.ReportChapterID
+		myChartInfo.CreateTime = utils.TimeTransferString(utils.FormatDateTime, exists.CreateTime)
+	}
+
 	resp := new(chart_info.ChartInfoDetailResp)
 	resp.ChartInfo = chartInfo
 	resp.EdbInfoList = edbList
+	resp.MyChartInfo = myChartInfo
 	response.OkData("获取成功", resp, c)
 }
 

+ 106 - 11
controller/my_chart/my_chart.go

@@ -5,6 +5,7 @@ import (
 	"github.com/gin-gonic/gin"
 	"hongze/hongze_yb/controller/response"
 	"hongze/hongze_yb/models/request"
+	responseModel "hongze/hongze_yb/models/response"
 	chartInfoModel "hongze/hongze_yb/models/tables/chart_info"
 	"hongze/hongze_yb/models/tables/yb_config"
 	"hongze/hongze_yb/models/tables/yb_my_chart"
@@ -17,14 +18,50 @@ import (
 // MyChartController 用户-我的图表
 type MyChartController struct{}
 
+// List 我的图表列表
 func (this *MyChartController) List(c *gin.Context) {
+	var req request.MyChartCollectListReq
+	if c.Bind(&req) != nil {
+		response.Fail("参数有误", c)
+		return
+	}
+	cond := `1 = 1`
+	pars := make([]interface{}, 0)
+	if req.Keyword != "" {
+		kw := fmt.Sprint("%", req.Keyword, "%")
+		cond += ` AND chart_name LIKE ?`
+		pars = append(pars, kw)
+	}
+	if req.ClassifyId > 0 {
+		cond += ` AND my_chart_classify_id = ?`
+		pars = append(pars, req.ClassifyId)
+	}
 
+	ob := new(yb_my_chart.YbMyChart)
+	list, e := ob.List(cond, pars)
+	if e != nil {
+		response.FailMsg("获取失败", "获取用户图表列表失败, Err:"+e.Error(), c)
+		return
+	}
+	respList := make([]*responseModel.MyChartItem, 0)
+	for i := range list {
+		respList = append(respList, &responseModel.MyChartItem{
+			MyChartID:         list[i].MyChartID,
+			MyChartClassifyID: list[i].MyChartClassifyID,
+			ChartInfoID:       list[i].ChartInfoID,
+			ChartName:         list[i].ChartName,
+			UniqueCode:        list[i].UniqueCode,
+			ChartImage:        list[i].ChartImage,
+			UserID:            list[i].UserID,
+			ReportID:          list[i].ReportID,
+			ReportChapterID:   list[i].ReportChapterID,
+			CreateTime:        utils.TimeTransferString(utils.FormatDateTime, list[i].CreateTime),
+		})
+	}
+	response.OkData("获取成功", respList, c)
 }
 
-func (this *MyChartController) Detail(c *gin.Context) {
-
-}
-
+// Collect 收藏图表
 func (this *MyChartController) Collect(c *gin.Context) {
 	var req request.MyChartCollectReq
 	if c.ShouldBind(&req) != nil {
@@ -138,6 +175,7 @@ func (this *MyChartController) Collect(c *gin.Context) {
 	response.Ok("操作成功", c)
 }
 
+// 取消收藏 CollectCancel
 func (this *MyChartController) CollectCancel(c *gin.Context) {
 	var req request.MyChartCollectCancelReq
 	if c.ShouldBind(&req) != nil {
@@ -192,6 +230,7 @@ func (this *MyChartController) CollectCancel(c *gin.Context) {
 	response.Ok("操作成功", c)
 }
 
+// RelateClassify 加入分类
 func (this *MyChartController) RelateClassify(c *gin.Context) {
 	userInfo := userService.GetInfoByClaims(c)
 	userId := int(userInfo.UserID)
@@ -204,7 +243,7 @@ func (this *MyChartController) RelateClassify(c *gin.Context) {
 		response.Fail("参数有误", c)
 		return
 	}
-	if req.ChartInfoId <= 0 {
+	if req.MyChartId <= 0 {
 		response.Fail("请选择图表", c)
 		return
 	}
@@ -213,16 +252,16 @@ func (this *MyChartController) RelateClassify(c *gin.Context) {
 		return
 	}
 
-	cond := `user_id = ? AND chart_info_id = ?`
-	pars := make([]interface{}, 0)
-	pars = append(pars, userId, req.ChartInfoId)
 	ob := new(yb_my_chart.YbMyChart)
-	item, e := ob.FetchByCondition(cond, pars)
+	item, e := ob.Fetch(req.MyChartId)
 	if e != nil {
-		response.FailMsg("请先收藏该图表", "获取用户图表失败, Err: "+e.Error(), c)
+		response.FailMsg("图表信息有误", "获取用户图表失败, Err: "+e.Error(), c)
+		return
+	}
+	if item.UserID != userId {
+		response.Fail("无权操作", c)
 		return
 	}
-
 	item.MyChartClassifyID = req.ClassifyId
 	item.ModifyTime = time.Now().Local()
 	if e = item.Update([]string{"MyChartClassifyID", "ModifyTime"}); e != nil {
@@ -231,3 +270,59 @@ func (this *MyChartController) RelateClassify(c *gin.Context) {
 	}
 	response.Ok("操作成功", c)
 }
+
+// IsCollect 是否已收藏
+func (this *MyChartController) IsCollect(c *gin.Context) {
+	var req request.MyChartIsCollectReq
+	if c.Bind(&req) != nil {
+		response.Fail("参数有误", c)
+		return
+	}
+	if req.Authorization == "" {
+		response.Fail("用户身份有误", c)
+		return
+	}
+	if req.UniqueCode == "" {
+		response.Fail("请选择图表", c)
+		return
+	}
+
+	// 获取用户信息
+	userInfo, e := userService.GetUserInfoByToken(req.Authorization)
+	if e != nil {
+		response.FailMsg("操作失败", "Token获取有效用户失败, Err: "+e.Error(), c)
+		return
+	}
+	if userInfo.UserID <= 0 {
+		response.FailMsg("操作失败", "Token获取有效用户失败", c)
+		return
+	}
+	userId := int(userInfo.UserID)
+
+	// 获取图表信息
+	chartInfo, e := chartInfoModel.GetChartInfoViewByUniqueCode(req.UniqueCode)
+	if e != nil {
+		response.FailMsg("操作失败", "UniqueCode获取图表信息失败, Err:"+e.Error(), c)
+		return
+	}
+	if chartInfo.ChartInfoId <= 0 {
+		response.FailMsg("操作失败", "图表信息有误", c)
+		return
+	}
+
+	// 是否已收藏
+	ob := new(yb_my_chart.YbMyChart)
+	cond := `user_id = ? AND chart_info_id = ?`
+	pars := make([]interface{}, 0)
+	pars = append(pars, userId, chartInfo.ChartInfoId)
+	exists, e := ob.FetchByCondition(cond, pars)
+	if e != nil && e != utils.ErrNoRow {
+		response.FailMsg("操作失败", "获取用户图表失败, Err: "+e.Error(), c)
+		return
+	}
+	isCollect := false
+	if exists != nil && exists.MyChartID > 0 {
+		isCollect = true
+	}
+	response.OkData("获取成功", isCollect, c)
+}

+ 14 - 9
controller/my_chart/my_chart_classify.go

@@ -66,9 +66,9 @@ func (this *MyChartClassifyController) Add(c *gin.Context) {
 		return
 	}
 
-	cond := `my_chart_classify_name = ?`
+	cond := `my_chart_classify_name = ? AND user_id = ?`
 	pars := make([]interface{}, 0)
-	pars = append(pars, req.ClassifyName)
+	pars = append(pars, req.ClassifyName, userId)
 	ob := new(yb_my_chart_classify.YbMyChartClassify)
 	exists, e := ob.FetchByCondition(cond, pars)
 	if e != nil && e != utils.ErrNoRow {
@@ -117,23 +117,28 @@ func (this *MyChartClassifyController) Edit(c *gin.Context) {
 		return
 	}
 
-	cond := `my_chart_classify_name = ?`
+	cond := `my_chart_classify_name = ? AND user_id = ?`
 	pars := make([]interface{}, 0)
-	pars = append(pars, req.ClassifyName)
+	pars = append(pars, req.ClassifyName, userId)
 	ob := new(yb_my_chart_classify.YbMyChartClassify)
 	exists, e := ob.FetchByCondition(cond, pars)
 	if e != nil && e != utils.ErrNoRow {
 		response.FailMsg("操作失败", "获取用户同名图表分类失败, Err: "+e.Error(), c)
 		return
 	}
-	if exists != nil && exists.MyChartClassifyID != req.ClassifyId {
+	if exists != nil && exists.MyChartClassifyID > 0 && exists.MyChartClassifyID != req.ClassifyId {
 		response.Fail("分类名称已存在", c)
 		return
 	}
 
-	ob.MyChartClassifyName = req.ClassifyName
-	ob.ModifyTime = time.Now().Local()
-	if e = ob.Update([]string{"MyChartClassifyName", "ModifyTime"}); e != nil {
+	item, e := ob.Fetch(req.ClassifyId)
+	if e != nil {
+		response.FailMsg("信息有误", "获取用户图表分类失败, Err: "+e.Error(), c)
+		return
+	}
+	item.MyChartClassifyName = req.ClassifyName
+	item.ModifyTime = time.Now().Local()
+	if e = item.Update([]string{"MyChartClassifyName", "ModifyTime"}); e != nil {
 		response.FailMsg("操作失败", "编辑用户图表分类失败, Err: "+e.Error(), c)
 		return
 	}
@@ -181,7 +186,7 @@ func (this *MyChartClassifyController) Del(c *gin.Context) {
 		response.Fail("删除失败, 该分类下有图表", c)
 		return
 	}
-	if e = ob.Delete(); e != nil {
+	if e = item.Delete(); e != nil {
 		response.FailMsg("操作失败", "删除分类失败, Err: "+e.Error(), c)
 		return
 	}

+ 14 - 2
models/request/my_chart.go

@@ -19,8 +19,8 @@ type MyChartClassifySortReq struct {
 }
 
 type MyChartRelateClassifyReq struct {
-	ChartInfoId int `json:"chart_info_id"`
-	ClassifyId  int `json:"classify_id"`
+	MyChartId  int `json:"my_chart_id"`
+	ClassifyId int `json:"classify_id"`
 }
 
 type MyChartCollectReq struct {
@@ -34,3 +34,15 @@ type MyChartCollectCancelReq struct {
 	Authorization string `json:"authorization" form:"authorization"`
 	UniqueCode    string `json:"unique_code" form:"unique_code"`
 }
+
+type MyChartIsCollectReq struct {
+	Authorization string `json:"authorization" form:"authorization"`
+	UniqueCode    string `json:"unique_code" form:"unique_code"`
+	//ReportId        int    `json:"report_id" form:"report_id"`
+	//ReportChapterId int    `json:"report_chapter_id" form:"report_chapter_id"`
+}
+
+type MyChartCollectListReq struct {
+	Keyword    string `json:"keyword" form:"keyword" description:"关键词"`
+	ClassifyId int    `json:"classify_id" form:"classify_id" description:"图表分类ID"`
+}

+ 3 - 1
models/response/chart_info/chart_info.go

@@ -1,6 +1,7 @@
 package chart_info
 
 import (
+	responseModel "hongze/hongze_yb/models/response"
 	"hongze/hongze_yb/models/tables/chart_edb_mapping"
 	"hongze/hongze_yb/models/tables/chart_info"
 )
@@ -8,4 +9,5 @@ import (
 type ChartInfoDetailResp struct {
 	ChartInfo   *chart_info.ChartInfoView
 	EdbInfoList []*chart_edb_mapping.ChartEdbInfoMappingList
-}
+	MyChartInfo *responseModel.MyChartItem
+}

+ 31 - 0
models/response/my_chart.go

@@ -1,5 +1,7 @@
 package response
 
+import "time"
+
 // MyChartClassifyItem 用户图表分类
 type MyChartClassifyItem struct {
 	MyChartClassifyID   int    `json:"my_chart_classify_id"`
@@ -8,3 +10,32 @@ type MyChartClassifyItem struct {
 	UserID              int    `json:"user_id"`
 	CreateTime          string `json:"create_time"`
 }
+
+type YbMyChart struct {
+	MyChartID         int       `gorm:"primaryKey;column:my_chart_id;type:int(10) unsigned;not null" json:"-"`
+	MyChartClassifyID int       `gorm:"index:idx_classify_id;column:my_chart_classify_id;type:int(10) unsigned;not null;default:0" json:"myChartClassifyId"` // 图表分类ID
+	ChartInfoID       int       `gorm:"column:chart_info_id;type:int(10) unsigned;not null;default:0" json:"chartInfoId"`                                    // 图表ID
+	ChartName         string    `gorm:"column:chart_name;type:varchar(255);not null;default:''" json:"chartName"`                                            // 图表名称
+	UniqueCode        string    `gorm:"column:unique_code;type:varchar(64);not null;default:''" json:"uniqueCode"`                                           // 图表唯一编码
+	ChartImage        string    `gorm:"column:chart_image;type:varchar(255);not null;default:''" json:"chartImage"`                                          // 图表图片
+	UserID            int       `gorm:"index:idx_user_id;column:user_id;type:int(10) unsigned;not null;default:0" json:"userId"`                             // 用户ID
+	ReportID          int       `gorm:"column:report_id;type:int(10) unsigned;not null;default:0" json:"reportId"`                                           // 报告ID(从哪个报告收藏的)
+	ReportChapterID   int       `gorm:"column:report_chapter_id;type:int(10) unsigned;not null;default:0" json:"reportChapterId"`                            // 报告章节ID
+	Source            int       `gorm:"column:source;type:tinyint(4) unsigned;not null;default:1" json:"source"`                                             // 1-ETA图库;2-ETA表格
+	CreateTime        time.Time `gorm:"column:create_time;type:datetime" json:"createTime"`
+	ModifyTime        time.Time `gorm:"column:modify_time;type:datetime" json:"modifyTime"`
+}
+
+// MyChartItem 用户图表
+type MyChartItem struct {
+	MyChartID         int    `json:"my_chart_id"`
+	MyChartClassifyID int    `json:"my_chart_classify_id"`
+	ChartInfoID       int    `json:"chart_info_id"`
+	ChartName         string `json:"chart_name"`
+	UniqueCode        string `json:"unique_code"`
+	ChartImage        string `json:"chart_image"`
+	UserID            int    `json:"user_id"`
+	ReportID          int    `json:"report_id"`
+	ReportChapterID   int    `json:"report_chapter_id"`
+	CreateTime        string `json:"create_time"`
+}

+ 1 - 1
models/tables/yb_my_chart/model.go

@@ -23,7 +23,7 @@ func (m *YbMyChart) List(condition string, pars []interface{}) (list []*YbMyChar
 	list = make([]*YbMyChart, 0)
 	err = global.DEFAULT_MYSQL.Model(m).
 		Where(condition, pars...).
-		Order("sort ASC, my_chart_classify_id ASC").
+		Order("create_time DESC").
 		Find(&list).Error
 	return
 }

+ 6 - 2
routers/my_chart.go

@@ -2,6 +2,7 @@ package routers
 
 import (
 	"github.com/gin-gonic/gin"
+	"hongze/hongze_yb/controller/chart"
 	"hongze/hongze_yb/controller/my_chart"
 	"hongze/hongze_yb/middleware"
 )
@@ -21,11 +22,14 @@ func InitMyChart(r *gin.Engine) {
 	mc := new(my_chart.MyChartController)
 	mcGroup := rg.Group("my_chart/").Use(middleware.Token())
 	mcGroup.GET("list", mc.List)
-	mcGroup.GET("detail", mc.Detail)
 	mcGroup.POST("relate_classify", mc.RelateClassify)
+	// 图标详情有权限校验
+	mcGroupAuth := rg.Group("my_chart/").Use(middleware.Token(), middleware.CheckBaseAuth())
+	mcGroupAuth.GET("detail", chart.GetChartInfoDetail)
 
-	// 这两个接口因为可能是从iframe发出请求, 所以token被放在入参中处理而不是header里
+	// 以下接口可能是从iframe发出请求, 所以token被放在入参中处理而不是header里
 	mcGroupNo := rg.Group("my_chart/")
 	mcGroupNo.POST("collect", mc.Collect)
 	mcGroupNo.POST("collect_cancel", mc.CollectCancel)
+	mcGroupNo.GET("is_collect", mc.IsCollect)
 }