gorden 5 сар өмнө
parent
commit
fef033d992

+ 14 - 98
app/admin/controller/order/GoodsController.php

@@ -1324,61 +1324,19 @@ class GoodsController extends Curd
                 $appointment->save();
             }
 
-            // // 买的单个服务
-            if ($order->order_status_payment == 'SUCCESS' && empty($appointment)) {
-                foreach ($params['goodsContentList'] as $goods) {
-                    $params['join_sheet_goods_id'] = $goods['goods_id'];
-                    if (isset($goods['goods_classify']) && in_array($goods['goods_classify'], ['SERVICE', 'CHNMED', 'CHNNCD'])) {
-                        $params['benefitId'] = 'BF' . date('ymdHi') . random_string(4, 'up');
-                        $params['order_sheet_num'] = $goods['nbr'];
-                        // 预约表
-                        for ($i = 0; $i < intval($params['order_sheet_num']); $i++) {
-                            $params['appointmentId'] = 'AP' . date('ymdHi') . random_string(4, 'up');
-                            // 入预约记录
-                            $this->insertAppointment($params, $writeOffDate, $applyData);
-                        }
-                        $goods['skuId'] = $goods['sku_id'];
-                        $goods['category'] = $goods['goods_classify'];
-                        // 权益表
-                        $this->insertMemberBenefit($params, $goods);
-                    } elseif (isset($goods['goods_classify']) && $goods['goods_classify'] == 'PACKAGE') {  // 一个套餐买多个
-                        $params['packageId'] = $goods['goods_id'];
-                        $components = GoodsComponent::with([
-                            'goods' => function ($query) {
-                                $query->select('goods_id', 'goods_name', 'goods_classify');
-                            }
-                        ])->where('join_component_master_goods_id', $params['packageId'])
-                            ->get()
-                            ->toArray();
-                        foreach ($components as $component) {
-                            $componentJson = json_decode($component['goods_component_json'], true);
-                            $params['join_sheet_goods_sku_id'] = $componentJson['sku_id'];
-                            $params['benefitId'] = 'BF' . date('ymdHi') . random_string(4, 'up');
-                            $params['order_sheet_num'] = $goods['nbr'] * $componentJson['nbr'];
-                            for ($i = 0; $i < intval($params['order_sheet_num']); $i++) {
-                                $params['appointmentId'] = 'AP' . date('ymdHi') . random_string(4, 'up');
-                                // 入预约记录
-                                $this->insertAppointment($params, $writeOffDate);
-                            }
-                            $goods['goods_id'] = $component['join_component_goods_id'];
-                            $goods['goods_name'] = $component['goods']['goods_name'];
-                            $goods['goods_classify'] = $component['goods']['goods_classify'];
-                            $goods['skuId'] = $goods['sku_id'];
-                            $goods['category'] = 'SERVICE';
-                            // 权益表
-                            $this->insertMemberBenefit($params, $goods);
-                        }
-                    }
-                }
-            }
-
             Db::commit();
 
-            // 会员升级
+            // 触发事件
             if ($order->order_is_complete == 'Y' && $order->order_status_payment == 'SUCCESS') {
+                // 完成订单
                 Event::dispatch('order.complete', $params);
+                // 会员升级
                 Event::dispatch('order_pay.member_level.up', $params['join_order_member_id']);
             }
