添加:购商品支付成功后生成平台抽成记录

This commit is contained in:
wuhui_zzw 2023-12-22 17:19:53 +08:00
parent 3d1b982e2f
commit b5bf05b24a
8 changed files with 199 additions and 31 deletions

View File

@ -0,0 +1,23 @@
<?php
namespace app\common\dao\store\platformCommission;
use app\common\dao\BaseDao;
use app\common\model\store\platformCommission\Record;
class RecordDao extends BaseDao{
protected function getModel():string{
return Record::class;
}
}

View File

@ -0,0 +1,33 @@
<?php
namespace app\common\model\store\platformCommission;
use app\common\model\BaseModel;
use think\model\concern\SoftDelete;
class Record extends BaseModel
{
use SoftDelete;
protected $deleteTime = 'is_del';
protected $defaultSoftDelete = 0;
public static function tablePk():string{
return 'id';
}
public static function tableName():string{
return 'platform_commission_record';
}
}

View File

@ -0,0 +1,109 @@
<?php
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{
protected $dao;
public function __construct(RecordDao $dao){
$this->dao = $dao;
}
/**
* Common: 获取基本设置
* Author: wu-hui
* Time: 2023/12/22 16:31
* @return int[]|mixed
*/
public function getBaseConfig(){
$default = [
'is_open' => 0,
'commission_platform_rate' => 0,
'commission_partner_rate' => 0,
'commission_partner_cycle' => 0,
'commission_merchants_rate' => 0,
'commission_promoter_rate' => 0,
'commission_integral_release_rate' => 0
];
$config = systemConfig(array_keys($default));
return array_filter($config,function($v){
return $v !== '';
}) + $default;
}
/**
* Common: 支付成功 平台抽成处理
* Author: wu-hui
* Time: 2023/12/22 17:15
* @param $groupOrder
* @return bool
*/
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),
];
}
}
}
$this->dao->insertAll($insertData);
return true;
}
}

View File

@ -2,8 +2,9 @@
namespace app\controller\admin\user;
namespace app\controller\admin\store\marketing;
use app\common\repositories\store\platformCommission\RecordRepository;
use app\common\repositories\system\config\ConfigClassifyRepository;
use app\common\repositories\system\config\ConfigValueRepository;
use app\validate\admin\platformCommission\ConfigValidate;
@ -13,8 +14,10 @@ use think\App;
class PlatformCommission extends BaseController{
protected $repository;
public function __construct(App $app){
public function __construct(App $app,RecordRepository $repository){
parent::__construct($app);
$this->repository = $repository;
}
/**
@ -24,22 +27,8 @@ class PlatformCommission extends BaseController{
* @return mixed
*/
public function getConfig(){
$default = [
'is_open' => 0,
'commission_platform_rate' => 0,
'commission_partner_rate' => 0,
'commission_partner_cycle' => 0,
'commission_merchants_rate' => 0,
'commission_promoter_rate' => 0,
'commission_integral_release_rate' => 0
];
$config = systemConfig(array_keys($default));
$config = array_filter($config,function($v){
return $v !== '';
}) + $default;
return app('json')->success($config);
return app('json')->success($this->repository->getBaseConfig());
}
/**
* Common: 编辑配置信息
@ -71,13 +60,4 @@ class PlatformCommission extends BaseController{
}

View File

@ -4,7 +4,6 @@
// 事件定义文件
return [
'bind' => [],
'listen' => [
'AppInit' => [],
'HttpRun' => [],
@ -53,7 +52,11 @@ return [
'pay_success_order' => [\crmeb\listens\pay\OrderPaySuccessListen::class],
'pay_success_presell' => [\crmeb\listens\pay\PresellPaySuccessListen::class],
'pay_success_meal' => [\crmeb\listens\pay\MealSuccessListen::class],
// 订单支付成功事件触发
'order.paySuccess' => [
// 支付成功处理平台抽成
'app\listener\platformCommission\OrderPaySuccessEvent'
],
],
'subscribe' => [],
];

View File

@ -0,0 +1,19 @@
<?php
namespace app\listener\platformCommission;
use app\common\repositories\store\platformCommission\RecordRepository;
use think\facade\Log;
class OrderPaySuccessEvent{
public $groupOrder;
public function handle($groupOrder){
$groupOrder = $groupOrder['groupOrder'];
Log::info('支付成功 - 平台抽成处理 - 开始: '.var_export(['uid'=>$groupOrder->uid,'group_order_id'=>$groupOrder->group_order_id],1));
app()->make(RecordRepository::class)->orderPaySuccessHandle($groupOrder);
}
}

View File

@ -72,7 +72,7 @@ class WechatTemplateMessageService
{
event('wechat.subscribeTemplate.before',compact('data'));
$res = $this->subscribeTemplateMessage($data);
Log::info('订阅消息发送Data' . var_export($data, 1));
// Log::info('订阅消息发送Data' . var_export($data, 1));
if(!$res || !is_array($res))return true;
foreach($res as $item){

View File

@ -425,7 +425,8 @@ Route::group(function () {
]
]);
// 平台抽成
Route::group('user/platformCommission', function () {
Route::group('marketing/platformCommission', function () {
// 设置处理
Route::get('config', '.platformCommission/getConfig')->name('platformCommissionConfig')->option([
'_alias' => '设置获取',
]);
@ -438,7 +439,7 @@ Route::group(function () {
})->prefix('admin.user')->option([
})->prefix('admin.store.marketing')->option([
'_path' => '/marketing/platformCommission/index',
'_auth' => true,
]);