Files
full/module/base/feedback/internal/logic/method/list.go

88 lines
2.0 KiB
Go

// Package method 业务逻辑方法包,实现反馈相关的业务操作
package method
import (
"context"
"bsm/full/module/base/feedback/internal/impl"
"bsm/full/module/base/feedback/internal/models"
pb "bsm/full/module/base/feedback/pb"
"git.apinb.com/bsm-sdk/core/service"
)
// List 获取反馈记录列表
// ctx: 上下文,包含用户认证信息
// in: 查询请求参数,包含分页、筛选条件等
// 返回: 反馈记录列表和总数
func List(ctx context.Context, in *pb.ListRequest) (reply *pb.ListReply, err error) {
// 解析用户认证信息
auth, err := service.ParseMetaCtx(ctx, nil)
if err != nil {
return nil, err
}
// 分页参数校验和设置
if in.GetPage() < 1 {
in.Page = 1
}
size := in.GetSize()
if size < 1 || size > 50 {
in.Size = 10
}
offset := (in.Page - 1) * in.GetSize()
// 构建查询会话,预加载图片信息
sess := impl.DBService.Preload("Images")
// 根据机构筛选或用户身份筛选
if in.GetAgency() != "" {
sess = sess.Where("agency = ?", in.GetAgency())
} else {
userIdentity := auth.Identity
if userIdentity != "" {
sess = sess.Where("passport_identity = ?", userIdentity)
}
}
// 用户名筛选
username := in.GetUserName()
if username != "" {
sess = sess.Where("username = ?", username)
}
// 状态筛选
status := in.GetStatus()
if status != 0 {
sess = sess.Where("status = ?", status)
}
// 分类筛选
category := in.GetCategory()
if category != "" {
sess = sess.Where("category = ?", category)
}
var (
list []models.FeedbackItem
count int64
)
// 执行查询,按创建时间倒序排列
if err := sess.Limit(int(in.GetSize())).Offset(int(offset)).Order("created_at desc").Find(&list).Count(&count).Error; err != nil {
return nil, err
}
// 构建响应结果
out := &pb.ListReply{
Count: count,
List: make([]*pb.FeedbackItem, 0, len(list)),
}
// 转换数据格式
for _, v := range list {
item := convert(v)
out.List = append(out.List, item)
}
return out, nil
}