|
@@ -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
|
|
|
+}
|