Эх сурвалжийг харах

Merge branch 'needs/chart_switch_20230508' into debug

hsun 1 жил өмнө
parent
commit
c185ba5b5c

+ 131 - 0
controller/my_chart/my_chart.go

@@ -10,6 +10,7 @@ import (
 	"hongze/hongze_yb/models/tables/company_product"
 	"hongze/hongze_yb/models/tables/yb_config"
 	"hongze/hongze_yb/models/tables/yb_my_chart"
+	"hongze/hongze_yb/models/tables/yb_my_chart_classify"
 	"hongze/hongze_yb/services"
 	userService "hongze/hongze_yb/services/user"
 	"hongze/hongze_yb/utils"
@@ -377,3 +378,133 @@ func (this *MyChartController) IsCollect(c *gin.Context) {
 	}
 	response.OkData("获取成功", isCollect, c)
 }
+
+// Locate 图表在列表中的定位
+func (this *MyChartController) Locate(c *gin.Context) {
+	userInfo := userService.GetInfoByClaims(c)
+	userId := int(userInfo.UserID)
+	var req request.MyChartCollectLocateReq
+	if c.Bind(&req) != nil {
+		response.Fail("参数有误", c)
+		return
+	}
+	cond := `user_id = ?`
+	pars := make([]interface{}, 0)
+	pars = append(pars, userId)
+	if req.ClassifyId > 0 {
+		cond += ` AND my_chart_classify_id > 0`
+	}
+
+	ob := new(yb_my_chart.YbMyChart)
+	list, e := ob.List(cond, pars)
+	if e != nil {
+		response.FailMsg("获取失败", "获取用户图表列表失败, Err:"+e.Error(), c)
+		return
+	}
+	charts := make([]*responseModel.MyChartLocateItem, 0)
+	if len(list) == 0 {
+		response.OkData("获取成功", charts, c)
+		return
+	}
+
+	// 如果是分类下的图表, 则优先分类排序, 其次分类图表排序
+	if req.ClassifyId > 0 {
+		classifyCond := `user_id = ?`
+		classifyPars := make([]interface{}, 0)
+		classifyPars = append(classifyPars, userId)
+		classifyOB := new(yb_my_chart_classify.YbMyChartClassify)
+		classies, e := classifyOB.List(classifyCond, classifyPars)
+		if e != nil {
+			response.FailMsg("获取失败", "获取用户图表分类失败, Err: "+e.Error(), c)
+			return
+		}
+		for _, cl := range classies {
+			for _, ch := range list {
+				if ch.MyChartClassifyID != cl.MyChartClassifyID {
+					continue
+				}
+				v := new(responseModel.MyChartLocateItem)
+				v.MyChartID = ch.MyChartID
+				v.MyChartClassifyID = ch.MyChartClassifyID
+				v.ChartInfoID = ch.ChartInfoID
+				v.ChartName = ch.ChartName
+				v.UniqueCode = ch.UniqueCode
+				charts = append(charts, v)
+			}
+		}
+		total := len(charts)
+		if total > 0 {
+			last := total - 1
+			for k, v := range charts {
+				// 首图-首图无上一张
+				if k == 0 {
+					if (k + 1) <= last {
+						v.NextChartInfoID = charts[k+1].ChartInfoID
+					}
+					continue
+				}
+				// 尾图-尾图无下一张
+				if k == last {
+					if (k - 1) >= 0 {
+						v.PrevChartInfoID = charts[k-1].ChartInfoID
+					}
+					continue
+				}
+				// 中间
+				if (k - 1) >= 0 {
+					v.PrevChartInfoID = charts[k-1].ChartInfoID
+				}
+				if (k + 1) <= last {
+					v.NextChartInfoID = charts[k+1].ChartInfoID
+				}
+			}
+		}
+		response.OkData("获取成功", charts, c)
+		return
+	}
+
+	// 非分类列表
+	if req.ClassifyId == 0 {
+		for _, ch := range list {
+			v := new(responseModel.MyChartLocateItem)
+			v.MyChartID = ch.MyChartID
+			v.MyChartClassifyID = ch.MyChartClassifyID
+			v.ChartInfoID = ch.ChartInfoID
+			v.ChartName = ch.ChartName
+			v.UniqueCode = ch.UniqueCode
+			charts = append(charts, v)
+		}
+		total := len(charts)
+		if total > 0 {
+			last := total - 1
+			for k, v := range charts {
+				// 首图-首图的上一张为尾图
+				if k == 0 {
+					if last > 0 {
+						v.PrevChartInfoID = charts[last].ChartInfoID
+					}
+					if (k + 1) <= last {
+						v.NextChartInfoID = charts[k+1].ChartInfoID
+					}
+					continue
+				}
+				// 尾图-尾图的下一张为首图
+				if k == last {
+					if (k - 1) >= 0 {
+						v.PrevChartInfoID = charts[k-1].ChartInfoID
+					}
+					v.NextChartInfoID = charts[0].ChartInfoID
+					continue
+				}
+				// 中间
+				if (k - 1) >= 0 {
+					v.PrevChartInfoID = charts[k-1].ChartInfoID
+				}
+				if (k + 1) <= last {
+					v.NextChartInfoID = charts[k+1].ChartInfoID
+				}
+			}
+		}
+	}
+	response.OkData("获取成功", charts, c)
+}

+ 4 - 0
models/request/my_chart.go

@@ -48,3 +48,7 @@ type MyChartCollectListReq struct {
 	CurrPage   int    `json:"curr_page" form:"curr_page"`
 	PageSize   int    `json:"page_size" form:"page_size"`
 }
+
+type MyChartCollectLocateReq struct {
+	ClassifyId int `json:"classify_id" form:"classify_id" description:"图表分类ID"`
+}

+ 11 - 0
models/response/my_chart.go

@@ -28,3 +28,14 @@ type MyChartListResp struct {
 	List   []*MyChartItem `json:"list"`
 	Paging *PagingItem    `json:"paging"`
 }
+
+// MyChartLocateItem 用户图表定位
+type MyChartLocateItem 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"`
+	PrevChartInfoID   int    `json:"prev_chart_info_id"`
+	NextChartInfoID   int    `json:"next_chart_info_id"`
+}

+ 1 - 0
routers/my_chart.go

@@ -23,6 +23,7 @@ func InitMyChart(r *gin.Engine) {
 	mcGroup := rg.Group("my_chart/").Use(middleware.Token())
 	mcGroup.GET("list", mc.List)
 	mcGroup.POST("relate_classify", mc.RelateClassify)
+	mcGroup.GET("locate", mc.Locate)
 
 	//mcGroupAuth := rg.Group("my_chart/").Use(middleware.Token(), middleware.CheckBaseAuth())
 	mcGroup.GET("detail", chart.GetChartInfoDetail)