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.
89 lines
1.9 KiB
Go
89 lines
1.9 KiB
Go
package order
|
|
|
|
import (
|
|
dto "cls/internal/application/payment"
|
|
"cls/internal/domain/order"
|
|
"cls/internal/domain/payment"
|
|
"cls/pkg/logger"
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
// OrderService 订单应用服务
|
|
type OrderService struct {
|
|
repo order.AggregateRepository
|
|
log logger.Logger
|
|
}
|
|
|
|
// NewOrderService 创建订单应用服务
|
|
func NewOrderService(repo order.AggregateRepository, log logger.New) *OrderService {
|
|
return &OrderService{
|
|
repo: repo,
|
|
log: log("cls:service:order"),
|
|
}
|
|
}
|
|
|
|
// CreateOrder 创建订单
|
|
func (s *OrderService) CreateOrder(req *CreateOrderRequest) (*OrderResponse, error) {
|
|
|
|
// 创建订单
|
|
o := &order.Order{
|
|
OrderNo: generateOrderNo(),
|
|
UserID: req.UserID,
|
|
TargetID: req.TargetID,
|
|
Type: req.Type,
|
|
Amount: req.Amount,
|
|
Duration: req.Duration,
|
|
Status: order.OrderStatusPending,
|
|
Description: req.Description,
|
|
}
|
|
|
|
// 创建聚合根
|
|
aggregate := order.NewOrderAggregate(o)
|
|
|
|
// 保存聚合根
|
|
if err := s.repo.Save(aggregate); err != nil {
|
|
s.log.Error(err)
|
|
return nil, err
|
|
}
|
|
|
|
return nil, nil
|
|
}
|
|
|
|
// CreatePayment 创建支付订单
|
|
func (s *OrderService) CreatePayment(orderNo string, paymentType payment.PaymentType) (*dto.PaymentResponse, error) {
|
|
// 获取订单聚合根
|
|
aggregate, err := s.repo.GetByOrderNo(orderNo)
|
|
if err != nil {
|
|
s.log.Error(err)
|
|
return nil, err
|
|
}
|
|
|
|
// 创建支付订单
|
|
if err := aggregate.CreatePayment(paymentType); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// 保存聚合根
|
|
if err := s.repo.Save(aggregate); err != nil {
|
|
s.log.Error(err)
|
|
return nil, err
|
|
}
|
|
|
|
return dto.FromEntity(aggregate.Payment), nil
|
|
}
|
|
|
|
// DeleteOrder 删除订单
|
|
func (s *OrderService) DeleteOrder(id uint64) error {
|
|
if err := s.repo.Delete(id); err != nil {
|
|
s.log.Error(err)
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// generateOrderNo 生成订单号
|
|
func generateOrderNo() string {
|
|
return fmt.Sprintf("%d%d", time.Now().UnixNano()/1e6, time.Now().Unix()%1000)
|
|
}
|