浏览代码

三期支付

kobe6258 4 月之前
父节点
当前提交
2f7b9a9c0d

+ 2 - 0
common/exception/exc_enums.go

@@ -83,6 +83,7 @@ const (
 	IllegalOrderNo
 	GetOrderListFailed
 	GetOrderDetailFailed
+	CloseOrderFailed
 )
 
 // WechatErrCode 微信
@@ -208,6 +209,7 @@ var ErrorMap = map[int]string{
 	IllegalOrderNo:                     "非法的商品订单号",
 	GetOrderListFailed:                 "获取产品订单列表失败",
 	GetOrderDetailFailed:               "获取订单详情失败",
+	CloseOrderFailed:                   "关闭订单失败",
 	//微信
 	WeChatServerError:    "微信服务器发生错误",
 	WechatUserInfoFailed: "获取微信用户信息失败",

+ 34 - 0
controllers/order/order_controller.go

@@ -101,3 +101,37 @@ func (sc *SubscribeController) GetOrderList(orderStatus string) {
 		return
 	})
 }
+
+type OrderRequest struct {
+	ProductOrderNo string `json:"productOrderNo"`
+}
+
+// CloseOrder  获取用户订单号列表
+// @Summary   获取用户订单号列表
+// @Description   获取用户订单号列表
+// @Success 200 {object} controllers.BaseResponse
+// @router /closeOrder [post]
+func (sc *SubscribeController) CloseOrder() {
+	controllers.Wrap(&sc.BaseController, func() (result *controllers.WrapData, err error) {
+		result = sc.InitWrapData("关闭订单失败")
+		userInfo := sc.Data["user"].(user.User)
+		orderReq := new(OrderRequest)
+		sc.GetPostParams(orderReq)
+		if orderReq.ProductOrderNo == "" {
+			sc.FailedResult("关闭订单失败,非法的订单编号", result)
+			err = exception.New(exception.IllegalOrderNo)
+			return
+		}
+		err = order.CloseProductOrder(userInfo.Id, orderReq.ProductOrderNo)
+		if err != nil {
+			sc.FailedResult("关闭订单失败", result)
+			err = exception.NewWithException(exception.CloseOrderFailed, err.Error())
+			return
+		}
+		closeDTO := map[string]string{
+			"orderNo": orderReq.ProductOrderNo,
+		}
+		sc.SuccessResult("关闭订单成功", closeDTO, result)
+		return
+	})
+}

+ 4 - 0
domian/order/product_order.go

@@ -236,3 +236,7 @@ func GetOrderByUser(templateUserId int, orderNo string) (orderDTO ProductOrderDT
 	orderDTO.ProductDescription = product.Description
 	return
 }
+
+func CloseProductOrder(templateUserId int, productOrderNo string) (err error) {
+	return orderDao.CloseProductOrder(templateUserId, productOrderNo)
+}

+ 27 - 0
models/order/product_order.go

@@ -4,6 +4,7 @@ import (
 	"errors"
 	logger "eta/eta_mini_ht_api/common/component/log"
 	"eta/eta_mini_ht_api/models"
+	"fmt"
 	"github.com/go-sql-driver/mysql"
 	"gorm.io/gorm"
 	"time"
@@ -141,3 +142,29 @@ func GetOrderByUser(templateUserId int, orderNo string) (order ProductOrder, err
 	err = db.Model(&ProductOrder{}).Select(detailColumn).Where("template_user_id= ? and order_id=? and is_deleted=0 ", templateUserId, orderNo).First(&order).Error
 	return
 }
+
+func CloseProductOrder(templateUserId int, productOrderNo string) (err error) {
+	db := models.Main()
+	var dbOrder ProductOrder
+	err = db.Model(&ProductOrder{}).Select("*").Where("template_user_id= ? and order_id=? and is_deleted=0 ", templateUserId, productOrderNo).First(&dbOrder).Error
+	if err != nil {
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			logger.Warn("当前用户[template_user_id:%d]不存在订单编号为%s的订单", templateUserId, productOrderNo)
+			err = errors.New(fmt.Sprintf("当前用户[template_user_id:%d]不存在订单编号为%s的订单", templateUserId, productOrderNo))
+			return
+		}
+		logger.Error("获取订单信息失败:%v", err)
+	}
+	if dbOrder.Status == OrderStatusPaid {
+		logger.Error("订单已支付,无法关闭订单[order_id:%s]", productOrderNo)
+		err = errors.New("订单已支付,无法关闭订单")
+		return
+	}
+	if dbOrder.Status == OrderStatusRefund {
+		logger.Error("订单已售后,无法关闭订单[order_id:%s]", productOrderNo)
+		err = errors.New("订单已售后,无法关闭订单")
+		return
+	}
+	err = db.Model(&ProductOrder{}).Where("template_user_id= ? and order_id=? and is_deleted=0 ", templateUserId, productOrderNo).Update("status", OrderStatusClosed).Error
+	return
+}

