feat:优化项目信息

This commit is contained in:
henry
2022-02-10 18:42:52 +08:00
parent 412aaaf1af
commit 95f1401468
14 changed files with 365 additions and 18 deletions

View 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,
}
}
}