作者 yangfu

增加:分红修改

... ... @@ -12,6 +12,8 @@ type BusinessBonus struct {
PartnerInfoId int64 `json:"partnerInfoId"`
// 应收分红
Bonus float64 `json:"bonus"`
// 已收分红
BonusHas float64 `json:"bonusHas"`
// 未收分红
BonusNot float64 `json:"bonusNot"`
// 分红支出
... ...
... ... @@ -53,9 +53,9 @@ func (dao *OrderBaseDao) OrderBonusStatics(option domain.OrderBonusQuery) (rsp d
tx := dao.transactionContext.PgTx
q := tx.Model(new(models.OrderBase))
q.ColumnExpr("count(*) count")
q.ColumnExpr("sum(plan_partner_bonus) bonus")
q.ColumnExpr("sum((case when use_order_count>0 then use_partner_bonus else plan_partner_bonus end)) bonus")
q.ColumnExpr("sum(partner_bonus_expense) bonus_expense")
q.ColumnExpr("sum(plan_order_amount) total_order_amount")
q.ColumnExpr("sum((case when use_order_count>0 then use_order_amount else plan_order_amount end)) total_order_amount")
if option.PartnerId > 0 {
q.Where(`"order_base".partner_id =?`, option.PartnerId)
}
... ...
... ... @@ -105,10 +105,14 @@ A left join
(
SELECT partner_id,count(*) total,sum(amount) amount,sum(bonus) bonus,sum(bonus_expense) bonus_expense FROM
(
SELECT partner_id,plan_order_amount amount, plan_partner_bonus bonus,partner_bonus_expense bonus_expense FROM "order_base" AS "order_base"
SELECT partner_id,
(case when use_order_count>0 then use_order_amount else plan_order_amount end) amount,
(case when use_order_count>0 then use_partner_bonus else plan_partner_bonus end) bonus,
partner_bonus_expense bonus_expense FROM "order_base" AS "order_base"
WHERE (partner_id in (?)) and order_type =1
UNION
SELECT partner_info_id partner_id,0 amount, bonus bonus, bonus_expense bonus_expense FROM business_bonus
SELECT partner_info_id partner_id,
0 amount, bonus bonus, bonus_expense bonus_expense FROM business_bonus
WHERE (partner_info_id in (?)) and is_disable=1
) B
GROUP BY partner_id
... ...
... ... @@ -70,9 +70,11 @@ func (svr *PgLoginService) PartnerStaticInfo() (interface{}, error) {
}
var (
OrderDao, _ = dao.NewOrderBaseDao(svr.transactionContext)
BusinessBonusDao, _ = dao.NewBusinessBonusDao(svr.transactionContext)
PartnerCategoryInfoRepository, _ = repository.NewPartnerCategoryInfoRepository(svr.transactionContext)
companyList []*domain.Company
allPartnerCategory []*domain.PartnerCategoryInfo
BusinessBonusRepository, _ = repository.NewBusinessBonusRepository(svr.transactionContext)
)
doGetCompanyIds := func() []int64 {
var companies []int64
... ... @@ -96,7 +98,16 @@ func (svr *PgLoginService) PartnerStaticInfo() (interface{}, error) {
if e != nil {
return nil, e
}
if businessBonus, e := BusinessBonusDao.OrderBonusStatics(domain.OrderBonusQuery{InPartnerIds: doGetPartnerIds(), IsDisable: 1}); e == nil {
totalBonus.Bonus += businessBonus.Bonus
}
_, allPartnerCategory, e = PartnerCategoryInfoRepository.Find(map[string]interface{}{"sortById": domain.ASC})
var mapPartnerBussinessBonus = make(map[int64]*domain.BusinessBonus)
if _, bussinessBonus, e := BusinessBonusRepository.Find(map[string]interface{}{"inPartnerIds": doGetPartnerIds(), "isDisable": 1}); e == nil {
for _, v := range bussinessBonus {
mapPartnerBussinessBonus[v.PartnerInfoId] = v
}
}
if e != nil {
log.Error(e)
return nil, e
... ... @@ -115,18 +126,15 @@ func (svr *PgLoginService) PartnerStaticInfo() (interface{}, error) {
continue
}
bonus, _ := OrderDao.OrderBonusStatics(domain.OrderBonusQuery{PartnerId: partner.Id, OrderType: domain.OrderReal})
if v, ok := mapPartnerBussinessBonus[partner.Id]; ok {
bonus.Bonus += v.Bonus
}
item := &Company{
CompanyBase: newCompanyBase(c),
IncomePercent: computeBonusPercent(totalBonus.Bonus, bonus.Bonus*100),
DividendMoney: utils.Decimal(bonus.Bonus),
JoinWays: svr.GetJoinWays(allPartnerCategory, partner, bonus.Bonus),
}
//当所有公司的总收入都为0时,
//初始总收入=公司数*1
//否则计算的比例始终都为0
if totalBonus.Bonus == 0 {
item.IncomePercent = computeBonusPercent(totalBonus.Bonus+float64(len(companyList)), bonus.Bonus+1) * 100
}
companys = append(companys, item)
}
... ...
... ... @@ -13,6 +13,8 @@ type BusinessBonus struct {
PartnerInfoId int64
// 应收分红
Bonus float64
// 已收分红
BonusHas float64
// 未收分红
BonusNot float64
// 分红支出
... ...
... ... @@ -2,6 +2,7 @@ package repository
import (
"fmt"
"github.com/go-pg/pg/v10"
"gitlab.fjmaimaimai.com/mmm-go/partner/pkg/domain"
"gitlab.fjmaimaimai.com/mmm-go/partner/pkg/infrastructure/pg/models"
"gitlab.fjmaimaimai.com/mmm-go/partner/pkg/infrastructure/pg/transaction"
... ... @@ -66,7 +67,11 @@ func (repository *BusinessBonusRepository) Find(queryOptions map[string]interfac
BusinessBonuss := make([]*domain.BusinessBonus, 0)
query := NewQuery(tx.Model(&BusinessBonusModels), queryOptions).
SetOrder("create_time", "sortByCreateTime").
SetOrder("update_time", "sortByUpdateTime")
SetOrder("update_time", "sortByUpdateTime").
SetWhere("is_disable = ?", "isDisable")
if v, ok := queryOptions["inPartnerIds"]; ok {
query.Where("partner_info_id in (?)", pg.In(v.([]int64)))
}
var err error
if query.AffectRow, err = query.SelectAndCount(); err != nil {
return 0, BusinessBonuss, err
... ...