2025-05-07 14:12:53 +08:00

109 lines
2.3 KiB
Go

package system
import (
"context"
"encoding/json"
"errors"
"time"
"management/internal/erpserver/model/dto"
"management/internal/erpserver/model/system"
"management/internal/erpserver/service"
v1 "management/internal/erpserver/service/v1"
"management/internal/pkg/know"
"management/internal/pkg/know/pearadmin"
"gorm.io/gorm"
)
type configService struct {
*service.Service
repo system.ConfigRepository
}
func NewConfigService(service *service.Service, repo system.ConfigRepository) v1.ConfigService {
return &configService{
Service: service,
repo: repo,
}
}
func (s *configService) Create(ctx context.Context, obj *system.Config) error {
return s.repo.Create(ctx, obj)
}
func (s *configService) Update(ctx context.Context, obj *system.Config) error {
return s.repo.Update(ctx, obj)
}
func (s *configService) Get(ctx context.Context, id int32) (*system.Config, error) {
return s.repo.Get(ctx, id)
}
func (s *configService) List(ctx context.Context, q dto.SearchDto) ([]*system.Config, int64, error) {
return s.repo.List(ctx, q)
}
func (s *configService) Pear(ctx context.Context) (*dto.PearConfig, error) {
// 判断redis是否存储
key := know.GetManageKey(ctx, know.PearAdmin)
bs, err := s.Redis.GetBytes(ctx, key)
if err == nil {
var res *dto.PearConfig
if err := json.Unmarshal(bs, &res); err == nil {
return res, nil
}
}
conf, err := s.repo.GetByKey(ctx, pearadmin.PearKey)
if err != nil {
return nil, err
}
var pear dto.PearConfig
if err := json.Unmarshal([]byte(conf.Value), &pear); err != nil {
return nil, err
}
_ = s.Redis.Set(ctx, key, conf.Value, time.Hour*6)
return &pear, nil
}
func (s *configService) RefreshCache(ctx context.Context, key string) error {
return s.Redis.Del(ctx, key)
}
func (s *configService) ResetPear(ctx context.Context) error {
b, err := json.Marshal(pearadmin.PearJson)
if err != nil {
return err
}
conf, err := s.repo.GetByKey(ctx, pearadmin.PearKey)
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
return err
}
if errors.Is(err, gorm.ErrRecordNotFound) {
// create
conf = &system.Config{
Key: pearadmin.PearKey,
Value: string(b),
}
err = s.Create(ctx, conf)
if err != nil {
return err
}
} else {
// update
conf.Value = string(b)
conf.UpdatedAt = time.Now()
err = s.Update(ctx, conf)
if err != nil {
return err
}
}
return nil
}