Browse Source

完善功能

gorden 9 months ago
parent
commit
a53e448e93

+ 32 - 1
app/admin/controller/member/MemberController.php

@@ -6,6 +6,8 @@ use app\admin\service\member\MemberService;
 use app\admin\validate\member\MemberValidate;
 use app\model\Family;
 use app\model\FamilyMember;
+use app\model\MemberAccount;
+use app\model\PayDetail;
 use support\Db;
 use support\Request;
 
@@ -21,7 +23,7 @@ class MemberController
 
         $res = Db::table('member')
             ->leftjoin('member_cert', 'member.member_id', '=', 'member_cert.join_cert_member_id')
-            ->select('member.member_id', 'member.member_mobile', 'member_cert.member_cert_name','member_account.member_account_surplus')
+            ->select('member.member_id', 'member.member_mobile', 'member_cert.member_cert_name')
             ->where('member.member_is_owner', $isOwner)
             ->where(function ($query) use ($keywords) {
                 $query->where('member.member_mobile', 'like', '%' . $keywords . '%')
@@ -73,6 +75,35 @@ class MemberController
         return MemberService::list($request);
     }
 
+    public function info(Request $request)
+    {
+        $memberId = $request->get('member_id', '');
+        if (!$memberId) {
+            return json_fail("参数错误");
+        }
+        return MemberService::info($memberId);
+    }
+
+    public function balanceInfo(Request $request)
+    {
+        $memberId = $request->get('member_id', '');
+        if (!$memberId) {
+            return json_fail("参数错误");
+        }
+
+        return MemberService::balanceInfo($memberId);
+    }
+
+    public function pointInfo(Request $request)
+    {
+        $memberId = $request->get('member_id', '');
+        if (!$memberId) {
+            return json_fail("参数错误");
+        }
+
+        return MemberService::pointInfo($memberId);
+    }
+
     /**
      * @Desc 添加会员
      * @Author Gorden

+ 13 - 2
app/admin/controller/order/PayDetailController.php

@@ -133,6 +133,7 @@ class PayDetailController extends Curd
     {
         $params = $request->post();
         $data = $this->inputFilter($params);
+        $extendJson = [];
         if (!$params['is_custom']) {
             try {
                 Db::beginTransaction();
@@ -156,13 +157,14 @@ class PayDetailController extends Curd
                     'order_addtimes' => time()
                 ];
                 $sku = GoodsSku::where('join_sku_goods_id', $params['goods_id'])->first();
+                dump($sku);
 
                 Order::insert($orderData);
                 $orderSheetData = [
                     'join_sheet_member_id' => $data['join_pay_member_id'],
                     'join_sheet_order_id' => $orderId,
                     'join_sheet_goods_id' => $params['goods_id'],
-                    'join_sheet_goods_sku_id' => $sku->goods_sku_id ?? '',
+                    'join_sheet_goods_sku_id' => $sku ? $sku->goods_sku_id : 0,
                     'order_sheet_status' => 'PAYING',
                     'order_sheet_category' => 'NORMAL',
                     'order_sheet_num' => 1,
@@ -183,8 +185,17 @@ class PayDetailController extends Curd
             }
             $data['join_pay_order_id'] = $orderGroupId;
             $data['join_pay_object_json'] = json_encode(['order_id' => $orderId]);
+
+            $rate = 0;
+            if (!empty($goods->goods_attribute_json)) {
+                $attributeJson = json_decode($goods->goods_attribute_json, true);
+                $rate = $attributeJson['added'] ? $attributeJson['added']['nbr'] : 0;
+            }
+
+            $extendJson['added_amount'] = number_format($data['pay_amount'] * $rate, 2, '.', '');
+            $extendJson['added_rate'] = $rate;
         } else {
-            $extendJson['notify'] = 'success';
+//            $extendJson['notify'] = 'success';
             $extendJson['is_custom'] = $params['is_custom'];
         }
         $data['pay_extend_json'] = json_encode($extendJson);

+ 187 - 5
app/admin/service/member/MemberService.php

@@ -2,14 +2,20 @@
 
 namespace app\admin\service\member;
 
+use app\model\ClientPoints;
 use app\model\Device;
 use app\model\Family;
 use app\model\FamilyMember;
+use app\model\Goods;
 use app\model\Member;
 use app\model\MemberAccount;
 use app\model\MemberCert;
 use app\model\MemberDevice;
 use app\model\MemberInfo;
+use app\model\Order;
+use app\model\OrderSheet;
+use app\model\PayDetail;
+use app\model\SysCategory;
 use app\model\SysSerial;
 use support\Db;
 use support\Request;
@@ -23,21 +29,22 @@ class MemberService
         $name = $request->get('name', '');
         $mobile = $request->get('mobile', '');
 
-        $rows = Member::where('member_is_owner', 'N')
+        $rows = Member::with('account')
+            ->where('member_is_owner', 'N')
             ->leftJoin('member_info', 'member_info.join_info_member_id', 'member.member_id')
             ->leftJoin('member_cert', 'member_cert.join_cert_member_id', 'member.member_id')
-            ->leftjoin('member_account', 'member.member_id', '=', 'member_account.join_account_member_id')
+//            ->leftjoin('member_account', 'member.member_id', '=', 'member_account.join_account_member_id')
             ->leftJoin('member_role', 'member_role.member_role_id', 'member.join_member_role_id')
-            ->where('member_account.member_account_classify', 'CASH')
+//            ->where('member_account.member_account_classify', 'CASH')
             ->when($name != '', function ($query) use ($name) {
                 $query->where('member_cert.member_cert_name', 'like', '%' . $name . '%');
             })->when($mobile != '', function ($query) use ($mobile) {
                 $query->where('member.member_mobile', 'like', '%' . $mobile . '%');
             })->select('member_id', 'member_is_owner', 'member_classify', 'member_status', 'member_mobile', 'member_from', 'member_addtimes',
                 'member_info.member_info_nickname', 'member_info.member_info_headimg',
-                'member_role.member_role_id','member_role.member_role_name',
+                'member_role.member_role_id', 'member_role.member_role_name',
                 'member_cert.member_cert_birth', 'member_cert.member_cert_gender', 'member_cert.member_cert_name', 'member_cert.member_cert_nbr', 'member_cert.member_cert_province', 'member_cert.member_cert_addr', 'member_cert.member_cert_face', 'member_cert.member_cert_photo', 'member_cert.member_cert_nation',
-                'member_account.member_account_surplus'
+//                'member_account.member_account_surplus'
             );
         // 总条数
         $total = $rows->count('member_id');
@@ -62,6 +69,28 @@ class MemberService
                 'member_cert_photo' => !empty($row['member_cert_photo']) ? getenv('STORAGE_DOMAIN') . $row['member_cert_photo'] : '',
                 'member_cert_nation' => $row['member_cert_nation'],
             ];
+            $account = [];
+            if (!empty($row['account'])) {
+                foreach ($row['account'] as $item) {
+                    if ($item['member_account_classify'] == 'POINTS') {
+                        $account['points'] = [
+                            'member_account_income' => $item['member_account_income'],
+                            'member_account_expend' => $item['member_account_expend'],
+                            'member_account_surplus' => $item['member_account_surplus'],
+                            'member_account_added' => $item['member_account_added'],
+                        ];
+                    } else if ($item['member_account_classify'] == 'CASH') {
+                        $account['cash'] = [
+                            'member_account_income' => $item['member_account_income'],
+                            'member_account_expend' => $item['member_account_expend'],
+                            'member_account_surplus' => $item['member_account_surplus'],
+                            'member_account_added' => $item['member_account_added'],
+                        ];
+                    }
+                }
+            }
+            $row['account'] = $account;
+
             $row['is_auth'] = "未认证";
             if (!empty($row['member_cert_nbr']) && !empty($row['member_cert_name'])) {
                 $row['is_auth'] = "已认证";
@@ -71,6 +100,159 @@ class MemberService
         return json_success('', compact('rows', 'page', 'pageSize', 'total'));
     }
 
+    public static function info($memberId)
+    {
+        $member = Member::with('cert')
+            ->where('member_id', $memberId)
+            ->first();
+
+        return json_success('', $member);
+    }
+
+    public static function balanceInfo($memberId)
+    {
+        $account = MemberAccount::where('join_account_member_id', $memberId)
+            ->where('member_account_classify', 'CASH')
+            ->first();
+        $balance = $account->member_account_surplus + $account->member_account_added;
+
+        $info = PayDetail::where('join_pay_member_id', $memberId)
+            ->where('pay_status', 'SUCCESS')
+            ->orderByDesc('pay_addtimes')
+            ->get()
+            ->toArray();
+        $money = 0;
+        $data = [];
+        foreach ($info as $key => $item) {
+            $orderIds = Order::where('order_groupby', $item['join_pay_order_id'])->pluck('order_id');
+            $goodsIds = OrderSheet::whereIn('join_sheet_order_id', $orderIds)->pluck('join_sheet_goods_id');
+            $categoryIds = Goods::whereIn('goods_id', $goodsIds)->pluck('join_goods_category_id');
+
+            $categoryName = [];
+            foreach ($categoryIds as $id) {
+                $category = SysCategory::where('category_id', $id)->first();
+                if (!empty($category->category_super_path)) {
+                    $path = explode('#', $category->category_super_path);
+                    $ids = array_filter($path);
+                    $categoryName[] = SysCategory::where('category_id', current($ids))->value('category_name');
+                } else {
+                    $categoryName[] = $category->category_name;
+                }
+            }
+            $item['goods_category'] = implode(',', $categoryName);
+
+            if ($item['pay_category'] == 'RECHARGE') {
+                $item['balance_type'] = 'add';
+            } else {
+                $item['balance_type'] = 'cut';
+            }
+            if ($key == 0) {
+                if (!empty($item['pay_extend_json'])) {
+                    $extendJson = json_decode($item['pay_extend_json'], true);
+                    // 计划任务没跑
+                    if ($item['pay_category'] == 'RECHARGE' && (!isset($extendJson['notify']) || $extendJson['notify'] != 'success')) {
+                        continue;
+                    }
+                    if (isset($extendJson['added_amount'])) {
+                        $data[] = [
+                            'join_pay_member_id' => $item['join_pay_member_id'],
+                            'pay_addtimes' => $item['pay_addtimes'],
+                            'pay_amount' => $extendJson['added_amount'],
+                            'pay_category' => 'ADDED',
+                            'balance' => number_format($balance, 2, '.', ''),
+                            'balance_type' => 'add',
+                        ];
+                    }
+                }
+                $balance = $balance - $extendJson['added_amount'];
+                $item['balance'] = number_format($balance, 2, '.', '');
+                $balance = $balance - $item['pay_amount'];
+                $data[] = $item;
+                continue;
+            }
+
+            if ($item['pay_category'] == 'RECHARGE') {
+                if (!empty($item['pay_extend_json'])) {
+                    $extendJson = json_decode($item['pay_extend_json'], true);
+                    if (isset($extendJson['added_amount'])) {
+                        $data[] = [
+                            'join_pay_member_id' => $item['join_pay_member_id'],
+                            'pay_addtimes' => $item['pay_addtimes'],
+                            'pay_amount' => $extendJson['added_amount'],
+                            'pay_category' => 'ADDED',
+                            'balance' => number_format($balance, 2, '.', ''),
+                            'balance_type' => 'add',
+                        ];
+                        $balance = $balance - $extendJson['added_amount'];
+                    }
+                }
+                $item['balance'] = number_format($balance, 2, '.', '');
+                $balance = $balance - $item['pay_amount'];
+            } else {
+                $item['balance'] = number_format($balance, 2, '.', '');
+                $balance = $balance + $item['pay_amount'];
+            }
+
+            $data[] = $item;
+        }
+
+        return json_success('', $data);
+    }
+
+    public static function pointInfo($memberId)
+    {
+        $account = MemberAccount::where('join_account_member_id', $memberId)
+            ->where('member_account_classify', 'POINTS')
+            ->first();
+
+        $balance = $account->member_account_surplus + $account->member_account_added;
+        $points = ClientPoints::where('join_client_points_member_id', $memberId)->get()->toArray();
+        $nowPoint = 0;
+        foreach ($points as $key => &$point) {
+            $point['goods_category'] = '其他';
+            if (!empty($point['join_client_points_goods_id'])) {
+                $categoryId = Goods::where('goods_id', $point['join_client_points_goods_id'])->pluck('join_goods_category_id');
+
+                $category = SysCategory::where('category_id', $categoryId)->first();
+                if (!empty($category->category_super_path)) {
+                    $path = explode('#', $category->category_super_path);
+                    $ids = array_filter($path);
+                    $point['goods_category'] = SysCategory::where('category_id', current($ids))->value('category_name');
+                } else {
+                    $point['goods_category'] = $category->category_name;
+                }
+            }
+
+            if (in_array($point['client_points_category'], ["评价", "消费", "活动", "赠送"])) {
+                $point['balance_type'] = 'add';
+            } else {
+                $point['balance_type'] = 'cut';
+            }
+
+            if ($key == 0) {
+                $point['balance'] = number_format($balance, 2, '.', '');
+                if (in_array($point['client_points_category'], ["评价", "消费", "活动", "赠送"])) {
+                    $balance = $balance - $point['client_points_nbr'];
+                } else {
+                    $balance = $balance + $point['client_points_nbr'];
+                }
+
+                continue;
+            }
+            if (in_array($point['client_points_category'], ["评价", "消费", "活动", "赠送"])) {
+                $point['balance'] = number_format($balance, 2, '.', '');
+                $balance = $balance - $point['client_points_nbr'];
+//                $point['balance'] = $balance = $nowPoint = number_format($balance - $point['client_points_nbr'], 2, '.', '');
+            } else {
+                $point['balance'] = number_format($balance, 2, '.', '');
+                $balance = $balance + $point['client_points_nbr'];
+//                $point['balance'] = $balance = $nowPoint = number_format($balance + $point['client_points_nbr'], 2, '.', '');
+            }
+        }
+
+        return json_success('', $points);
+    }
+
     /**
      * @Desc 添加会员
      * @Author Gorden

+ 5 - 0
app/model/Member.php

@@ -47,4 +47,9 @@ class Member extends Model
     {
         return $this->hasOne(MemberInfo::class, 'join_info_member_id', 'member_id');
     }
+
+    public function account()
+    {
+        return $this->hasMany(MemberAccount::class, 'join_account_member_id', 'member_id');
+    }
 }

+ 3 - 0
route/admin.php

@@ -545,7 +545,10 @@ Route::group('/admin', function () {
         Route::group('', function () {
             Route::get('/selectList', [\app\admin\controller\member\MemberController::class, 'selectList']);
             Route::get('/selectFamilyMemberList', [\app\admin\controller\member\MemberController::class, 'selectFamilyMemberList']);
+            Route::get('/balanceInfo', [\app\admin\controller\member\MemberController::class, 'balanceInfo']);
+            Route::get('/pointInfo', [\app\admin\controller\member\MemberController::class, 'pointInfo']);
             Route::get('/list', [\app\admin\controller\member\MemberController::class, 'list']);
+            Route::get('/info', [\app\admin\controller\member\MemberController::class, 'info']);
             Route::post('/add', [\app\admin\controller\member\MemberController::class, 'add']);
             Route::post('/update', [\app\admin\controller\member\MemberController::class, 'update']);
         })->middleware([