修改会员价格
This commit is contained in:
parent
a943cee790
commit
b21199e1b2
@ -8,9 +8,9 @@ import (
|
|||||||
|
|
||||||
// SystemSingle 配置-单项配置
|
// SystemSingle 配置-单项配置
|
||||||
type SystemSingle struct {
|
type SystemSingle struct {
|
||||||
SystemSingleId int64 `gorm:"column:system_single_id;type:bigint(19);primary_key;comment:主键id" json:"system_single_id"`
|
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"`
|
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"`
|
ValidDays int `gorm:"column:valid_days;type:int(5);default:1;comment:购买后有效天数" json:"valid_days"`
|
||||||
Model
|
Model
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -76,7 +76,7 @@ func (r *OrderMemberService) AddOrderMember(tx *gorm.DB, UserId, SystemMemberId
|
|||||||
|
|
||||||
// 获取会员购买价格
|
// 获取会员购买价格
|
||||||
systemMemberService := &SystemMemberService{}
|
systemMemberService := &SystemMemberService{}
|
||||||
amountTotal = systemMemberService.GetSystemMemberBuyPrice(systemMember)
|
amountTotal = systemMemberService.GetUserBuyPrice(UserId, systemMember)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@ -66,7 +66,7 @@ func (r *OrderSingleService) AddOrderSingle(tx *gorm.DB, UserId, QuestionId int6
|
|||||||
return nil, errors.New("用户非会员,不可使用会员支付")
|
return nil, errors.New("用户非会员,不可使用会员支付")
|
||||||
}
|
}
|
||||||
|
|
||||||
var amountTotal *float64 // 总金额
|
var amountTotal float64 // 总金额
|
||||||
var couponAmountTotal float64 // 优惠卷总金额
|
var couponAmountTotal float64 // 优惠卷总金额
|
||||||
var paymentAmountTotal float64 // 实际付款金额
|
var paymentAmountTotal float64 // 实际付款金额
|
||||||
var orderStatus int // 订单状态(1:待支付 2:已完成 3:已取消)
|
var orderStatus int // 订单状态(1:待支付 2:已完成 3:已取消)
|
||||||
@ -80,10 +80,6 @@ func (r *OrderSingleService) AddOrderSingle(tx *gorm.DB, UserId, QuestionId int6
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if amountTotal == nil {
|
|
||||||
return nil, errors.New("价格错误")
|
|
||||||
}
|
|
||||||
|
|
||||||
// 检测用户优惠卷
|
// 检测用户优惠卷
|
||||||
var userCoupon *model.UserCoupon
|
var userCoupon *model.UserCoupon
|
||||||
if UserCouponId != nil {
|
if UserCouponId != nil {
|
||||||
@ -96,7 +92,7 @@ func (r *OrderSingleService) AddOrderSingle(tx *gorm.DB, UserId, QuestionId int6
|
|||||||
|
|
||||||
// 检测用户优惠卷
|
// 检测用户优惠卷
|
||||||
userCouponService := &UserCouponService{}
|
userCouponService := &UserCouponService{}
|
||||||
isCanUse, err := userCouponService.CheckUserCoupon(userCoupon, QuestionId, 1, *amountTotal)
|
isCanUse, err := userCouponService.CheckUserCoupon(userCoupon, QuestionId, 1, amountTotal)
|
||||||
if err != nil || isCanUse == false {
|
if err != nil || isCanUse == false {
|
||||||
return nil, errors.New("价格异常")
|
return nil, errors.New("价格异常")
|
||||||
}
|
}
|
||||||
@ -117,7 +113,7 @@ func (r *OrderSingleService) AddOrderSingle(tx *gorm.DB, UserId, QuestionId int6
|
|||||||
escrowTradeNo = "GD" + global.Snowflake.Generate().String() // 第三方支付流水号
|
escrowTradeNo = "GD" + global.Snowflake.Generate().String() // 第三方支付流水号
|
||||||
} else {
|
} else {
|
||||||
// 实际付款金额
|
// 实际付款金额
|
||||||
paymentAmountTotal = *amountTotal - couponAmountTotal
|
paymentAmountTotal = amountTotal - couponAmountTotal
|
||||||
if orderPrice != paymentAmountTotal {
|
if orderPrice != paymentAmountTotal {
|
||||||
return nil, errors.New("价格异常")
|
return nil, errors.New("价格异常")
|
||||||
}
|
}
|
||||||
@ -142,7 +138,7 @@ func (r *OrderSingleService) AddOrderSingle(tx *gorm.DB, UserId, QuestionId int6
|
|||||||
RefundStatus: 0,
|
RefundStatus: 0,
|
||||||
OrderNo: orderNo,
|
OrderNo: orderNo,
|
||||||
EscrowTradeNo: escrowTradeNo,
|
EscrowTradeNo: escrowTradeNo,
|
||||||
AmountTotal: *amountTotal,
|
AmountTotal: amountTotal,
|
||||||
CouponAmountTotal: couponAmountTotal,
|
CouponAmountTotal: couponAmountTotal,
|
||||||
PaymentAmountTotal: paymentAmountTotal,
|
PaymentAmountTotal: paymentAmountTotal,
|
||||||
CancelStatus: 0,
|
CancelStatus: 0,
|
||||||
|
|||||||
@ -125,7 +125,7 @@ func (r *QuestionService) GetUserFirstTimeBuyPrice(userId int64) (f *float64, er
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return &systemSingle.FirstTimePrice, nil
|
return systemSingle.FirstTimePrice, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, nil
|
return nil, nil
|
||||||
@ -150,15 +150,16 @@ func (r *QuestionService) GetQuestionBuyCount(userId, questionId int64) (c int,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetUserBuyPrice 获取问题最终价格
|
// 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{}
|
questionDao := dao.QuestionDao{}
|
||||||
question, err := questionDao.GetQuestionById(questionId)
|
question, err := questionDao.GetQuestionById(questionId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.New("题目异常")
|
return 0, errors.New("题目异常")
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检测用户是否购买过单项产品
|
// 检测用户是否购买过单项产品
|
||||||
|
var firstTimePrice *float64
|
||||||
userService := &UserService{}
|
userService := &UserService{}
|
||||||
isBuy := userService.CheckUserBuySingle(userId)
|
isBuy := userService.CheckUserBuySingle(userId)
|
||||||
if isBuy == false {
|
if isBuy == false {
|
||||||
@ -168,19 +169,27 @@ func (r *QuestionService) GetUserBuyPrice(userId, questionId int64) (p *float64,
|
|||||||
maps := make(map[string]interface{})
|
maps := make(map[string]interface{})
|
||||||
systemSingle, err := systemSingleDao.GetSystemSingle(maps)
|
systemSingle, err := systemSingleDao.GetSystemSingle(maps)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
p = &systemSingle.FirstTimePrice
|
if systemSingle.FirstTimePrice != nil {
|
||||||
|
// 首次购买价格
|
||||||
|
firstTimePrice = systemSingle.FirstTimePrice
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 处理问题优惠价格
|
if firstTimePrice != nil {
|
||||||
if p == nil {
|
// 首次购买价格
|
||||||
p = r.HandleQuestionDiscountPrice(question.DiscountPrice, question.DiscountEndTime)
|
p = *firstTimePrice
|
||||||
}
|
} else {
|
||||||
|
// 优惠价格
|
||||||
if p == nil {
|
price := r.HandleQuestionDiscountPrice(question.DiscountPrice, question.DiscountEndTime)
|
||||||
p = &question.Price
|
if price == nil {
|
||||||
|
// 正常价格
|
||||||
|
p = question.Price
|
||||||
|
} else {
|
||||||
|
p = *price
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return p, nil
|
return p, nil
|
||||||
|
|||||||
@ -1,6 +1,9 @@
|
|||||||
package service
|
package service
|
||||||
|
|
||||||
import "hepa-calc-api/api/model"
|
import (
|
||||||
|
"hepa-calc-api/api/model"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
type SystemMemberService struct {
|
type SystemMemberService struct {
|
||||||
}
|
}
|
||||||
@ -15,3 +18,52 @@ func (r *SystemMemberService) GetSystemMemberBuyPrice(m *model.SystemMember) (p
|
|||||||
|
|
||||||
return 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
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user