feat:优化项目信息
This commit is contained in:
140
app/api/enterprise/controller/order/instance.go
Normal file
140
app/api/enterprise/controller/order/instance.go
Normal file
@ -0,0 +1,140 @@
|
||||
package order
|
||||
|
||||
import (
|
||||
"SciencesServer/app/api/enterprise/model"
|
||||
"SciencesServer/app/basic/controller"
|
||||
model2 "SciencesServer/app/common/model"
|
||||
"SciencesServer/app/session"
|
||||
"SciencesServer/serve/orm"
|
||||
"SciencesServer/utils"
|
||||
"errors"
|
||||
"gorm.io/gorm"
|
||||
"time"
|
||||
)
|
||||
|
||||
// Instance 订单信息
|
||||
type Instance struct {
|
||||
*session.Enterprise
|
||||
tenantID uint64
|
||||
}
|
||||
|
||||
type InstanceHandle func(session *session.Enterprise, tenantID uint64) *Instance
|
||||
|
||||
// InstanceInfo 订单信息
|
||||
type InstanceInfo struct {
|
||||
ID string `json:"id"`
|
||||
*model2.OrderInstance
|
||||
}
|
||||
|
||||
// Index 首页信息
|
||||
func (c *Instance) Index(orderNo, status string, page, pageSize int) (*controller.ReturnPages, error) {
|
||||
mOrderInstance := model.NewOrderInstance()
|
||||
|
||||
out := make([]*model2.OrderInstance, 0)
|
||||
|
||||
where := []*model2.ModelWhereOrder{
|
||||
&model2.ModelWhereOrder{
|
||||
Where: model2.NewWhere("uid", c.UID),
|
||||
Order: model2.NewOrder("id", model2.OrderModeToDesc),
|
||||
}}
|
||||
|
||||
if orderNo != "" {
|
||||
where = append(where, &model2.ModelWhereOrder{
|
||||
Where: model2.NewWhereLike("order_no", orderNo),
|
||||
})
|
||||
}
|
||||
// 因int默认0,所以用string传递参数
|
||||
if status != "" {
|
||||
where = append(where, &model2.ModelWhereOrder{
|
||||
Where: model2.NewWhereLike("status", utils.StringToInt(status)),
|
||||
})
|
||||
}
|
||||
var count int64
|
||||
|
||||
if err := model2.Pages(mOrderInstance.OrderInstance, &out, page, pageSize, &count, where...); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
list := make([]*InstanceInfo, 0)
|
||||
|
||||
for _, v := range out {
|
||||
list = append(list, &InstanceInfo{
|
||||
ID: v.GetEncodeID(), OrderInstance: v,
|
||||
})
|
||||
}
|
||||
return &controller.ReturnPages{Data: list, Count: count}, nil
|
||||
}
|
||||
|
||||
// Cancel 订单取消
|
||||
func (c *Instance) Cancel(id uint64, remark string) error {
|
||||
mOrderInstance := model.NewOrderInstance()
|
||||
mOrderInstance.ID = id
|
||||
|
||||
isExist, err := model2.FirstField(mOrderInstance.OrderInstance, []string{"id", "uid", "status"})
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
} else if !isExist {
|
||||
return errors.New("操作错误,订单信息不存在或已被删除")
|
||||
} else if mOrderInstance.UID != c.UID {
|
||||
return errors.New("操作错误,无权限操作")
|
||||
}
|
||||
if mOrderInstance.Status == model2.OrderInstanceStatusForInit {
|
||||
return errors.New("操作错误,当前订单不允许取消")
|
||||
}
|
||||
return orm.GetDB().Transaction(func(tx *gorm.DB) error {
|
||||
if err = model2.Updates(mOrderInstance.OrderInstance, map[string]interface{}{
|
||||
"status": model2.OrderInstanceStatusForCancel, "updated_at": time.Now(),
|
||||
}, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
mOrderLog := model.NewOrderLog()
|
||||
mOrderLog.UID = c.UID
|
||||
mOrderLog.OrderID = id
|
||||
mOrderLog.Remark = remark
|
||||
return model2.Create(mOrderLog.OrderLog, tx)
|
||||
})
|
||||
}
|
||||
|
||||
// Pay 支付操作
|
||||
func (c *Instance) Pay(id uint64) (interface{}, error) {
|
||||
mOrderInstance := model.NewOrderInstance()
|
||||
mOrderInstance.ID = id
|
||||
|
||||
isExist, err := model2.FirstField(mOrderInstance.OrderInstance, []string{"id", "uid", "status"})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else if !isExist {
|
||||
return nil, errors.New("操作错误,订单信息不存在或已被删除")
|
||||
} else if mOrderInstance.UID != c.UID {
|
||||
return nil, errors.New("操作错误,无权限操作")
|
||||
}
|
||||
if mOrderInstance.Status == model2.OrderInstanceStatusForInit {
|
||||
return nil, errors.New("操作错误,当前订单不允许支付")
|
||||
}
|
||||
if err = orm.GetDB().Transaction(func(tx *gorm.DB) error {
|
||||
if err = model2.Updates(mOrderInstance.OrderInstance, map[string]interface{}{
|
||||
"status": model2.OrderInstanceStatusForCancel, "updated_at": time.Now(),
|
||||
}, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
mOrderLog := model.NewOrderLog()
|
||||
mOrderLog.UID = c.UID
|
||||
mOrderLog.OrderID = id
|
||||
mOrderLog.Remark = "用户发起支付"
|
||||
return model2.Create(mOrderLog.OrderLog, tx)
|
||||
}); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func NewInstance() InstanceHandle {
|
||||
return func(session *session.Enterprise, tenantID uint64) *Instance {
|
||||
return &Instance{
|
||||
Enterprise: session,
|
||||
tenantID: tenantID,
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user