Browse Source

定时关单

kobe6258 5 months ago
parent
commit
698771c9e1

+ 59 - 0
controllers/web_hook/htfutures_trade_controller.go

@@ -0,0 +1,59 @@
+package web_hook
+
+import (
+	"eta/eta_mini_ht_api/controllers"
+	"eta/eta_mini_ht_api/service/product"
+)
+
+type HTFuturesTradeController struct {
+	controllers.WebHookController
+}
+
+type ss struct {
+	ID   string `json:"id"`
+	User int    `json:"user"`
+}
+
+// InformPaymentResult  风险测评同步接口
+// @Summary 风险测评同步接口
+// @Description 风险测评同步接口
+// @Success 200 {object} controllers.BaseResponse
+// @router /v1/payment/informPaymentResult [post]
+func (h *HTFuturesTradeController) InformPaymentResult() {
+	controllers.WrapWebhook(&h.WebHookController, func() (result *controllers.WrapData, err error) {
+		result = h.InitWrapData("同步风险等级")
+		ss := new(ss)
+		h.GetPostParams(ss)
+		//privateKey, err := authUtils.ParsePrivateKey(htConfig.GetWebhookPrivateKey())
+		_ = product.OpenProduct(ss.User, ss.ID)
+
+		//htConfig := config.GetConfig(contants.HT).(*config.HTBizConfig)
+		//webhookRequest := new(WebhookRequest)
+		//h.GetPostParams(webhookRequest)
+		//privateKey, err := authUtils.ParsePrivateKey(htConfig.GetWebhookPrivateKey())
+		//if err != nil {
+		//	err = exception.NewWithException(exception.SysError, err.Error())
+		//	logger.Error("解析私钥失败: %v", err)
+		//	h.FailedResult("解析私钥失败", result)
+		//	return
+		//}
+		//decodeData, err := authUtils.DecryptWithRSA(privateKey, webhookRequest.Data)
+		//if err != nil {
+		//	err = exception.NewWithException(exception.SysError, err.Error())
+		//	logger.Error("解密请求体失败: %v", err)
+		//	h.FailedResult("解密请求体失败", result)
+		//	return
+		//}
+		//syncCustomerRiskLevelReq := new(SyncCustomerRiskLevelReq)
+		//err = json.Unmarshal(decodeData, syncCustomerRiskLevelReq)
+		//if err != nil {
+		//	err = exception.NewWithException(exception.SyncRiskError, err.Error())
+		//	logger.Error("解析请求体失败: %v", err)
+		//	h.FailedResult("解析请求体失败", result)
+		//	return
+		//}
+		result = h.InitWrapData("支付结果应答成功")
+		h.SuccessResult("success", nil, result)
+		return
+	})
+}

+ 5 - 1
domian/merchant/merchant_product.go

