Browse Source

conversrc->converUrl

kobe6258 4 months ago
parent
commit
9c2d4fe562

+ 2 - 0
common/exception/exc_enums.go

@@ -150,6 +150,7 @@ const (
 const (
 	ProductErrorCode int = iota + 100000
 	ProductOffSale
+	ProductNotFound
 	ProductTypeError
 	ProductGetFailed
 )
@@ -266,6 +267,7 @@ var ErrorMap = map[int]string{
 	ProductOffSale:   "商品已下架",
 	ProductTypeError: "非法的产品类型",
 	ProductGetFailed: "获取商品信息失败",
+	ProductNotFound:  "商品不存在",
 	//支付
 	CreatePaymentOrderFailed: "创建支付订单失败",
 	PaymentProcessingError:   "支付订单处理中",

+ 10 - 4
controllers/payment/payment_controller.go

@@ -6,8 +6,8 @@ import (
 	"eta/eta_mini_ht_api/common/utils/lock"
 	"eta/eta_mini_ht_api/common/utils/redis"
 	"eta/eta_mini_ht_api/controllers"
-	orderService "eta/eta_mini_ht_api/domian/order"
-	userService "eta/eta_mini_ht_api/domian/user"
+	orderDomian "eta/eta_mini_ht_api/domian/order"
+	userDomian "eta/eta_mini_ht_api/domian/user"
 	"eta/eta_mini_ht_api/service/facade"
 	"eta/eta_mini_ht_api/service/order"
 	"gorm.io/gorm"
@@ -48,7 +48,7 @@ func (pc *PaymentController) PayOrder() {
 		}()
 		if lock.AcquireLock(redis.GeneratePaymentKey(payRequest.ProductOrderNo), 10, pc.Data["threadId"].(string)) {
 			//校验商品订单状态
-			var productOrder orderService.ProductOrderDTO
+			var productOrder orderDomian.ProductOrderDTO
 			productOrder, err = order.GetProductOrderByUser(userInfo.Id, payRequest.ProductOrderNo)
 			if err != nil {
 				if errors.Is(err, gorm.ErrRecordNotFound) {
@@ -84,7 +84,13 @@ func (pc *PaymentController) PayOrder() {
 					return
 				}
 			}
-			var officialUser userService.OfficialUserDTO
+			//检查商品状态
+			err = order.CheckProductStatus(productOrder)
+			if err != nil {
+				pc.FailedResult("支付失败,商品状态异常", result)
+				return
+			}
+			var officialUser userDomian.OfficialUserDTO
 			officialUser, err = user.GetUserByTemplateUserId(userInfo.Id)
 			if err != nil {
 				pc.FailedResult("支付失败,正式用户信息不存在", result)

+ 2 - 0
domian/merchant/merchant_product.go

@@ -44,6 +44,7 @@ type MerchantProductDTO struct {
 	SaleStatus  string
 	SourceId    int
 	CreatedTime time.Time
+	Deleted     bool
 }
 
 func GetMerchantProductById(id int) (productDTO MerchantProductDTO, err error) {
@@ -75,6 +76,7 @@ func convertToDTO(product merchantDao.MerchantProduct) MerchantProductDTO {
 		SourceId:    product.SourceId,
 		SaleStatus:  string(product.SaleStatus),
 		CreatedTime: product.CreatedTime,
+		Deleted:     product.Deleted,
 	}
 
 }

+ 1 - 6
domian/order/product_order.go

@@ -1,7 +1,6 @@
 package order
 
 import (
-	"errors"
 	logger "eta/eta_mini_ht_api/common/component/log"
 	"eta/eta_mini_ht_api/common/exception"
 	"eta/eta_mini_ht_api/common/utils/page"
@@ -9,7 +8,6 @@ import (
 	productDao "eta/eta_mini_ht_api/models/merchant"
 	orderDao "eta/eta_mini_ht_api/models/order"
 	"fmt"
-	"gorm.io/gorm"
 	"math/rand"
 	"sync"
 	"time"
@@ -156,7 +154,7 @@ func convertProductOrderDetailDTO(order orderDao.ProductOrder) (orderDetailDTO P
 			Mobile:         order.Mobile,
 			RealName:       order.RealName,
 		},
-		TransactionID: order.TradeID,
+		TransactionID: order.TradeId,
 		RefundStatus:  string(order.RefundStatus),
 		Remark:        order.Remark,
 	}
@@ -334,9 +332,6 @@ func GetOrderByUser(templateUserId int, orderNo string) (orderDTO ProductOrderDT
 	order, err = orderDao.GetOrderByUser(templateUserId, orderNo)
 	product, err := productDao.GetMerchantProductById(order.ProductID)
 	if err != nil {
-		if errors.Is(err, gorm.ErrRecordNotFound) {
-			//产品被删除了
-		}
 		logger.Error("获取产品信息失败:%v", err)
 		return
 	}

+ 3 - 3
models/merchant/merchant_product.go

@@ -15,8 +15,8 @@ type SaleStatus string
 type MerchantProductType string
 
 const (
-	detailColumns         = "id,source_id,title,cover_src,cover_url,description,price,type,is_permanent,valid_days,sale_status,created_time,updated_time"
-	detailColumnsWithRisk = "merchant_products.id,source_id,title,cover_src,cover_url,description,price,type,is_permanent,valid_days,sale_status,created_time,updated_time,permissions.risk_level as risk_level"
+	detailColumns         = "id,source_id,title,cover_src,cover_url,description,price,type,is_permanent,valid_days,sale_status,created_time,updated_time,deleted"
+	detailColumnsWithRisk = "merchant_products.id,source_id,title,cover_src,cover_url,description,price,type,is_permanent,valid_days,sale_status,created_time,updated_time,deleted,permissions.risk_level as risk_level"
 	sourceIdColumn        = "id,source_id"
 )
 const (
@@ -92,7 +92,7 @@ func GetProductListBySourceIds(ids []int, detail bool, productType ...MerchantPr
 	if len(productType) > 0 {
 		if len(productType) == 1 {
 			if productType[0] == Package {
-				err = db.Select(detailColumnsWithRisk).Joins("left join permissions  on permissions.permission_id=source_id").Where("source_id in ? and type = ? and deleted =? order by created_time desc", ids, productType[0], false).Find(&productList).Error
+				err = db.Select(detailColumnsWithRisk).Joins("left join permissions  on permissions.permission_id=source_id").Where("source_id in ? and type = ? and deleted =? and sale_status=? order by created_time desc", ids, productType[0], false).Find(&productList).Error
 			} else {
 				err = db.Select(columns).Where("source_id in ? and type = ? and deleted =? order by created_time desc", ids, productType[0], false).Find(&productList).Error
 			}

+ 4 - 4
models/order/product_order.go

@@ -27,7 +27,7 @@ const (
 	RefundStatusFailed     RefundStatus = "failed"
 	RefundStatusProcessing RefundStatus = "processing"
 
-	detailColumn = "id,order_id,user_id,template_user_id,product_id,status,created_time,updated_time,total_amount,expired_time,real_name,mobile,area_code,product_type,product_name,valid_duration"
+	detailColumn = "id,order_id,user_id,template_user_id,real_name,area_code,mobile,product_id,product_type,product_name,status,created_time,updated_time,total_amount,expired_time,valid_duration"
 )
 
 type ProductOrder struct {
@@ -42,7 +42,7 @@ type ProductOrder struct {
 	ProductType      merchantDao.MerchantProductType `gorm:"column:product_type;default:null;comment:'产品类型'" json:"product_type"`
 	ProductName      string                          `gorm:"column:product_name;default:null;comment:'商品名称'" json:"product_name"`
 	TotalAmount      string                          `gorm:"column:total_amount;size:255;default:null;comment:'金额'" json:"total_amount"`
-	TradeID          int                             `gorm:"column:trade_id;default:null;comment:'支付订单'" json:"trade_id"`
+	TradeId          int                             `gorm:"column:trade_id;default:null;comment:'支付订单'" json:"trade_id"`
 	TradeNO          string                          `gorm:"column:trade_no;default:null;comment:'支付订单'" json:"trade_no"`
 	PaymentAmount    string                          `gorm:"column:payment_amount;;comment:'支付金额'"`
 	PaymentWay       PaymentWay                      `gorm:"column:payment_way;enum('wechat','alipay');default:null;comment:'支付渠道'"`
@@ -154,12 +154,12 @@ func BatchCloseOrder(ids []int) (err error) {
 
 func GetOrderByUser(templateUserId int, orderNo string) (order ProductOrder, err error) {
 	db := models.Main()
-	err = db.Model(&ProductOrder{}).Select(detailColumn).Where("template_user_id= ? and order_id=? and is_deleted=0 ", templateUserId, orderNo).First(&order).Error
+	err = db.Model(&ProductOrder{}).Select("*").Where("template_user_id= ? and order_id=? and is_deleted=0 ", templateUserId, orderNo).First(&order).Error
 	return
 }
 func GetOrderByOrderNo(orderNo string) (order ProductOrder, err error) {
 	db := models.Main()
-	err = db.Model(&ProductOrder{}).Select(detailColumn).Where("order_id=? and is_deleted=0 ", orderNo).First(&order).Error
+	err = db.Model(&ProductOrder{}).Select("*").Where("order_id=? and is_deleted=0 ", orderNo).First(&order).Error
 	return
 }
 func CloseProductOrder(templateUserId int, productOrderNo string) (err error) {

+ 26 - 0
service/order/order_service.go

@@ -69,6 +69,10 @@ func CreateProductOrder(templateUser user.User, productId int, orderNo string) (
 		err = exception.NewWithException(exception.ProductInfoError, err.Error())
 		return
 	}
+	if productInfo.Deleted {
+		err = exception.New(exception.ProductInfoError)
+		return
+	}
 	if productInfo.SaleStatus == OffSale {
 		err = exception.New(exception.ProductOffSale)
 		return
@@ -233,3 +237,25 @@ func CloseProductOrder(templateUserId int, productOrderNo string) (err error) {
 func GetTradeOrderByNo(tradeOrderNo string) (dto orderService.TradeOrderDTO, err error) {
 	return orderService.GetTradeOrderByNo(tradeOrderNo)
 }
+
+func CheckProductStatus(productOrder orderService.ProductOrderDTO) (err error) {
+	product, err := productService.GetMerchantProductById(productOrder.ProductID)
+	if err != nil {
+		return exception.NewWithException(exception.ProductInfoError, err.Error())
+	}
+	if product.SaleStatus == "off_sale" {
+		err = orderService.CloseProductOrder(productOrder.TemplateUserID, productOrder.OrderID)
+		if err != nil {
+			logger.Error("关闭订单失败:%v,订单编号:%s", err, product)
+		}
+		return exception.New(exception.ProductOffSale)
+	}
+	if product.Deleted {
+		err = orderService.CloseProductOrder(productOrder.TemplateUserID, productOrder.OrderID)
+		if err != nil {
+			logger.Error("关闭订单失败:%v,订单编号:%s", err, product)
+		}
+		return exception.New(exception.ProductNotFound)
+	}
+	return
+}

+ 3 - 1
service/product/product_service.go

@@ -196,7 +196,9 @@ func GetRelatePackage(info ProductDTO) (prodList []ProductDTO, err error) {
 			return
 		}
 		for _, product := range merchantProduct {
-			prodList = append(prodList, convertToProductDTO(product))
+			if product.Deleted == 0 && product.SaleStatus == "on_sale" {
+				prodList = append(prodList, convertToProductDTO(product))
+			}
 		}
 		return
 	case "report":