+            if($order->order_status_payment == 'SUCCESS'){
+                // 上级提成
+                Event::dispatch('commission.order',$params);
+            }
 
             // 打小票
             if ($order->order_status_payment == 'SUCCESS') {
@@ -1407,7 +1365,6 @@ class GoodsController extends Curd
                 if (!is_array($couponUseJson)) {
                     $couponUseJson = json_decode($couponUseJson, true);
                 }
-
                 // 如果下单时就填了,不用恢复
                 if (empty($discountJson)) {
                     $this->changeOrderCouponStatus($couponUseJson, 'WAITING');
@@ -1743,59 +1700,18 @@ class GoodsController extends Curd
 
                 $appointment->save();
             }
-            // 买单个服务
-            if ($order->order_status_payment == 'SUCCESS' && empty($appointment)) {
-                foreach ($params['goodsContentList'] as $goods) {
-                    $params['join_sheet_goods_id'] = $goods['goods_id'];
-                    if (isset($goods['goods_classify']) && in_array($goods['goods_classify'], ['SERVICE', 'CHNMED', 'CHNNCD'])) {
-                        $params['benefitId'] = 'BF' . date('ymdHi') . random_string(4, 'up');
-                        $params['order_sheet_num'] = $goods['nbr'];
-                        // 预约表
-                        for ($i = 0; $i < intval($params['order_sheet_num']); $i++) {
-                            $params['appointmentId'] = 'AP' . date('ymdHi') . random_string(4, 'up');
-                            // 入预约记录
-                            $this->insertAppointment($params, $writeOffDate, $applyData);
-                        }
-                        $goods['skuId'] = $goods['sku_id'];
-                        $goods['category'] = $goods['goods_classify'];
-                        // 权益表
-                        $this->insertMemberBenefit($params, $goods);
-                    } elseif (isset($goods['goods_classify']) && $goods['goods_classify'] == 'PACKAGE') {  // 一个套餐买多个
-                        $params['packageId'] = $goods['goods_id'];
-                        $components = GoodsComponent::with([
-                            'goods' => function ($query) {
-                                $query->select('goods_id', 'goods_name', 'goods_classify');
-                            }
-                        ])->where('join_component_master_goods_id', $params['packageId'])
-                            ->get()
-                            ->toArray();
-                        foreach ($components as $component) {
-                            $componentJson = json_decode($component['goods_component_json'], true);
-                            $params['join_sheet_goods_sku_id'] = $componentJson['sku_id'];
-                            $params['benefitId'] = 'BF' . date('ymdHi') . random_string(4, 'up');
-                            $params['order_sheet_num'] = $goods['nbr'] * $componentJson['nbr'];
-                            for ($i = 0; $i < intval($params['order_sheet_num']); $i++) {
-                                $params['appointmentId'] = 'AP' . date('ymdHi') . random_string(4, 'up');
-                                // 入预约记录
-                                $this->insertAppointment($params, $writeOffDate);
-                            }
-                            $goods['goods_id'] = $component['join_component_goods_id'];
-                            $goods['goods_name'] = $component['goods']['goods_name'];
-                            $goods['goods_classify'] = $component['goods']['goods_classify'];
-                            $goods['skuId'] = $goods['sku_id'];
-                            $goods['category'] = 'SERVICE';
-                            // 权益表
-                            $this->insertMemberBenefit($params, $goods);
-                        }
-                    }
-                }
-            }
             Db::commit();
-            // 会员升级
+            // 触发事件
             if ($order->order_is_complete == 'Y' && $order->order_status_payment == 'SUCCESS') {
+                // 完成订单
                 Event::dispatch('order.complete', $params);
+                // 会员升级
                 Event::dispatch('order_pay.member_level.up', $params['join_order_member_id']);
             }
+            if($order->order_status_payment == 'SUCCESS'){
+                // 上级提成
+                Event::dispatch('commission.order',$params);
+            }
 
             // 打小票
             if ($order->order_status_payment == 'SUCCESS') {

+ 14 - 2
app/admin/controller/order/PackagesController.php

@@ -1509,11 +1509,17 @@ class PackagesController extends Curd
 
             Db::commit();
 
-            // 会员升级
+            // 触发事件
             if ($order->order_is_complete == 'Y' && $order->order_status_payment == 'SUCCESS') {
+                // 完成订单
                 Event::dispatch('order.complete', $params);
+                // 会员升级
                 Event::dispatch('order_pay.member_level.up', $params['join_order_member_id']);
             }
+            if($order->order_status_payment == 'SUCCESS'){
+                // 上级提成
+                Event::dispatch('commission.order',$params);
+            }
 
             // 打小票
             if ($order->order_status_payment == 'SUCCESS') {
@@ -1926,11 +1932,17 @@ class PackagesController extends Curd
             }
 
             Db::commit();
-            // 会员升级
+            // 触发事件
             if ($order->order_is_complete == 'Y' && $order->order_status_payment == 'SUCCESS') {
+                // 完成订单
                 Event::dispatch('order.complete', $params);
+                // 会员升级
                 Event::dispatch('order_pay.member_level.up', $params['join_order_member_id']);
             }
+            if($order->order_status_payment == 'SUCCESS'){
+                // 上级提成
+                Event::dispatch('commission.order',$params);
+            }
 
             // 打小票
             if ($order->order_status_payment == 'SUCCESS') {

+ 14 - 2
app/admin/controller/order/ServicesController.php

@@ -1377,11 +1377,17 @@ class ServicesController extends Curd
 
             Db::commit();
 
-            // 会员升级
+            // 触发事件
             if ($order->order_is_complete == 'Y' && $order->order_status_payment == 'SUCCESS') {
+                // 完成订单
                 Event::dispatch('order.complete', $params);
+                // 会员升级
                 Event::dispatch('order_pay.member_level.up', $params['join_order_member_id']);
             }
+            if($order->order_status_payment == 'SUCCESS'){
+                // 上级提成
+                Event::dispatch('commission.order',$params);
+            }
 
             // 打小票
             if ($order->order_status_payment == 'SUCCESS') {
@@ -1794,11 +1800,17 @@ class ServicesController extends Curd
             }
 
             Db::commit();
-            // 会员升级
+            // 触发事件
             if ($order->order_is_complete == 'Y' && $order->order_status_payment == 'SUCCESS') {
+                // 完成订单
                 Event::dispatch('order.complete', $params);
+                // 会员升级
                 Event::dispatch('order_pay.member_level.up', $params['join_order_member_id']);
             }
+            if($order->order_status_payment == 'SUCCESS'){
+                // 上级提成
+                Event::dispatch('commission.order',$params);
+            }
 
             // 打小票
             if ($order->order_status_payment == 'SUCCESS') {

+ 20 - 4
app/admin/controller/order/WholeController.php

@@ -1282,10 +1282,14 @@ class WholeController extends Curd
 
             Db::commit();
 
-            // 会员升级
+            // 触发事件
             if ($order->order_is_complete == 'Y' && $order->order_status_payment == 'SUCCESS') {
+                // 完成订单
                 Event::dispatch('order.complete', $params);
+                // 会员升级
                 Event::dispatch('order_pay.member_level.up', $params['join_order_member_id']);
+                // 上级提成
+                Event::dispatch('commission.order',$params);
             }
 
             // 打小票
@@ -1736,10 +1740,14 @@ class WholeController extends Curd
             }
 
             Db::commit();
-            // 会员升级
+            // 触发事件
             if ($order->order_is_complete == 'Y' && $order->order_status_payment == 'SUCCESS') {
+                // 完成订单
                 Event::dispatch('order.complete', $params);
+                // 会员升级
                 Event::dispatch('order_pay.member_level.up', $params['join_order_member_id']);
+                // 上级提成
+                Event::dispatch('commission.order',$params);
             }
 
             // 打小票
@@ -2454,10 +2462,14 @@ class WholeController extends Curd
 
             Db::commit();
 
-            // 会员升级
+            // 触发事件
             if (!empty($params['order_is_complete']) && $params['order_is_complete'] == 'Y' && $params['order_status_payment'] == 'SUCCESS') {
+                // 订单完成
                 Event::dispatch('order.complete', $params);
+                // 会员升级
                 Event::dispatch('order_pay.member_level.up', $params['join_order_member_id']);
+                // 上级提成
+                Event::dispatch('commission.order',$params);
             }
 
             // 打小票
@@ -3007,10 +3019,14 @@ class WholeController extends Curd
 
             Db::commit();
 
-            // 会员升级
+            // 触发事件
             if (!empty($params['order_is_complete']) && $params['order_is_complete'] == 'Y' && $params['order_status_payment'] == 'SUCCESS') {
+                // 完成订单
                 Event::dispatch('order.complete', $params);
+                // 会员升级
                 Event::dispatch('order_pay.member_level.up', $params['join_order_member_id']);
+                // 上级提成
+                Event::dispatch('commission.order',$params);
             }
 
             // 打小票

+ 44 - 0
app/admin/controller/sys_manage/ConfigController.php

@@ -152,6 +152,50 @@ class ConfigController
         return ConfigService::paramsSave($request, $this->getType($request->post('type', '')));
     }
 
+    public function partnerParamsInfo()
+    {
+        $config = SysConfig::where('config_key', 'app-identity-partner-config')->first()->toArray();
+        $config['config_value_json'] = json_decode($config['config_value_json'], true);
+        if (!empty($config['config_value_json']['account']['added'])) {
+            $config['config_value_json']['account']['added'] = round($config['config_value_json']['account']['added'] * 100, 2);
+        }
+        if (!empty($config['config_value_json']['commission'])) {
+            $config['config_value_json']['commission']['direct'] = round($config['config_value_json']['commission']['direct'] * 100, 2);
+            $config['config_value_json']['commission']['indirect'] = round($config['config_value_json']['commission']['indirect'] * 100, 2);
+            $config['config_value_json']['commission']['relate_consum'] = round($config['config_value_json']['commission']['relate-consum'] * 100, 2);
+            $config['config_value_json']['commission']['invite_non_identity'] = round($config['config_value_json']['commission']['invite-non-identity'] * 100, 2);
+            $config['config_value_json']['commission']['agent_senior_join'] = round($config['config_value_json']['commission']['agent-senior-join'] * 100, 2);
+            $config['config_value_json']['commission']['agent_senior_strategy'] = round($config['config_value_json']['commission']['agent-senior-strategy'] * 100, 2);
+        }
+
+        return json_success('success', $config);
+    }
+
+    public function setPartnerParams(Request $request)
+    {
+        $params = $request->post();
+        if (!empty($params['account']['added'])) {
+            $params['account']['added'] = $params['account']['added'] / 100;
+        }
+        if (!empty($params['commission'])) {
+            $params['commission']['direct'] = $params['commission']['direct'] / 100;
+            $params['commission']['indirect'] = $params['commission']['indirect'] / 100;
+            $params['commission']['relate-consum'] = $params['commission']['relate_consum'] / 100;
+            $params['commission']['invite-non-identity'] = $params['commission']['invite_non_identity'] / 100;
+            $params['commission']['agent-senior-join'] = $params['commission']['agent_senior_join'] / 100;
+            $params['commission']['agent-senior-strategy'] = $params['commission']['agent_senior_strategy'] / 100;
+
+            unset($params['commission']['relate_consum'], $params['commission']['invite_non_identity'], $params['commission']['agent_senior_join'], $params['commission']['agent_senior_strategy']);
+        }
+        try {
+            SysConfig::where('config_key', 'app-identity-partner-config')->update(['config_value_json' => json_encode($params)]);
+
+            return json_success('success');
+        } catch (\Exception $e) {
+            return json_fail("保存失败");
+        }
+    }
+
     private function getType($type)
     {
         switch ($type) {

+ 127 - 0
app/event/order/CommissionEvent.php

@@ -0,0 +1,127 @@
+<?php
+
+namespace app\event\order;
+
+use app\model\Member;
+use app\model\MemberAccount;
+use app\model\MemberAccountList;
+use app\model\Order;
+use app\model\SysConfig;
+use support\Db;
+use support\exception\BusinessException;
+
+class CommissionEvent
+{
+//{
+//"config": {
+//"name": "名称",
+//"valid": 365, //有效天
+//"protocol": 229, //服务协议分类ID
+//"notice":["", ""] //注意事项数组
+//},
+//"goods": {
+//    "goods_id": "", //产品ID
+//		"goods_sku_id": 0, //产品SKUID
+//		"amount": "goods_sales_price" //核算金额字段
+//	},
+//	"commission": {
+//    "direct": 0.2, //直属提成
+//		"indirect": 0.1, //间属提成
+//		"relate-consum": 0.1, //消费关联提成 带客
+//		"invite-non-identity": 0.05, //邀请人非身份会员达成提成
+//		"agent-senior-join": 0.05, //中介加盟合伙人提成
+//		"agent-senior-strategy": 0.05, //中介战略合伙人提成
+//		"account":"CASH" //提成写入账户
+//	},
+//	"account": {
+//    "account":"CASH", //达成金额进入账户 不则为空
+//		"added":0.12 //达成金额增值 不则为0
+//	},
+//	"control": {
+//    "notify": "procMemberPartnerExec", //回调函数
+//		"if_installment": "N", //是否支持分期
+//		"if_commission_out": "Y" //提成是否可提现
+//	}
+//}
+    public function order($params)
+    {
+        // 提现设置
+        $config = SysConfig::where('config_key', 'app-identity-partner-config')->first();
+        $configParams = json_decode($config->config_value_json, true);
+        Db::beginTransaction();
+        try {
+            $order = Order::where('order_id', $params['orderId'])->where('order_status_payment', 'SUCCESS')->first();
+            // 有传过来的
+            if (!empty($params['join_invite_member_id'])) {
+                $inviteMemberId = $params['join_invite_member_id'];
+            } else {
+                // 下单人
+                $member = Member::where('member_id', $order->join_order_member_id)->first();
+                if (empty($member->join_invite_member_id)) {
+                    throw new BusinessException("没有直属上级");
+                }
+                $inviteMemberId = $member->join_invite_member_id;
+            }
+            // 上级
+            $memberUp = Member::where('member_id', $inviteMemberId)->first();
+            if ($memberUp->member_is_partner == 'Y') {
+                $identity = 'PARTNER';
+            } elseif ($memberUp->member_is_referrer == 'Y') {
+                $identity = 'REFERRER';
+            }else{
+                throw new BusinessException("直属上级非合伙人或者推荐官");
+            }
+            // 记录的JSON
+            $accountListJson = [
+                'line' => 'relate-consum',
+                'amount' => $order->order_amount_pay,
+                'identity' => $identity,
+                'order_id' => $order->order_id,
+                'master_member_id' => $order->join_order_member_id
+            ];
+            // 提成
+            $this->commissionToMember($inviteMemberId, $accountListJson, round($configParams['commission']['relate-consum'] * $order->order_amount_pay, 2), '消费');
+
+            Db::commit();
+            _syslog("提成", "计算提成成功");
+        } catch (BusinessException $e) {
+            Db::rollBack();
+            _syslog("提成", "计算提成失败:" . $e->getMessage());
+        } catch (\Exception $e) {
+            dump($e->getMessage());
+            Db::rollBack();
+            _syslog("提成", "计算提成失败");
+        }
+    }
+
+    /**
+     * @Desc
+     * @Author Gorden
+     * @Date 2024/9/25 15:14
+     *
+     * @param $memberId
+     * @param $accountListJson
+     * @param $money
+     * @return void
+     */
+    private function commissionToMember($memberId, $accountListJson, $money, $accountListCategory)
+    {
+        $account = MemberAccount::where('join_account_member_id', $memberId)->where('member_account_classify', 'CASH')->first();
+        $account->member_account_income = $account->member_account_income + $money;
+        $account->member_account_surplus = $account->member_account_surplus + $money;
+        $account->save();
+
+        MemberAccountList::insert([
+            'join_list_member_account_nbr' => $memberId . '-CASH',
+            'join_member_account_list_member_id' => $memberId,
+            'member_account_list_status' => 'ACTIVED',
+            'member_account_list_attr' => 'IN',
+            'member_account_list_classify' => $accountListJson['identity'],
+            'member_account_list_category' => $accountListCategory,
+            'member_account_list_datetime' => date('Y-m-d H:i:s'),
+            'member_account_list_amount' => $money,
+            'member_account_list_json' => json_encode($accountListJson),
+            'member_account_list_addtimes' => time()
+        ]);
+    }
+}

+ 19 - 0
app/model/MemberAccountList.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace app\model;
+
+use support\Model;
+
+class MemberAccountList extends Model
+{
+
+    protected $table = 'member_account_list';
+
+    protected $primaryKey = 'member_account_list_id';
+
+    protected $dateFormat = 'U';
+
+    const CREATED_AT = 'member_account_list_addtimes';
+
+    const UPDATED_AT = null;
+}

+ 6 - 3
config/event.php

@@ -14,12 +14,15 @@ return [
         [\app\event\order\KangyangCityEvent::class, 'grant']
     ],
     'order_pay.member_level.up' => [
-        [\app\event\MemberLevelEvent::class,'payOrderLevelUp']
+        [\app\event\MemberLevelEvent::class, 'payOrderLevelUp']
     ],
     'order.complete' => [
-        [\app\event\order\OrderProcessEvent::class,'orderComplete']
+        [\app\event\order\OrderProcessEvent::class, 'orderComplete']
     ],
     'order.write_off' => [
-        [\app\event\order\OrderProcessEvent::class,'orderWriteOff']
+        [\app\event\order\OrderProcessEvent::class, 'orderWriteOff']
+    ],
+    'commission.order' => [
+        [\app\event\order\CommissionEvent::class, 'order']
     ]
 ];

+ 4 - 7
route/admin.php

@@ -251,18 +251,15 @@ Route::group('/admin', function () {
             Route::post('/update/{id:\d+}', [\app\admin\controller\sys_manage\ConfigController::class, 'updateConfig']);
             Route::post('/updateStatus/{id:\d+}', [\app\admin\controller\sys_manage\ConfigController::class, 'updateStatus']);
             Route::delete('/delete', [\app\admin\controller\sys_manage\ConfigController::class, 'delConfig']);
-//
-//            // 底部菜单
-//            Route::get('/bottomMenuList', [\app\admin\controller\sys_manage\ConfigController::class, 'bottomMenuList']);
-//            Route::post('/bottomMenuSave', [\app\admin\controller\sys_manage\ConfigController::class, 'bottomMenuSave']);
-//            // 导航菜单
-//            Route::get('/navMenuList', [\app\admin\controller\sys_manage\ConfigController::class, 'navMenuList']);
-//            Route::post('/navMenuSave', [\app\admin\controller\sys_manage\ConfigController::class, 'navMenuSave']);
+
 
             // 参数配置
             Route::get('/paramsList', [\app\admin\controller\sys_manage\ConfigController::class, 'paramsList']);
             Route::post('/paramsSave', [\app\admin\controller\sys_manage\ConfigController::class, 'paramsSave']);
 
+            Route::get('/partnerParams',[\app\admin\controller\sys_manage\ConfigController::class,'partnerParamsInfo']);
+            Route::post('/setPartnerParams',[\app\admin\controller\sys_manage\ConfigController::class,'setPartnerParams']);
+
         });
         /* 运费模板管理 */
         Route::group('/postageTemplate', function () {