修改会员价格

This commit is contained in:
wucongxing8150 2024-08-13 14:41:25 +08:00
parent a943cee790
commit b21199e1b2
5 changed files with 82 additions and 25 deletions

View File

@ -8,9 +8,9 @@ import (
// SystemSingle 配置-单项配置
type SystemSingle struct {
SystemSingleId int64 `gorm:"column:system_single_id;type:bigint(19);primary_key;comment:主键id" json:"system_single_id"`
FirstTimePrice float64 `gorm:"column:first_time_price;type:decimal(10,2);default:0.00;comment:首次购买价格" json:"first_time_price"`
ValidDays int `gorm:"column:valid_days;type:int(5);default:1;comment:购买后有效天数" json:"valid_days"`
SystemSingleId int64 `gorm:"column:system_single_id;type:bigint(19);primary_key;comment:主键id" json:"system_single_id"`
FirstTimePrice *float64 `gorm:"column:first_time_price;type:decimal(10,2);comment:首次购买价格" json:"first_time_price"`
ValidDays int `gorm:"column:valid_days;type:int(5);default:1;comment:购买后有效天数" json:"valid_days"`
Model
}

View File

@ -76,7 +76,7 @@ func (r *OrderMemberService) AddOrderMember(tx *gorm.DB, UserId, SystemMemberId
// 获取会员购买价格
systemMemberService := &SystemMemberService{}
amountTotal = systemMemberService.GetSystemMemberBuyPrice(systemMember)
amountTotal = systemMemberService.GetUserBuyPrice(UserId, systemMember)
if err != nil {
return nil, err
}

View File

@ -66,7 +66,7 @@ func (r *OrderSingleService) AddOrderSingle(tx *gorm.DB, UserId, QuestionId int6
return nil, errors.New("用户非会员,不可使用会员支付")
}
var amountTotal *float64 // 总金额
var amountTotal float64 // 总金额
var couponAmountTotal float64 // 优惠卷总金额
var paymentAmountTotal float64 // 实际付款金额
var orderStatus int // 订单状态1:待支付 2:已完成 3:已取消)
@ -80,10 +80,6 @@ func (r *OrderSingleService) AddOrderSingle(tx *gorm.DB, UserId, QuestionId int6
return nil, err
}
if amountTotal == nil {
return nil, errors.New("价格错误")
}
// 检测用户优惠卷
var userCoupon *model.UserCoupon
if UserCouponId != nil {
@ -96,7 +92,7 @@ func (r *OrderSingleService) AddOrderSingle(tx *gorm.DB, UserId, QuestionId int6
// 检测用户优惠卷
userCouponService := &UserCouponService{}
isCanUse, err := userCouponService.CheckUserCoupon(userCoupon, QuestionId, 1, *amountTotal)
isCanUse, err := userCouponService.CheckUserCoupon(userCoupon, QuestionId, 1, amountTotal)
if err != nil || isCanUse == false {
return nil, errors.New("价格异常")
}
@ -117,7 +113,7 @@ func (r *OrderSingleService) AddOrderSingle(tx *gorm.DB, UserId, QuestionId int6
escrowTradeNo = "GD" + global.Snowflake.Generate().String() // 第三方支付流水号
} else {
// 实际付款金额
paymentAmountTotal = *amountTotal - couponAmountTotal
paymentAmountTotal = amountTotal - couponAmountTotal
if orderPrice != paymentAmountTotal {
return nil, errors.New("价格异常")
}
@ -142,7 +138,7 @@ func (r *OrderSingleService) AddOrderSingle(tx *gorm.DB, UserId, QuestionId int6
RefundStatus: 0,
OrderNo: orderNo,
EscrowTradeNo: escrowTradeNo,
AmountTotal: *amountTotal,
AmountTotal: amountTotal,
CouponAmountTotal: couponAmountTotal,
PaymentAmountTotal: paymentAmountTotal,
CancelStatus: 0,

View File

@ -125,7 +125,7 @@ func (r *QuestionService) GetUserFirstTimeBuyPrice(userId int64) (f *float64, er
return nil, err
}
return &systemSingle.FirstTimePrice, nil
return systemSingle.FirstTimePrice, nil
}
return nil, nil
@ -150,15 +150,16 @@ func (r *QuestionService) GetQuestionBuyCount(userId, questionId int64) (c int,
}
// GetUserBuyPrice 获取问题最终价格
func (r *QuestionService) GetUserBuyPrice(userId, questionId int64) (p *float64, err error) {
func (r *QuestionService) GetUserBuyPrice(userId, questionId int64) (p float64, err error) {
// 获取问题详情
questionDao := dao.QuestionDao{}
question, err := questionDao.GetQuestionById(questionId)
if err != nil {
return nil, errors.New("题目异常")
return 0, errors.New("题目异常")
}
// 检测用户是否购买过单项产品
var firstTimePrice *float64
userService := &UserService{}
isBuy := userService.CheckUserBuySingle(userId)
if isBuy == false {
@ -168,19 +169,27 @@ func (r *QuestionService) GetUserBuyPrice(userId, questionId int64) (p *float64,
maps := make(map[string]interface{})
systemSingle, err := systemSingleDao.GetSystemSingle(maps)
if err != nil {
return nil, err
return 0, err
}
p = &systemSingle.FirstTimePrice
if systemSingle.FirstTimePrice != nil {
// 首次购买价格
firstTimePrice = systemSingle.FirstTimePrice
}
}
// 处理问题优惠价格
if p == nil {
p = r.HandleQuestionDiscountPrice(question.DiscountPrice, question.DiscountEndTime)
}
if p == nil {
p = &question.Price
if firstTimePrice != nil {
// 首次购买价格
p = *firstTimePrice
} else {
// 优惠价格
price := r.HandleQuestionDiscountPrice(question.DiscountPrice, question.DiscountEndTime)
if price == nil {
// 正常价格
p = question.Price
} else {
p = *price
}
}
return p, nil

View File

@ -1,6 +1,9 @@
package service
import "hepa-calc-api/api/model"
import (
"hepa-calc-api/api/model"
"time"
)
type SystemMemberService struct {
}
@ -15,3 +18,52 @@ func (r *SystemMemberService) GetSystemMemberBuyPrice(m *model.SystemMember) (p
return p
}
// GetUserBuyPrice 获取会员最终价格
func (r *SystemMemberService) GetUserBuyPrice(userId int64, m *model.SystemMember) (p float64) {
// 检测用户是否购买过单项产品
var firstTimePrice *float64
userService := &UserService{}
isBuy := userService.CheckUserBuyMember(userId)
if isBuy == false {
// 未购买过
if m.FirstTimePrice != nil {
// 首次购买价格
firstTimePrice = m.FirstTimePrice
}
}
if firstTimePrice != nil {
// 首次购买价格
p = *firstTimePrice
} else {
// 优惠价格
price := r.HandleSystemMemberDiscountPrice(m.DiscountPrice, m.DiscountEndTime)
if price == nil {
// 正常价格
p = m.Price
} else {
p = *price
}
}
return p
}
// HandleSystemMemberDiscountPrice 处理会员优惠价格
func (r *SystemMemberService) HandleSystemMemberDiscountPrice(discountPrice *float64, discountEndTime *model.LocalTime) (p *float64) {
// 优惠价格
if discountPrice != nil {
discountEndTime := time.Time(*discountEndTime)
// 检测是否超出优惠时间
now := time.Now()
if discountEndTime.Before(now) {
p = nil
} else {
p = discountPrice
}
}
return p
}