Browse Source

会员合伙人

gorden 5 months ago
parent
commit
8778405201

+ 144 - 0
app/admin/controller/finance/CommissionListController.php

@@ -0,0 +1,144 @@
+<?php
+
+namespace app\admin\controller\finance;
+
+use app\admin\service\member\MemberService;
+use app\controller\Curd;
+use app\model\Member;
+use app\model\MemberAccountList;
+use app\model\Order;
+use support\Request;
+use support\Response;
+
+class CommissionListController extends Curd
+{
+    public function __construct()
+    {
+        $this->model = new MemberAccountList();
+    }
+
+    public function select(Request $request): Response
+    {
+        [$where, $format, $limit, $field, $order] = $this->selectInput($request);
+        $query = $this->doSelect($where, $field, $order);
+        return $this->doFormat($query, $format, $limit);
+    }
+
+    protected function doSelect(array $where, string $field = null, string $order = 'desc')
+    {
+        $model = $this->model->with([
+            'member' => function ($query) {
+                $query->select('member_id', 'member_mobile', 'member_is_owner', 'member_is_vip', 'member_is_partner', 'member_is_referrer');
+            },
+            'memberInfo' => function ($query) {
+                $query->select('join_info_member_id', 'member_info_nickname', 'member_info_headimg');
+            },
+            'memberCert' => function ($query) {
+                $query->select('join_cert_member_id', 'member_cert_name');
+            }
+        ]);
+        foreach ($where as $column => $value) {
+            if (is_array($value)) {
+                if ($value[0] === 'like' || $value[0] === 'not like') {
+                    $model = $model->where($column, $value[0], "%$value[1]%");
+                } elseif (in_array($value[0], ['>', '=', '<', '<>'])) {
+                    $model = $model->where($column, $value[0], $value[1]);
+                } elseif ($value[0] == 'in' && !empty($value[1])) {
+                    $valArr = $value[1];
+                    if (is_string($value[1])) {
+                        $valArr = explode(",", trim($value[1]));
+                    }
+                    $model = $model->whereIn($column, $valArr);
+                } elseif ($value[0] == 'not in' && !empty($value[1])) {
+                    $valArr = $value[1];
+                    if (is_string($value[1])) {
+                        $valArr = explode(",", trim($value[1]));
+                    }
+                    $model = $model->whereNotIn($column, $valArr);
+                } elseif ($value[0] == 'null') {
+                    $model = $model->whereNull($column);
+                } elseif ($value[0] == 'not null') {
+                    $model = $model->whereNotNull($column);
+                } elseif ($value[0] !== '' || $value[1] !== '') {
+                    $model = $model->whereBetween($column, $value);
+                }
+            } else {
+                $model = $model->where($column, $value);
+            }
+        }
+        if ($field) {
+            $model = $model->orderBy($field, $order);
+        }
+        return $model;
+    }
+
+    public function afterQuery($items)
+    {
+        foreach ($items as &$item) {
+            $item['member_mobile'] = isset($item['member']) ? $item['member']['member_mobile'] : '';
+            $item['member_info_nickname'] = isset($item['memberInfo']) && !empty($item['memberInfo']['member_info_nickname']) ? $item['memberInfo']['member_info_nickname'] : '';
+            $item['member_cert_name'] = isset($item['memberCert']) && !empty($item['memberCert']['member_cert_name']) ? $item['memberCert']['member_cert_name'] : '';
+            $item['member_name'] = MemberService::getMemberName($item['member_mobile'], $item['member_cert_name'], $item['member_info_nickname']);
+            $item['member_info_headimg'] = isset($item['memberInfo']) && !empty($item['memberInfo']['member_info_headimg']) ? $item['memberInfo']['member_info_headimg'] : "";
+            $item['member_is_owner'] = isset($item['member']) ? $item['member']['member_is_owner'] : '';
+            $item['member_is_vip'] = isset($item['member']) ? $item['member']['member_is_vip'] : '';
+            $item['member_is_partner'] = isset($item['member']) ? $item['member']['member_is_partner'] : '';
+            $item['member_is_referrer'] = isset($item['member']) ? $item['member']['member_is_referrer'] : '';
+            
+            unset($item['member'], $item['memberInfo'], $item['memberCert']);
+        }
+
+        return $items;
+    }
+
+    /**
+     * @Desc 记录详情
+     * @Author Gorden
+     * @Date 2024/9/28 17:15
+     *
+     * @param Request $request
+     * @return Response
+     */
+    public function info(Request $request): Response
+    {
+        $id = $request->get('member_account_list_id');
+        if (!$id) {
+            return json_fail("参数异常");
+        }
+
+        $info = MemberAccountList::where('member_account_list_id', $id)->first();
+        $infoMember = Member::with([
+            'role' => function ($query) {
+                $query->select('member_role_id', 'member_role_name');
+            }
+        ])->where('member_id', $info->join_member_account_list_member_id)
+            ->first();
+        $info->member_role_name = !empty($infoMember->role) ? $infoMember->role->member_role_name : '';
+        if (!empty($info->member_account_list_json)) {
+            $accountListJson = json_decode($info->member_account_list_json, true);
+            // 下单人
+            if (isset($accountListJson['master_member_id'])) {
+                $member = Member::with([
+                    'info' => function ($query) {
+                        $query->select('join_info_member_id', 'member_info_nickname');
+                    },
+                    'cert' => function ($query) {
+                        $query->select('join_cert_member_id', 'member_cert_name');
+                    }
+                ])->where('member_id', $accountListJson['master_member_id'])
+                    ->first();
+                $memberMobile = isset($member) && !empty($member->member_mobile) ? $member->member_mobile : '';
+                $memberNickname = isset($member->info) && !empty($member->info->member_info_nickname) ? $member->info->member_info_nickname : '';
+                $memberCertname = isset($member->cert) && !empty($member->cert->member_cert_name) ? $member->cert->member_cert_name : '';
+
+                $info->master_member_name = MemberService::getMemberName($memberMobile, $memberCertname, $memberNickname);
+            }
+            // 订单
+            if (isset($accountListJson['order_id'])) {
+                $info->order = Order::where('order_id', $accountListJson['order_id'])->first();
+            }
+        }
+
+        return json_success('success', $info);
+    }
+}

