@@ -3,16 +3,17 @@ package comm_plan | |||||
import "xorm.io/xorm" | import "xorm.io/xorm" | ||||
var Fn = map[string]func(opt *PlanOpt, totalAmt, integralTotalAmt float64, userList *LvUser, pvd string, sysFee float64, integralSysFee float64, level, levelWeight int, eg *xorm.Engine) error{ | var Fn = map[string]func(opt *PlanOpt, totalAmt, integralTotalAmt float64, userList *LvUser, pvd string, sysFee float64, integralSysFee float64, level, levelWeight int, eg *xorm.Engine) error{ | ||||
"lv_all": CalcAll, | |||||
"niubei_commission": NiuBeiCalcAll, | |||||
"niubei_amount": NiuBeiCalcAll, | |||||
"lv_self": CalcSelf, | |||||
"lv_subsidy": CalcAll, | |||||
"lv_price": CalcAll, | |||||
"lv_winery": CalcWinery, | |||||
"lv_winery_adv": CalcAdv, | |||||
"lv_price_other": CalcOther, | |||||
"lv_ds_check": CalcDsCheck, | |||||
"lv_all": CalcAll, | |||||
"niubei_commission": NiuBeiCalcAll, | |||||
"niubei_amount": NiuBeiCalcAll, | |||||
"lv_self": CalcSelf, | |||||
"lv_subsidy": CalcAll, | |||||
"lv_price": CalcAll, | |||||
"lv_price_public_platoon": CalcAll, | |||||
"lv_winery": CalcWinery, | |||||
"lv_winery_adv": CalcAdv, | |||||
"lv_price_other": CalcOther, | |||||
"lv_ds_check": CalcDsCheck, | |||||
} | } | ||||
type NiuBeiIntegralReleaseO2oRatio struct { | type NiuBeiIntegralReleaseO2oRatio struct { | ||||
@@ -83,9 +84,49 @@ type LvGrade struct { | |||||
SubsidyOwnBiliList []map[string]string `json:"subsidy_own_bili_list"` | SubsidyOwnBiliList []map[string]string `json:"subsidy_own_bili_list"` | ||||
TikTokTeamSubsidyOwnBiliType []string `json:"tik_tok_team_subsidy_own_bili_type"` //分销 返利类型 | TikTokTeamSubsidyOwnBiliType []string `json:"tik_tok_team_subsidy_own_bili_type"` //分销 返利类型 | ||||
TikTokTeamSubsidyList []map[string]string `json:"tik_tok_team_subsidy_list"` | TikTokTeamSubsidyList []map[string]string `json:"tik_tok_team_subsidy_list"` | ||||
ToExtendList map[string]string `json:"to_extend_list"` // | |||||
ToExtendList map[string]string `json:"to_extend_list"` // | |||||
CommonWealthSystem map[string]string `json:"common_wealth_system"` //共富制度比例 | |||||
} | } | ||||
type LvGradePricePublic struct { | |||||
Lv int `json:"lv"` // 级别 | |||||
SubsidyMode int `json:"subsidy_mode"` // 补贴计算方式, 0按佣金计算,1按平台利润计算 | |||||
SubsidyEnable int `json:"subsidy_enable"` // 是否开启补贴计算方式 0关闭, 1开启 | |||||
TikTokTeamSubsidyEnable int `json:"tik_tok_team_subsidy_enable"` // 是否开启补贴计算方式 0关闭, 1开启 | |||||
SubsidySelfRate float64 `json:"subsidy_self_rate"` // 自购补贴比例 | |||||
SubsidyShareRate float64 `json:"subsidy_share_rate"` // 分享补贴比例 | |||||
PayMode int `json:"pay_mode"` // 0团队内部支出, 1平台系统支出 | |||||
SelfRate float64 `json:"self_rate"` // 自购比例 | |||||
TeamRate float64 `json:"team_rate"` // 团队分成比例 | |||||
PeerRate []float64 `json:"peer_rate"` // 同级分成比例 | |||||
UserLvUpSubsidyEnable int `json:"user_lv_up_subsidy_enable"` //分销补贴开关 | |||||
UserLvUpSubsidyMode int `json:"user_lv_up_subsidy_mode"` //补贴方式 0比例 1固定金额 | |||||
UserSubsidyType string `json:"user_subsidy_type"` // 补贴模式 up_lv 推荐会员补贴 buy_goods 购买商品 | |||||
UserSubsidyBaseCoinId string `json:"user_subsidy_base_coin_id"` // 补贴计算基数 | |||||
UserLvUpSubsidyList []interface{} `json:"user_lv_up_subsidy_list"` //会员费分销补贴相应方式的列表 | |||||
PeerRateList []map[string]string `json:"peer_rate_list"` //同级比例 | |||||
NewPeerList []map[string]string `json:"new_peer_list"` //同级比例 | |||||
BuyDeliverList map[string]string `json:"buy_deliver_list"` //酒庄制度 | |||||
ReturnType []string `json:"return_type"` //返利类型 | |||||
SelfRateList map[string]string `json:"self_rate_list"` // 自购比例 | |||||
TeamRateList map[string]string `json:"team_rate_list"` // 团队最高比例 | |||||
NewTeamList map[string]string `json:"new_team_list"` // 新团队比例 | |||||
NewExtendList map[string]string `json:"new_extend_list"` // 直推比例 | |||||
SecondExtendList map[string]string `json:"second_extend_list"` // 直推比例 | |||||
ToTeamList map[string]string `json:"to_team_list"` // 直推比例 | |||||
SameUserCount string `json:"same_user_count"` | |||||
SameExtend []map[string]string `json:"same_extend"` | |||||
SubsidyModeList map[string]interface{} `json:"subsidy_mode_list"` // 各币种返佣模式:bili:比例 money:固定金额 | |||||
//SubsidyBlockIconsMode string `json:"subsidy_block_icons_mode"` //分销 区块币返利类型 bili 比例 money 固定金额 | |||||
//SubsidyCommissionMode string `json:"subsidy_commission_mode"` //分销 佣金返利类型 bili 比例 money 固定金额 | |||||
//SubsidyIntegralMode string `json:"subsidy_integral_mode"` //分销 积分返利类型 bili 比例 money 固定金额 | |||||
SubsidyReturnType []string `json:"subsidy_return_type"` //分销 返利类型 | |||||
SubsidyOwnBiliList []map[string]string `json:"subsidy_own_bili_list"` | |||||
TikTokTeamSubsidyOwnBiliType []string `json:"tik_tok_team_subsidy_own_bili_type"` //分销 返利类型 | |||||
TikTokTeamSubsidyList []map[string]string `json:"tik_tok_team_subsidy_list"` | |||||
ToExtendList map[string]string `json:"to_extend_list"` // | |||||
CommonWealthSystem map[string]string `json:"common_wealth_system"` //共富制度比例 | |||||
} | |||||
type LvGradeWineryAdv struct { | type LvGradeWineryAdv struct { | ||||
Lv int `json:"lv"` // 级别 | Lv int `json:"lv"` // 级别 | ||||
PayMode int `json:"pay_mode"` // 0团队内部支出, 1平台系统支出 | PayMode int `json:"pay_mode"` // 0团队内部支出, 1平台系统支出 | ||||
@@ -176,21 +217,17 @@ type SettleCommissionToRelationList struct { | |||||
Name string `json:"name"` | Name string `json:"name"` | ||||
} | } | ||||
type LvUser struct { | type LvUser struct { | ||||
FirstFee float64 | |||||
IntegralFirstFee float64 | |||||
ProfitBili float64 | |||||
Uid int // 用户ID | |||||
Lv int // 等级 | |||||
NewLv int // 升级后等级 针对会员费分佣 | |||||
LevelWeight int // 权重 | |||||
Profit float64 // 利润(金额) | |||||
SubsidyFee float64 // 补贴(金额) | |||||
MinLevel int | |||||
IsFreeze int | |||||
//IntegralProfit float64 // 积分利润 | |||||
//IntegralSubsidyFee float64 // 积分补贴 | |||||
//BlockIconsProfit float64 // 区块币利润 | |||||
//BlockIconsSubsidyFee float64 // 区块币补贴 | |||||
FirstFee float64 | |||||
IntegralFirstFee float64 | |||||
ProfitBili float64 | |||||
Uid int // 用户ID | |||||
Lv int // 等级 | |||||
NewLv int // 升级后等级 针对会员费分佣 | |||||
LevelWeight int // 权重 | |||||
Profit float64 // 利润(金额) | |||||
SubsidyFee float64 // 补贴(金额) | |||||
MinLevel int | |||||
IsFreeze int | |||||
MinProfit float64 // 利润(金额) | MinProfit float64 // 利润(金额) | ||||
MinProfitList []*VirtualCoinCommission // 各币种对用的数量 | MinProfitList []*VirtualCoinCommission // 各币种对用的数量 | ||||
ProfitList []*VirtualCoinCommission // 各币种对用的数量 | ProfitList []*VirtualCoinCommission // 各币种对用的数量 | ||||
@@ -203,7 +240,7 @@ type LvUser struct { | |||||
ParentUser *LvUser // 父用户 | ParentUser *LvUser // 父用户 | ||||
LastProfit float64 | LastProfit float64 | ||||
LastProfitList []*VirtualCoinCommission // 各币种对用的数量 | LastProfitList []*VirtualCoinCommission // 各币种对用的数量 | ||||
ExtendType int | |||||
} | } | ||||
// 虚拟币分佣结构体 | // 虚拟币分佣结构体 | ||||
@@ -106,6 +106,7 @@ func GetPlanCfg(eg *xorm.Engine, pvd, masterId string, rewardOpts map[string]*mo | |||||
var subsidyTmp map[int]*comm_plan.LvGrade | var subsidyTmp map[int]*comm_plan.LvGrade | ||||
var subsidyTmpDs map[int]*comm_plan.LvGradeDs | var subsidyTmpDs map[int]*comm_plan.LvGradeDs | ||||
var subsidyTmpPricePublic map[int]*comm_plan.LvGradePricePublic | |||||
var subsidyTmpWineryAdv map[int]*comm_plan.LvGradeWineryAdv | var subsidyTmpWineryAdv map[int]*comm_plan.LvGradeWineryAdv | ||||
commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"bili\":0", "\"bili\":\"0\"") | commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"bili\":0", "\"bili\":\"0\"") | ||||
commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"buy_deliver_list\":[]", "\"buy_deliver_list\":{}") | commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"buy_deliver_list\":[]", "\"buy_deliver_list\":{}") | ||||
@@ -113,6 +114,7 @@ func GetPlanCfg(eg *xorm.Engine, pvd, masterId string, rewardOpts map[string]*mo | |||||
commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"new_extend_list\":[]", "\"new_extend_list\":{}") | commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"new_extend_list\":[]", "\"new_extend_list\":{}") | ||||
commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"second_extend_list\":[]", "\"second_extend_list\":{}") | commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"second_extend_list\":[]", "\"second_extend_list\":{}") | ||||
commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"to_extend_list\":[]", "\"to_extend_list\":{}") | commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"to_extend_list\":[]", "\"to_extend_list\":{}") | ||||
commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"common_wealth_system\":[]", "\"common_wealth_system\":{}") | |||||
commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"to_team_list\":[]", "\"to_team_list\":{}") | commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"to_team_list\":[]", "\"to_team_list\":{}") | ||||
commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"same_extend\":[[]]", "\"same_extend\":[]") | commissionOpt.Data = strings.ReplaceAll(commissionOpt.Data, "\"same_extend\":[[]]", "\"same_extend\":[]") | ||||
if strings.Contains(commissionOpt.Data, "\"subsidy_mode_list\":[") { //兼容旧的方案 | if strings.Contains(commissionOpt.Data, "\"subsidy_mode_list\":[") { //兼容旧的方案 | ||||
@@ -155,6 +157,15 @@ func GetPlanCfg(eg *xorm.Engine, pvd, masterId string, rewardOpts map[string]*mo | |||||
return opt, nil | return opt, nil | ||||
} | } | ||||
if zhios_order_relate_utils.InArr(commissionOpt.Mode, []string{"lv_price_public_platoon"}) { | |||||
if err := json.Unmarshal([]byte(commissionOpt.Data), &subsidyTmpPricePublic); err != nil { | |||||
return nil, zhios_order_relate_logx.Warn(fmt.Sprintf("%s:分佣方案数据设置错误", masterId)) | |||||
} | |||||
copier.Copy(&subsidyTmp, &subsidyTmpPricePublic) | |||||
opt.UserRate = subsidyTmp | |||||
return opt, nil | |||||
} | |||||
if zhios_order_relate_utils.InArr(commissionOpt.Mode, []string{"lv_winery_adv"}) { | if zhios_order_relate_utils.InArr(commissionOpt.Mode, []string{"lv_winery_adv"}) { | ||||
if err := json.Unmarshal([]byte(commissionOpt.Data), &subsidyTmpWineryAdv); err != nil { | if err := json.Unmarshal([]byte(commissionOpt.Data), &subsidyTmpWineryAdv); err != nil { | ||||
if masterId == "68823769" { | if masterId == "68823769" { | ||||
@@ -15,13 +15,6 @@ import ( | |||||
// BatchGetPublicPlatoonRelateCommission 批量分佣 订单显示 | // BatchGetPublicPlatoonRelateCommission 批量分佣 订单显示 | ||||
func BatchGetPublicPlatoonRelateCommissionByOrder(engine *xorm.Engine, masterId string, PublicPlatoonRelateCommissionReqList []*md.PublicPlatoonRelateCommissionReq) (map[string]*md.PublicPlatoonRelateCommissionResp, error) { | func BatchGetPublicPlatoonRelateCommissionByOrder(engine *xorm.Engine, masterId string, PublicPlatoonRelateCommissionReqList []*md.PublicPlatoonRelateCommissionReq) (map[string]*md.PublicPlatoonRelateCommissionResp, error) { | ||||
var resp = make(map[string]*md.PublicPlatoonRelateCommissionResp) | var resp = make(map[string]*md.PublicPlatoonRelateCommissionResp) | ||||
//userPublicPlatoonSetting, err := db.UserPublicPlatoonSettingGetOneByParams(engine, map[string]interface{}{ | |||||
// "key": "is_open", | |||||
// "value": 1, | |||||
//}) | |||||
//if err != nil { | |||||
// return nil, err | |||||
//} | |||||
for _, param := range PublicPlatoonRelateCommissionReqList { | for _, param := range PublicPlatoonRelateCommissionReqList { | ||||
// 根据供应商 | // 根据供应商 | ||||
rewardOpt, err := db.DbsPlanRewardByPvd(engine, param.Pvd) | rewardOpt, err := db.DbsPlanRewardByPvd(engine, param.Pvd) | ||||
@@ -68,59 +61,10 @@ func BatchGetPublicPlatoonRelateCommissionByOrder(engine *xorm.Engine, masterId | |||||
directPush[coinId] = zhios_order_relate_utils.Float64ToStr(zhios_order_relate_utils.StrToFloat64(lvGrade.DirectPush[coinId]) * zhios_order_relate_utils.StrToFloat64(pendingAmount) / 100) | directPush[coinId] = zhios_order_relate_utils.Float64ToStr(zhios_order_relate_utils.StrToFloat64(lvGrade.DirectPush[coinId]) * zhios_order_relate_utils.StrToFloat64(pendingAmount) / 100) | ||||
} | } | ||||
} | } | ||||
//TODO::本次消费产生的共富收益给到谁 | |||||
var nowBenefitUid string | |||||
userPublicPlatoonRelation, err := db.UserPublicPlatoonRelationGetOneByParams(engine, map[string]interface{}{ | |||||
"key": "uid", | |||||
"value": param.Uid, | |||||
}) | |||||
nowBenefitUid, _, err := benefitUidByBig(engine, param) | |||||
if err != nil { | if err != nil { | ||||
return nil, err | return nil, err | ||||
} | } | ||||
if userPublicPlatoonRelation == nil { | |||||
return nil, errors.New("未查询到公排关系记录") | |||||
} | |||||
if userPublicPlatoonRelation.FatherUid == "" { | |||||
//TODO::原始创始人 | |||||
nowBenefitUid = "" | |||||
} else { | |||||
fatherPositions := strings.Split(userPublicPlatoonRelation.FatherUid, "-") | |||||
var fatherPosition string | |||||
userPublicPlatoonRelation.ReturnCommissionNum++ | |||||
remainder1 := (userPublicPlatoonRelation.ReturnCommissionNum) % len(fatherPositions) | |||||
if remainder1 == 0 { | |||||
fatherPosition = fatherPositions[len(fatherPositions)-1] | |||||
} else { | |||||
fatherPosition = fatherPositions[remainder1-1] | |||||
} | |||||
nowBenefitUsers, err := db.UserPublicPlatoonRelationGetOneByParams(engine, map[string]interface{}{ | |||||
"key": "position", | |||||
"value": fatherPosition, | |||||
}) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
if nowBenefitUsers == nil { | |||||
return nil, errors.New("未查询到父级公排关系记录") | |||||
} | |||||
if nowBenefitUsers.Uid == -1 { | |||||
//则为待填充空位用户 | |||||
nowBenefitUid = "" | |||||
} else { | |||||
nowBenefitUid = zhios_order_relate_utils.AnyToString(nowBenefitUsers.Uid) | |||||
} | |||||
//TODO::更新 公排关系记录 中 `return_commission_num` | |||||
affected, err := db.UserPublicPlatoonRelationUpdate(engine.NewSession(), userPublicPlatoonRelation.Id, userPublicPlatoonRelation, "return_commission_num") | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
if affected == 0 { | |||||
return nil, errors.New("更新公排关系记录失败") | |||||
} | |||||
} | |||||
recommendUid := "" | recommendUid := "" | ||||
userProfile, _ := db.UserProfileFindByID(engine, param.Uid) | userProfile, _ := db.UserProfileFindByID(engine, param.Uid) | ||||
if userProfile != nil && userProfile.ParentUid > 0 { | if userProfile != nil && userProfile.ParentUid > 0 { | ||||
@@ -141,3 +85,61 @@ func BatchGetPublicPlatoonRelateCommissionByOrder(engine *xorm.Engine, masterId | |||||
} | } | ||||
return resp, nil | return resp, nil | ||||
} | } | ||||
func benefitUidByBig(engine *xorm.Engine, param *md.PublicPlatoonRelateCommissionReq) (string, map[string]*md.PublicPlatoonRelateCommissionResp, error) { | |||||
//TODO::本次消费产生的共富收益给到谁 | |||||
var nowBenefitUid string | |||||
userPublicPlatoonRelation, err := db.UserPublicPlatoonRelationGetOneByParams(engine, map[string]interface{}{ | |||||
"key": "uid", | |||||
"value": param.Uid, | |||||
}) | |||||
if err != nil { | |||||
return nowBenefitUid, nil, err | |||||
} | |||||
if userPublicPlatoonRelation == nil { | |||||
return nowBenefitUid, nil, errors.New("未查询到公排关系记录") | |||||
} | |||||
if userPublicPlatoonRelation.FatherUid == "" { | |||||
//TODO::原始创始人 | |||||
nowBenefitUid = "" | |||||
} else { | |||||
fatherPositions := strings.Split(userPublicPlatoonRelation.FatherUid, "-") | |||||
var fatherPosition string | |||||
userPublicPlatoonRelation.ReturnCommissionNum++ | |||||
remainder1 := (userPublicPlatoonRelation.ReturnCommissionNum) % len(fatherPositions) | |||||
if remainder1 == 0 { | |||||
fatherPosition = fatherPositions[len(fatherPositions)-1] | |||||
} else { | |||||
fatherPosition = fatherPositions[remainder1-1] | |||||
} | |||||
nowBenefitUsers, err := db.UserPublicPlatoonRelationGetOneByParams(engine, map[string]interface{}{ | |||||
"key": "position", | |||||
"value": fatherPosition, | |||||
}) | |||||
if err != nil { | |||||
return nowBenefitUid, nil, err | |||||
} | |||||
if nowBenefitUsers == nil { | |||||
return nowBenefitUid, nil, errors.New("未查询到父级公排关系记录") | |||||
} | |||||
if nowBenefitUsers.Uid == -1 { | |||||
//则为待填充空位用户 | |||||
nowBenefitUid = "" | |||||
} else { | |||||
nowBenefitUid = zhios_order_relate_utils.AnyToString(nowBenefitUsers.Uid) | |||||
} | |||||
//TODO::更新 公排关系记录 中 `return_commission_num` | |||||
affected, err := db.UserPublicPlatoonRelationUpdate(engine.NewSession(), userPublicPlatoonRelation.Id, userPublicPlatoonRelation, "return_commission_num") | |||||
if err != nil { | |||||
return nowBenefitUid, nil, err | |||||
} | |||||
if affected == 0 { | |||||
return nowBenefitUid, nil, errors.New("更新公排关系记录失败") | |||||
} | |||||
} | |||||
return nowBenefitUid, nil, nil | |||||
} |
@@ -84,7 +84,7 @@ func GetRewardCommission(engine *xorm.Engine, rmd *md.CommissionParam, isShare b | |||||
fmt.Println(com) | fmt.Println(com) | ||||
fmt.Println(price) | fmt.Println(price) | ||||
comf := zhios_order_relate_utils.StrToFloat64(com) | comf := zhios_order_relate_utils.StrToFloat64(com) | ||||
if zhios_order_relate_utils.InArr(cfg.Mode, []string{"lv_price", "lv_winery", "extend_price", "niubei_amount"}) && zhios_order_relate_utils.StrToFloat64(rmd.OldPrice) > 0 { //价格为基数 | |||||
if zhios_order_relate_utils.InArr(cfg.Mode, []string{"lv_price_public_platoon", "lv_price", "lv_winery", "extend_price", "niubei_amount"}) && zhios_order_relate_utils.StrToFloat64(rmd.OldPrice) > 0 { //价格为基数 | |||||
comf = zhios_order_relate_utils.StrToFloat64(rmd.OldPrice) | comf = zhios_order_relate_utils.StrToFloat64(rmd.OldPrice) | ||||
} | } | ||||
if cfg.Mode == "public_platoon" { | if cfg.Mode == "public_platoon" { | ||||
@@ -262,9 +262,71 @@ func GetRewardCommission(engine *xorm.Engine, rmd *md.CommissionParam, isShare b | |||||
if ulink == nil { | if ulink == nil { | ||||
return 0, 0, 0, 0, nil, nil | return 0, 0, 0, 0, nil, nil | ||||
} | } | ||||
if cfg.Mode == "lv_price_public_platoon" { | |||||
ulink = public(engine, ulink, cfg, newProvider, uid, comf, price, rmd) | |||||
} | |||||
comm(commArr, ulink) | comm(commArr, ulink) | ||||
return ulink.Profit, pvdFee, sysFee, subsidyFee, ulink, nil | return ulink.Profit, pvdFee, sysFee, subsidyFee, ulink, nil | ||||
} | } | ||||
func public(engine *xorm.Engine, ulinkParent *comm_plan.LvUser, cfg *comm_plan.PlanOpt, newProvider string, uid int, comf float64, price string, rmd *md.CommissionParam) *comm_plan.LvUser { | |||||
//佣金扣除抽成后 | |||||
fee, _, _, _ := CommFee(comf, cfg, "commission", rmd.IsGoods) | |||||
////积分扣除抽成后 | |||||
integralFee, _, _, _ := CommFee(zhios_order_relate_utils.StrToFloat64(price), cfg, "integral", rmd.IsGoods) | |||||
//调用公排制度 | |||||
userPublicPlatoonSetting, err := db.UserPublicPlatoonSettingGetOneByParams(engine, map[string]interface{}{ | |||||
"key": "is_open", | |||||
"value": 1, | |||||
}) | |||||
if err != nil || userPublicPlatoonSetting == nil { | |||||
return ulinkParent | |||||
} | |||||
var nowBenefitUid string | |||||
if userPublicPlatoonSetting.IsUseSmallPublicPlatoon == 1 { //小公排 | |||||
var PublicPlatoonRelateCommissionReqList = &md.SmallPublicPlatoonRelateCommissionReq{ | |||||
Pvd: newProvider, | |||||
Uid: zhios_order_relate_utils.IntToStr(uid), | |||||
PendingAmount: zhios_order_relate_utils.Float64ToStr(fee), | |||||
PendingIntegral: zhios_order_relate_utils.Float64ToStr(integralFee), | |||||
Oid: rmd.Oid, | |||||
} | |||||
if rmd.IsGoods != "1" { | |||||
nowBenefitUid, _, err = benefitUid(engine, PublicPlatoonRelateCommissionReqList) | |||||
} | |||||
} else { | |||||
var PublicPlatoonRelateCommissionReqList = &md.PublicPlatoonRelateCommissionReq{ | |||||
Pvd: newProvider, | |||||
Uid: zhios_order_relate_utils.IntToStr(uid), | |||||
PendingAmount: zhios_order_relate_utils.Float64ToStr(fee), | |||||
PendingIntegral: zhios_order_relate_utils.Float64ToStr(integralFee), | |||||
Oid: rmd.Oid, | |||||
} | |||||
if rmd.IsGoods != "1" { | |||||
nowBenefitUid, _, err = benefitUidByBig(engine, PublicPlatoonRelateCommissionReqList) | |||||
} | |||||
} | |||||
if err == nil && nowBenefitUid != "" { | |||||
user, _ := db.UserFindByID(engine, nowBenefitUid) | |||||
var commonWealthSystem = make(map[string]string) | |||||
grade := cfg.UserRate[user.Level] | |||||
if grade != nil { | |||||
for _, coinId := range grade.ReturnType { | |||||
var pendingAmount = zhios_order_relate_utils.Float64ToStr(fee) | |||||
if zhios_order_relate_utils.StrToInt(coinId) > 0 { //积分更换基数 | |||||
pendingAmount = zhios_order_relate_utils.Float64ToStr(integralFee) | |||||
} | |||||
commonWealthSystem[coinId] = zhios_order_relate_utils.Float64ToStr(zhios_order_relate_utils.StrToFloat64(grade.CommonWealthSystem[coinId]) * zhios_order_relate_utils.StrToFloat64(pendingAmount) / 100) | |||||
} | |||||
} | |||||
//共富收益处理 | |||||
ulink := getRewardLinkNew(nowBenefitUid, 2, commonWealthSystem, &comm_plan.LvUser{}, "public_platoon", cfg) | |||||
return commMax(ulinkParent, ulink) | |||||
} | |||||
return ulinkParent | |||||
} | |||||
func comm(commArr map[string]string, ulink *comm_plan.LvUser) *comm_plan.LvUser { | func comm(commArr map[string]string, ulink *comm_plan.LvUser) *comm_plan.LvUser { | ||||
if zhios_order_relate_utils.StrToFloat64(commArr["integralRewardMultiple"]) > 0 { | if zhios_order_relate_utils.StrToFloat64(commArr["integralRewardMultiple"]) > 0 { | ||||
for k, v := range ulink.OwnSubsidyFeeList { | for k, v := range ulink.OwnSubsidyFeeList { | ||||
@@ -283,6 +345,14 @@ func comm(commArr map[string]string, ulink *comm_plan.LvUser) *comm_plan.LvUser | |||||
} | } | ||||
return ulink | return ulink | ||||
} | } | ||||
func commMax(ulinkParent, ulink *comm_plan.LvUser) *comm_plan.LvUser { | |||||
if ulinkParent.ParentUser != nil { | |||||
ulinkParent.ParentUser = commMax(ulinkParent.ParentUser, ulink) | |||||
} else { | |||||
ulinkParent.ParentUser = ulink | |||||
} | |||||
return ulinkParent | |||||
} | |||||
func getRewardLink(uid string, diff int, reward map[string]string, ulinkParent *comm_plan.LvUser, types string, cfg *comm_plan.PlanOpt) *comm_plan.LvUser { | func getRewardLink(uid string, diff int, reward map[string]string, ulinkParent *comm_plan.LvUser, types string, cfg *comm_plan.PlanOpt) *comm_plan.LvUser { | ||||
var SubsidyFee = zhios_order_relate_utils.StrToFloat64(reward["0"]) | var SubsidyFee = zhios_order_relate_utils.StrToFloat64(reward["0"]) | ||||
@@ -297,6 +367,7 @@ func getRewardLink(uid string, diff int, reward map[string]string, ulinkParent * | |||||
} | } | ||||
SubsidyFeeList = append(SubsidyFeeList, tmp) | SubsidyFeeList = append(SubsidyFeeList, tmp) | ||||
} | } | ||||
//组装数据 | //组装数据 | ||||
var ulink = &comm_plan.LvUser{ | var ulink = &comm_plan.LvUser{ | ||||
Uid: zhios_order_relate_utils.StrToInt(uid), | Uid: zhios_order_relate_utils.StrToInt(uid), | ||||
@@ -312,6 +383,31 @@ func getRewardLink(uid string, diff int, reward map[string]string, ulinkParent * | |||||
} | } | ||||
return ulink | return ulink | ||||
} | } | ||||
func getRewardLinkNew(uid string, diff int, reward map[string]string, ulinkParent *comm_plan.LvUser, types string, cfg *comm_plan.PlanOpt) *comm_plan.LvUser { | |||||
var SubsidyFee = zhios_order_relate_utils.StrToFloat64(reward["0"]) | |||||
var SubsidyFeeList = make([]*comm_plan.VirtualCoinCommission, 0) | |||||
for k, v := range reward { | |||||
coinId := zhios_order_relate_utils.StrToInt(k) | |||||
ratio := cfg.VirtualCoinMoneyRatioList[coinId] | |||||
rate := zhios_order_relate_utils.StrToFloat64(ratio) | |||||
var tmp = &comm_plan.VirtualCoinCommission{ | |||||
Cid: k, | |||||
Val: zhios_order_relate_utils.StrToFloat64(v) * rate, | |||||
} | |||||
SubsidyFeeList = append(SubsidyFeeList, tmp) | |||||
} | |||||
//组装数据 | |||||
var ulink = &comm_plan.LvUser{ | |||||
Uid: zhios_order_relate_utils.StrToInt(uid), | |||||
Diff: diff, | |||||
ParentUser: ulinkParent, | |||||
ExtendType: 5, | |||||
} | |||||
ulink.Profit = SubsidyFee | |||||
ulink.ProfitList = SubsidyFeeList | |||||
return ulink | |||||
} | |||||
func getRewardLinkCommWithExtend(uid string, diff int, reward map[string]string, rewardExtend map[string]string, ulinkParent *comm_plan.LvUser, cfg *comm_plan.PlanOpt) *comm_plan.LvUser { | func getRewardLinkCommWithExtend(uid string, diff int, reward map[string]string, rewardExtend map[string]string, ulinkParent *comm_plan.LvUser, cfg *comm_plan.PlanOpt) *comm_plan.LvUser { | ||||
var SubsidyFee = zhios_order_relate_utils.StrToFloat64(reward["0"]) | var SubsidyFee = zhios_order_relate_utils.StrToFloat64(reward["0"]) | ||||
@@ -61,73 +61,10 @@ func BatchSmallGetPublicPlatoonRelateCommission(engine *xorm.Engine, masterId st | |||||
} | } | ||||
//TODO::本次消费产生的共富收益给到谁 | //TODO::本次消费产生的共富收益给到谁 | ||||
var nowBenefitUid string | |||||
userPublicPlatoonRelation, err := db.UserSmallPublicPlatoonRelationGetOneByParams(engine, map[string]interface{}{ | |||||
"key": "uid", | |||||
"value": param.Uid, | |||||
}) | |||||
nowBenefitUid, _, err := benefitUid(engine, param) | |||||
if err != nil { | if err != nil { | ||||
return nil, err | return nil, err | ||||
} | } | ||||
if userPublicPlatoonRelation == nil { | |||||
return nil, errors.New("未查询到公排关系记录") | |||||
} | |||||
if userPublicPlatoonRelation.FatherUid == "" { | |||||
//TODO::原始创始人 | |||||
nowBenefitUid = "" | |||||
} else { | |||||
fatherPositions := strings.Split(userPublicPlatoonRelation.FatherUid, "-") | |||||
var fatherPosition string | |||||
userPublicPlatoonRelation.ReturnCommissionNum++ | |||||
userPublicPlatoonSetting, err := db.UserPublicPlatoonSettingGetOneByParams(engine, map[string]interface{}{ | |||||
"key": "is_open", | |||||
"value": 1, | |||||
}) | |||||
if len(fatherPositions) > userPublicPlatoonSetting.SeveralRows { | |||||
remainder1 := (userPublicPlatoonRelation.ReturnCommissionNum) % userPublicPlatoonSetting.SeveralRows | |||||
if remainder1 == 0 { | |||||
fatherPosition = fatherPositions[userPublicPlatoonSetting.SeveralRows-1] | |||||
} else { | |||||
fatherPosition = fatherPositions[remainder1-1] | |||||
} | |||||
} else { | |||||
remainder1 := (userPublicPlatoonRelation.ReturnCommissionNum) % len(fatherPositions) | |||||
if remainder1 == 0 { | |||||
fatherPosition = fatherPositions[len(fatherPositions)-1] | |||||
} else { | |||||
fatherPosition = fatherPositions[remainder1-1] | |||||
} | |||||
} | |||||
nowBenefitUsers, err := db.UserSmallPublicPlatoonRelationGetOneByParams(engine, map[string]interface{}{ | |||||
"key": "id", | |||||
"value": fatherPosition, | |||||
}) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
if nowBenefitUsers == nil { | |||||
//未查询到父级公排关系记录 | |||||
nowBenefitUid = "" | |||||
//return nil, errors.New("未查询到父级公排关系记录") | |||||
} else { | |||||
if nowBenefitUsers.Uid == -1 || nowBenefitUsers.Uid == -2 { | |||||
//则为待填充空位用户 | |||||
nowBenefitUid = "" | |||||
} else { | |||||
nowBenefitUid = zhios_order_relate_utils.AnyToString(nowBenefitUsers.Uid) | |||||
} | |||||
} | |||||
//TODO::更新 公排关系记录 中 `return_commission_num` | |||||
affected, err := db.UserSmallPublicPlatoonRelationUpdate(engine.NewSession(), userPublicPlatoonRelation.Id, userPublicPlatoonRelation, "return_commission_num") | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
if affected == 0 { | |||||
return nil, errors.New("更新公排关系记录失败") | |||||
} | |||||
} | |||||
recommendUid := "" | recommendUid := "" | ||||
userProfile, _ := db.UserProfileFindByID(engine, param.Uid) | userProfile, _ := db.UserProfileFindByID(engine, param.Uid) | ||||
if userProfile != nil && userProfile.ParentUid > 0 { | if userProfile != nil && userProfile.ParentUid > 0 { | ||||
@@ -146,6 +83,77 @@ func BatchSmallGetPublicPlatoonRelateCommission(engine *xorm.Engine, masterId st | |||||
} | } | ||||
return resp, nil | return resp, nil | ||||
} | } | ||||
func benefitUid(engine *xorm.Engine, param *md.SmallPublicPlatoonRelateCommissionReq) (string, map[string]*md.SmallPublicPlatoonRelateCommissionResp, error) { | |||||
var nowBenefitUid string | |||||
userPublicPlatoonRelation, err := db.UserSmallPublicPlatoonRelationGetOneByParams(engine, map[string]interface{}{ | |||||
"key": "uid", | |||||
"value": param.Uid, | |||||
}) | |||||
if err != nil { | |||||
return nowBenefitUid, nil, err | |||||
} | |||||
if userPublicPlatoonRelation == nil { | |||||
return nowBenefitUid, nil, errors.New("未查询到公排关系记录") | |||||
} | |||||
if userPublicPlatoonRelation.FatherUid == "" { | |||||
//TODO::原始创始人 | |||||
nowBenefitUid = "" | |||||
} else { | |||||
fatherPositions := strings.Split(userPublicPlatoonRelation.FatherUid, "-") | |||||
var fatherPosition string | |||||
userPublicPlatoonRelation.ReturnCommissionNum++ | |||||
userPublicPlatoonSetting, err := db.UserPublicPlatoonSettingGetOneByParams(engine, map[string]interface{}{ | |||||
"key": "is_open", | |||||
"value": 1, | |||||
}) | |||||
if len(fatherPositions) > userPublicPlatoonSetting.SeveralRows { | |||||
remainder1 := (userPublicPlatoonRelation.ReturnCommissionNum) % userPublicPlatoonSetting.SeveralRows | |||||
if remainder1 == 0 { | |||||
fatherPosition = fatherPositions[userPublicPlatoonSetting.SeveralRows-1] | |||||
} else { | |||||
fatherPosition = fatherPositions[remainder1-1] | |||||
} | |||||
} else { | |||||
remainder1 := (userPublicPlatoonRelation.ReturnCommissionNum) % len(fatherPositions) | |||||
if remainder1 == 0 { | |||||
fatherPosition = fatherPositions[len(fatherPositions)-1] | |||||
} else { | |||||
fatherPosition = fatherPositions[remainder1-1] | |||||
} | |||||
} | |||||
nowBenefitUsers, err := db.UserSmallPublicPlatoonRelationGetOneByParams(engine, map[string]interface{}{ | |||||
"key": "id", | |||||
"value": fatherPosition, | |||||
}) | |||||
if err != nil { | |||||
return nowBenefitUid, nil, err | |||||
} | |||||
if nowBenefitUsers == nil { | |||||
//未查询到父级公排关系记录 | |||||
nowBenefitUid = "" | |||||
//return nil, errors.New("未查询到父级公排关系记录") | |||||
} else { | |||||
if nowBenefitUsers.Uid == -1 || nowBenefitUsers.Uid == -2 { | |||||
//则为待填充空位用户 | |||||
nowBenefitUid = "" | |||||
} else { | |||||
nowBenefitUid = zhios_order_relate_utils.AnyToString(nowBenefitUsers.Uid) | |||||
} | |||||
} | |||||
//TODO::更新 公排关系记录 中 `return_commission_num` | |||||
affected, err := db.UserSmallPublicPlatoonRelationUpdate(engine.NewSession(), userPublicPlatoonRelation.Id, userPublicPlatoonRelation, "return_commission_num") | |||||
if err != nil { | |||||
return nowBenefitUid, nil, err | |||||
} | |||||
if affected == 0 { | |||||
return nowBenefitUid, nil, errors.New("更新公排关系记录失败") | |||||
} | |||||
} | |||||
return nowBenefitUid, nil, nil | |||||
} | |||||
func CalcSmallPublicPlatoonRelateLaXinReward(engine *xorm.Engine, masterId string, rewardUid int) (resp []*md.CalcSmallPublicPlatoonRelateLaXinReward, err error) { | func CalcSmallPublicPlatoonRelateLaXinReward(engine *xorm.Engine, masterId string, rewardUid int) (resp []*md.CalcSmallPublicPlatoonRelateLaXinReward, err error) { | ||||
userPublicPlatoonRelation, err := db.UserSmallPublicPlatoonRelationGetOneByParams(engine, map[string]interface{}{ | userPublicPlatoonRelation, err := db.UserSmallPublicPlatoonRelationGetOneByParams(engine, map[string]interface{}{ | ||||