88 lines
2.0 KiB
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
|
|
}
|