135 lines
5.1 KiB
Go
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
|
|
}
|