aa
This commit is contained in:
@@ -2,10 +2,12 @@ package financial
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"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/jxutils/jxcontext"
|
||||||
"git.rosy.net.cn/jx-callback/business/model"
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||||
"github.com/astaxie/beego/client/orm"
|
"github.com/astaxie/beego/client/orm"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func AddBillIncome(txDB orm.TxOrmer, billID int64, billType, incomePrice, jobID int) (err error) {
|
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)
|
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) {
|
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)
|
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")
|
_, err = dao.UpdateEntityTx(txDB, userBill, "AccountBalance")
|
||||||
return err
|
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
|
||||||
|
}
|
||||||
|
|||||||
@@ -839,17 +839,9 @@ func MixWatermarkImg(imgWatermark, img, positon string) (imgMix string) {
|
|||||||
return imgMix
|
return imgMix
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetDefendPriceIssue() (issue int) {
|
func GetIssue() (issue int) {
|
||||||
if time.Now().Hour() >= 22 {
|
year, month, _ := time.Now().Date()
|
||||||
issue = utils.Str2Int(time.Now().AddDate(0, 0, 1).Format("20060102"))
|
return year*100 + int(month)
|
||||||
} 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"))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//根据一堆坐标求面积
|
//根据一堆坐标求面积
|
||||||
|
|||||||
@@ -97,3 +97,20 @@ func (v *UserBill) TableIndex() [][]string {
|
|||||||
[]string{"AccountBalance"},
|
[]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"},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -515,6 +515,37 @@ func GetManageStatisticsJob(db *DaoDB, cityCodes []int, fromTime, toTime time.Ti
|
|||||||
return pageInfo, err
|
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) {
|
func GetUnionOrdersByIDs(db *DaoDB, vendorOrderIDs []string, vendorID int) (orders []*model.UnionOrder, err error) {
|
||||||
if len(vendorOrderIDs) == 0 {
|
if len(vendorOrderIDs) == 0 {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package controllers
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"git.rosy.net.cn/jx-callback/business/jxstore/cms"
|
"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"
|
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||||
beego "github.com/astaxie/beego/adapter"
|
beego "github.com/astaxie/beego/adapter"
|
||||||
)
|
)
|
||||||
@@ -187,3 +188,20 @@ func (c *OrderController) GetMyUnionOrders() {
|
|||||||
return retVal, "", err
|
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
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ func Init() {
|
|||||||
//联盟订单
|
//联盟订单
|
||||||
orm.RegisterModel(&model.UnionOrder{})
|
orm.RegisterModel(&model.UnionOrder{})
|
||||||
orm.RegisterModel(&model.UnionOrderStatus{})
|
orm.RegisterModel(&model.UnionOrderStatus{})
|
||||||
|
orm.RegisterModel(&model.UnionOrderSettle{}) //订单结算
|
||||||
//任务
|
//任务
|
||||||
orm.RegisterModel(&model.Job{}, &model.JobCategory{}, &model.JobStep{}, &model.JobImg{})
|
orm.RegisterModel(&model.Job{}, &model.JobCategory{}, &model.JobStep{}, &model.JobImg{})
|
||||||
orm.RegisterModel(&model.JobOrder{})
|
orm.RegisterModel(&model.JobOrder{})
|
||||||
|
|||||||
@@ -754,6 +754,15 @@ func init() {
|
|||||||
Filters: nil,
|
Filters: nil,
|
||||||
Params: 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.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "GetOrders",
|
Method: "GetOrders",
|
||||||
|
|||||||
Reference in New Issue
Block a user