@@ -23,8 +23,10 @@ type MerchantProductDTO struct {
 	CoverSrc    string
 	Description string
 	Price       decimal.Decimal
+	ProductTile string
 	RiskLevel   string
 	Type        string
+	TypeCN      string
 	IsPermanent bool
 	ValidDays   int
 	SaleStatus  string
@@ -48,9 +50,11 @@ func convertToDTO(product merchantDao.MerchantProduct) MerchantProductDTO {
 		Title:       product.Title,
 		CoverSrc:    product.CoverSrc,
 		Description: product.Description,
+		ProductTile: product.Title,
 		Price:       product.Price,
 		RiskLevel:   product.RiskLevel,
-		Type:        typeTransfer[product.Type],
+		Type:        string(product.Type),
+		TypeCN:      typeTransfer[product.Type],
 		IsPermanent: product.IsPermanent,
 		ValidDays:   product.ValidDays,
 	}

+ 22 - 0
domian/merchant/user_access_service.go

@@ -0,0 +1,22 @@
+package merchant
+
+import (
+	"eta/eta_mini_ht_api/models/merchant"
+	"time"
+)
+
+func OpenProduct(templateUserId int, productOrderNo string, product MerchantProductDTO) error {
+	userAccess := merchant.UserSubscriptionAccessList{
+		TemplateUserId: templateUserId,
+		ProductID:      product.Id,
+		ProductName:    product.ProductTile,
+		ProductType:    product.Type,
+		BeginDate:      time.Now(),
+		Status:         merchant.SubscribeValid,
+		ProductOrderNo: productOrderNo,
+	}
+	if !product.IsPermanent {
+		userAccess.EndDate = time.Now().Add(time.Duration(product.ValidDays) * 24 * time.Hour)
+	}
+	return merchant.InsertOrUpdateUserSubscribe(userAccess)
+}

+ 3 - 1
domian/user/user_subscription_service.go

@@ -1,6 +1,8 @@
 package user
 
-import subscribeDao "eta/eta_mini_ht_api/models/user"
+import (
+	subscribeDao "eta/eta_mini_ht_api/models/merchant"
+)
 
 func GetUserSubscribe(productId int, userId int) (subscribeDao.UserSubscriptionAccessList, error) {
 	return subscribeDao.GetUserSubscribe(productId, userId)

+ 4 - 0
middleware/webhook_middleware.go

@@ -9,6 +9,7 @@ import (
 	"fmt"
 	"github.com/beego/beego/v2/server/web"
 	"github.com/beego/beego/v2/server/web/context"
+	"strings"
 )
 
 var (
@@ -17,6 +18,9 @@ var (
 
 func WebHookAuthMiddleware() web.FilterFunc {
 	return func(ctx *context.Context) {
+		if strings.Contains(ctx.Input.URL(), "payment") {
+			return
+		}
 		body := ctx.Input.RequestBody
 		webhookRequest := new(WebhookRequest)
 		err := json.Unmarshal(body, &webhookRequest)

+ 12 - 7
models/user/user_subscription_access_flow.go → models/merchant/user_subscription_access_flow.go

@@ -1,4 +1,4 @@
-package user
+package merchant
 
 import (
 	"eta/eta_mini_ht_api/models"
@@ -7,25 +7,30 @@ import (
 
 type OpenType string
 
-// UserSubscriptionAccessList 用户订阅访问列表
+const (
+	OpenTypeValid   OpenType = "open"
+	OpenTypeExpired OpenType = "expired"
+	OpenTypeClose   OpenType = "close"
+)
+
+// UserSubscriptionAccessFlow  用户订阅访问列表
 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'"`
+	OpenType       OpenType  `gorm:"column:open_type;type:enum('open','expired','closed');default:'open'"`
 	CreatedTime    time.Time `gorm:"column:created_time"`
 	UpdatedTime    time.Time `gorm:"column:updated_time"`
 }
 
 func (UserSubscriptionAccessFlow) TableName() string {
-	return "user_subscription_access_list"
+	return "user_subscription_access_flow"
 }
 
-func CreateAccessFlow(userSubscriptionAccessList UserSubscriptionAccessFlow) (err error) {
+func CreateAccessFlow(userSubscriptionAccessFlow UserSubscriptionAccessFlow) (err error) {
 	db := models.Main()
-	err = db.Create(&userSubscriptionAccessList).Error
+	err = db.Create(&userSubscriptionAccessFlow).Error
 	return
 }

+ 86 - 0
models/merchant/user_subscription_access_list.go

@@ -0,0 +1,86 @@
+package merchant
+
+import (
+	"eta/eta_mini_ht_api/models"
+	"gorm.io/gorm"
+	"gorm.io/gorm/clause"
+	"time"
+)
+
+type SubscribeStatus string
+
+const (
+	SubscribeValid   SubscribeStatus = "valid"
+	SubscribeExpired SubscribeStatus = "expired"
+	SubscribeClose   SubscribeStatus = "close"
+)
+
+var (
+	subscribeStatusMap = map[SubscribeStatus]OpenType{
+		SubscribeValid:   OpenTypeValid,
+		SubscribeExpired: OpenTypeExpired,
+		SubscribeClose:   OpenTypeClose,
+	}
+)
+
+// UserSubscriptionAccessList 用户订阅访问列表
+type UserSubscriptionAccessList struct {
+	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"`
+	ProductType    string          `gorm:"column:product_type"`
+	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"`
+	ProductOrderNo string          `gorm:"-"`
+}
+
+func (UserSubscriptionAccessList) TableName() string {
+	return "user_subscription_access_list"
+}
+
+func GetUserSubscribe(productId int, userId int) (userSubscriptionAccessList UserSubscriptionAccessList, err error) {
+	db := models.Main()
+	err = db.Select("id,user_id,product_id,product_name,begin_date,end_date,status").Where("user_id=? and product_id=?", userId, productId).First(&userSubscriptionAccessList).Error
+	return
+}
+
+func (access *UserSubscriptionAccessList) BeforeCreate(_ *gorm.DB) (err error) {
+	access.CreatedTime = time.Now()
+	flow := UserSubscriptionAccessFlow{
+		ProductID:      access.ProductID,
+		ProductType:    access.ProductType,
+		ProductOrderId: access.ProductOrderNo,
+		OpenType:       subscribeStatusMap[access.Status],
+		CreatedTime:    time.Now(),
+	}
+	_ = CreateAccessFlow(flow)
+	return
+}
+
+func (access *UserSubscriptionAccessList) BeforeUpdate(_ *gorm.DB) (err error) {
+	access.UpdatedTime = time.Now()
+	flow := UserSubscriptionAccessFlow{
+		TemplateUserId: access.TemplateUserId,
+		ProductID:      access.ProductID,
+		ProductType:    access.ProductName,
+		ProductOrderId: access.ProductOrderNo,
+		OpenType:       subscribeStatusMap[access.Status],
+		CreatedTime:    time.Now(),
+	}
+	_ = CreateAccessFlow(flow)
+	return
+}
+func InsertOrUpdateUserSubscribe(access UserSubscriptionAccessList) (err error) {
+	db := models.Main()
+	OnConflictFunc := clause.OnConflict{
+		Columns:   []clause.Column{{Name: "template_user_id"}, {Name: "product_id"}},
+		DoUpdates: clause.AssignmentColumns([]string{"status", "begin_date", "end_date", "product_name", "updated_time"}),
+	}
+	// 执行批量插入或更新操作
+	err = db.Clauses(OnConflictFunc).Create(&access).Error
+	return
+}

+ 0 - 38
models/user/user_subscription_access_list.go

@@ -1,38 +0,0 @@
-package user
-
-import (
-	"eta/eta_mini_ht_api/models"
-	"time"
-)
-
-type SubscribeStatus string
-
-const (
-	SubscribeValid   SubscribeStatus = "valid"
-	SubscribeExpired SubscribeStatus = "expired"
-	SubscribeClose   SubscribeStatus = "close"
-)
-
-// UserSubscriptionAccessList 用户订阅访问列表
-type UserSubscriptionAccessList struct {
-	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 {
-	return "user_subscription_access_list"
-}
-
-func GetUserSubscribe(productId int, userId int) (userSubscriptionAccessList UserSubscriptionAccessList, err error) {
-	db := models.Main()
-	err = db.Select("id,user_id,product_id,product_name,begin_date,end_date,status").Where("user_id=? and product_id=?", userId, productId).First(&userSubscriptionAccessList).Error
-	return
-}

+ 9 - 0
routers/commentsRouter.go

@@ -484,6 +484,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_mini_ht_api/controllers/web_hook:HTFuturesTradeController"] = append(beego.GlobalControllerRouter["eta/eta_mini_ht_api/controllers/web_hook:HTFuturesTradeController"],
+        beego.ControllerComments{
+            Method: "InformPaymentResult",
+            Router: `/v1/payment/informPaymentResult`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_mini_ht_api/controllers:WebSocketController"] = append(beego.GlobalControllerRouter["eta/eta_mini_ht_api/controllers:WebSocketController"],
         beego.ControllerComments{
             Method: "Connect",

+ 1 - 0
routers/router.go

@@ -64,6 +64,7 @@ func init() {
 		web.NSNamespace("/webhook ",
 			web.NSInclude(
 				&web_hook.HTFuturesAccountController{},
+				&web_hook.HTFuturesTradeController{},
 			),
 		),
 		web.NSNamespace("/product",

+ 3 - 4
service/media/media_service.go

@@ -13,7 +13,6 @@ import (
 	userService "eta/eta_mini_ht_api/domian/user"
 	mediaDao "eta/eta_mini_ht_api/models/media"
 	productDao "eta/eta_mini_ht_api/models/merchant"
-	userDao "eta/eta_mini_ht_api/models/user"
 	"eta/eta_mini_ht_api/service/report"
 	"eta/eta_mini_ht_api/service/user"
 	"fmt"
@@ -369,7 +368,7 @@ func GetMediaPageByAnalystId(mediaType string, pageInfo page.PageInfo, analystId
 			if subscribeErr != nil {
 				media.IsSubscribe = false
 			} else {
-				media.IsSubscribe = subscribe.Status == userDao.SubscribeValid
+				media.IsSubscribe = subscribe.Status == productDao.SubscribeValid
 			}
 			media.RiskLevelStatus = RiskLevelMatch
 			pdRiskNum, parseErr := parseRiskLevel(product.RiskLevel)
@@ -467,7 +466,7 @@ func GetMediaPageByIds(mediaType string, pageInfo page.PageInfo, mediaIds []int,
 				if subscribeErr != nil {
 					media.IsSubscribe = false
 				} else {
-					media.IsSubscribe = subscribe.Status == userDao.SubscribeValid
+					media.IsSubscribe = subscribe.Status == productDao.SubscribeValid
 				}
 			}
 			media.RiskLevelStatus = RiskLevelMatch
@@ -574,7 +573,7 @@ func SearchMediaList(mediaType string, key string, mediaIds []int, pageInfo page
 				if subscribeErr != nil {
 					media.IsSubscribe = false
 				} else {
-					media.IsSubscribe = subscribe.Status == userDao.SubscribeValid
+					media.IsSubscribe = subscribe.Status == productDao.SubscribeValid
 				}
 			}
 

+ 16 - 9
service/product/product_service.go

@@ -1,8 +1,10 @@
 package product
 
 import (
+	logger "eta/eta_mini_ht_api/common/component/log"
 	"eta/eta_mini_ht_api/common/exception"
 	merchantService "eta/eta_mini_ht_api/domian/merchant"
+	"eta/eta_mini_ht_api/service/order"
 	"github.com/shopspring/decimal"
 	"time"
 )
@@ -43,15 +45,20 @@ 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
-//	}
-//
-//}
+// OpenProduct 开通产品
+func OpenProduct(templateUserId int, productOrderNo string) (err error) {
+	proudctOrder, err := order.GetProductOrderByUser(templateUserId, productOrderNo)
+	if err != nil {
+		logger.Error("获取产品订单信息失败:%v", err)
+		return
+	}
+	product, err := merchantService.GetMerchantProductById(proudctOrder.ProductID)
+	if err != nil {
+		logger.Error("获取产品信息失败:%v", err)
+		return
+	}
+	return merchantService.OpenProduct(templateUserId, productOrderNo, product)
+}
 
 //过期产品(套餐)
 

+ 3 - 4
service/report/report_service.go

@@ -13,7 +13,6 @@ import (
 	reportService "eta/eta_mini_ht_api/domian/report"
 	userService "eta/eta_mini_ht_api/domian/user"
 	productDao "eta/eta_mini_ht_api/models/merchant"
-	userDao "eta/eta_mini_ht_api/models/user"
 	user "eta/eta_mini_ht_api/service/user"
 	"fmt"
 	"gorm.io/gorm"
@@ -370,7 +369,7 @@ func dealReportInfo(list []reportService.ReportDTO, isLogin bool, userId int) (r
 					if subscribeErr != nil {
 						report.IsSubscribe = false
 					} else {
-						report.IsSubscribe = subscribe.Status == userDao.SubscribeValid
+						report.IsSubscribe = subscribe.Status == productDao.SubscribeValid
 					}
 				}
 				pdRiskNum, parseErr := parseRiskLevel(product.RiskLevel)
@@ -479,7 +478,7 @@ func GetRandedReportByWeeklyHot(limit int, isLogin bool, userId int, pdRiskLevel
 						} else {
 							report.Price = product.Price.String()
 							report.IsFree = false
-							report.IsSubscribe = subscribe.Status == userDao.SubscribeValid
+							report.IsSubscribe = subscribe.Status == productDao.SubscribeValid
 						}
 					}
 					if pdRiskNum <= reRiskNum {
@@ -613,7 +612,7 @@ func GetRandedReportByPublishTimeWeekly(limit int, week bool, isLogin bool, user
 					} else {
 						report.Price = product.Price.String()
 						report.IsFree = false
-						report.IsSubscribe = subscribe.Status == userDao.SubscribeValid
+						report.IsSubscribe = subscribe.Status == productDao.SubscribeValid
 					}
 				}
 				if pdRiskNum <= reRiskNum {