Browse Source

fix:修改添加用户阅读记录逻辑

zqbao 9 months ago
parent
commit
5ea2cd8097
6 changed files with 67 additions and 45 deletions
  1. 35 35
      controllers/user.go
  2. 1 1
      models/chart_permission.go
  3. 1 1
      models/request/user.go
  4. 1 1
      models/response/user.go
  5. 16 7
      models/user_read_record.go
  6. 13 0
      utils/common.go

+ 35 - 35
controllers/user.go

@@ -9,6 +9,7 @@ import (
 	"eta/eta_mini_api/utils"
 	"fmt"
 	"strconv"
+	"strings"
 	"time"
 )
 
@@ -268,52 +269,51 @@ func (this *UserAuthController) AddReportRecord() {
 		chartMap[permission.ChartPermissionId] = permission
 	}
 	curTime := time.Now()
-	insertIds := make([]int64, 0)
-	if len(req.RecordId) <= 0 {
+	var insertId int64
+	if req.RecordId == 0 {
 		// 如果不存在就新增一条记录
+		permission1Ids := make([]string, 0)
+		permission2Ids := make([]string, 0)
+		permissionNames := make([]string, 0)
 		for _, item := range items {
 			curPermission := chartMap[item.ChartPermissionId]
-			userReadRecord := &models.UserReadRecord{
-				UserId:              user.UserId,
-				ReportId:            req.ReportId,
-				ReportTitle:         req.ReportTitle,
-				ChartPermissionId1:  chartMap[curPermission.ParentId].ChartPermissionId,
-				ChartPermissionId2:  curPermission.ChartPermissionId,
-				ChartPermissionName: curPermission.PermissionName,
-				ClassifyId1:         req.ClassifyIdFirst,
-				ClassifyName1:       req.ClassifyNameFirst,
-				ClassifyId2:         req.ClassifyIdSecond,
-				ClassifyName2:       req.ClassifyNameSecond,
-				AreaCode:            user.AreaCode,
-				Phone:               user.Phone,
-				Email:               user.Email,
-				RealName:            user.RealName,
-				CompanyName:         user.Company,
-				Timestamp:           int(curTime.Unix()),
-				CreateTime:          curTime,
-			}
-			insertId, _ := userReadRecord.Insert()
-			insertIds = append(insertIds, insertId)
+			permission1Ids = append(permission1Ids, strconv.Itoa(curPermission.ParentId))
+			permission2Ids = append(permission2Ids, strconv.Itoa(curPermission.ChartPermissionId))
+			permissionNames = append(permissionNames, curPermission.PermissionName)
+		}
+		permission1Ids = utils.Unique(permission1Ids)
+		permission2Ids = utils.Unique(permission2Ids)
+		permissionNames = utils.Unique(permissionNames)
+		userReadRecord := &models.UserReadRecord{
+			UserId:              user.UserId,
+			ReportId:            req.ReportId,
+			ReportTitle:         req.ReportTitle,
+			ChartPermissionId1:  strings.Join(permission1Ids, ","),
+			ChartPermissionId2:  strings.Join(permission2Ids, ","),
+			ChartPermissionName: strings.Join(permissionNames, ","),
+			ClassifyId1:         req.ClassifyIdFirst,
+			ClassifyName1:       req.ClassifyNameFirst,
+			ClassifyId2:         req.ClassifyIdSecond,
+			ClassifyName2:       req.ClassifyNameSecond,
+			Timestamp:           int(curTime.Unix()),
+			CreateTime:          curTime,
 		}
+		insertId, _ = userReadRecord.Insert()
 	} else {
 		// 如果存在就计算停留时间
-		recordIds := make([]string, 0)
-		for _, v := range req.RecordId {
-			recordIds = append(recordIds, strconv.Itoa(v))
-		}
-		userRecordList, err := models.GetUserReadRecordListByRcordIds(recordIds)
+		userRecord, err := models.GetUserReadRecordListById(req.RecordId)
 		if err != nil {
+			if err.Error() == utils.ErrNoRow() {
+				br.Msg = "更新阅读记录不存在"
+				return
+			}
 			br.Msg = "更新阅读记录失败"
 			br.ErrMsg = "更新阅读记录失败,Err:" + err.Error()
 			return
 		}
-		if len(userRecordList) == 0 {
-			br.Msg = "更新阅读记录不存在"
-			return
-		}
-		stayTime := curTime.Unix() - int64(userRecordList[0].Timestamp)
+		stayTime := curTime.Unix() - int64(userRecord.Timestamp)
 		stayTimeStr := utils.SecondsToHMS(stayTime)
-		err = models.UpdateUserReadRecordByRecordIds(recordIds, int(curTime.Unix()), int(stayTime), stayTimeStr)
+		err = models.UpdateUserReadRecordById(req.RecordId, int(curTime.Unix()), int(stayTime), stayTimeStr)
 		if err != nil {
 			br.Msg = "更新阅读记录失败"
 			br.ErrMsg = "更新阅读记录失败,Err:" + err.Error()
@@ -321,7 +321,7 @@ func (this *UserAuthController) AddReportRecord() {
 		}
 	}
 	resp := new(response.UserReadRecordResp)
-	resp.RecordIds = insertIds
+	resp.RecordId = insertId
 
 	br.Msg = "添加阅读记录成功"
 	br.Ret = 200

+ 1 - 1
models/chart_permission.go

@@ -20,7 +20,7 @@ type ChartPermission struct {
 	LastUpdatedTime     time.Time `description:"更新时间"`
 	Remark              string    `description:"备注"`
 	ImageURL            string    `description:"图片地址"`
-	ParentId            int       `description:"父级权限id" json:"parent_id"`
+	ParentId            int       `description:"父级权限id"`
 	IsPublic            int       `description:"是否是公有权限1:公有权限,0私有权限"`
 }
 

+ 1 - 1
models/request/user.go

@@ -24,7 +24,7 @@ type VerifyCodeReq struct {
 }
 
 type ReportRecordReq struct {
-	RecordId           []int  `description:"记录Id"`
+	RecordId           int    `description:"记录Id"`
 	ReportId           int    `description:"报告Id"`
 	ReportTitle        string `description:"报告标题"`
 	ClassifyIdFirst    int    `description:"一级类别id"`

+ 1 - 1
models/response/user.go

@@ -15,7 +15,7 @@ type WeChatLoginResp struct {
 }
 
 type UserReadRecordResp struct {
-	RecordIds []int64
+	RecordId int64
 }
 
 type AreaCodeListResp struct {

+ 16 - 7
models/user_read_record.go

@@ -12,18 +12,13 @@ type UserReadRecord struct {
 	UserId              int       `description:"用户id"`
 	ReportId            int       `description:"报告id"`
 	ReportTitle         string    `description:"报告标题"`
-	ChartPermissionId1  int       `description:"一级品种id"`
-	ChartPermissionId2  int       `description:"二级品种id"`
+	ChartPermissionId1  string    `description:"一级品种id"`
+	ChartPermissionId2  string    `description:"二级品种id"`
 	ChartPermissionName string    `description:"二级品种名称"`
 	ClassifyId1         int       `description:"一级级分类id"`
 	ClassifyName1       string    `description:"一级分类名称"`
 	ClassifyId2         int       `description:"二级分类id"`
 	ClassifyName2       string    `description:"二级分类名称"`
-	AreaCode            string    `description:"手机区号"`
-	Phone               string    `description:"手机号"`
-	Email               string    `description:"邮箱"`
-	RealName            string    `description:"用户实际姓名"`
-	CompanyName         string    `description:"公司名称"`
 	Timestamp           int       `description:"阅读开始时间戳"`
 	EndTimestamp        int       `description:"阅读结束时间戳"`
 	CreateTime          time.Time `description:"创建时间"`
@@ -43,6 +38,13 @@ func (u *UserReadRecord) Update(cols []string) (err error) {
 	return
 }
 
+func GetUserReadRecordListById(recordId int) (items *UserReadRecord, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM user_read_record WHERE 1=1 AND user_read_record_id = ?`
+	err = o.Raw(sql, recordId).QueryRow(&items)
+	return
+}
+
 func GetUserReadRecordListByRcordIds(recordIds []string) (items []*UserReadRecord, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT * FROM user_read_record WHERE 1=1  `
@@ -55,6 +57,13 @@ func GetUserReadRecordListByRcordIds(recordIds []string) (items []*UserReadRecor
 	return
 }
 
+func UpdateUserReadRecordById(recordId, endTimeStamp, stayTime int, stayTimeStr string) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE user_read_record SET end_timestamp=?, stay_timestamp=?, stay_time=? WHERE 1=1 AND user_read_record_id = ? `
+	_, err = o.Raw(sql, endTimeStamp, stayTime, stayTimeStr, recordId).Exec()
+	return
+}
+
 func UpdateUserReadRecordByRecordIds(recordIds []string, endTimeStamp, stayTime int, stayTimeStr string) (err error) {
 	o := orm.NewOrm()
 	sql := `UPDATE user_read_record SET end_timestamp=?, stay_timestamp=?, stay_time=? WHERE 1=1 `

+ 13 - 0
utils/common.go

@@ -166,3 +166,16 @@ func SecondsToHMS(seconds int64) string {
 	}
 	return result
 }
+
+func Unique[T comparable](slice []T) []T {
+	seen := make(map[T]struct{})
+	var unique []T
+
+	for _, v := range slice {
+		if _, exists := seen[v]; !exists {
+			unique = append(unique, v)
+			seen[v] = struct{}{}
+		}
+	}
+	return unique
+}