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) }