aa
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
//根据一堆坐标求面积
|
||||
|
||||
@@ -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"},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
})
|
||||
}
|
||||
|
||||
@@ -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{})
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user