This commit is contained in:
Joe
2026-01-16 15:49:34 +08:00
commit 550d3e1f42
380 changed files with 62024 additions and 0 deletions
+145
View File
@@ -0,0 +1,145 @@
package services
import (
"github.com/goravel/framework/facades"
apperrors "goravel/app/errors"
"goravel/app/http/helpers"
"goravel/app/models"
)
type DictionaryService interface {
// GetByID 根据ID获取字典
GetByID(id uint) (*models.Dictionary, error)
// GetList 获取字典列表
GetList(filters DictionaryFilters, page, pageSize int) ([]models.Dictionary, int64, error)
// GetByType 根据类型获取字典列表
GetByType(dictType string) ([]models.Dictionary, error)
// GetAllTypes 获取所有字典类型
GetAllTypes() ([]string, error)
// Create 创建字典
Create(dictType, label, value, translationKey, description, remark string, status uint8, sort int) (*models.Dictionary, error)
// Update 更新字典
Update(dictionary *models.Dictionary) error
// Delete 删除字典
Delete(dictionary *models.Dictionary) error
}
// DictionaryFilters 字典查询过滤器
type DictionaryFilters struct {
Type string
Status string
StartTime string
EndTime string
OrderBy string
}
type DictionaryServiceImpl struct {
}
func NewDictionaryService() DictionaryService {
return &DictionaryServiceImpl{}
}
// GetByID 根据ID获取字典
func (s *DictionaryServiceImpl) GetByID(id uint) (*models.Dictionary, error) {
var dictionary models.Dictionary
if err := facades.Orm().Query().Where("id", id).FirstOrFail(&dictionary); err != nil {
return nil, apperrors.ErrDictionaryNotFound.WithError(err)
}
return &dictionary, nil
}
// GetList 获取字典列表
func (s *DictionaryServiceImpl) GetList(filters DictionaryFilters, page, pageSize int) ([]models.Dictionary, int64, error) {
query := facades.Orm().Query().Model(&models.Dictionary{})
// 应用筛选条件
if filters.Type != "" {
query = query.Where("type LIKE ?", "%"+filters.Type+"%")
}
if filters.Status != "" {
query = query.Where("status", filters.Status)
}
if filters.StartTime != "" {
query = query.Where("created_at >= ?", filters.StartTime)
}
if filters.EndTime != "" {
query = query.Where("created_at <= ?", filters.EndTime)
}
// 应用排序
orderBy := filters.OrderBy
if orderBy == "" {
orderBy = "sort:asc,id:desc"
}
query = helpers.ApplySort(query, orderBy, "sort:asc,id:desc")
// 分页查询
var dictionaries []models.Dictionary
var total int64
if err := query.Paginate(page, pageSize, &dictionaries, &total); err != nil {
return nil, 0, err
}
return dictionaries, total, nil
}
// GetByType 根据类型获取字典列表
func (s *DictionaryServiceImpl) GetByType(dictType string) ([]models.Dictionary, error) {
var dictionaries []models.Dictionary
if err := facades.Orm().Query().
Where("type", dictType).
Where("status", 1).
Order("sort asc, id asc").
Find(&dictionaries); err != nil {
return nil, err
}
return dictionaries, nil
}
// GetAllTypes 获取所有字典类型
func (s *DictionaryServiceImpl) GetAllTypes() ([]string, error) {
var types []string
if err := facades.Orm().Query().Model(&models.Dictionary{}).Distinct("type").Pluck("type", &types); err != nil {
return []string{}, nil
}
return types, nil
}
// Create 创建字典
func (s *DictionaryServiceImpl) Create(dictType, label, value, translationKey, description, remark string, status uint8, sort int) (*models.Dictionary, error) {
dictionary := &models.Dictionary{}
createData := map[string]any{
"type": dictType,
"label": label,
"value": value,
"translation_key": translationKey,
"description": description,
"remark": remark,
"status": status,
"sort": sort,
}
if err := facades.Orm().Query().Model(dictionary).Create(createData); err != nil {
return nil, apperrors.ErrCreateFailed.WithError(err)
}
return dictionary, nil
}
// Update 更新字典
func (s *DictionaryServiceImpl) Update(dictionary *models.Dictionary) error {
if err := facades.Orm().Query().Save(dictionary); err != nil {
return apperrors.ErrUpdateFailed.WithError(err)
}
return nil
}
// Delete 删除字典
func (s *DictionaryServiceImpl) Delete(dictionary *models.Dictionary) error {
if _, err := facades.Orm().Query().Delete(dictionary); err != nil {
return apperrors.ErrDeleteFailed.WithError(err)
}
return nil
}