Parcourir la source

test

tags/v4.3.1
huangjiajun il y a 1 an
Parent
révision
f4d4db304d
14 fichiers modifiés avec 496 ajouts et 43 suppressions
  1. +4
    -0
      db/db.go
  2. +48
    -0
      db/db_capital_pool.go
  3. +57
    -0
      db/db_capital_pool_loss_money.go
  4. +20
    -0
      db/db_mall_ord_capital_pool_total.go
  5. +7
    -0
      db/model/capital_pool_loss_money.go
  6. +17
    -0
      db/model/capital_pool_loss_money_flow.go
  7. +17
    -0
      db/model/mall_ord_capital_pool_total.go
  8. +26
    -0
      db/model/new_capital_pool.go
  9. +20
    -0
      db/model/new_capital_pool_ord.go
  10. +21
    -20
      db/model/plan_reward.go
  11. +10
    -9
      lib/comm_plan/init.go
  12. +232
    -0
      rule/self_buy_global.go
  13. +11
    -9
      svc/get_plan_cfg.go
  14. +6
    -5
      svc/reward_commission.go

+ 4
- 0
db/db.go Voir le fichier

@@ -6,3 +6,7 @@ func QueryNativeString(Db *xorm.Engine, sql string, args ...interface{}) ([]map[
results, err := Db.SQL(sql, args...).QueryString()
return results, err
}
func QueryNativeStringSess(sess *xorm.Session, sql string, args ...interface{}) ([]map[string]string, error) {
results, err := sess.SQL(sql, args...).QueryString()
return results, err
}

+ 48
- 0
db/db_capital_pool.go Voir le fichier

@@ -53,6 +53,28 @@ func UpdateCapitalPool(engine *xorm.Engine, pool *model.CapitalPoolAgent) (int64
session.Commit()
return update, err
}
func InitNewCapitalPool(engine *xorm.Engine) error {
pool := &model.CapitalPoolAgent{
IsUse: 0,
IsAuto: 0,
BonusType: "1",
BonusDateType: 1,
BonusTime: "",
BonusLevelType: 1,
UserLevelGroup: "",
CreateAt: time.Now(),
UpdateAt: time.Now(),
SettleCardinality: "commission",
}
addCapitalPool, err := AddCapitalPool(engine, pool)
if err != nil {
return err
}
if addCapitalPool != 1 {
return errors.New("插入条数有误!")
}
return nil
}

//获取资金池基础设置
func GetCapitalPool(engine *xorm.Engine) (pool model.CapitalPoolAgent, err error) {
@@ -81,3 +103,29 @@ func GetCapitalPool(engine *xorm.Engine) (pool model.CapitalPoolAgent, err error
}
return
}
func GetNewCapitalPool(engine *xorm.Engine) (pool model.NewCapitalPool, err error) {
get, err := engine.Where("1 = 1").Get(&pool)
if err != nil {
return model.NewCapitalPool{}, err
}

if !get {
err := InitNewCapitalPool(engine)
if err != nil {
return model.NewCapitalPool{}, err
}
capitalPool, err := GetNewCapitalPool(engine)
if err != nil {
return model.NewCapitalPool{}, err
}
if capitalPool.SettleCardinality == "" {
capitalPool.SettleCardinality = "commission"
}
return capitalPool, err
} else {
if pool.SettleCardinality == "" {
pool.SettleCardinality = "commission"
}
}
return
}

+ 57
- 0
db/db_capital_pool_loss_money.go Voir le fichier

@@ -0,0 +1,57 @@
package db

import (
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/db/model"
zhios_order_relate_utils "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/utils"
"errors"
"time"
"xorm.io/xorm"
)

func InsertCapitalPoolLossMoney(sess *xorm.Session, uid, money, title, types, formType string) error {
if zhios_order_relate_utils.StrToFloat64(money) <= 0 {
return nil
}
moneyData, err := GetCapitalPoolLossMoney(sess, uid)
if err != nil {
return err
}
if moneyData == nil {
return errors.New("查不到损失记录")
}
beforeMoney := moneyData.Money
moneyData.Money = zhios_order_relate_utils.Float64ToStrByPrec(zhios_order_relate_utils.StrToFloat64(beforeMoney)+zhios_order_relate_utils.StrToFloat64(money), 3)
afterMoney := moneyData.Money
update, err := sess.Where("uid=?", uid).Update(moneyData)
if update == 0 || err != nil {
return errors.New("失败")
}
var flow = &model.CapitalPoolLossMoneyFlow{
Uid: zhios_order_relate_utils.StrToInt(uid),
Money: money,
Time: time.Now(),
BeforeMoney: beforeMoney,
AfterMoney: afterMoney,
Type: zhios_order_relate_utils.StrToInt(types),
FormType: formType,
Title: title,
}
insert, err := sess.Insert(flow)
if insert == 0 || err != nil {
return errors.New("失败")
}
return nil
}
func GetCapitalPoolLossMoney(sess *xorm.Session, uid string) (*model.CapitalPoolLossMoney, error) {
var data model.CapitalPoolLossMoney
get, err := sess.Where("uid=?", uid).Get(&data)
if err != nil {
return nil, err
}
if get == false {
data = model.CapitalPoolLossMoney{Uid: zhios_order_relate_utils.StrToInt(uid)}
sess.Insert(&data)
}
return &data, nil

}

+ 20
- 0
db/db_mall_ord_capital_pool_total.go Voir le fichier

@@ -0,0 +1,20 @@
package db

import (
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/db/model"
zhios_order_relate_utils "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/utils"
"xorm.io/xorm"
)

func GetMaxPrice(eg *xorm.Engine, uid string) *model.MallOrdCapitalPoolTotal {
var data model.MallOrdCapitalPoolTotal
get, err := eg.Where("uid=? and type=?", uid, 0).Get(&data)
if err != nil {
return nil
}
if get == false {
data = model.MallOrdCapitalPoolTotal{Uid: zhios_order_relate_utils.StrToInt(uid)}
eg.Insert(&data)
}
return &data
}

+ 7
- 0
db/model/capital_pool_loss_money.go Voir le fichier

@@ -0,0 +1,7 @@
package model

type CapitalPoolLossMoney struct {
Id int `json:"id" xorm:"not null pk autoincr INT(11)"`
Uid int `json:"uid" xorm:"default 0 INT(11)"`
Money string `json:"money" xorm:"default 0.0000 DECIMAL(20,4)"`
}

+ 17
- 0
db/model/capital_pool_loss_money_flow.go Voir le fichier

@@ -0,0 +1,17 @@
package model

import (
"time"
)

type CapitalPoolLossMoneyFlow struct {
Id int `json:"id" xorm:"not null pk autoincr INT(11)"`
Uid int `json:"uid" xorm:"default 0 INT(11)"`
Money string `json:"money" xorm:"default 0.0000 DECIMAL(20,4)"`
Time time.Time `json:"time" xorm:"DATETIME"`
BeforeMoney string `json:"before_money" xorm:"DECIMAL(20,4)"`
AfterMoney string `json:"after_money" xorm:"DECIMAL(20,4)"`
Type int `json:"type" xorm:"default 0 INT(1)"`
FormType string `json:"form_type" xorm:"VARCHAR(255)"`
Title string `json:"title" xorm:"VARCHAR(255)"`
}

+ 17
- 0
db/model/mall_ord_capital_pool_total.go Voir le fichier

@@ -0,0 +1,17 @@
package model

import (
"time"
)

type MallOrdCapitalPoolTotal struct {
Id int `json:"id" xorm:"not null pk INT(11)"`
Uid int `json:"uid" xorm:"default 0 INT(11)"`
Price string `json:"price" xorm:"default 0.0000 DECIMAL(20,4)"`
LeavePrice string `json:"leave_price" xorm:"default 0.0000 DECIMAL(20,4)"`
Num int `json:"num" xorm:"default 0 INT(11)"`
UpdateTime time.Time `json:"update_time" xorm:"DATETIME"`
Oid string `json:"oid" xorm:"VARCHAR(255)"`
Type int `json:"type" xorm:"INT(11) DEFAULT 0"`
OtherPrice string `json:"other_price" xorm:"default 0.0000 DECIMAL(20,4)"`
}

+ 26
- 0
db/model/new_capital_pool.go Voir le fichier

@@ -0,0 +1,26 @@
package model

import (
"time"
)

type NewCapitalPool struct {
Id int `json:"id" xorm:"not null pk autoincr comment('主键id') INT(11)"`
IsUse int `json:"is_use" xorm:"not null comment('是否开启(否:0;是:1)') TINYINT(1)"`
IsAuto int `json:"is_auto" xorm:"not null default 0 comment('是否自动分红(否:0;是:1)') TINYINT(1)"`
BonusType string `json:"bonus_type" xorm:"not null default '0' comment('分红类型(1佣金,2积分,3区块币)多个以逗号隔开') VARCHAR(255)"`
BonusDateType int `json:"bonus_date_type" xorm:"not null default 0 comment('日期类型(1每天,2固定时间)') TINYINT(1)"`
BonusTime string `json:"bonus_time" xorm:"default '0' comment('分红日期(1,15,30)多个日期已逗号分隔开;ps 只有日期类型是2才是有数据') VARCHAR(255)"`
BonusLevelType int `json:"bonus_level_type" xorm:"not null default 0 comment('用户等级分红类型(1,指定等级,2大于或等于指定等级)') TINYINT(1)"`
UserLevelGroup string `json:"user_level_group" xorm:"not null comment('指定用户等级组json') TEXT"`
UserGroup string `json:"user_group" xorm:"not null comment('指定用户组json') LONGTEXT"`
OpenSecurities int `json:"open_securities" xorm:"not null comment('是否开启分红劵功能') TINYINT(1)"`
SecuritiesId string `json:"securities_id" xorm:"not null default '' comment('虚拟币id') VARCHAR(255)"`
ExchangeSecuritiesId string `json:"exchange_securities_id" xorm:"comment('兑换分红券虚拟币id') VARCHAR(255)"`
ExchangeRate string `json:"exchange_rate" xorm:"comment('兑换比例,固定为x:1') VARCHAR(255)"`
UserLevelLimit string `json:"user_level_limit" xorm:"comment('用户等级限制组json') TEXT"`
CreateAt time.Time `json:"create_at" xorm:"not null default 'CURRENT_TIMESTAMP' comment('创建时间') TIMESTAMP"`
UpdateAt time.Time `json:"update_at" xorm:"default 'CURRENT_TIMESTAMP' comment('更新时间') TIMESTAMP"`
SettleCardinality string `json:"settle_cardinality" xorm:"comment('基数') VARCHAR(255)"`
QuantityAllocation int `json:"quantity_allocation" xorm:"not null comment('数量分配 0按人数 1按份数') TINYINT(1)"`
}

+ 20
- 0
db/model/new_capital_pool_ord.go Voir le fichier

@@ -0,0 +1,20 @@
package model

import (
"time"
)

type NewCapitalPoolOrd struct {
Id int `json:"id" xorm:"not null pk autoincr comment('主键id') INT(11)"`
Uid int `json:"uid" xorm:"not null comment('用户id') INT(11)"`
Pvd string `json:"pvd" xorm:"not null comment('订单渠道:自营,导购,o2o。。。。') VARCHAR(255)"`
OrdId int64 `json:"ord_id" xorm:"not null default 0 comment('订单id') BIGINT(20)"`
Commission string `json:"commission" xorm:"not null comment('订单总佣金') DECIMAL(12,6)"`
Price string `json:"price" xorm:"not null comment('付款金额') DECIMAL(12,6)"`
CommissionType string `json:"commission_type" xorm:"not null default '0' comment('佣金类型(CNY,虚拟币1Id,虚拟币2Id)') VARCHAR(100)"`
CapitalPoolRate string `json:"capital_pool_rate" xorm:"not null comment('资金池存入比例') DECIMAL(6,4)"`
DepositValue string `json:"deposit_value" xorm:"not null comment('存入金额') DECIMAL(12,6)"`
CreateAt time.Time `json:"create_at" xorm:"not null default 'CURRENT_TIMESTAMP' comment('创建时间') TIMESTAMP"`
UpdateAt time.Time `json:"update_at" xorm:"default 'CURRENT_TIMESTAMP' comment('更新时间') TIMESTAMP"`
SettleCardinality string `json:"settle_cardinality" xorm:"comment('基数') VARCHAR(255)"`
}

+ 21
- 20
db/model/plan_reward.go Voir le fichier

@@ -1,24 +1,25 @@
package model

type PlanReward struct {
Id int `json:"id" xorm:"not null pk autoincr INT(10)"`
Pvd string `json:"pvd" xorm:"not null comment('供应商') unique VARCHAR(255)"`
PvdRate float32 `json:"pvd_rate" xorm:"not null default 0.0000 comment('供应商抽成比例') FLOAT(6,4)"`
SysRate float32 `json:"sys_rate" xorm:"not null default 0.0000 comment('平台抽成比例') FLOAT(6,4)"`
RegionRate float32 `json:"region_rate" xorm:"not null default 0.0000 comment('区域代理抽成比例') FLOAT(6,4)"`
RegionSubRate float32 `json:"region_sub_rate" xorm:"not null default 0.0000 comment('区域代理抽成比例') FLOAT(6,4)"`
GlobalRate float32 `json:"global_rate" xorm:"not null default 0.0000 comment('全球分红抽成比例') FLOAT(6,4)"`
SettleMode int `json:"settle_mode" xorm:"not null default 1 comment('0.手动方案,1.自动方案') TINYINT(1)"`
PlanCommissionId int `json:"plan_commission_id" xorm:"not null default 0 comment('佣金方案0未设置,>0对应方案') TINYINT(3)"`
PlanSettleId int `json:"plan_settle_id" xorm:"not null default 0 comment('结算方案0未设置,>0对应方案') TINYINT(3)"`
State int `json:"state" xorm:"not null default 1 comment('0关闭,1开启') TINYINT(1)"`
SubsidyRate float32 `json:"subsidy_rate" xorm:"not null default 0.0000 comment('待删除字段') FLOAT(6,4)"`
Source int `json:"source" xorm:"not null default 1 comment('佣金来源:1联盟佣金 2补贴金额') TINYINT(1)"`
AppType int `json:"app_type" xorm:"not null default 1 comment('所属应用:1导购 2自营 4O2O') TINYINT(3)"`
MerchantRate float32 `json:"merchant_rate" xorm:"not null default 0.0000 comment('o2o商家抽成比例') FLOAT(6,4)"`
NewAgentRate float32 `json:"new_agent_rate" xorm:"not null default 0.0000 comment('') FLOAT(6,4)"`
PushHandRate float32 `json:"push_hand_rate" xorm:"not null default 0.0000 comment('o2o推手抽成比例') FLOAT(6,4)"`
OrderBeforeRate float32 `json:"order_before_rate" xorm:"not null default 0.0000 comment('下单前的联盟抽成') FLOAT(6,4)"`
IntegralOpen int `json:"integral_open" xorm:"not null default 0 comment('积分抽成') TINYINT(1)"`
PointType int `json:"point_type" xorm:"not null default 0 comment('') TINYINT(1)"`
Id int `json:"id" xorm:"not null pk autoincr INT(10)"`
Pvd string `json:"pvd" xorm:"not null comment('供应商') unique VARCHAR(255)"`
PvdRate float32 `json:"pvd_rate" xorm:"not null default 0.0000 comment('供应商抽成比例') FLOAT(6,4)"`
SysRate float32 `json:"sys_rate" xorm:"not null default 0.0000 comment('平台抽成比例') FLOAT(6,4)"`
RegionRate float32 `json:"region_rate" xorm:"not null default 0.0000 comment('区域代理抽成比例') FLOAT(6,4)"`
RegionSubRate float32 `json:"region_sub_rate" xorm:"not null default 0.0000 comment('区域代理抽成比例') FLOAT(6,4)"`
GlobalRate float32 `json:"global_rate" xorm:"not null default 0.0000 comment('全球分红抽成比例') FLOAT(6,4)"`
SelfBuyGlobalRate float64 `json:"self_buy_global_rate" xorm:"not null default 0.0000 comment('全球分红抽成比例') FLOAT(6,4)"`
SettleMode int `json:"settle_mode" xorm:"not null default 1 comment('0.手动方案,1.自动方案') TINYINT(1)"`
PlanCommissionId int `json:"plan_commission_id" xorm:"not null default 0 comment('佣金方案0未设置,>0对应方案') TINYINT(3)"`
PlanSettleId int `json:"plan_settle_id" xorm:"not null default 0 comment('结算方案0未设置,>0对应方案') TINYINT(3)"`
State int `json:"state" xorm:"not null default 1 comment('0关闭,1开启') TINYINT(1)"`
SubsidyRate float32 `json:"subsidy_rate" xorm:"not null default 0.0000 comment('待删除字段') FLOAT(6,4)"`
Source int `json:"source" xorm:"not null default 1 comment('佣金来源:1联盟佣金 2补贴金额') TINYINT(1)"`
AppType int `json:"app_type" xorm:"not null default 1 comment('所属应用:1导购 2自营 4O2O') TINYINT(3)"`
MerchantRate float32 `json:"merchant_rate" xorm:"not null default 0.0000 comment('o2o商家抽成比例') FLOAT(6,4)"`
NewAgentRate float32 `json:"new_agent_rate" xorm:"not null default 0.0000 comment('') FLOAT(6,4)"`
PushHandRate float32 `json:"push_hand_rate" xorm:"not null default 0.0000 comment('o2o推手抽成比例') FLOAT(6,4)"`
OrderBeforeRate float32 `json:"order_before_rate" xorm:"not null default 0.0000 comment('下单前的联盟抽成') FLOAT(6,4)"`
IntegralOpen int `json:"integral_open" xorm:"not null default 0 comment('积分抽成') TINYINT(1)"`
PointType int `json:"point_type" xorm:"not null default 0 comment('') TINYINT(1)"`
}

+ 10
- 9
lib/comm_plan/init.go Voir le fichier

@@ -29,15 +29,16 @@ type PlanOpt struct {
CommissionMode string // 佣金返佣方式
//IntegralMode string // 积分返佣方式
//BlockIconsMode string // 区块币返佣方式
SysRate float64 // 系统占佣比例
PvdRate float64 // 供应商占佣比例
RegionRate float64 // 区域代理占佣比例
RegionSubRate float64 // 区域代理占佣比例
GlobalRate float64 // 全球分红占佣比例
MerchantRate float64 //商家占佣比例
NewAgentRate float64 //代理分红占佣比例
OrderBeforeRate float64
PushHandRate float64 //推手占佣比例
SysRate float64 // 系统占佣比例
PvdRate float64 // 供应商占佣比例
RegionRate float64 // 区域代理占佣比例
RegionSubRate float64 // 区域代理占佣比例
GlobalRate float64 // 全球分红占佣比例
SelfBuyGlobalRate float64
MerchantRate float64 //商家占佣比例
NewAgentRate float64 //代理分红占佣比例
OrderBeforeRate float64
PushHandRate float64 //推手占佣比例
//IntegralBili float64 // 积分兑换比例
//BlockIconsBili float64 // 区块币兑换比例
UserRate map[int]*LvGrade // 供应商对应的等级比例


+ 232
- 0
rule/self_buy_global.go Voir le fichier

@@ -0,0 +1,232 @@
package rule

import (
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/db"
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/db/model"
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/md"
zhios_order_relate_utils "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/utils"
"errors"
"github.com/jinzhu/copier"
"time"
"xorm.io/xorm"
)

func AddOrder(eg *xorm.Engine, req map[string]string) {
max := db.GetMaxPrice(eg, req["uid"])
if req["type"] == "mall_goods_user_lv" {
for i := 0; i < zhios_order_relate_utils.StrToInt(req["num"]); i++ {
var data = &model.MallOrdCapitalPoolTotal{
Uid: zhios_order_relate_utils.StrToInt(req["uid"]),
Price: req["price"],
LeavePrice: req["price"],
Num: 1,
UpdateTime: time.Now(),
Oid: req["oid"],
Type: 1,
}
eg.Insert(data)
}
} else {
if max != nil {
max.LeavePrice = zhios_order_relate_utils.Float64ToStrByPrec(zhios_order_relate_utils.StrToFloat64(max.LeavePrice)+zhios_order_relate_utils.StrToFloat64(req["price"]), 3)
max.OtherPrice = zhios_order_relate_utils.Float64ToStrByPrec(zhios_order_relate_utils.StrToFloat64(max.OtherPrice)+zhios_order_relate_utils.StrToFloat64(req["price"]), 3)
max.UpdateTime = time.Now()
eg.Where("id=?", max.Id, max)
}
}
}

func Pool(eg *xorm.Engine, price string) {
if zhios_order_relate_utils.StrToFloat64(price) == 0 {
return
}
session := eg.NewSession()
defer session.Close()
err := session.Begin()
if err != nil {
session.Rollback()
return
}
//统计数量
//礼包的
sql := `SELECT SUM(sum) as sum,uid FROM mall_ord_capital_pool_total WHERE leave_price>0 and type=1 GROUP BY uid;`
nativeString, err := db.QueryNativeStringSess(session, sql)
if err != nil {
return
}
sqlFirst := `SELECT uid FROM mall_ord_capital_pool_total WHERE type=0 GROUP BY uid;`
nativeStringFirst, errFirst := db.QueryNativeStringSess(session, sqlFirst)
if errFirst != nil {
return
}
sum := 0
ids := make([]string, 0)
newIds := make([]string, 0)
//礼包的算份数
for _, v := range nativeString {
sum += zhios_order_relate_utils.StrToInt(v["sum"])
ids = append(ids, v["uid"])
}
//非礼包的 站位
for _, v := range nativeStringFirst {
if zhios_order_relate_utils.InArr(v["uid"], ids) == false || len(ids) == 0 {
sum += 1
newIds = append(newIds, v["uid"])
}
}
oneMoney := zhios_order_relate_utils.StrToFloat64(price) / float64(sum)
//金额小的先扣 扣不完 给下一个
var userMap = make(map[string]float64)
for _, v := range ids {
//读取用户的记录
var leave float64 = 0
var data []model.MallOrdCapitalPoolTotal
err := eg.Where("uid=? and type=? and leave_price>?", v, 1, 0).Find(&data)
if err != nil {
session.Rollback()
return
}
for _, v1 := range data {
leave, err = OneDoing(session, v1, oneMoney, leave)
if err != nil {
session.Rollback()
return
}
}
//这里判断下有没有初始记录有金额 如果没有的话就进入损失金额
if leave > 0 {
var oneData model.MallOrdCapitalPoolTotal
has, err := session.Where("uid=? and type=? ", v, 0).Get(&oneData)
if err != nil {
session.Rollback()
return
}
if has {
//先扣除 剩下的进损失
if zhios_order_relate_utils.StrToFloat64(oneData.LeavePrice)-leave < 0 {
leave = leave - zhios_order_relate_utils.StrToFloat64(oneData.LeavePrice)
oneData.LeavePrice = "0"
} else {
oneData.LeavePrice = zhios_order_relate_utils.Float64ToStrByPrec(zhios_order_relate_utils.StrToFloat64(oneData.LeavePrice)-leave, 2)
leave = 0
}
update, err := session.Where("id=?", oneData.Id).Cols("leave_price").Update(&oneData)
if update == 0 || err != nil {
session.Rollback()
return
}
}
//剩下的进损失
err = db.InsertCapitalPoolLossMoney(session, v, zhios_order_relate_utils.Float64ToStrByPrec(leave, 3), "分红损失", "0", "capital_pool")
if err != nil {
session.Rollback()
return
}

leave = 0
}
userMap[v] = leave
}
for _, v := range nativeStringFirst {
var leave float64 = 0
money, ok := userMap[v["uid"]]
if ok {
leave = money
}
if zhios_order_relate_utils.InArr(v["uid"], ids) == false || len(ids) == 0 {
var oneData model.MallOrdCapitalPoolTotal
_, err := session.Where("uid=? and type=? ", v["uid"], 0).Get(&oneData)
if err != nil {
session.Rollback()
return
}
//这里还能分
leave, err = OneDoing(session, oneData, oneMoney, leave)
if err != nil {
session.Rollback()
return
}
} else {
//这里只需要判断要不要扣 多出的进入损失金额
if leave > 0 {
var oneData model.MallOrdCapitalPoolTotal
has, err := session.Where("uid=? and type=? ", v, 0).Get(&oneData)
if err != nil {
session.Rollback()
return
}
if has {
//先扣除 剩下的进损失
if zhios_order_relate_utils.StrToFloat64(oneData.LeavePrice)-leave < 0 {
leave = leave - zhios_order_relate_utils.StrToFloat64(oneData.LeavePrice)
oneData.LeavePrice = "0"
} else {
leave = 0
oneData.LeavePrice = zhios_order_relate_utils.Float64ToStrByPrec(zhios_order_relate_utils.StrToFloat64(oneData.LeavePrice)-leave, 2)
}
update, err := session.Where("id=?", oneData.Id).Cols("leave_price").Update(&oneData)
if update == 0 || err != nil {
session.Rollback()
return
}
}
}

}
if leave > 0 {
//剩下的进损失
err = db.InsertCapitalPoolLossMoney(session, v["uid"], zhios_order_relate_utils.Float64ToStrByPrec(leave, 3), "分红损失", "0", "capital_pool")
if err != nil {
session.Rollback()
return
}
}
}
}
func OneDoing(sess *xorm.Session, data model.MallOrdCapitalPoolTotal, oneMoney, leave float64) (float64, error) {
money := oneMoney + leave
if zhios_order_relate_utils.StrToFloat64(data.LeavePrice)-money < 0 {
money = zhios_order_relate_utils.StrToFloat64(data.LeavePrice)
leave = money - zhios_order_relate_utils.StrToFloat64(data.LeavePrice)
data.LeavePrice = "0"
} else {
leave = 0
data.LeavePrice = zhios_order_relate_utils.Float64ToStrByPrec(zhios_order_relate_utils.StrToFloat64(data.LeavePrice)-money, 2)
}
update, err := sess.Where("id=?", data.Id).Cols("leave_price").Update(&data)
if update == 0 || err != nil {
return leave, errors.New("失败")
}
return leave, nil
}

func AddBonusOrd(engine *xorm.Engine, t *md.BonusOrdParam) error {

//获取分红基础设置
pool, err := db.GetNewCapitalPool(engine)
if err != nil || pool.Id == 0 {
return errors.New("分红设置有误")
}
if pool.IsUse == 0 {
return errors.New("功能没有开始使用,插入分红失败")
}
var capitalPoolOrd model.NewCapitalPoolOrd
copier.Copy(&capitalPoolOrd, &t)
capitalPoolOrd.Uid = zhios_order_relate_utils.StrToInt(t.Uid)
capitalPoolOrd.OrdId = zhios_order_relate_utils.AnyToInt64(t.OrdId)
capitalPoolOrd.CreateAt = time.Now()
capitalPoolOrd.UpdateAt = time.Now()
capitalPoolOrd.SettleCardinality = pool.SettleCardinality
if pool.SettleCardinality == "price" { //价格为基数
capitalPoolOrd.DepositValue = t.PriceValue
capitalPoolOrd.Commission = t.PriceValue
}
one, err := engine.InsertOne(&capitalPoolOrd)
if err != nil || one == 0 {
if err == nil {
err = errors.New("插入数据有误!")
}
return err
}
return nil
}

+ 11
- 9
svc/get_plan_cfg.go Voir le fichier

@@ -75,6 +75,7 @@ func GetPlanCfg(eg *xorm.Engine, pvd, masterId string, rewardOpts map[string]*mo
opt.RegionRate = float64(int64(rewardOpt.RegionRate*1e4)) / 1e4
opt.RegionSubRate = float64(int64(rewardOpt.RegionSubRate*1e4)) / 1e4
opt.GlobalRate = float64(int64(rewardOpt.GlobalRate*1e4)) / 1e4
opt.SelfBuyGlobalRate = float64(int64(rewardOpt.SelfBuyGlobalRate*1e4)) / 1e4
opt.PushHandRate = float64(int64(rewardOpt.PushHandRate*1e4)) / 1e4
opt.MerchantRate = float64(int64(rewardOpt.MerchantRate*1e4)) / 1e4
opt.NewAgentRate = float64(int64(rewardOpt.NewAgentRate*1e4)) / 1e4
@@ -199,15 +200,16 @@ func PlanOpts(eg *xorm.Engine) map[string]*comm_plan.PlanOpt {
continue
}
opts[v.Pvd] = &comm_plan.PlanOpt{
Pvd: v.Pvd,
PlanCommissionId: v.PlanCommissionId,
Mode: commissionPlans[v.PlanCommissionId].Mode,
CommissionMode: commissionPlans[v.PlanCommissionId].CommissionMode,
SysRate: float64(v.SysRate),
PvdRate: float64(v.PvdRate),
RegionRate: float64(v.RegionRate),
GlobalRate: float64(v.GlobalRate),
UserRate: subsidyTmp,
Pvd: v.Pvd,
PlanCommissionId: v.PlanCommissionId,
Mode: commissionPlans[v.PlanCommissionId].Mode,
CommissionMode: commissionPlans[v.PlanCommissionId].CommissionMode,
SysRate: float64(v.SysRate),
PvdRate: float64(v.PvdRate),
RegionRate: float64(v.RegionRate),
GlobalRate: float64(v.GlobalRate),
SelfBuyGlobalRate: v.SelfBuyGlobalRate,
UserRate: subsidyTmp,
}

}


+ 6
- 5
svc/reward_commission.go Voir le fichier

@@ -487,17 +487,18 @@ func CommFee(fee float64, opt *comm_plan.PlanOpt, types, isGoods string) (float6
fee = float64(int64(float64(fee1)/100)) / 100
}
}
pvdFee := fee * opt.PvdRate // 供应商联盟比例
sysFee := fee * opt.SysRate // 平台比例
regionFee := fee * opt.RegionRate // 区域代理比例
globalFee := fee * opt.GlobalRate // 全球分红比例
pvdFee := fee * opt.PvdRate // 供应商联盟比例
sysFee := fee * opt.SysRate // 平台比例
regionFee := fee * opt.RegionRate // 区域代理比例
globalFee := fee * opt.GlobalRate // 全球分红比例
selfBuyGlobalFee := fee * opt.SelfBuyGlobalRate // 全球分红比例
pushHandFee := fee * opt.PushHandRate
merchantFee := fee * opt.MerchantRate
newAgentFee := fee * opt.NewAgentRate
regionSubFee := fee * opt.RegionSubRate

// 剩余可分配的佣金
total := int64(fee*1e4) - int64(pvdFee*1e4) - int64(sysFee*1e4) - int64(regionFee*1e4) - int64(regionSubFee*1e4) - int64(globalFee*1e4) - int64(pushHandFee*1e4) - int64(merchantFee*1e4) - int64(newAgentFee*1e4)
total := int64(fee*1e4) - int64(pvdFee*1e4) - int64(sysFee*1e4) - int64(regionFee*1e4) - int64(regionSubFee*1e4) - int64(globalFee*1e4) - int64(selfBuyGlobalFee*1e4) - int64(pushHandFee*1e4) - int64(merchantFee*1e4) - int64(newAgentFee*1e4)

fee = float64(total) / 1e4
if fee < 0 {


Chargement…
Annuler
Enregistrer