From b9a3852f197609060d35ab175e00f4216a9b3a1e Mon Sep 17 00:00:00 2001 From: wuhui_zzw <1760308791@qq.com> Date: Wed, 27 Dec 2023 18:16:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=9A=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?=E6=8A=BD=E6=88=90=20-=20=E6=8B=9B=E5=95=86=E4=BD=A3=E9=87=91?= =?UTF-8?q?=E5=92=8C=E6=8E=A8=E5=B9=BF=E4=BD=A3=E9=87=91=E5=88=B0=E8=B4=A6?= =?UTF-8?q?=EF=BC=88=E5=86=BB=E7=BB=93=E4=B8=AD=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/common/dao/store/order/StoreOrderDao.php | 2 +- app/common/dao/user/UserBillDao.php | 44 +++++++-- .../repositories/user/UserBillRepository.php | 2 + app/controller/api/Auth.php | 25 ++--- .../CommissionMerchantsSettlementJob.php | 92 +++++++++++++++++++ .../CommissionPromoterSettlementJob.php | 77 ++++++++++++++++ .../platformCommission/GiveWeightValueJob.php | 4 +- .../OrderPaySuccessEvent.php | 17 +++- 8 files changed, 233 insertions(+), 30 deletions(-) create mode 100644 app/jobs/store/platformCommission/CommissionMerchantsSettlementJob.php create mode 100644 app/jobs/store/platformCommission/CommissionPromoterSettlementJob.php diff --git a/app/common/dao/store/order/StoreOrderDao.php b/app/common/dao/store/order/StoreOrderDao.php index 99e0f66..6ac97a0 100644 --- a/app/common/dao/store/order/StoreOrderDao.php +++ b/app/common/dao/store/order/StoreOrderDao.php @@ -103,7 +103,7 @@ class StoreOrderDao extends BaseDao ->when(isset($where['is_spread']) && $where['is_spread'] !== '', function ($query) use ($where) { if ($where['is_spread']) { $query->where(function($query) { - $query->where('spread_uid','>',0)->whereOr('top_uid','>',0); + $query->where('StoreOrder.spread_uid','>',0)->whereOr('top_uid','>',0); }); } }) diff --git a/app/common/dao/user/UserBillDao.php b/app/common/dao/user/UserBillDao.php index 9d6737c..96a841c 100644 --- a/app/common/dao/user/UserBillDao.php +++ b/app/common/dao/user/UserBillDao.php @@ -101,18 +101,44 @@ class UserBillDao extends BaseDao * @author xaboy * @day 2020/6/22 */ - public function lockBrokerage($uid) - { - $lst = UserBill::getDB()->where('category', 'brokerage') - ->whereIn('type', ['order_one', 'order_two'])->where('uid', $uid)->where('status', 0)->field('link_id,number')->select()->toArray(); + public function lockBrokerage($uid){ + // 减少佣金退款金额 + $lst = UserBill::getDB() + ->where('category','brokerage') + ->whereIn('type',['order_one','order_two']) + ->where('uid',$uid) + ->where('status',0) + ->field('link_id,number') + ->select() + ->toArray(); $refundPrice = 0; - if (count($lst)) { - $refundPrice = -1 * UserBill::getDB()->whereIn('link_id', array_column($lst, 'link_id'))->where('uid', $uid) - ->where('category', 'brokerage')->whereIn('type', ['refund_two', 'refund_one'])->sum('number'); + if(count($lst)){ + $refundPrice = -1 * UserBill::getDB() + ->whereIn('link_id',array_column($lst,'link_id')) + ->where('uid',$uid) + ->where('category','brokerage') + ->whereIn('type',['refund_two','refund_one']) + ->sum('number'); } - foreach ($lst as $bill) { - $refundPrice = bcadd($refundPrice, $bill['number'], 2); + foreach($lst as $bill){ + $refundPrice = bcadd($refundPrice,$bill['number'],2); } + // 招商佣金&推广员佣金 + $commissionList = UserBill::getDB()->where('category', 'brokerage') + ->whereIn('type', ['commission_merchants','commission_promoter']) + ->where('uid', $uid) + ->where('status', 0) + ->field('link_id,number') + ->select() + ->toArray(); + // if (count($lst)) { + // $refundPrice = -1 * UserBill::getDB()->whereIn('link_id', array_column($lst, 'link_id'))->where('uid', $uid) + // ->where('category', 'brokerage')->whereIn('type', ['refund_two', 'refund_one'])->sum('number'); + // } + foreach ($commissionList as $billTwo) { + $refundPrice = bcadd($refundPrice, $billTwo['number'], 2); + } + return $refundPrice; } diff --git a/app/common/repositories/user/UserBillRepository.php b/app/common/repositories/user/UserBillRepository.php index c853472..25010cc 100644 --- a/app/common/repositories/user/UserBillRepository.php +++ b/app/common/repositories/user/UserBillRepository.php @@ -34,6 +34,8 @@ class UserBillRepository extends BaseRepository 'brokerage/order_two' => '获得二级推广佣金', 'brokerage/refund_one' => '退还一级佣金', 'brokerage/refund_two' => '退还二级佣金', + 'brokerage/commission_merchants' => '招商员佣金', + 'brokerage/commission_promoter' => '推广员佣金', 'integral/cancel' => '退回积分', 'integral/deduction' => '购买商品', 'integral/points' => '兑换商品', diff --git a/app/controller/api/Auth.php b/app/controller/api/Auth.php index 4e36b87..3d7a672 100644 --- a/app/controller/api/Auth.php +++ b/app/controller/api/Auth.php @@ -8,11 +8,15 @@ namespace app\controller\api; use app\common\model\store\platformCommission\WeightValue; use app\common\model\store\platformCommission\WeightValueLog; +use app\common\model\system\merchant\Merchant; use app\common\repositories\store\order\StoreGroupOrderRepository; use app\common\repositories\store\order\StoreOrderRepository; use app\common\repositories\store\order\StoreRefundOrderRepository; +use app\common\repositories\store\platformCommission\RecordRepository; use app\common\repositories\store\platformCommission\WeightValueRepository; +use app\common\repositories\system\merchant\MerchantRepository; use app\common\repositories\system\notice\SystemNoticeConfigRepository; +use app\common\repositories\user\UserBillRepository; use app\common\repositories\user\UserBrokerageRepository; use app\common\repositories\user\UserRepository; use app\common\repositories\user\UserSignRepository; @@ -51,21 +55,6 @@ use crmeb\jobs\SendSmsJob; class Auth extends BaseController { public function test(){ -// $data = [ -// 'tempId' => '', -// 'id' => '', -// ]; -// Queue::push(SendSmsJob::class,$data); -// $status = app()->make(SystemNoticeConfigRepository::class)->getNoticeStatusByConstKey($data['tempId']); -// if ($status['notice_sms'] == 1) { -// SmsService::sendMessage($data); -// } -// if ($status['notice_wechat'] == 1) { -// app()->make(WechatTemplateMessageService::class)->sendTemplate($data); -// } -// if ($status['notice_routine'] == 1) { -// app()->make(WechatTemplateMessageService::class)->subscribeSendTemplate($data); -// } // 分销商升级模拟 // $user = app()->make(UserRepository::class)->get(327706); @@ -75,8 +64,6 @@ class Auth extends BaseController // ]); // debug(['升级结果'=>$res]); - - // $userList = app()->make(WeightValueRepository::class)->getUserHoldList(327706); // debug(['用户列表'=>$userList]); // 订单支付成功 触发购买商品赠送上级权重值 @@ -85,6 +72,10 @@ class Auth extends BaseController // 'group_order_id' => 133 // ]); + + + + } /** diff --git a/app/jobs/store/platformCommission/CommissionMerchantsSettlementJob.php b/app/jobs/store/platformCommission/CommissionMerchantsSettlementJob.php new file mode 100644 index 0000000..e682acb --- /dev/null +++ b/app/jobs/store/platformCommission/CommissionMerchantsSettlementJob.php @@ -0,0 +1,92 @@ +make(RecordRepository::class) + ->getSearch([]) + ->field(['id','uid','mer_id','order_id','commission_merchants_money']) + ->whereIn('order_id',$data['order_ids']) + ->where('commission_merchants_status',0) + ->where('commission_merchants_money','>',0) + ->with([ + 'mer' => function($query){ + $query->field('mer_id,mer_name,mer_avatar,spread_uid as mer_spread_uid')->bind(['mer_name','mer_avatar','mer_spread_uid']); + }, + 'user' => function($query){ + $query->field('uid,nickname,avatar')->bind(['nickname','avatar']); + }, + ]) + ->select() + ->toArray(); + if($list){ + $userBillRepository = app()->make(UserBillRepository::class); + $userRepository = app()->make(UserRepository::class); + $updateData = []; + foreach($list as $singleInfo){ + if((int)$singleInfo['mer_spread_uid'] > 0){ + $userBillRepository->incBill($singleInfo['mer_spread_uid'], 'brokerage', 'commission_merchants', [ + 'link_id' => $singleInfo['order_id'], + 'status' => 0, + 'title' => '获得招商佣金', + 'number' => $singleInfo['commission_merchants_money'], + 'mark' => $singleInfo['nickname'] . '在' . $singleInfo['mer_name'] . '进行消费,奖励招商佣金' . floatval($singleInfo['commission_merchants_money']), + 'balance' => 0 + ]); + $userRepository->incBrokerage($singleInfo['mer_spread_uid'], $singleInfo['commission_merchants_money']); + $updateData[] = [ + 'id' => $singleInfo['id'], + 'commission_merchants_status' => 1 + ]; + }else{ + $updateData[] = [ + 'id' => $singleInfo['id'], + 'commission_merchants_status' => 2 + ]; + } + } + // 修改成功信息 + Record::batchUpdate(array_values($updateData)); + } + } + catch(\Exception $e){ + $data['error_msg'] = $e->getMessage(); + Log::info('招商员佣金结算 - 失败: '.var_export($data,1)); + } + $job->delete(); + } + + public function failed($data){ + Log::info('招商员佣金结算 - 失败(failed): '.var_export($data,1)); + } + + + + + + + + + + + +} diff --git a/app/jobs/store/platformCommission/CommissionPromoterSettlementJob.php b/app/jobs/store/platformCommission/CommissionPromoterSettlementJob.php new file mode 100644 index 0000000..10bceb9 --- /dev/null +++ b/app/jobs/store/platformCommission/CommissionPromoterSettlementJob.php @@ -0,0 +1,77 @@ +make(RecordRepository::class) + ->getSearch([]) + ->field(['id','uid','mer_id','order_id','commission_promoter_money']) + ->whereIn('order_id',$data['order_ids']) + ->where('commission_promoter_status',0) + ->where('commission_promoter_money','>',0) + ->with([ + 'user' => function($query){ + $query->field('uid,nickname,avatar,spread_uid')->bind(['nickname','avatar','spread_uid']); + }, + ]) + ->select() + ->toArray(); + if($list){ + $userBillRepository = app()->make(UserBillRepository::class); + $userRepository = app()->make(UserRepository::class); + $updateData = []; + foreach($list as $singleInfo){ + if((int)$singleInfo['spread_uid'] > 0){ + $userBillRepository->incBill($singleInfo['spread_uid'], 'brokerage', 'commission_promoter', [ + 'link_id' => $singleInfo['order_id'], + 'status' => 0, + 'title' => '获得推广佣金', + 'number' => $singleInfo['commission_promoter_money'], + 'mark' => $singleInfo['nickname'] . '进行消费,奖励推广佣金' . floatval($singleInfo['commission_promoter_money']), + 'balance' => 0 + ]); + $userRepository->incBrokerage($singleInfo['spread_uid'], $singleInfo['commission_promoter_money']); + $updateData[] = [ + 'id' => $singleInfo['id'], + 'commission_promoter_status' => 1 + ]; + }else{ + $updateData[] = [ + 'id' => $singleInfo['id'], + 'commission_promoter_status' => 2 + ]; + } + } + // 修改成功信息 + Record::batchUpdate(array_values($updateData)); + } + } + catch(\Exception $e){ + $data['error_msg'] = $e->getMessage(); + Log::info('推广员佣金结算 - 失败: '.var_export($data,1)); + } + $job->delete(); + } + public function failed($data){ + Log::info('推广员佣金结算 - 失败(failed): '.var_export($data,1)); + } +} diff --git a/app/jobs/store/platformCommission/GiveWeightValueJob.php b/app/jobs/store/platformCommission/GiveWeightValueJob.php index 6a98f11..acf9075 100644 --- a/app/jobs/store/platformCommission/GiveWeightValueJob.php +++ b/app/jobs/store/platformCommission/GiveWeightValueJob.php @@ -61,8 +61,8 @@ class GiveWeightValueJob implements JobInterface{ } // 数据结果处理 if(count($insertLogData) > 0){ - $res = WeightValue::batchUpdate(array_values($updateData)); - $res = WeightValueLog::insertAll($insertLogData); + WeightValue::batchUpdate(array_values($updateData)); + WeightValueLog::insertAll($insertLogData); } } catch(\Exception $e){ diff --git a/app/listener/platformCommission/OrderPaySuccessEvent.php b/app/listener/platformCommission/OrderPaySuccessEvent.php index b999601..2b83c5b 100644 --- a/app/listener/platformCommission/OrderPaySuccessEvent.php +++ b/app/listener/platformCommission/OrderPaySuccessEvent.php @@ -5,6 +5,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 app\jobs\store\platformCommission\CommissionMerchantsSettlementJob; +use app\jobs\store\platformCommission\CommissionPromoterSettlementJob; use app\jobs\store\platformCommission\GiveWeightValueJob; use crmeb\jobs\UserBrokerageLevelJob; use think\facade\Log; @@ -47,7 +49,9 @@ class OrderPaySuccessEvent{ } // 循环处理单个商品抽成信息 $insertData = []; + $orderIds = []; foreach($groupOrder->orderList as $orderInfo){ + $orderIds[] = $orderInfo->order_id; foreach($orderInfo->orderProduct as $orderProductInfo){ // 获取商户设置抽成比例 获取抽成总金额 $platformCommissionRate = (float)Merchant::getDB()->where('mer_id', $orderInfo->mer_id)->value('platform_commission'); @@ -79,8 +83,19 @@ class OrderPaySuccessEvent{ } } } + // 记录平台抽成信息 + if(count($insertData) > 0){ + Record::insertAll($insertData); + // 招商员佣金结算 + Queue::push(CommissionMerchantsSettlementJob::class,[ + 'order_ids' => $orderIds + ]); + // 推广员佣金结算 + Queue::push(CommissionPromoterSettlementJob::class,[ + 'order_ids' => $orderIds + ]); + } - Record::insertAll($insertData); return true; }