Files
ai-agent/internal/services/ticket_resolution_code_service.go
T
mlogclub efe801b8bf Init
2026-04-09 10:01:23 +08:00

135 lines
5.1 KiB
Go

package services
import (
"cs-agent/internal/models"
"cs-agent/internal/pkg/dto"
"cs-agent/internal/pkg/dto/request"
"cs-agent/internal/pkg/enums"
"cs-agent/internal/pkg/errorsx"
"cs-agent/internal/pkg/utils"
"cs-agent/internal/repositories"
"strings"
"time"
"github.com/mlogclub/simple/sqls"
"github.com/mlogclub/simple/web/params"
)
var TicketResolutionCodeService = newTicketResolutionCodeService()
func newTicketResolutionCodeService() *ticketResolutionCodeService {
return &ticketResolutionCodeService{}
}
type ticketResolutionCodeService struct{}
func (s *ticketResolutionCodeService) Get(id int64) *models.TicketResolutionCode {
return repositories.TicketResolutionCodeRepository.Get(sqls.DB(), id)
}
func (s *ticketResolutionCodeService) Take(where ...interface{}) *models.TicketResolutionCode {
return repositories.TicketResolutionCodeRepository.Take(sqls.DB(), where...)
}
func (s *ticketResolutionCodeService) Find(cnd *sqls.Cnd) []models.TicketResolutionCode {
return repositories.TicketResolutionCodeRepository.Find(sqls.DB(), cnd)
}
func (s *ticketResolutionCodeService) FindOne(cnd *sqls.Cnd) *models.TicketResolutionCode {
return repositories.TicketResolutionCodeRepository.FindOne(sqls.DB(), cnd)
}
func (s *ticketResolutionCodeService) FindPageByParams(params *params.QueryParams) (list []models.TicketResolutionCode, paging *sqls.Paging) {
return repositories.TicketResolutionCodeRepository.FindPageByParams(sqls.DB(), params)
}
func (s *ticketResolutionCodeService) FindPageByCnd(cnd *sqls.Cnd) (list []models.TicketResolutionCode, paging *sqls.Paging) {
return repositories.TicketResolutionCodeRepository.FindPageByCnd(sqls.DB(), cnd)
}
func (s *ticketResolutionCodeService) Count(cnd *sqls.Cnd) int64 {
return repositories.TicketResolutionCodeRepository.Count(sqls.DB(), cnd)
}
func (s *ticketResolutionCodeService) Create(t *models.TicketResolutionCode) error {
return repositories.TicketResolutionCodeRepository.Create(sqls.DB(), t)
}
func (s *ticketResolutionCodeService) Updates(id int64, columns map[string]interface{}) error {
return repositories.TicketResolutionCodeRepository.Updates(sqls.DB(), id, columns)
}
func (s *ticketResolutionCodeService) CreateTicketResolutionCode(req request.CreateTicketResolutionCodeRequest, operator *dto.AuthPrincipal) (*models.TicketResolutionCode, error) {
if operator == nil {
return nil, errorsx.Unauthorized("未登录或登录已过期")
}
item, err := s.buildResolutionCodeModel(0, req.Name, req.Code, int(req.Status), req.SortNo, req.Remark)
if err != nil {
return nil, err
}
item.AuditFields = utils.BuildAuditFields(operator)
if err := s.Create(item); err != nil {
return nil, err
}
return item, nil
}
func (s *ticketResolutionCodeService) UpdateTicketResolutionCode(req request.UpdateTicketResolutionCodeRequest, operator *dto.AuthPrincipal) error {
if operator == nil {
return errorsx.Unauthorized("未登录或登录已过期")
}
current := s.Get(req.ID)
if current == nil || current.Status == enums.StatusDeleted {
return errorsx.InvalidParam("工单解决码不存在")
}
item, err := s.buildResolutionCodeModel(req.ID, req.Name, req.Code, int(req.Status), req.SortNo, req.Remark)
if err != nil {
return err
}
return s.Updates(req.ID, map[string]any{
"name": item.Name,
"code": item.Code,
"status": item.Status,
"sort_no": item.SortNo,
"remark": item.Remark,
"update_user_id": operator.UserID,
"update_user_name": operator.Username,
"updated_at": time.Now(),
})
}
func (s *ticketResolutionCodeService) DeleteTicketResolutionCode(id int64, operator *dto.AuthPrincipal) error {
if operator == nil {
return errorsx.Unauthorized("未登录或登录已过期")
}
current := s.Get(id)
if current == nil || current.Status == enums.StatusDeleted {
return errorsx.InvalidParam("工单解决码不存在")
}
return s.Updates(id, map[string]any{
"status": enums.StatusDeleted,
"update_user_id": operator.UserID,
"update_user_name": operator.Username,
"updated_at": time.Now(),
})
}
func (s *ticketResolutionCodeService) buildResolutionCodeModel(id int64, name, code string, status, sortNo int, remark string) (*models.TicketResolutionCode, error) {
name = strings.TrimSpace(name)
code = strings.TrimSpace(code)
if name == "" {
return nil, errorsx.InvalidParam("工单解决码名称不能为空")
}
if code == "" {
return nil, errorsx.InvalidParam("工单解决码编码不能为空")
}
if !enums.IsValidStatus(status) || status == int(enums.StatusDeleted) {
return nil, errorsx.InvalidParam("工单解决码状态不合法")
}
if exists := s.Take("name = ? AND status <> ? AND id <> ?", name, enums.StatusDeleted, id); exists != nil {
return nil, errorsx.InvalidParam("工单解决码名称已存在")
}
if exists := s.Take("code = ? AND status <> ? AND id <> ?", code, enums.StatusDeleted, id); exists != nil {
return nil, errorsx.InvalidParam("工单解决码编码已存在")
}
return &models.TicketResolutionCode{
Name: name,
Code: code,
SortNo: sortNo,
Status: enums.Status(status),
Remark: strings.TrimSpace(remark),
}, nil
}