order_service.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package order
  2. import (
  3. "errors"
  4. logger "eta/eta_mini_ht_api/common/component/log"
  5. "eta/eta_mini_ht_api/common/exception"
  6. productService "eta/eta_mini_ht_api/domian/merchant"
  7. orderService "eta/eta_mini_ht_api/domian/order"
  8. userService "eta/eta_mini_ht_api/domian/user"
  9. "eta/eta_mini_ht_api/service/user"
  10. "gorm.io/gorm"
  11. "time"
  12. )
  13. type ProductOrderInfo struct {
  14. Buyer BuyerInfo `json:"buyer"`
  15. ProductInfo ProductInfo `json:"productInfo"`
  16. OrderNo string `json:"orderNo"`
  17. }
  18. type ProductInfo struct {
  19. Name string
  20. Type string
  21. Price string
  22. BeginDate string
  23. EndDate string
  24. }
  25. type BuyerInfo struct {
  26. Name string
  27. Mobile string
  28. AreaCode string
  29. }
  30. func GenerateProductOrderNo() string {
  31. return orderService.GenerateProductOrderNo()
  32. }
  33. func CreateProductOrder(templateUser user.User, productId int, orderNo string) (orderInfo ProductOrderInfo, err error) {
  34. if productId <= 0 {
  35. err = exception.New(exception.IllegalProductId)
  36. }
  37. productInfo, err := productService.GetMerchantProductById(productId)
  38. if err != nil {
  39. err = exception.NewWithException(exception.ProductInfoError, err.Error())
  40. return
  41. }
  42. officialUser, err := userService.GetUserByTemplateUserId(templateUser.Id)
  43. if err != nil {
  44. if errors.Is(err, gorm.ErrRecordNotFound) {
  45. err = exception.New(exception.OfficialUserNotFound)
  46. } else {
  47. err = exception.NewWithException(exception.OfficialUserFoundError, err.Error())
  48. }
  49. return
  50. }
  51. orderNo, err = orderService.CreateProductOrder(orderService.ProductOrderDTO{
  52. OrderID: orderNo,
  53. UserID: templateUser.Id,
  54. ProductID: productId,
  55. TotalAmount: productInfo.Price.String(),
  56. })
  57. if err != nil {
  58. logger.Error("创建订单失败:%v", err)
  59. if errors.Is(err, gorm.ErrDuplicatedKey) {
  60. err = exception.NewWithException(exception.SubscribeFailed, "请勿重复下单")
  61. return
  62. }
  63. err = exception.NewWithException(exception.SubscribeFailed, err.Error())
  64. return
  65. }
  66. buyer := BuyerInfo{
  67. Name: officialUser.RealName,
  68. Mobile: templateUser.Mobile,
  69. AreaCode: templateUser.AreaCode,
  70. }
  71. product := ProductInfo{
  72. Name: productInfo.Title,
  73. Type: productInfo.Type,
  74. Price: productInfo.Price.String(),
  75. BeginDate: time.Now().Format(time.DateOnly),
  76. EndDate: time.Now().Add(time.Duration(productInfo.ValidDays*24) * time.Hour).Format(time.DateOnly),
  77. }
  78. orderInfo = ProductOrderInfo{
  79. Buyer: buyer,
  80. ProductInfo: product,
  81. OrderNo: orderNo,
  82. }
  83. return
  84. }