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
}

View File

@@ -839,17 +839,9 @@ func MixWatermarkImg(imgWatermark, img, positon string) (imgMix string) {
return imgMix
}
func GetDefendPriceIssue() (issue int) {
if time.Now().Hour() >= 22 {
issue = utils.Str2Int(time.Now().AddDate(0, 0, 1).Format("20060102"))
} else {
issue = utils.Str2Int(time.Now().Format("20060102"))
}
return issue
}
func GetLastDefendPriceIssue() (issue int) {
return utils.Str2Int(time.Now().AddDate(0, 0, 1).Format("20060102"))
func GetIssue() (issue int) {
year, month, _ := time.Now().Date()
return year*100 + int(month)
}
//根据一堆坐标求面积

View File

@@ -97,3 +97,20 @@ func (v *UserBill) TableIndex() [][]string {
[]string{"AccountBalance"},
}
}
type UnionOrderSettle struct {
ModelIDCUL
BillID int64 `orm:"column(bill_id)" json:"billID"` //账单ID
VendorID int `orm:"column(vendor_id)" json:"vendorID"` //平台ID
Issue int `json:"issue"` //期数
EarningPrice int `json:"earningPrice"` //结算金额
OrderCount int `json:"orderCount"` //当期有效推广订单数量
Comment string `json:"comment"` //备注
}
func (v *UnionOrderSettle) TableUnique() [][]string {
return [][]string{
[]string{"BillID", "VendorID", "Issue"},
}
}

View File

@@ -515,6 +515,37 @@ func GetManageStatisticsJob(db *DaoDB, cityCodes []int, fromTime, toTime time.Ti
return pageInfo, err
}
func GetUnionOrders(db *DaoDB, vendorIDs, statuss []int, beginTime, endTime time.Time, isEarning int) (orders []*model.UnionOrder, err error) {
sql := `
SELECT *
FROM union_order
WHERE 1 = 1
`
sqlParams := []interface{}{}
if len(vendorIDs) > 0 {
sql += ` AND vendor_id IN (` + GenQuestionMarks(len(vendorIDs)) + `)`
sqlParams = append(sqlParams, vendorIDs)
}
if len(statuss) > 0 {
sql += ` AND status IN (` + GenQuestionMarks(len(statuss)) + `)`
sqlParams = append(sqlParams, statuss)
}
if !utils.IsTimeZero(beginTime) {
sql += ` AND order_settle_at > ?`
sqlParams = append(sqlParams, beginTime)
}
if !utils.IsTimeZero(endTime) {
sql += ` AND order_settle_at < ?`
sqlParams = append(sqlParams, endTime)
}
if isEarning != -1 {
sql += ` AND is_earning = ?`
sqlParams = append(sqlParams, isEarning)
}
err = GetRows(db, &orders, sql, sqlParams)
return orders, err
}
func GetUnionOrdersByIDs(db *DaoDB, vendorOrderIDs []string, vendorID int) (orders []*model.UnionOrder, err error) {
if len(vendorOrderIDs) == 0 {
return nil, err

View File

@@ -2,6 +2,7 @@ package controllers
import (
"git.rosy.net.cn/jx-callback/business/jxstore/cms"
"git.rosy.net.cn/jx-callback/business/jxstore/financial"
"git.rosy.net.cn/jx-callback/business/jxutils"
beego "github.com/astaxie/beego/adapter"
)
@@ -187,3 +188,20 @@ func (c *OrderController) GetMyUnionOrders() {
return retVal, "", err
})
}
// @Title 联盟订单结算
// @Description 联盟订单结算
// @Param token header string true "认证token"
// @Param vendorIDs query string false "平台IDs"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /SettleUnionOrders [post]
func (c *OrderController) SettleUnionOrders() {
c.callSettleUnionOrders(func(params *tOrderSettleUnionOrdersParams) (retVal interface{}, errCode string, err error) {
var vendorIDs []int
if err = jxutils.Strings2Objs(params.VendorIDs, &vendorIDs); err == nil {
err = financial.SettleUnionOrders(params.Ctx, vendorIDs)
}
return retVal, "", err
})
}

View File

@@ -27,6 +27,7 @@ func Init() {
//联盟订单
orm.RegisterModel(&model.UnionOrder{})
orm.RegisterModel(&model.UnionOrderStatus{})
orm.RegisterModel(&model.UnionOrderSettle{}) //订单结算
//任务
orm.RegisterModel(&model.Job{}, &model.JobCategory{}, &model.JobStep{}, &model.JobImg{})
orm.RegisterModel(&model.JobOrder{})

View File

@@ -754,6 +754,15 @@ func init() {
Filters: nil,
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"],
beego.ControllerComments{
Method: "SettleUnionOrders",
Router: "/SettleUnionOrders",
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"],
beego.ControllerComments{
Method: "GetOrders",