This commit is contained in:
suyl
2021-05-10 09:06:04 +08:00
parent fb10cbb7d2
commit c321ae5886
7 changed files with 179 additions and 11 deletions

View File

@@ -2,10 +2,12 @@ package financial
import (
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/model/dao"
"github.com/astaxie/beego/client/orm"
"time"
)
func AddBillIncome(txDB orm.TxOrmer, billID int64, billType, incomePrice, jobID int) (err error) {
@@ -38,6 +40,15 @@ func AddUserBill(txDB orm.TxOrmer, billID int64, userID string) (err error) {
return dao.CreateEntityTx(txDB, userBillInsert)
}
func AddUserBillDb(db *dao.DaoDB, billID int64, userID string) (err error) {
userBillInsert := &model.UserBill{
BillID: billID,
UserID: userID,
}
dao.WrapAddIDCULDEntity(userBillInsert, jxcontext.AdminCtx.GetUserName())
return dao.CreateEntity(db, userBillInsert)
}
func GetUserBillDetail(ctx *jxcontext.Context, userID, fromTime, toTime string, pageSize, offset int) (pagedInfo *model.PagedInfo, err error) {
return dao.GetUserBillDetail(dao.GetDB(), userID, utils.Str2Time(fromTime), utils.Str2Time(toTime), pageSize, offset)
}
@@ -65,3 +76,92 @@ func AddIncomeUpdateAccount(txDB orm.TxOrmer, userBill *model.UserBill, billType
_, err = dao.UpdateEntityTx(txDB, userBill, "AccountBalance")
return err
}
func SettleUnionOrders(ctx *jxcontext.Context, vendorIDs []int) (err error) {
var (
db = dao.GetDB()
unionOrderVendorMap map[int][]*model.UnionOrder //key 为平台ID
unionOrderMap map[string]map[int][]*model.UnionOrder //key为userID整个map把每个User的不同平台的订单放一起
settleOrders []*model.UnionOrderSettle
)
unionOrderVendorMap = make(map[int][]*model.UnionOrder)
unionOrderMap = make(map[string]map[int][]*model.UnionOrder)
unionOrders, err := dao.GetUnionOrders(db, vendorIDs, []int{model.UnionOrderStatusFinish}, utils.ZeroTimeValue, utils.ZeroTimeValue, model.NO)
if err != nil {
return err
}
for _, v := range unionOrders {
if _, ok := unionOrderMap[v.UserID]; ok {
if _, ol := unionOrderVendorMap[v.VendorID]; ol {
unionOrderMap[v.UserID][v.VendorID] = append(unionOrderMap[v.UserID][v.VendorID], v)
} else {
unionOrderMap[v.UserID][v.VendorID] = []*model.UnionOrder{v}
}
} else {
unionOrderVendorMap[v.VendorID] = []*model.UnionOrder{v}
unionOrderMap[v.UserID] = unionOrderVendorMap
}
}
for userID, v := range unionOrderMap {
var (
billID int64
)
userBill, _ := dao.GetUserBill(db, userID, "")
if userBill == nil {
billID = jxutils.GenBillID()
AddUserBillDb(db, billID, userID)
} else {
billID = userBill.BillID
}
for vendorID, vv := range v {
var (
sumPrice, count int
)
for _, unionOrder := range vv {
count++
sumPrice += unionOrder.PromotionAmount
}
unionOrderSettle := &model.UnionOrderSettle{
BillID: billID,
VendorID: vendorID,
Issue: jxutils.GetIssue(),
EarningPrice: sumPrice,
OrderCount: count,
}
dao.WrapAddIDCULEntity(unionOrderSettle, ctx.GetUserName())
settleOrders = append(settleOrders, unionOrderSettle)
//err = dao.CreateEntity(db, unionOrderSettle)
}
}
txDB, _ := dao.Begin(db)
defer func() {
if r := recover(); r != nil {
dao.Rollback(db, txDB)
panic(r)
}
}()
for _, v := range settleOrders {
//插入结算表
if err = dao.CreateEntityTx(txDB, v); err != nil {
dao.Rollback(db, txDB)
return err
}
//更新用户账户
userBill, _ := dao.GetUserBill(db, "", utils.Int64ToStr(v.BillID))
if err = AddIncomeUpdateAccount(txDB, userBill, model.BillTypeUnionShare, v.EarningPrice, 0); err != nil {
dao.Rollback(db, txDB)
return err
}
}
//修改订单结算标志
for _, v := range unionOrders {
v.IsEarning = model.YES
v.UpdatedAt = time.Now()
if _, err = dao.UpdateEntityTx(txDB, v, "IsEarning", "UpdatedAt"); err != nil {
dao.Rollback(db, txDB)
return err
}
}
dao.Commit(db, txDB)
return err
}