+ 31 - 0
models/user/user_subscription_access_flow.go

@@ -0,0 +1,31 @@
+package user
+
+import (
+	"eta/eta_mini_ht_api/models"
+	"time"
+)
+
+type OpenType string
+
+// UserSubscriptionAccessList 用户订阅访问列表
+type UserSubscriptionAccessFlow struct {
+	ID             int       `gorm:"column:id;primaryKey"`
+	TemplateUserId int       `gorm:"column:template_user_id"`
+	ProductID      int       `gorm:"column:product_id"`
+	ProductType    string    `gorm:"column:product_type"`
+	ProductBuyDate string    `gorm:"column:product_buy_date"`
+	ProductOrderId string    `gorm:"column:product_order_id"`
+	OpenType       string    `gorm:"column:open_type;type:enum('valid','expired','closed');default:'valid'"`
+	CreatedTime    time.Time `gorm:"column:created_time"`
+	UpdatedTime    time.Time `gorm:"column:updated_time"`
+}
+
+func (UserSubscriptionAccessFlow) TableName() string {
+	return "user_subscription_access_list"
+}
+
+func CreateAccessFlow(userSubscriptionAccessList UserSubscriptionAccessFlow) (err error) {
+	db := models.Main()
+	err = db.Create(&userSubscriptionAccessList).Error
+	return
+}

+ 11 - 8
models/user/userSubscriptionAccessList.go → models/user/user_subscription_access_list.go

@@ -10,18 +10,21 @@ type SubscribeStatus string
 const (
 	SubscribeValid   SubscribeStatus = "valid"
 	SubscribeExpired SubscribeStatus = "expired"
+	SubscribeClose   SubscribeStatus = "close"
 )
 
 // UserSubscriptionAccessList 用户订阅访问列表
 type UserSubscriptionAccessList struct {
-	ID          int             `gorm:"column:id;primaryKey"`
-	UserId      int             `gorm:"column:user_id"`
-	ProductID   int             `gorm:"column:product_id"`
-	ProductName string          `gorm:"column:product_name"`
-	IsPermanent bool            `gorm:"column:is_permanent"`
-	BeginDate   time.Time       `gorm:"column:begin_date"`
-	EndDate     time.Time       `gorm:"column:end_date"`
-	Status      SubscribeStatus `gorm:"column:status;type:enum('valid','expired');default:'valid'"`
+	ID             int             `gorm:"column:id;primaryKey"`
+	TemplateUserId int             `gorm:"column:template_user_id"`
+	ProductID      int             `gorm:"column:product_id"`
+	ProductName    string          `gorm:"column:product_name"`
+	IsPermanent    bool            `gorm:"column:is_permanent"`
+	BeginDate      time.Time       `gorm:"column:begin_date"`
+	EndDate        time.Time       `gorm:"column:end_date"`
+	Status         SubscribeStatus `gorm:"column:status;type:enum('valid','expired');default:'valid'"`
+	CreatedTime    time.Time       `gorm:"column:created_time"`
+	UpdatedTime    time.Time       `gorm:"column:updated_time"`
 }
 
 func (UserSubscriptionAccessList) TableName() string {

+ 9 - 0
routers/commentsRouter.go

@@ -63,6 +63,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_mini_ht_api/controllers/order:SubscribeController"] = append(beego.GlobalControllerRouter["eta/eta_mini_ht_api/controllers/order:SubscribeController"],
+        beego.ControllerComments{
+            Method: "CloseOrder",
+            Router: `/closeOrder`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_mini_ht_api/controllers/order:SubscribeController"] = append(beego.GlobalControllerRouter["eta/eta_mini_ht_api/controllers/order:SubscribeController"],
         beego.ControllerComments{
             Method: "GetOrderDetail",

+ 4 - 0
service/order/order_service.go

@@ -187,3 +187,7 @@ func GetOrderDetail(productId int, userId int) (order orderService.ProductOrderD
 func GetProductOrderByUser(templateUserId int, orderNo string) (order orderService.ProductOrderDTO, err error) {
 	return orderService.GetOrderByUser(templateUserId, orderNo)
 }
+
+func CloseProductOrder(templateUserId int, productOrderNo string) (err error) {
+	return orderService.CloseProductOrder(templateUserId, productOrderNo)
+}

+ 14 - 0
service/product/product_service.go

@@ -42,3 +42,17 @@ func convertToProductDTO(product merchantService.MerchantProductDTO) (productDTO
 	}
 	return
 }
+
+// 开通产品
+//func OpenProduct(productId int, templateUserId int) (err error) {
+//	product, err := merchantService.GetMerchantProductById(productId)
+//	if err != nil {
+//		logger.Error("获取产品信息失败:%v", err)
+//		return
+//	}
+//
+//}
+
+//过期产品(套餐)
+
+//退款关闭套餐