package feedback import ( "context" "server/internal/consts" "server/internal/dao" "server/internal/model" "server/internal/model/do" "server/internal/service" "server/utility/ecode" ) type sFeedback struct { } func New() service.IFeedback { return &sFeedback{} } func init() { service.RegisterFeedback(New()) } func (s *sFeedback) List(ctx context.Context, in *model.FeedbackIn) (out *model.FeedbackOut, err error) { m := dao.Feedbacks.Ctx(ctx) // 默认分页 if in.Page == 0 { in.Page = 1 } if in.Size == 0 { in.Size = 10 } // 判断角色 if in.Role == consts.MerchantRoleCode { m = m.Where(do.Feedbacks{ MerchatId: in.OperatorId, }) } else if in.Role == consts.StoreRoleCode { m = m.Where(do.Feedbacks{ StoreId: in.OperatorId, }) } else if in.Role == consts.UserRoleCode { m = m.Where(do.Feedbacks{ UserId: in.OperatorId, }) } // 构建查询条件 if in.Keyword != "" { m = m.WhereLike(dao.Feedbacks.Columns().Title, "%"+in.Keyword+"%") } if in.FeedbackType > 0 { m = m.Where(do.Feedbacks{ FeedbackType: in.FeedbackType, }) } if in.Status > 0 { m = m.Where(do.Feedbacks{ Status: in.Status, }) } // 分页查询 list := make([]model.Feedback, 0) var total int err = m.Page(in.Page, in.Size).OrderDesc(dao.Feedbacks.Columns().CreatedAt).OrderDesc(dao.Feedbacks.Columns().Id).ScanAndCount(&list, &total, false) if err != nil { return nil, err } return &model.FeedbackOut{ List: list, Total: total, }, nil } func (s *sFeedback) Create(ctx context.Context, in *model.FeedbackCreateIn) (out *model.FeedbackCreateOut, err error) { // 暂定只能用户提交反馈信息 _, err = dao.Feedbacks.Ctx(ctx).Insert(do.Feedbacks{ Title: in.Title, Content: in.Content, FeedbackType: in.FeedbackType, UserId: in.OperatorId, }) if err != nil { return nil, err } return &model.FeedbackCreateOut{ Success: true, }, nil } func (s *sFeedback) Update(ctx context.Context, in *model.FeedbackUpdateIn) (out *model.FeedbackUpdateOut, err error) { // 暂定用户修改反馈信息 // 是否存在该信息 var feedback *model.Feedback err = dao.Feedbacks.Ctx(ctx).Where(do.Feedbacks{Id: in.Id}).Scan(&feedback) if err != nil || feedback == nil { return nil, ecode.Fail.Sub("未查询到该反馈信息") } // 该反馈信息是否未处理 if feedback.Status != consts.Unprocess { return nil, ecode.Fail.Sub("该反馈信息已处理") } _, err = dao.Feedbacks.Ctx(ctx).Where(do.Feedbacks{Id: in.Id}).Update(do.Feedbacks{ Title: in.Title, Content: in.Content, FeedbackType: in.FeedbackType, }) if err != nil { return nil, ecode.Fail.Sub("更新反馈信息出现异常") } return &model.FeedbackUpdateOut{ Success: true, }, nil } func (s *sFeedback) UpdateReply(ctx context.Context, in *model.FeedbackUpdateReplyIn) (out *model.FeedbackUpdateReplyOut, err error) { var feedback *model.Feedback err = dao.Feedbacks.Ctx(ctx).Where(do.Feedbacks{Id: in.Id}).Scan(&feedback) if err != nil || feedback == nil { return nil, ecode.Fail.Sub("该反馈信息不存在") } if feedback.Status == consts.Processed || feedback.Status == consts.Rejected { return nil, ecode.Fail.Sub("该反馈信息已处理") } _, err = dao.Feedbacks.Ctx(ctx).Where(do.Feedbacks{Id: in.Id}).Update(do.Feedbacks{ Reply: in.Reply, Status: in.Status, }) if err != nil { return nil, err } return &model.FeedbackUpdateReplyOut{ Success: true, }, nil } func (s *sFeedback) InfoFeedback(ctx context.Context, in *model.FeedbackInfoIn) (out *model.FeedbackInfoOut, err error) { exist, err := dao.Feedbacks.Ctx(ctx).Where(do.Feedbacks{Id: in.Id}).Exist() if err != nil { return nil, ecode.Fail.Sub("查询该反馈信息失败") } if !exist { return nil, ecode.Params.Sub("该反馈信息不存在") } err = dao.Feedbacks.Ctx(ctx).Where(do.Feedbacks{Id: in.Id}).Scan(&out) if err != nil { return nil, ecode.Fail.Sub("查询该反馈信息失败") } return out, nil }