284 lines
15 KiB
PHP
284 lines
15 KiB
PHP
<?php
|
|
/****
|
|
* 常规订单流水佣佣金计算
|
|
*/
|
|
|
|
namespace addon\saas\model;
|
|
|
|
use app\model\BaseModel;
|
|
use think\facade\Db;
|
|
|
|
class OrderPay extends BaseModel
|
|
{
|
|
/***
|
|
* 仅有指定产品有商户入驻奖励
|
|
* @param $orderInfo
|
|
* @return array|void
|
|
* @throws \think\db\exception\DataNotFoundException
|
|
* @throws \think\db\exception\DbException
|
|
* @throws \think\db\exception\ModelNotFoundException
|
|
*/
|
|
public function calculate($orderInfo = [])
|
|
{
|
|
$config_model = new Config();
|
|
$basic_config = $config_model->getBasicsConfig($orderInfo['site_id'])['data']['value']; //查询渠道商配置
|
|
if (empty($basic_config) || $basic_config['is_open'] == 0) return $this->success();
|
|
if (!$basic_config['goods_ids']) return $this->success();
|
|
//检查商品是否在管理商品账
|
|
if ($basic_config['settled_condition'] == 4) { //仅支持购买指定商品成为渠道
|
|
$manage_order_id = model('manage_order')->getValue([['order_id', '=', $orderInfo['order_id']]], 'id');//判断是否已结束
|
|
if ($manage_order_id) return $this->success();//已存在返回
|
|
$level_config = model('manage_level')->getColumn([['site_id', '=', $orderInfo['site_id']]], '*', 'level_id');
|
|
if (!$level_config) return $this->success();
|
|
$goods_ids = explode(',', $basic_config['goods_ids']);
|
|
$order_goods = model('order_goods')->getColumn([['order_id', '=', $orderInfo['order_id']]], '*', 'order_goods_id');//查询当前对应产品
|
|
if (array_intersect(array_column($order_goods, 'goods_id'), $goods_ids)) {
|
|
$manageInfo = Db::view('member m', 'member_id,source_member,username')
|
|
->view('manage_user a', 'id,level_id as one_level_id,real_name as one_real_name,parent,grand_parent,status,chain', 'a.member_id=m.source_member', 'left')
|
|
// ->view('manage_user b', 'level_id as two_level_id,real_name as two_real_name', 'a.parent=b.id', 'left')
|
|
// ->view('manage_user c', 'level_id as three_level_id,real_name as three_real_name', 'a.grand_parent=c.id', 'left')
|
|
->where('m.member_id', '=', $orderInfo['member_id'])
|
|
->find();//获取直推代理商
|
|
$levelInnfo = $level_config[$manageInfo['one_level_id']] ?? ''; //获取直推代理商等级
|
|
if (!$levelInnfo) return $this->success();
|
|
$new_level = [];
|
|
$district_level = [];//区域等级ID
|
|
$custom_weight = $levelInnfo['custom_weight'];//获取自定义上级权益归属
|
|
if ($level_config) {//计算上级等级规则
|
|
$custom_weight = explode(',', $custom_weight);//指定权益归属
|
|
foreach ($level_config as $k => $v) {
|
|
if ($v['upgrade_type'] == 0) {
|
|
$district_level[] = $v['level_id'];
|
|
}
|
|
if ($custom_weight && in_array($v['level_num'], $custom_weight)) {
|
|
foreach ($custom_weight as $level_num) {
|
|
if ($v['level_num'] == $level_num) {
|
|
$new_level[$k] = $v;
|
|
}
|
|
}
|
|
} else if ($v['level_num'] > $levelInnfo['level_num']) {
|
|
$new_level[$k] = $v;
|
|
}
|
|
}
|
|
}
|
|
$siteInfo = model('site')->getInfo([['site_id', '=', $orderInfo['site_id']]]);
|
|
$use_settle_number = $basic_config['use_settle_number'] ?: $orderInfo['order_money'];
|
|
$Statistics = [
|
|
'one_site_order_num' => 1,
|
|
'one_site_total_order' => $orderInfo['order_money'],
|
|
'one_site_order_money' => 0,
|
|
'use_settle_number' => round($orderInfo['order_money'] / $use_settle_number, 2)
|
|
];
|
|
$ladder_rewards = json_decode($levelInnfo['ladder_rewards'], true);//获取阶梯佣金
|
|
$ladder_rewards = array_column($ladder_rewards, null, 'order_money');
|
|
ksort($ladder_rewards);
|
|
$two_manage_id = 0;
|
|
$three_manage_id = 0;
|
|
$two_manage_info = []; //间推管理
|
|
$three_manage_info = [];//三级管理
|
|
$chain = $manageInfo['chain'];
|
|
$uids = array_filter(explode('#', $chain));
|
|
arsort($uids);
|
|
$w[] = ['site_id', '=', $orderInfo['site_id']];
|
|
$w[] = ['id', 'in', $uids];
|
|
$w[] = ['level_id', 'in', array_keys($new_level)];
|
|
$field = 'id,level_id,real_name';
|
|
$userInfo = model('manage_user')->getList($w, $field, 'depth_level desc,create_time desc');//计算上级贡献值比例
|
|
if ($userInfo) {
|
|
$temp_level_weight = '';
|
|
foreach ($userInfo as $v) {
|
|
$temp_info = $level_config[$v['level_id']] ?? '';
|
|
if ($two_manage_id == 0) {
|
|
$two_manage_id = $v['id'];
|
|
$two_manage_info = $v;
|
|
$temp_level_weight = $temp_info['level_num'];
|
|
}
|
|
if ($temp_info && $temp_info['level_num'] > $temp_level_weight) {
|
|
$three_manage_id = $v['id'];
|
|
$three_manage_info = $v;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
$district_where = [
|
|
['site_id', '=', $orderInfo['site_id']],
|
|
['district_id', '=', $orderInfo['district_id']],
|
|
['level_id', 'in', $district_level]
|
|
];
|
|
$district_info = model('manage_user')->getInfo($district_where, 'id,real_name');//区域
|
|
foreach ($order_goods as $k => $orderGoodsInfo) {
|
|
if (in_array($orderGoodsInfo['goods_id'], $goods_ids)) {
|
|
$amount = $orderGoodsInfo['price'] * $orderGoodsInfo['num'];
|
|
$ruleinfo = end($ladder_rewards);
|
|
//计算上级贡献值比例
|
|
if ($levelInnfo['reward_type'] == 2) {
|
|
foreach ($ladder_rewards as $mk => $v) {//获取当前满足的阶梯佣金
|
|
if ($amount <= $mk) {
|
|
$ruleinfo = $v;
|
|
break;
|
|
}
|
|
}
|
|
$one_rate = round($ruleinfo['direct_money'] / $amount, 2); //推荐人佣金
|
|
if ($ruleinfo['district_site_rate']) { //区域管理奖励
|
|
$basic_config['district_money'] = $ruleinfo['district_site_rate'];
|
|
}
|
|
$two_rate = 0;
|
|
$three_rate = 0; //佣金比例
|
|
$two_commission = 0; //未设置暂时为开发
|
|
$three_commission = 0; //三级佣金未开发
|
|
if ($ruleinfo['indirect_money']) { //间推贡献值
|
|
$two_rate = round($ruleinfo['indirect_money'] / $amount, 2); //间接人贡献值
|
|
$two_commission = $ruleinfo['indirect_money']; //间联贡献值
|
|
}
|
|
if ($three_manage_id && $ruleinfo['manage_site_rate']) {
|
|
$three_rate = round($ruleinfo['manage_site_rate'] / $amount, 2);
|
|
$three_commission = $ruleinfo['manage_site_rate'];
|
|
}
|
|
$one_commission = $ruleinfo['direct_money']; //直推佣金
|
|
$commission = $one_commission + $two_commission + $three_commission;
|
|
} else {
|
|
$one_rate = $levelInnfo['direct_site_rate'] ?? 0; //推荐人佣金
|
|
$two_rate = $levelInnfo['indirect_site_rate'] ?? 0; //间接人佣金
|
|
$three_rate = 0; //未设置暂时为开发
|
|
$one_commission = round($amount * $one_rate / 100, 2); //一级佣金
|
|
$two_commission = round($amount * $two_rate / 100, 2); //二级佣金
|
|
$three_commission = round($amount * $three_rate / 100, 2); //三级佣金
|
|
$commission = $one_commission + $two_commission + $three_commission;
|
|
$Statistics['one_site_order_money'] += $one_commission;
|
|
}
|
|
/***
|
|
* 城市服务商佣金奖励
|
|
*/
|
|
$province_rate = 0;
|
|
$city_rate = 0;
|
|
$district_rate = 0;
|
|
|
|
$province_commission = 0; //省佣金
|
|
$city_commission = 0; //市佣金
|
|
|
|
$district_commission = $basic_config['district_money'];
|
|
if (!$district_info) { //没有区域管理
|
|
$district_commission = 0;
|
|
}
|
|
$commission += $province_commission + $city_commission + $district_commission;
|
|
$commission_rate = ($one_rate + $two_rate + $three_rate + $province_rate + $city_rate + $district_rate) / 100;
|
|
$platform_commission = ($orderGoodsInfo['goods_money'] * config('accounts.platform_rate')) / 100; //平台官方手续费
|
|
//记录佣金数据
|
|
$addData = [
|
|
'order_id' => $orderInfo['order_id'],
|
|
'order_no' => $orderGoodsInfo['order_no'],
|
|
'out_trade_no' => $orderInfo['out_trade_no'],
|
|
'order_goods_id' => $orderGoodsInfo['order_goods_id'],
|
|
'site_id' => $orderInfo['site_id'],
|
|
'ag_site_id' => $siteInfo['agent_id'],
|
|
'site_name' => $siteInfo['site_name'],
|
|
'goods_id' => $orderGoodsInfo['order_goods_id'],
|
|
'sku_id' => $orderGoodsInfo['sku_id'],
|
|
'sku_name' => $orderGoodsInfo['sku_name'],
|
|
'sku_image' => $orderGoodsInfo['sku_image'],
|
|
'price' => $amount,
|
|
'num' => $orderGoodsInfo['num'],
|
|
'real_goods_money' => $orderGoodsInfo['goods_money'],
|
|
'member_id' => $orderGoodsInfo['member_id'],
|
|
'member_name' => $orderInfo['name'],
|
|
'member_mobile' => $orderInfo['mobile'],
|
|
'full_address' => $orderInfo['full_address'] . $orderInfo['address'],
|
|
|
|
'province_id' => $orderInfo['province_id'],
|
|
'city_id' => $orderInfo['city_id'],
|
|
'district_id' => $orderInfo['district_id'],
|
|
|
|
'promotion_type' => $orderInfo['promotion_type'] ?? '',
|
|
'promotion_type_name' => $orderInfo['promotion_type_name'] ?? '',
|
|
|
|
|
|
'one_manage_id' => $manageInfo['id'],
|
|
'two_manage_id' => $two_manage_id,
|
|
'three_manage_id' => $three_manage_id,
|
|
|
|
'commission' => $commission, //总佣金
|
|
|
|
'commission_rate' => $commission_rate,//总费率
|
|
|
|
'order_profit' => $amount - $commission - $platform_commission,//订单利润费率
|
|
|
|
'one_manage_name' => $manageInfo['one_real_name'] ?: '',
|
|
|
|
'two_manage_name' => $two_manage_info['real_name'] ?? '',
|
|
'three_manage_name' => $three_manage_info['real_name'] ?? '',
|
|
|
|
'one_commission' => $one_commission,
|
|
'two_commission' => $two_commission,
|
|
'three_commission' => $three_commission,
|
|
|
|
'province_commission' => $province_commission,
|
|
'city_commission' => $city_commission,
|
|
'district_commission' => $district_commission,
|
|
|
|
'one_rate' => $one_rate,
|
|
'two_rate' => $two_rate,
|
|
'three_rate' => $three_rate,
|
|
'trade_form' => 'site_trade',
|
|
'create_time' => time()
|
|
];
|
|
model("manage_order")->add($addData);
|
|
event('SaaSOrderProfit', $addData);
|
|
}
|
|
}
|
|
$this->addOrderStatistics($manageInfo['id'], $Statistics);
|
|
}
|
|
} else {
|
|
$this->getOrderGoods($orderInfo['site_id'], $orderInfo);
|
|
}
|
|
}
|
|
|
|
/***
|
|
* 添加普通订单统计
|
|
* @param $site_id
|
|
* @param $orderInfo
|
|
* @return void
|
|
* @throws \think\db\exception\DbException
|
|
*/
|
|
public function getOrderGoods($site_id, $orderInfo)
|
|
{
|
|
$siteInfo = model('site')->getInfo([['site_id', '=', $site_id]]);
|
|
if ($siteInfo['manage_id']) {
|
|
$Statistics = [
|
|
'one_site_order_num' => 1,
|
|
'one_site_total_order' => $orderInfo['order_money'],
|
|
'one_site_order_money' => 0,
|
|
];
|
|
$this->addOrderStatistics($siteInfo['manage_id'], $Statistics);
|
|
}
|
|
}
|
|
|
|
/***
|
|
* 添加订统计
|
|
* @param $mandege_id
|
|
* @param $data
|
|
* @return void
|
|
* @throws \think\db\exception\DbException
|
|
*/
|
|
public function addOrderStatistics($mandege_id, $data)
|
|
{
|
|
if (!empty($data['one_site_order_num'])) {
|
|
//添加订单数量
|
|
model('manage_user')->setInc([['id', '=', $mandege_id]], 'one_site_order_num');
|
|
}
|
|
if (!empty($manageInfo['one_site_total_order'])) {
|
|
//添加订单总额
|
|
model('manage_user')->setInc([['id', '=', $mandege_id]], 'one_site_total_order');
|
|
}
|
|
if (!empty($manageInfo['one_site_order_money'])) {
|
|
//添加获取订单佣金
|
|
model('manage_user')->setInc([['id', '=', $mandege_id]], 'one_site_order_money');
|
|
}
|
|
if (!empty($manageInfo['use_settle_number'])) {
|
|
//增加开店数量
|
|
model('manage_user')->setInc([['id', '=', $mandege_id]], 'use_settle_number', $manageInfo['use_settle_number']);
|
|
}
|
|
// 分销商检测升级
|
|
event('UpgradeManagelevel', $mandege_id);
|
|
}
|
|
}
|