|
@@ -45,6 +45,7 @@ type ProductOrder struct {
|
|
|
RefundAmount string `gorm:"column:refund_amount;size:255;default:null;comment:'退款金额'" json:"refund_amount"`
|
|
|
PaymentWay PaymentWay `gorm:"column:payment_way;enum('wechat','alipay');default:null;comment:'支付渠道'"`
|
|
|
PaymentTime time.Time `gorm:"column:payment_time;default:null;comment:'支付时间'" json:"payment_time"`
|
|
|
+ ExpiredTime time.Time `gorm:"column:expired_time;default:null;comment:'超时时间'" json:"expired_time"`
|
|
|
Status OrderStatus `gorm:"column:status;type:enum('pending','processing','paid','closed','refund');default:'pending';comment:'订单状态'" json:"status"`
|
|
|
RefundStatus RefundStatus `gorm:"column:refund_status;type:enum('pending','processing','failed','success');default:null;comment:'退款状态'" json:"refund_status"`
|
|
|
RefundFinishTime time.Time `gorm:"column:refund_finish_time;default:null;comment:'退款完成时间'" json:"refund_finish_time"`
|
|
@@ -56,7 +57,10 @@ type ProductOrder struct {
|
|
|
|
|
|
func (pr *ProductOrder) BeforeCreate(db *gorm.DB) (err error) {
|
|
|
pr.Status = OrderStatusPending
|
|
|
- pr.CreatedTime = time.Now()
|
|
|
+ createTime := time.Now()
|
|
|
+ expiredTime := createTime.Add(time.Duration(15) * time.Minute)
|
|
|
+ pr.CreatedTime = createTime
|
|
|
+ pr.ExpiredTime = expiredTime
|
|
|
pr.IsDeleted = 0
|
|
|
return
|
|
|
}
|
|
@@ -117,23 +121,24 @@ func GetOrderDetail(orderId int, userId int) (order ProductOrder, err error) {
|
|
|
func GetUnPendingOrderCount() (count int, minId int) {
|
|
|
db := models.Main()
|
|
|
_ = db.Model(&ProductOrder{}).Select("count(*)").Where("is_deleted=0 and status=? and expired_time <= ?", OrderStatusPending, time.Now()).Scan(&count).Error
|
|
|
- _ = db.Model(&ProductOrder{}).Select("MIN(id)").Where("is_deleted=0 and status =?", OrderStatusPending).Scan(&minId).Error
|
|
|
+ if count > 0 {
|
|
|
+ _ = db.Model(&ProductOrder{}).Select("MIN(id)").Where("is_deleted=0 and status =? and expired_time <= ?", OrderStatusPending, time.Now()).Scan(&minId).Error
|
|
|
+ }
|
|
|
return
|
|
|
}
|
|
|
|
|
|
func GetExpiredPendingOrderIds(minId int, limit int) (ids []int) {
|
|
|
db := models.Main()
|
|
|
- _ = db.Model(&ProductOrder{}).Select("id").Where("id> ? and status=? and is_deleted=0 and expired_time < ? order by id asc", minId, OrderStatusPending, time.Now()).Where("", time.Now()).Limit(limit).Scan(&ids).Error
|
|
|
+ _ = db.Model(&ProductOrder{}).Select("id").Where("id>= ? and status=? and is_deleted=0 and expired_time <= ? order by id asc", minId, OrderStatusPending, time.Now()).Limit(limit).Scan(&ids).Error
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-func batchCloseOrder(ids []int) error {
|
|
|
- //db := models.Main()
|
|
|
- //_ = db.Model(&ProductOrder{}).Select("id").Where("id> ? and status=? and is_deleted=0 order by id asc", minId, OrderStatusPending).Limit(limit).Scan(&ids).Error
|
|
|
- //err = db.Model(&ProductOrder{}).Where("expired_time < ?", time.Now()).Where("status =?", StatusPending).Update("status", StatusExpired).Error
|
|
|
- //if err != nil {
|
|
|
- // logger.Error("批量过期验证码失败:%v", err)
|
|
|
- //}
|
|
|
+func BatchCloseOrder(ids []int) (err error) {
|
|
|
+ db := models.Main()
|
|
|
+ err = db.Model(&ProductOrder{}).Where("expired_time < ?", time.Now()).Where("id in ?", ids).Update("status", OrderStatusClosed).Error
|
|
|
+ if err != nil {
|
|
|
+ logger.Error("批量关闭订单失败:%v", err)
|
|
|
+ }
|
|
|
return nil
|
|
|
}
|
|
|
|