添加:平台抽成记录列表接口及统计接口

This commit is contained in:
wuhui_zzw 2023-12-22 18:30:51 +08:00
parent b5bf05b24a
commit 9ddfd8017c
5 changed files with 174 additions and 71 deletions

View File

@ -5,6 +5,8 @@
namespace app\common\model\store\platformCommission;
use app\common\model\BaseModel;
use app\common\model\system\merchant\Merchant;
use app\common\model\user\User;
use think\model\concern\SoftDelete;
class Record extends BaseModel
@ -23,11 +25,22 @@ class Record extends BaseModel
/**
* Common: 关联用户表
* Author: wu-hui
* Time: 2023/12/22 17:53
* @return \think\model\relation\HasOne
*/
public function user(){
return $this->hasOne(User::class, 'uid', 'uid');
}
/**
* Common: 关联商户表
* Author: wu-hui
* Time: 2023/12/22 17:53
* @return \think\model\relation\HasOne
*/
public function mer(){
return $this->hasOne(Merchant::class,'mer_id','mer_id');
}
}

View File

@ -6,9 +6,7 @@ namespace app\common\repositories\store\platformCommission;
use app\common\dao\store\platformCommission\RecordDao;
use app\common\model\system\merchant\Merchant;
use app\common\repositories\BaseRepository;
use think\facade\Log;
class RecordRepository extends BaseRepository{
@ -39,71 +37,67 @@ class RecordRepository extends BaseRepository{
}) + $default;
}
/**
* Common: 支付成功 平台抽成处理
* Common: 抽成记录 - 统计
* Author: wu-hui
* Time: 2023/12/22 17:15
* @param $groupOrder
* @return bool
* Time: 2023/12/22 17:37
* @param $params
* @return array
*/
public function orderPaySuccessHandle($groupOrder):bool{
// 判断:是否开启平台抽成
$set = $this->getBaseConfig();
if($set['is_open'] != 1) {
Log::info('支付成功 - 平台抽成处理 - 未开启平台抽成');
return false;
}
// 循环处理单个商品抽成信息
$insertData = [];
foreach($groupOrder->orderList as $orderInfo){
foreach($orderInfo->orderProduct as $orderProductInfo){
// 获取商户设置抽成比例 获取抽成总金额
$platformCommissionRate = (float)Merchant::getDB()->where('mer_id', $orderInfo->mer_id)->value('platform_commission');
// 使用商品售价进行处理
if($orderProductInfo->total_price > 0 && $platformCommissionRate > 0){
// 获取平台抽成中总金额
$platformCommissionMoney = (float)sprintf("%.2f",$orderProductInfo->total_price * $platformCommissionRate / 100);
// 生成信息数组
$insertData[] = [
'uid' => $orderProductInfo->uid,
'order_id' => $orderProductInfo->order_id,
'order_total_price' => $orderInfo->total_price,
'order_product_id' => $orderProductInfo->order_product_id,
'order_product_total_price' => $orderProductInfo->total_price,
'mer_id' => $orderInfo->mer_id,
'platform_commission_rate' => $platformCommissionRate,
'platform_commission_money' => $platformCommissionMoney,
'commission_platform_rate' => $set['commission_platform_rate'],
'commission_platform_money' => (float)sprintf("%.2f",$platformCommissionMoney * $set['commission_platform_rate'] / 100),
'commission_partner_rate' => $set['commission_partner_rate'],
'commission_partner_money' => (float)sprintf("%.2f",$platformCommissionMoney * $set['commission_partner_rate'] / 100),
'commission_merchants_rate' => $set['commission_merchants_rate'],
'commission_merchants_money' => (float)sprintf("%.2f",$platformCommissionMoney * $set['commission_merchants_rate'] / 100),
'commission_promoter_rate' => $set['commission_promoter_rate'],
'commission_promoter_money' => (float)sprintf("%.2f",$platformCommissionMoney * $set['commission_promoter_rate'] / 100),
'commission_integral_release_rate' => $set['commission_integral_release_rate'],
'commission_integral_release_money' => (float)sprintf("%.2f",$platformCommissionMoney * $set['commission_integral_release_rate'] / 100),
];
public function getRecordStatistics($params):array{
$orderQuery = $this->dao->getSearch([])
->when((int)$params['uid'] > 0,function($query) use ($params){
$query->where('uid', (int)$params['uid']);
})
->when((int)$params['mer_id'] > 0,function($query) use ($params){
$query->where('mer_id', (int)$params['mer_id']);
});
// 信息统计
return [
'order_total_price' => $orderQuery->sum('order_total_price'),
'order_product_total_price' => $orderQuery->sum('order_product_total_price'),
'total_platform_commission_money' => $orderQuery->sum('platform_commission_money'),
'total_commission_platform_money' => $orderQuery->sum('commission_platform_money'),
'total_commission_partner_money' => $orderQuery->sum('commission_partner_money'),
'total_commission_merchants_money' => $orderQuery->sum('commission_merchants_money'),
'total_commission_promoter_money' => $orderQuery->sum('commission_promoter_money'),
'total_commission_integral_release_money' => $orderQuery->sum('commission_integral_release_money'),
];
}
/**
* Common: 抽成记录 - 信息列表
* Author: wu-hui
* Time: 2023/12/22 17:55
* @param array $params
* @param int $page
* @param int $limit
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function getRecordList(array $params,int $page,int $limit):array{
$query = $this->dao->getSearch([])
->when((int)$params['uid'] > 0,function($query) use ($params){
$query->where('uid', (int)$params['uid']);
})
->when((int)$params['mer_id'] > 0,function($query) use ($params){
$query->where('mer_id', (int)$params['mer_id']);
})
->with([
'mer' => function($query){
$query->field('mer_id,mer_name,mer_avatar')->bind(['mer_name','mer_avatar']);
},
'user' => function($query){
$query->field('uid,nickname,avatar')->bind(['nickname','avatar']);
}
}
}
])
->order('create_time DESC');
$count = $query->count();
$list = $query->page($page,$limit)->select();
$this->dao->insertAll($insertData);
return true;
return compact('count','list');
}
}

View File

@ -55,8 +55,44 @@ class PlatformCommission extends BaseController{
return app('json')->success('保存成功');
}
/**
* Common: 抽成记录 - 获取统计
* Author: wu-hui
* Time: 2023/12/22 17:49
* @return mixed
*/
public function recordTitle(){
$params = $this->request->params(['uid','mer_id']);
$data = $this->repository->getRecordStatistics((array)$params);
return app('json')->success([
// ['className' => 'el-icon-coin','count' => $data['order_total_price'],'name' => '订单总金额'],
// ['className' => 'el-icon-coin','count' => $data['order_product_total_price'],'name' => '商品总金额'],
['className' => 'el-icon-coin','count' => $data['total_platform_commission_money'],'name' => '平台抽成总金额'],
['className' => 'el-icon-coin','count' => $data['total_commission_platform_money'],'name' => '平台分佣总金额'],
['className' => 'el-icon-coin','count' => $data['total_commission_partner_money'],'name' => '合伙人分佣总金额'],
['className' => 'el-icon-coin','count' => $data['total_commission_merchants_money'],'name' => '招商员分佣总金额'],
['className' => 'el-icon-coin','count' => $data['total_commission_promoter_money'],'name' => '推广员分佣总金额'],
['className' => 'el-icon-coin','count' => $data['total_commission_integral_release_money'],'name' => '积分释放总金额'],
]);
}
/**
* Common: 抽成记录 - 获取信息列表
* Author: wu-hui
* Time: 2023/12/22 17:55
* @return mixed
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function recordList(){
[$page, $limit] = $this->getPage();
$params = $this->request->params(['uid','mer_id']);
$data = $this->repository->getRecordList((array)$params,(int)$page,(int)$limit);
return app('json')->success($data);
}

View File

@ -2,6 +2,8 @@
namespace app\listener\platformCommission;
use app\common\model\store\platformCommission\Record;
use app\common\model\system\merchant\Merchant;
use app\common\repositories\store\platformCommission\RecordRepository;
use think\facade\Log;
@ -12,8 +14,61 @@ class OrderPaySuccessEvent{
$groupOrder = $groupOrder['groupOrder'];
Log::info('支付成功 - 平台抽成处理 - 开始: '.var_export(['uid'=>$groupOrder->uid,'group_order_id'=>$groupOrder->group_order_id],1));
app()->make(RecordRepository::class)->orderPaySuccessHandle($groupOrder);
$this->orderPaySuccessHandle($groupOrder);
}
/**
* Common: 支付成功 - 平台抽成处理
* Author: wu-hui
* Time: 2023/12/22 17:25
* @param $groupOrder
* @return bool
*/
public function orderPaySuccessHandle($groupOrder):bool{
// 判断:是否开启平台抽成
$set = app()->make(RecordRepository::class)->getBaseConfig();
if($set['is_open'] != 1) {
Log::info('支付成功 - 平台抽成处理 - 未开启平台抽成');
return false;
}
// 循环处理单个商品抽成信息
$insertData = [];
foreach($groupOrder->orderList as $orderInfo){
foreach($orderInfo->orderProduct as $orderProductInfo){
// 获取商户设置抽成比例 获取抽成总金额
$platformCommissionRate = (float)Merchant::getDB()->where('mer_id', $orderInfo->mer_id)->value('platform_commission');
// 使用商品售价进行处理
if($orderProductInfo->total_price > 0 && $platformCommissionRate > 0){
// 获取平台抽成中总金额
$platformCommissionMoney = (float)sprintf("%.2f",$orderProductInfo->total_price * $platformCommissionRate / 100);
// 生成信息数组
$insertData[] = [
'uid' => $orderProductInfo->uid,
'order_id' => $orderProductInfo->order_id,
'order_total_price' => $orderInfo->total_price,
'order_product_id' => $orderProductInfo->order_product_id,
'order_product_total_price' => $orderProductInfo->total_price,
'mer_id' => $orderInfo->mer_id,
'platform_commission_rate' => $platformCommissionRate,
'platform_commission_money' => $platformCommissionMoney,
'commission_platform_rate' => $set['commission_platform_rate'],
'commission_platform_money' => (float)sprintf("%.2f",$platformCommissionMoney * $set['commission_platform_rate'] / 100),
'commission_partner_rate' => $set['commission_partner_rate'],
'commission_partner_money' => (float)sprintf("%.2f",$platformCommissionMoney * $set['commission_partner_rate'] / 100),
'commission_merchants_rate' => $set['commission_merchants_rate'],
'commission_merchants_money' => (float)sprintf("%.2f",$platformCommissionMoney * $set['commission_merchants_rate'] / 100),
'commission_promoter_rate' => $set['commission_promoter_rate'],
'commission_promoter_money' => (float)sprintf("%.2f",$platformCommissionMoney * $set['commission_promoter_rate'] / 100),
'commission_integral_release_rate' => $set['commission_integral_release_rate'],
'commission_integral_release_money' => (float)sprintf("%.2f",$platformCommissionMoney * $set['commission_integral_release_rate'] / 100),
];
}
}
}
Record::insertAll($insertData);
return true;
}
}

View File

@ -433,8 +433,13 @@ Route::group(function () {
Route::post('config', '.platformCommission/saveConfig')->name('platformCommissionConfigSave')->option([
'_alias' => '设置保存',
]);
// 抽成记录
Route::get('record_title','.platformCommission/recordTitle')->name('platformCommissionRecordTitle')->option([
'_alias' => '抽成统计',
]);
Route::get('record_list', '.platformCommission/recordList')->name('platformCommissionRecordList')->option([
'_alias' => '抽成记录',
]);