173 lines
3.9 KiB
Go
173 lines
3.9 KiB
Go
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
|
|
}
|