package price import ( "cls/internal/domain/price" "cls/internal/domain/price_default" "cls/pkg/logger" "errors" "fmt" ) var ( ErrInvalidAmount = errors.New("价格不能小于0") ErrInvalidType = errors.New("无效的价格类型") ErrInvalidDuration = errors.New("无效的订阅时长") ) // PriceService 价格管理服务 type PriceService struct { repo price.PriceRepository pdRepo price_default.PriceDefaultRepository log logger.Logger } // NewService 创建价格管理服务 func NewPriceService(repo price.PriceRepository, pdRepo price_default.PriceDefaultRepository, log logger.New) *PriceService { return &PriceService{ repo: repo, pdRepo: pdRepo, log: log("cls:service:price"), } } func (s *PriceService) GetArticlePrice(dto *PriceDto) (*PriceDto, error) { dto.Type = price.TypeArticle return s.GetPrice(dto) } func (s *PriceService) GetColumnPrice(dto *PriceDto) (*PriceDto, error) { dto.Type = price.TypeColumn return s.GetPrice(dto) } // GetPrice 获取价格(如果不存在则使用默认价格) func (s *PriceService) GetPrice(dto *PriceDto) (*PriceDto, error) { fmt.Println("=================") fmt.Println("GetPrice") fmt.Println(dto) // 检查是否已存在价格记录 existingPrice, err := s.repo.FindByTargetID(dto.TargetID, dto.Type) if err != nil { s.log.Error(err) return nil, err } fmt.Println(existingPrice) if existingPrice == nil { //价格不存在 fmt.Println("no have data") //get default price dp, err := s.pdRepo.Get() if err != nil { s.log.Error(err.Error()) return nil, err } fmt.Println("default price") fmt.Println(dp) existingPrice = &price.Price{ TargetID: dto.TargetID, Type: dto.Type, Discount: dp.Discount, } if dto.Type == price.TypeArticle { existingPrice.Amount = dp.Amount } else { existingPrice.OneMonthPrice = dp.OneMonthPrice existingPrice.ThreeMonthsPrice = dp.ThreeMonthsPrice existingPrice.SixMonthsPrice = dp.SixMonthsPrice existingPrice.OneYearPrice = dp.OneYearPrice existingPrice.FirstMontDiscount = dp.FirstMontDiscount } fmt.Println("insert") err = s.repo.Save(existingPrice) if err != nil { s.log.Error(err) return nil, err } fmt.Println("inset done") } priceDto := &PriceDto{ Discount: existingPrice.Discount, } if dto.Type == price.TypeArticle { priceDto.Amount = existingPrice.Amount } else { priceDto.OneMonthPrice = existingPrice.OneMonthPrice priceDto.ThreeMonthsPrice = existingPrice.ThreeMonthsPrice priceDto.SixMonthsPrice = existingPrice.SixMonthsPrice priceDto.OneYearPrice = existingPrice.OneYearPrice } fmt.Println(priceDto) return priceDto, nil }