فهرست منبع

修复支付订单bug

kobe6258 5 ماه پیش
والد
کامیت
273683e35b
4فایلهای تغییر یافته به همراه56 افزوده شده و 1 حذف شده
  1. 2 0
      domian/merchant/user_access_service.go
  2. 16 1
      domian/order/product_order.go
  3. 5 0
      models/order/product_order.go
  4. 33 0
      service/order/order_service.go

+ 2 - 0
domian/merchant/user_access_service.go

@@ -13,6 +13,7 @@ type UserAccessDTO struct {
 	ProductType    string
 	BeginDate      string
 	EndDate        string
+	Status         string
 }
 
 var (
@@ -32,6 +33,7 @@ func convertToUserAccessDTO(userSubscriptionAccessList merchant.UserSubscription
 		ProductType:    string(userSubscriptionAccessList.ProductType),
 		BeginDate:      userSubscriptionAccessList.BeginDate.Format(time.DateOnly),
 		EndDate:        userSubscriptionAccessList.EndDate.Format(time.DateOnly),
+		Status:         string(userSubscriptionAccessList.Status),
 	}
 }
 func OpenProduct(templateUserId int, productOrderNo string, product MerchantProductDTO) error {

+ 16 - 1
domian/order/product_order.go

@@ -256,6 +256,22 @@ func GetOrderPage(pageInfo page.PageInfo, userId int, orderStatus string) (order
 	return
 }
 
+func GetUserOrderByProduct(productId int, userId int) (orderDTO ProductOrderDTO, err error) {
+	order, err := orderDao.GetUserOrderByProduct(productId, userId)
+	if err != nil {
+		logger.Error("查询订单详情失败:%v", err)
+		return
+	}
+	product, err := productDao.GetMerchantProductById(order.ProductID)
+	if err != nil {
+		logger.Error("获取产品信息失败:%v", err)
+		return
+	}
+	orderDTO = convertProductOrderDTO(order)
+	orderDTO.ProductName = product.Title
+	orderDTO.ProductDescription = product.Description
+	return
+}
 func GetOrderDetail(orderId string, userId int) (orderDTO ProductOrderDetailDTO, err error) {
 	order, err := orderDao.GetOrderDetail(orderId, userId)
 	if err != nil {
@@ -272,7 +288,6 @@ func GetOrderDetail(orderId string, userId int) (orderDTO ProductOrderDetailDTO,
 	orderDTO.ProductDescription = product.Description
 	return
 }
-
 func BatchCloseOrder() (err error) {
 	var total int
 	var minId int

+ 5 - 0
models/order/product_order.go

@@ -123,6 +123,11 @@ func GetOrderDetail(orderId string, userId int) (order ProductOrder, err error)
 	err = db.Model(&ProductOrder{}).Select("*").Where("order_id = ? and template_user_id = ? and is_deleted=0 ", orderId, userId).First(&order).Error
 	return
 }
+func GetUserOrderByProduct(productId int, userId int) (order ProductOrder, err error) {
+	db := models.Main()
+	err = db.Model(&ProductOrder{}).Select("*").Where("product_id = ? and template_user_id = ? and is_deleted=0 ", productId, userId).First(&order).Error
+	return
+}
 
 func GetUnPendingOrderCount() (count int, minId int) {
 	db := models.Main()

+ 33 - 0
service/order/order_service.go

@@ -5,9 +5,12 @@ import (
 	logger "eta/eta_mini_ht_api/common/component/log"
 	"eta/eta_mini_ht_api/common/exception"
 	"eta/eta_mini_ht_api/common/utils/page"
+	merchantService "eta/eta_mini_ht_api/domian/merchant"
 	productService "eta/eta_mini_ht_api/domian/merchant"
 	orderService "eta/eta_mini_ht_api/domian/order"
 	userService "eta/eta_mini_ht_api/domian/user"
+	merchantDao "eta/eta_mini_ht_api/models/merchant"
+	orderDao "eta/eta_mini_ht_api/models/order"
 	"eta/eta_mini_ht_api/service/user"
 	"fmt"
 	"gorm.io/gorm"
@@ -19,6 +22,22 @@ const (
 	permanentlyValid = "永久有效"
 	OnSale           = "on_sale"  //上架
 	OffSale          = "off_sale" //下架
+
+)
+
+var (
+	productOrderStatusMap = map[orderDao.OrderStatus]string{
+		orderDao.OrderStatusPending: "pending",
+		orderDao.OrderStatusPaid:    "paid",
+		orderDao.OrderStatusClosed:  "closed",
+		orderDao.OrderStatusRefund:  "refund",
+	}
+
+	accessStatusMap = map[merchantDao.SubscribeStatus]string{
+		merchantDao.SubscribeValid:   "valid",
+		merchantDao.SubscribeExpired: "expired",
+		merchantDao.SubscribeClose:   "closed",
+	}
 )
 
 type ProductOrderInfo struct {
@@ -63,6 +82,20 @@ func CreateProductOrder(templateUser user.User, productId int, orderNo string) (
 		}
 		return
 	}
+	//校验是否有相同待支付的产品订单
+	var exisitOrder orderService.ProductOrderDTO
+	exisitOrder, err = orderService.GetUserOrderByProduct(productId, templateUser.Id)
+	if (err != nil && !errors.Is(err, gorm.ErrRecordNotFound)) || exisitOrder.Status == productOrderStatusMap[orderDao.OrderStatusPending] {
+		err = exception.NewWithException(exception.SubscribeFailed, "当前产品有正在进行中的订单,请勿重复下单")
+		return
+	}
+	//是否在有效期的产品
+	var access merchantService.UserAccessDTO
+	access, err = merchantService.GetUserSubscribe(templateUser.Id, productId)
+	if (err != nil && !errors.Is(err, gorm.ErrRecordNotFound)) || access.Status == accessStatusMap[merchantDao.SubscribeValid] {
+		err = exception.NewWithException(exception.SubscribeFailed, "当前产品已订阅,请勿重复下单")
+		return
+	}
 	orderNo, err = orderService.CreateProductOrder(orderService.ProductOrderDTO{
 		OrderID:        orderNo,
 		UserID:         officialUser.ID,