You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
2.6 KiB
Go
105 lines
2.6 KiB
Go
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
|
|
}
|