feat:优化项目信息
This commit is contained in:
115
app/api/website/controller/payment/instance.go
Normal file
115
app/api/website/controller/payment/instance.go
Normal file
@ -0,0 +1,115 @@
|
||||
package payment
|
||||
|
||||
import (
|
||||
"SciencesServer/app/api/website/model"
|
||||
model2 "SciencesServer/app/common/model"
|
||||
"SciencesServer/app/session"
|
||||
"SciencesServer/serve/orm"
|
||||
"errors"
|
||||
"gorm.io/gorm"
|
||||
"time"
|
||||
)
|
||||
|
||||
// Instance 支付管理
|
||||
type Instance struct {
|
||||
*session.Enterprise
|
||||
}
|
||||
|
||||
type IInstance interface {
|
||||
grant(tx *gorm.DB) error
|
||||
}
|
||||
|
||||
type InstanceHandle func(session *session.Enterprise) *Instance
|
||||
|
||||
type InstanceGrant struct {
|
||||
tx *gorm.DB
|
||||
uid uint64
|
||||
params *model2.OrderInstanceParams
|
||||
}
|
||||
|
||||
// handle 发放操作
|
||||
func (c *InstanceGrant) handle() error {
|
||||
var _handle IInstance
|
||||
|
||||
if c.params.Kind == model2.OrderInstanceParamsKindForActivity {
|
||||
data := c.params.Data.(*model2.OrderInstanceParamsForActivity)
|
||||
_handle = NewActivity()(c.uid, data.ID, data.Identity)
|
||||
} else if c.params.Kind == model2.OrderInstanceParamsKindForVIP {
|
||||
data := c.params.Data.(*model2.OrderInstanceParamsForVip)
|
||||
_handle = NewVip()(c.uid, data.ID, data.EffectTime)
|
||||
}
|
||||
if _handle != nil {
|
||||
return _handle.grant(c.tx)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Launch 支付发起
|
||||
func (c *Instance) Launch(id uint64) (interface{}, error) {
|
||||
mOrderInstance := model.NewOrderInstance()
|
||||
mOrderInstance.ID = id
|
||||
|
||||
isExist, err := model2.FirstField(mOrderInstance.OrderInstance, []string{"id", "order_no", "amount", "status"})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else if !isExist {
|
||||
return nil, errors.New("操作错误,订单信息不存在或已被删除")
|
||||
} else if mOrderInstance.Status != model2.OrderInstanceStatusForInit {
|
||||
return nil, errors.New("操作错误,当前订单状态不允许支付")
|
||||
}
|
||||
// 保存日志
|
||||
mOrderLog := model.NewOrderLog()
|
||||
mOrderLog.UID = c.UID
|
||||
mOrderLog.OrderID = id
|
||||
|
||||
if err = model2.Create(mOrderLog.OrderLog); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// 返回第三方支付接口参数
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// Callback 支付回调
|
||||
func (c *Instance) Callback(orderNo string) error {
|
||||
mOrderInstance := model.NewOrderInstance()
|
||||
isExist, err := model2.FirstField(mOrderInstance.OrderInstance, []string{"id", "uid", "amount", "params", "status"},
|
||||
model2.NewWhere("order_no", orderNo))
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
} else if !isExist {
|
||||
return errors.New("订单信息不存在或已被删除")
|
||||
} else if mOrderInstance.OrderInstance.Status != model2.OrderInstanceStatusForInit {
|
||||
// 状态异常
|
||||
return errors.New("状态异常,不允许支付")
|
||||
}
|
||||
now := time.Now()
|
||||
|
||||
// 更改订单状态为已支付
|
||||
if err = model2.Updates(mOrderInstance.OrderInstance, map[string]interface{}{
|
||||
"status": model2.OrderInstanceStatusForPaid, "updated_at": now,
|
||||
}); err != nil {
|
||||
return nil
|
||||
}
|
||||
return orm.GetDB().Transaction(func(tx *gorm.DB) error {
|
||||
// 发放操作
|
||||
if err = (&InstanceGrant{
|
||||
tx: tx, uid: mOrderInstance.UID, params: mOrderInstance.GetParamsAttribute(),
|
||||
}).handle(); err != nil {
|
||||
return err
|
||||
}
|
||||
if err = model2.Updates(mOrderInstance.OrderInstance, map[string]interface{}{
|
||||
"status": model2.OrderInstanceStatusForComplete, "updated_at": now,
|
||||
}, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func NewInstance() InstanceHandle {
|
||||
return func(session *session.Enterprise) *Instance {
|
||||
return &Instance{session}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user