+ 16 - 1
app/admin/service/order/CommissionService.php

@@ -43,6 +43,19 @@ class CommissionService
         }
     }
      */
+
+    /**
+     * @Desc 处理提成
+     * @Author Gorden
+     * @Date 2024/9/28 16:09
+     *
+     * @param $config
+     * @param $memberId
+     * @param $orderId
+     * @param $amount
+     * @param $accountListCategory
+     * @return void
+     */
     public static function commission($config, $memberId, $orderId, $amount, $accountListCategory)
     {
         Log::info("开始处理提成", ['config' => $config, 'member_id' => $memberId, 'amount' => $amount]);
@@ -66,6 +79,7 @@ class CommissionService
                 $accountListJson['identity'] = MemberService::getIdentity($member1->member_is_partner, $member1->member_is_referrer);
                 $member1CommissionAmount = $config['commission']['direct'] * $amount;
                 self::commissionToMember($member1->member_id, $accountListJson, $member1CommissionAmount, $accountListCategory);
+                Log::info("提成参数", ['member_id' => $member1->member_id, 'account_list_json' => $accountListJson, 'amount' => $member1CommissionAmount, 'category' => $accountListCategory]);
 
             }
             // 间属提成
@@ -73,10 +87,11 @@ class CommissionService
                 $accountListJson['identity'] = MemberService::getIdentity($member2->member_is_partner, $member2->member_is_referrer);
                 $member2CommissionAmount = $config['commission']['indirect'] * $amount;
                 self::commissionToMember($member2->member_id, $accountListJson, $member2CommissionAmount, $accountListCategory);
+                Log::info("提成参数", ['member_id' => $member2->member_id, 'account_list_json' => $accountListJson, 'amount' => $member2CommissionAmount, 'category' => $accountListCategory]);
 
             }
         } catch (\Exception $e) {
-
+            _syslog("提成处理失败",'提成处理失败');
         }
     }
 

+ 3 - 0
app/admin/service/order/OrderService.php

@@ -111,6 +111,9 @@ class OrderService
             $orders = Order::where('order_status_system', 'PAYING')
                 ->where('order_category', '<>', 'DISHES')     // 点餐不自动取消
                 ->where('order_category', '<>', 'VIP')      // 康养城订单不自动取消,有分次付款
+                ->where('order_category', '<>', 'COMBINE')      // 新客专享
+                ->where('order_category', '<>', 'PARTNER')      // 会员合伙人
+                ->where('order_category', '<>', 'REFERRER')      // 推荐官
                 ->where(function ($query) {
                     $query->where('order_platform', '<>', 'SYSTEM')->orWhereNull('order_platform');
                 })

+ 15 - 0
app/model/MemberAccountList.php

@@ -16,4 +16,19 @@ class MemberAccountList extends Model
     const CREATED_AT = 'member_account_list_addtimes';
 
     const UPDATED_AT = null;
+
+    public function member()
+    {
+        return $this->hasOne(Member::class, 'member_id', 'join_member_account_list_member_id');
+    }
+
+    public function memberInfo()
+    {
+        return $this->hasOne(MemberInfo::class, 'join_info_member_id', 'join_member_account_list_member_id');
+    }
+
+    public function memberCert()
+    {
+        return $this->hasOne(MemberCert::class,'join_cert_member_id','join_member_account_list_member_id');
+    }
 }

+ 9 - 1
route/admin.php

@@ -147,6 +147,14 @@ Route::group('/admin', function () {
         Route::group('/incomeAndExpend', function () {
             Route::get('/list', [\app\admin\controller\finance\IncomeAndExpendController::class, 'list']);
         });
+
+        /* 提成管理 */
+        Route::group('/commissionList', function () {
+            Route::get('/list', [\app\admin\controller\finance\CommissionListController::class, 'select']);
+            Route::get('/info', [\app\admin\controller\finance\CommissionListController::class, 'info']);
+        })->middleware([
+            \app\middleware\AdminAuthCheck::class
+        ]);
     });
     /* 系统管理中心 */
     Route::group('/sys', function () {
@@ -1132,7 +1140,7 @@ Route::group('/admin', function () {
             Route::delete('/delete', [\app\admin\controller\client\EvaluateController::class, 'delete']);
         })->middleware([
             \app\middleware\AdminAuthCheck::class
-        ]);;
+        ]);
         /* 消息管理 */
         Route::group('/message', function () {
             Route::group('', function () {