feat:完善项目信息
This commit is contained in:
124
app/api/enterprise/controller/user/bill.go
Normal file
124
app/api/enterprise/controller/user/bill.go
Normal file
@ -0,0 +1,124 @@
|
||||
package user
|
||||
|
||||
import (
|
||||
"SciencesServer/app/api/enterprise/model"
|
||||
"SciencesServer/app/basic/controller"
|
||||
model2 "SciencesServer/app/common/model"
|
||||
"SciencesServer/app/session"
|
||||
"SciencesServer/serve/orm"
|
||||
"errors"
|
||||
"gorm.io/gorm"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Bill struct {
|
||||
*session.Enterprise
|
||||
}
|
||||
|
||||
type BillHandle func(session *session.Enterprise) *Bill
|
||||
|
||||
type (
|
||||
// BillTicketInfo 账单发票信息
|
||||
BillTicketInfo struct {
|
||||
ID string `json:"id"`
|
||||
*model2.UserBillTicket
|
||||
}
|
||||
// BillTicketParams 账单发票参数信息
|
||||
BillTicketParams struct {
|
||||
Kind int
|
||||
Name, DutyParagraph, Mobile, Email, Address string
|
||||
}
|
||||
)
|
||||
|
||||
// Instance 账单信息
|
||||
func (c *Bill) Instance(orderNo, createdAt string, page, pageSize int) (*controller.ReturnPages, error) {
|
||||
mUserBill := model.NewUserBill()
|
||||
|
||||
where := []*model2.ModelWhere{
|
||||
model2.NewWhere("b.uid", c.UID),
|
||||
}
|
||||
if orderNo != "" {
|
||||
where = append(where, model2.NewWhere("b.order_no", orderNo))
|
||||
}
|
||||
if createdAt != "" {
|
||||
where = append(where, model2.NewWhereSectionAt("b.created_at", strings.Split(createdAt, " ~ "))...)
|
||||
}
|
||||
var count int64
|
||||
|
||||
out, err := mUserBill.Bill(page, pageSize, &count, where...)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &controller.ReturnPages{Data: out, Count: count}, nil
|
||||
}
|
||||
|
||||
// Ticket 发票信息
|
||||
func (c *Bill) Ticket(id uint64) (*BillTicketInfo, error) {
|
||||
mUserBillTicket := model.NewUserBillTicket()
|
||||
|
||||
isExist, err := model2.FirstWhere(mUserBillTicket.UserBillTicket, model2.NewWhere("user_bill_id", id))
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else if !isExist {
|
||||
return nil, nil
|
||||
}
|
||||
return &BillTicketInfo{
|
||||
ID: mUserBillTicket.GetEncodeID(),
|
||||
UserBillTicket: mUserBillTicket.UserBillTicket,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// TicketIssue 发票开具
|
||||
func (c *Bill) TicketIssue(id uint64, params *BillTicketParams) error {
|
||||
mUserBill := model.NewUserBill()
|
||||
mUserBill.ID = id
|
||||
|
||||
isExist, err := model2.FirstField(mUserBill.UserBill, []string{"id", "bill_id", "user_id"})
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
} else if !isExist {
|
||||
return errors.New("操作错误,账单信息不存在或已被删除")
|
||||
} else if mUserBill.UID != c.UID {
|
||||
return errors.New("操作错误,不可开具他人账单发票信息")
|
||||
}
|
||||
// 用户账单信息
|
||||
mUserBillTicket := model.NewUserBillTicket()
|
||||
|
||||
var count int64
|
||||
|
||||
if err = model2.Count(mUserBillTicket.UserBillTicket, &count, model2.NewWhere("user_bill_id", mUserBill.ID)); err != nil {
|
||||
return err
|
||||
} else if count > 0 {
|
||||
return errors.New("操作错误,当前账单已开具发票")
|
||||
}
|
||||
return orm.GetDB().Transaction(func(tx *gorm.DB) error {
|
||||
mUserBillTicket.UserBillID = mUserBill.ID
|
||||
mUserBillTicket.Kind = model2.UserBillTicketKind(params.Kind)
|
||||
mUserBillTicket.Name = params.Name
|
||||
mUserBillTicket.DutyParagraph = params.DutyParagraph
|
||||
mUserBillTicket.Mobile = params.Mobile
|
||||
mUserBillTicket.Email = params.Email
|
||||
mUserBillTicket.Address = params.Address
|
||||
|
||||
if err = model2.Create(mUserBillTicket.UserBillTicket, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
mBillInstance := model.NewBillInstance()
|
||||
mBillInstance.ID = mUserBill.BillID
|
||||
|
||||
return model2.Updates(mBillInstance.BillInstance, map[string]interface{}{
|
||||
"status": model2.BillInstanceStatusForApply, "updated_at": time.Now(),
|
||||
}, tx)
|
||||
})
|
||||
}
|
||||
|
||||
func NewBill() BillHandle {
|
||||
return func(session *session.Enterprise) *Bill {
|
||||
return &Bill{session}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user