Browse Source

fix:阅读记录筛选

zqbao 8 months ago
parent
commit
a3d091acc0
3 changed files with 64 additions and 15 deletions
  1. 21 13
      controllers/user_read_record.go
  2. 13 0
      models/classify.go
  3. 30 2
      models/user_read_record.go

+ 21 - 13
controllers/user_read_record.go

@@ -281,30 +281,38 @@ func (this *UserReadRecordController) Detail() {
 			condition += `) `
 		}
 	}
+
+	var firstClassifyIds, secondClassifyIds, thirdClassifyIds []int
 	if classifyIds != "" {
 		ids := strings.Split(classifyIds, ",")
-		if len(ids) != 0 {
-			condition += ` AND ( `
-			for i, id := range ids {
-				if i == 0 {
-					condition += ` classify_id2 = ? `
-					pars = append(pars, id)
-				} else {
-					condition += ` OR classify_id2 = ? `
-					pars = append(pars, id)
-				}
+		classifyList, err := models.GetClassifyListByIds(ids)
+		if err != nil {
+			br.Msg = "查询失败"
+			br.Msg = "分类查询失败,系统错误,Err:" + err.Error()
+			return
+		}
+		firstClassifyIds := make([]int, 0)
+		secondClassifyIds := make([]int, 0)
+		thirdClassifyIds := make([]int, 0)
+		for _, v := range classifyList {
+			switch v.Level {
+			case 1:
+				firstClassifyIds = append(firstClassifyIds, v.Id)
+			case 2:
+				secondClassifyIds = append(secondClassifyIds, v.Id)
+			case 3:
+				thirdClassifyIds = append(thirdClassifyIds, v.Id)
 			}
-			condition += `) `
 		}
 	}
 
-	total, err := models.GetUserReadRecordCountByUserId(UserId, condition, pars)
+	total, err := models.GetUserReadRecordCountByUserId(firstClassifyIds, secondClassifyIds, thirdClassifyIds, UserId, condition, pars)
 	if err != nil {
 		br.Msg = "查询阅读记录失败"
 		br.ErrMsg = "查询阅读记录失败,Err:" + err.Error()
 		return
 	}
-	readList, err := models.GetUserReadRecordByUserId(UserId, condition, pars, startSize, pageSize)
+	readList, err := models.GetUserReadRecordByUserId(firstClassifyIds, secondClassifyIds, thirdClassifyIds, UserId, condition, pars, startSize, pageSize)
 	if err != nil {
 		br.Msg = "查询阅读记录失败"
 		br.ErrMsg = "查询阅读记录失败,系统错误,Err:" + err.Error()

+ 13 - 0
models/classify.go

@@ -1,6 +1,7 @@
 package models
 
 import (
+	"eta/eta_mini_crm/utils"
 	"time"
 
 	"github.com/beego/beego/v2/client/orm"
@@ -26,6 +27,8 @@ type ClassifyView struct {
 	ModifyTime    time.Time       `description:"修改时间"`
 	ClassifyLabel string          `description:"分类标签"`
 	Enabled       int             `description:"是否可用,1可用,0禁用"`
+	Level         int             `description:"分类层级"`
+	HasChild      int             `description:"是否有子分类0:下面没有子分类,1:下面有子分类"`
 	Child         []*ClassifyView `description:"子分类"`
 }
 
@@ -42,3 +45,13 @@ func GetClassifyById(classifyId int) (item *ClassifyView, err error) {
 	err = o.Raw(sql, classifyId).QueryRow(&item)
 	return
 }
+
+func GetClassifyListByIds(ids []string) (items []*ClassifyView, err error) {
+	if len(ids) == 0 {
+		return
+	}
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `SELECT * FROM classify WHERE enabled=1 AND id IN (` + utils.GetOrmReplaceHolder(len(ids)) + `)`
+	_, err = o.Raw(sql, ids).QueryRows(&items)
+	return
+}

+ 30 - 2
models/user_read_record.go

@@ -1,6 +1,8 @@
 package models
 
 import (
+	"eta/eta_mini_crm/utils"
+	"fmt"
 	"time"
 
 	"github.com/beego/beego/v2/client/orm"
@@ -38,7 +40,7 @@ type PermissionCntStaitc struct {
 	Percent           float64
 }
 
-func GetUserReadRecordByUserId(userId int, condition string, pars []interface{}, startSize, pageSize int) (items []*UserReadRecord, err error) {
+func GetUserReadRecordByUserId(firstClassifyIds, secondClassifyIds, thirdClassifyIds []int, userId int, condition string, pars []interface{}, startSize, pageSize int) (items []*UserReadRecord, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT DISTINCT ur.user_read_record_id, ur.report_id, ur.report_title, ur.chart_permission_name, ur.classify_name2, 
 		ur.create_time, ur.stay_time, ur.classify_id2
@@ -49,12 +51,25 @@ func GetUserReadRecordByUserId(userId int, condition string, pars []interface{},
 	if condition != "" {
 		sql += condition
 	}
+	if len(firstClassifyIds) != 0 || len(secondClassifyIds) != 0 || len(thirdClassifyIds) != 0 {
+		sql += ` AND (1=2 `
+		if len(firstClassifyIds) > 0 {
+			sql += fmt.Sprintf(" OR ur.classify_id1 IN (%s) ", utils.GetOrmReplaceHolder(len(firstClassifyIds)))
+		}
+		if len(secondClassifyIds) > 0 {
+			sql += fmt.Sprintf(" OR ur.classify_id2 IN (%s) ", utils.GetOrmReplaceHolder(len(secondClassifyIds)))
+		}
+		if len(thirdClassifyIds) > 0 {
+			sql += fmt.Sprintf(" OR ur.classify_id3 IN (%s) ", utils.GetOrmReplaceHolder(len(thirdClassifyIds)))
+		}
+		sql += ` ) `
+	}
 	sql += ` ORDER BY create_time DESC LIMIT ?, ?`
 	_, err = o.Raw(sql, userId, pars, startSize, pageSize).QueryRows(&items)
 	return
 }
 
-func GetUserReadRecordCountByUserId(userId int, condition string, pars []interface{}) (count int, err error) {
+func GetUserReadRecordCountByUserId(firstClassifyIds, secondClassifyIds, thirdClassifyIds []int, userId int, condition string, pars []interface{}) (count int, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT COUNT(DISTINCT ur.user_read_record_id) AS count
 	  	FROM user_read_record AS ur
@@ -64,6 +79,19 @@ func GetUserReadRecordCountByUserId(userId int, condition string, pars []interfa
 	if condition != "" {
 		sql += condition
 	}
+	if len(firstClassifyIds) != 0 || len(secondClassifyIds) != 0 || len(thirdClassifyIds) != 0 {
+		sql += ` AND (1=2 `
+		if len(firstClassifyIds) > 0 {
+			sql += fmt.Sprintf(" OR ur.classify_id1 IN (%s) ", utils.GetOrmReplaceHolder(len(firstClassifyIds)))
+		}
+		if len(secondClassifyIds) > 0 {
+			sql += fmt.Sprintf(" OR ur.classify_id2 IN (%s) ", utils.GetOrmReplaceHolder(len(secondClassifyIds)))
+		}
+		if len(thirdClassifyIds) > 0 {
+			sql += fmt.Sprintf(" OR ur.classify_id3 IN (%s) ", utils.GetOrmReplaceHolder(len(thirdClassifyIds)))
+		}
+		sql += ` ) `
+	}
 	err = o.Raw(sql, userId, pars).QueryRow(&count)
 	return
 }