增加初步分佣算法,待完善后台分佣规则

This commit is contained in:
monanxiao 2023-03-13 19:12:08 +08:00
parent d97dbe8fcf
commit 4015a21417
5 changed files with 168 additions and 27 deletions

View File

@ -0,0 +1,47 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\common\model\system\supplychain;
use app\common\model\BaseModel;
// 供应链后台团队等级表
class SupplyChainLevel extends BaseModel
{
// 设置当前模型的数据库连接
protected $connection = 'nongke';
protected $table = 'fa_supply_level';
/**
* @return string
* @author xaboy
* @day 2020-03-30
*/
public static function tablePk(): string
{
return 'id';
}
/**
* @return string
* @author xaboy
* @day 2020-03-30
*/
public static function tableName(): string
{
return 'fa_supply_level';
}
}

View File

@ -0,0 +1,53 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\common\model\system\supplychain;
use app\common\model\BaseModel;
use app\common\model\system\supplychain\SupplyChainLevel;
// 供应链后台团队表
class SupplyChainTeam extends BaseModel
{
// 设置当前模型的数据库连接
protected $connection = 'nongke';
protected $table = 'fa_supply_team';
/**
* @return string
* @author xaboy
* @day 2020-03-30
*/
public static function tablePk(): string
{
return 'id';
}
/**
* @return string
* @author xaboy
* @day 2020-03-30
*/
public static function tableName(): string
{
return 'fa_supply_team';
}
public function level()
{
return $this->hasOne(SupplyChainLevel::class, 'id', 'fa_supply_team_id');
}
}

View File

@ -25,6 +25,7 @@ use app\common\repositories\user\UserExtractRepository;
use app\common\repositories\user\UserHistoryRepository;
use app\common\repositories\user\UserRelationRepository;
use app\common\repositories\user\UserRepository;
use app\common\model\system\supplychain\SupplyChainTeam;
/**
* Class User
@ -176,6 +177,11 @@ class User extends BaseModel
return $this->hasOne(UserBrokerage::class, 'brokerage_level', 'member_level')->where('type',1);
}
public function supplyChainTeam()
{
return $this->hasOne(SupplyChainTeam::class, 'fa_supply_team_id', 'id');
}
/**
* @param $spreadUid
* @author xaboy

View File

@ -385,20 +385,29 @@ class StoreOrderRepository extends BaseRepository
//自动打印订单
$this->autoPrinter($order->order_id, $order->mer_id);
}
if ($groupOrder->user->spread_uid) {
// 来源检测1 服务小组 2 普通商品
if($order->source == 1)
{
\think\facade\Log::record('供应链佣金--开始');
Queue::push(SupplyChainOrderBrokerAgeJob::class, ['uid' => $groupOrder->user->spread_uid, 'type' => 'spread_pay_num', 'inc' => 1]);
\think\facade\Log::record('供应链佣金---结束');
}else{
Queue::push(UserBrokerageLevelJob::class, ['uid' => $groupOrder->user->spread_uid, 'type' => 'spread_pay_num', 'inc' => 1]);
// 来源检测1 服务小组 2 普通商品
if($order->source == 1)
{
// 验证是否服务小组人员
if ($groupOrder->user->fa_supply_team_id) {
Queue::push(SupplyChainOrderBrokerAgeJob::class, [
'uid' => $groupOrder->user->uid,
'inc' => $order->pay_price, // 订单金额
'order_sn' => $order->order_sn, // 订单编号
'order_id' => $order->order_id, // 订单ID
'mer_id' => $order->mer_id, // 商户ID
'brokerage_price' => $order->supply_chain_price, // 订单佣金金额
]);
}
}else{
if ($groupOrder->user->spread_uid) {
Queue::push(UserBrokerageLevelJob::class, ['uid' => $groupOrder->user->spread_uid, 'type' => 'spread_money', 'inc' => $groupOrder->pay_price]);
}
}
}
app()->make(UserRepository::class)->update($groupOrder->uid, [
'pay_count' => Db::raw('pay_count+' . count($groupOrder->orderList)),
'pay_price' => Db::raw('pay_price+' . $groupOrder->pay_price),
@ -1619,6 +1628,11 @@ class StoreOrderRepository extends BaseRepository
])->page($page, $limit)->order('pay_time DESC')->append(['refund_status'])->select();
foreach ($list as $order) {
if ($order->order_type == 1) {
$order->append(['take', 'refund_status']);
}
if ($order->activity_type == 2) {
if ($order->presellOrder) {
$order->presellOrder->append(['activeStatus']);

View File

@ -18,6 +18,9 @@ use app\common\repositories\user\UserBrokerageRepository;
use app\common\repositories\user\UserRepository;
use crmeb\interfaces\JobInterface;
use think\facade\Log;
use app\common\model\system\supplychain\SupplyChainBorkerage;
use app\common\model\system\supplychain\SupplyChainTeam;
use app\common\model\system\supplychain\SupplyChainLevel;
/**
*
@ -29,26 +32,44 @@ class SupplyChainOrderBrokerAgeJob implements JobInterface
public function fire($job, $data)
{
try {
// 获取当前用户
$user = app()->make(UserRepository::class)->get($data['uid']);
if ($user) {
$flag = true;
if ($data['type'] == 'spread_money') {
$user->spread_pay_price = bcadd($user->spread_pay_price, $data['inc'], 2);
} else if ($data['type'] == 'spread_pay_num') {
$user->spread_pay_count = bcadd($user->spread_pay_count, $data['inc'], 0);
} else {
$flag = false;
}
if ($flag) {
$user->save();
}
}
if ($user && $user->is_promoter) {
app()->make(UserBrokerageRepository::class)->inc($user, $data['type'], $data['inc']);
$supplyTeam = SupplyChainTeam::find($user['fa_supply_team_id']); // 获取供应链团队
$supplyLevel = SupplyChainLevel::find($supplyTeam['supply_level_id']); // 获取供应链等级
$price = $data['brokerage_price']; // 待分润金额 == 订单佣金金额
// 判断 存在数据的话,进行分润
if($supplyTeam)
{
// 可获得金额
$usrPrice = sprintf("%.2f", $price/100*$supplyLevel['rate']);
}
// 分润数据
$dataArr = [
'user_id' => $data['uid'], // 用户ID
'pay_price' => $data['inc'], // 订单金额
'order_sn' => $data['order_sn'], // 订单编号
'supply_sn' => $data['order_sn'], // 订单编号
'order_id' => $data['order_id'], // 订单ID
'mer_id' => $data['mer_id'], // 商户ID
'supply_level_id' => $supplyLevel['id'], // 分佣等级ID
'brokerage_price' => $usrPrice, // 获取的佣金金额
'user_info' => $user['nickname'], // 用户名
'fa_supply_chain_id' => $supplyTeam['id'], // 供应链团队ID
];
// 储存小组服务分佣记录
$status = SupplyChainBorkerage::create($dataArr);
// 增加小组服务佣金明细
\think\facade\Log::record($status);
} catch (\Exception $e) {
Log::info('分销等级同步失败: ' . var_export($data, 1) . $e->getMessage());
Log::info('小组服务佣金同步失败: ' . var_export($data, 1) . $e->getMessage());
}
$job->delete();
}