gorden 6 mesi fa
parent
commit
2cfed4e40e

+ 107 - 0
app/admin/controller/coupon/CouponDetailController.php

@@ -0,0 +1,107 @@
+<?php
+
+namespace app\admin\controller\coupon;
+
+use app\admin\service\member\MemberService;
+use app\controller\Curd;
+use app\model\CouponDetail;
+use support\Request;
+use support\Response;
+
+class CouponDetailController extends Curd
+{
+    public function __construct()
+    {
+        $this->model = new CouponDetail();
+    }
+
+    public function select(Request $request): Response
+    {
+        [$where, $format, $limit, $field, $order] = $this->selectInput($request);
+        $where['join_coupon_detail_member_id'] = ['<>', ''];
+        $order = $request->get('order', 'desc');
+        $field = $field ?? 'coupon_detail_addtimes';
+        $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([
+            'detail' => function ($query) {
+                $query->select('join_detail_coupon_id', 'coupon_detail_status');
+            },
+            'coupon',
+            'member' => function ($query) {
+                $query->select('member_id', 'member_mobile');
+            },
+            'cert' => function ($query) {
+                $query->select('join_cert_member_id', 'member_cert_name');
+            },
+            'info' => function ($query) {
+                $query->select('join_info_member_id', 'member_info_nickname');
+            }
+        ]);
+        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);
+            }
+        }
+        $model = $model->selectRaw('join_detail_coupon_id,join_coupon_detail_member_id,MAX(coupon_detail_addtimes) as coupon_detail_addtimes,COUNT(*) as total');
+        $model = $model->groupBy('join_coupon_detail_member_id', 'join_detail_coupon_id');
+        if ($field) {
+            $model = $model->orderBy($field, $order);
+        }
+        return $model;
+    }
+
+    public function afterQuery($items)
+    {
+        foreach ($items as &$item) {
+            $mobile = $certName = $nickname = '';
+            if (!empty($item['member']) && !empty($item['member']['member_mobile'])) {
+                $mobile = $item['member']['member_mobile'];
+            }
+            if (!empty($item['cert']) && !empty($item['cert']['member_cert_name'])) {
+                $certName = $item['cert']['member_cert_name'];
+            }
+            if (!empty($item['info']) && !empty($item['info']['member_info_nickname'])) {
+                $nickname = $item['info']['member_info_nickname'];
+            }
+            $item['member_name'] = MemberService::getMemberName($mobile, $certName, $nickname);
+
+            $item['member_used'] = 0;
+            foreach ($item['detail'] as $detail) {
+                if ($detail['coupon_detail_status'] == 'USED'){
+                    $item['member_used'] += 1;
+                }
+            }
+        }
+
+        return $items;
+    }
+}

+ 8 - 8
app/admin/controller/order/RefundController.php

@@ -222,7 +222,7 @@ class RefundController extends Curd
             return json_fail("订单异常");
         }
         if ($amount > $order->order_amount_pay) {
-            return json_fail("退款金额不超过支付金额");
+            return json_fail("退款金额不超过支付金额");
         }
         $payDetail = PayDetail::where('join_pay_order_id', $order->order_groupby)
             ->where('pay_status', 'SUCCESS')
@@ -238,7 +238,7 @@ class RefundController extends Curd
             // 主订单,退款作为优惠入库
             $this->updateMainOrderByRefund($order, $amount, $remark);
             // return 表记录
-            $returnId = $this->createReturnRecord($order, $amount);
+            $returnId = $this->createReturnRecord($order, $amount,$remark);
 
             // 组合支付,退到余额账户
             $prepayid = '';
@@ -255,11 +255,11 @@ class RefundController extends Curd
                 } elseif ($payWay[0] == 'ALIPAY') {
                     $prepayid = 'WXPAY';
                     $response = $this->refundToAlipay($payDetail0, $amount);
-                } elseif (isset($payWay[1]) && $payWay[1] == 'CASH'){
+                } elseif (isset($payWay[1]) && $payWay[1] == 'CASH') {
                     $prepayid = $order->join_order_member_id . '-CASH';
                     $this->refundToCash($order->join_order_member_id, $amount);
                     $response = ['order_id' => $order->order_id, 'member_id' => $order->join_order_member_id];
-                } elseif (isset($payWay['1']) && $payWay[1] == 'CARD'){
+                } elseif (isset($payWay['1']) && $payWay[1] == 'CARD') {
                     $prepayid = $order->join_order_member_id . '-CASH';
                     $this->refundToCard($order->join_order_member_id, $amount);
                     $response = ['order_id' => $order->order_id, 'member_id' => $order->join_order_member_id];
@@ -372,7 +372,7 @@ class RefundController extends Curd
     private function refundToAlipay($params, $amount)
     {
         $data = [
-            'out_trade_no' =>  $params['join_pay_order_id'],
+            'out_trade_no' => $params['join_pay_order_id'],
             'refund_amount' => $amount,
         ];
         try {
@@ -384,7 +384,7 @@ class RefundController extends Curd
             }
 
             return $resArray;
-        }catch (\Exception $e){
+        } catch (\Exception $e) {
 
             throw new BusinessException("退款失败");
         }
@@ -434,7 +434,7 @@ class RefundController extends Curd
      * @return int
      * @throws BusinessException
      */
-    private function createReturnRecord($order, $amount)
+    private function createReturnRecord($order, $amount,$remark)
     {
         try {
             return OrderReturn::insertGetId([
@@ -446,7 +446,7 @@ class RefundController extends Curd
                 'order_return_apply_datetime' => date('Y-m-d H:i:s'),
                 'order_return_apply_json' => json_encode(['reason' => '后台自定义退款']),
                 'order_return_accept_datetime' => date('Y-m-d H:i:s'),
-                'order_return_refund_json' => json_encode(['amount' => $amount, 'user_id' => JwtToken::getCurrentId(), 'datetime' => date('Y-m-d H:i:s')]),
+                'order_return_refund_json' => json_encode(['amount' => $amount, 'user_id' => JwtToken::getCurrentId(), 'datetime' => date('Y-m-d H:i:s'),'remark'=>$remark ?? '']),
                 'order_return_addtimes' => time()
             ]);
         } catch (\Exception $e) {

+ 44 - 11
app/admin/controller/order/WholeController.php

@@ -261,6 +261,8 @@ class WholeController extends Curd
                     $item['payWay'] = '支付宝';
                 } else if (!empty($payWay[0]) && $payWay[0] == 'CONSTITUTE') {
                     $item['payWay'] = '组合支付';
+                } else if (!empty($payWay[0]) && $payWay[0] == 'MONEY') {
+                    $item['payWay'] = '现金';
                 }
             } else {
                 $item['payWay'] = null;
@@ -496,6 +498,8 @@ class WholeController extends Curd
                 $payDetail->pay_category = $categoryArray[0];
             } else if ($categoryArray[0] == 'OFFLINE') {
                 $payDetail->pay_category = $categoryArray[0];
+            } else if ($categoryArray[0] == 'MONEY') {
+                $payDetail->pay_category = $categoryArray[0];
             } else {
                 if (MemberAccount::where('member_account_nbr', $categoryArray[0])->where('member_account_classify', 'CARD')->exists()) {
                     $payDetail->pay_category = 'CARD';
@@ -753,7 +757,7 @@ class WholeController extends Curd
             Redis::del($key);
         }
         // 验证线下付款密码
-        if ($params['pay_constitute'] == 'N' && in_array($params['pay_category'], ['OFFLINE'])) {
+        if ($params['pay_constitute'] == 'N' && in_array($params['pay_category'], ['OFFLINE','MONEY'])) {
             $password = $params['offline_password'];
             if ($password != '666888') {
                 return json_fail("密码错误,请重新输入");
@@ -800,7 +804,7 @@ class WholeController extends Curd
 
             // 组合支付时,付款码应收金额
             $qrcodePayAmount = 0;
-            if ($params['pay_category'] == 'OFFLINE') {
+            if ($params['pay_category'] == 'OFFLINE' || $params['pay_category'] == 'MONEY') {
                 $order->order_status_system = $systemStatus;
                 $order->order_status_payment = 'SUCCESS';
             } else if ($params['pay_category'] == 'CASH') {    // 余额支付
@@ -1079,6 +1083,8 @@ class WholeController extends Curd
                 $payData['pay_prepayid'] = $params['card_nbr'];
             } else if ($params['pay_category'] == 'OFFLINE') {
                 $payData['pay_prepayid'] = 'OFFLINE';
+            } else if ($params['pay_category'] == 'MONEY') {
+                $payData['pay_prepayid'] = 'MONEY';
             }
             // 如果 是APP 过来的菜订单,可能没有paydetail
             if (!PayDetail::where('join_pay_order_id', $order->order_groupby)->where('pay_category', '<>', 'WXPAY')->where('pay_category', '<>', 'ALIPAY')->exists()) {
@@ -1218,18 +1224,18 @@ class WholeController extends Curd
             $json = json_decode($orderDiscountJson, true);
         }
         try {
-            if ($params['preferential'] == 'wipe') {
+            if (!empty($params['preferential']) && $params['preferential'] == 'wipe') {
                 if (intval($params['order_amount_total'] / 10) * 10 != $params['order_amount_pay']) {
                     throw new BusinessException("抹零后实际支付金额错误");
                 }
                 $params['order_discount_amount'] = $params['order_amount_total'] - $params['order_amount_pay'];
                 $couponClassifyDesc = $couponClassify = '抹零';
-            } else if ($params['preferential'] == 'custom') {
+            } else if (!empty($params['preferential']) && $params['preferential'] == 'custom') {
                 if ($params['order_amount_total'] - $params['order_discount_amount'] != $params['order_amount_pay']) {
                     throw new BusinessException("餐厅前台优惠后实际支付金额错误");
                 }
                 $couponClassifyDesc = $couponClassify = '餐厅前台优惠';
-            } else if (intval($params['preferential']) < 100 && intval($params['preferential']) >= 50) {
+            } else if (!empty($params['preferential']) && intval($params['preferential']) < 100 && intval($params['preferential']) >= 50) {
                 if (($params['order_amount_total'] * intval($params['preferential'])) / 100 !== $params['order_amount_pay']) {
                     throw new BusinessException("折扣后实际支付金额错误");
                 }
@@ -1250,6 +1256,7 @@ class WholeController extends Curd
         }catch (BusinessException $e){
             throw new BusinessException($e->getMessage());
         } catch (\Exception $e) {
+            dump($e->getMessage());
             throw new BusinessException("优惠数据错误");
         }
     }
@@ -1262,7 +1269,7 @@ class WholeController extends Curd
     {
         $params = $request->post();
         // 余额、福利、储值卡 验证短信
-        if (!empty($params['pay_category_constitute']) && !in_array('OFFLINE', $params['pay_category_constitute']) && !in_array('QRCODE', $params['pay_category_constitute']) && (in_array('CASH', $params['pay_category_constitute']) || in_array('CARD', $params['pay_category_constitute']) || in_array('WELFARE', $params['pay_category_constitute']))) {
+        if (!empty($params['pay_category_constitute']) && !in_array('OFFLINE', $params['pay_category_constitute']) && !in_array('MONEY', $params['pay_category_constitute']) && !in_array('QRCODE', $params['pay_category_constitute']) && (in_array('CASH', $params['pay_category_constitute']) || in_array('CARD', $params['pay_category_constitute']) || in_array('WELFARE', $params['pay_category_constitute']))) {
             $code = $params['sms_code'];
             if (!$code) {
                 return json_fail("验证码错误,请重新输入");
@@ -1277,7 +1284,7 @@ class WholeController extends Curd
             Redis::del($key);
         }
         // 验证线下付款密码
-        if (!empty($params['pay_category_constitute']) && in_array('OFFLINE', $params['pay_category_constitute'])) {
+        if (!empty($params['pay_category_constitute']) && in_array('OFFLINE', $params['pay_category_constitute']) && in_array('MONEY', $params['pay_category_constitute'])) {
             $password = $params['offline_password'];
             if ($password != '666888') {
                 return json_fail("密码错误,请重新输入");
@@ -1343,6 +1350,19 @@ class WholeController extends Curd
                 }
                 $params['order_amount_pay'] = $orderAmountPay;
             }
+            if (!empty($params['pay_category_constitute']) && in_array('MONEY', $params['pay_category_constitute'])) {  //线下付款
+                $order->order_status_system = $systemStatus;
+                $order->order_status_payment = 'SUCCESS';
+                $params['pay_category'] = 'MONEY';
+
+                // 线下支付金额
+                if (isset($constituteList['MONEY'])) {
+                    $params['order_amount_pay'] = $constituteList['MONEY'];
+                    // 生成支付记录
+                    OrderService::createPayConstituteDetail($params, $payDetail);
+                }
+                $params['order_amount_pay'] = $orderAmountPay;
+            }
             if (!empty($params['pay_category_constitute']) && in_array('CASH', $params['pay_category_constitute'])) {    // 余额支付
                 $account = MemberAccount::where('join_account_member_id', $params['join_order_member_id'])
                     ->where('member_account_classify', 'CASH')
@@ -1729,7 +1749,7 @@ class WholeController extends Curd
                 Redis::del($key);
             }
             // 验证线下付款密码
-            if ($params['settlement_now'] == 'Y' && $params['pay_constitute'] == 'N' && in_array($params['pay_category'], ['OFFLINE'])) {
+            if ($params['settlement_now'] == 'Y' && $params['pay_constitute'] == 'N' && in_array($params['pay_category'], ['OFFLINE','MONEY'])) {
                 $password = $params['offline_password'];
                 if ($password != '666888') {
                     return json_fail("密码错误,请重新输入");
@@ -1766,7 +1786,7 @@ class WholeController extends Curd
                 }
             }
 
-            if ($params['settlement_now'] == 'Y' && $params['pay_category'] == 'OFFLINE') {
+            if ($params['settlement_now'] == 'Y' && ($params['pay_category'] == 'OFFLINE' || $params['pay_category'] == 'MONEY')) {
                 $params['order_status_system'] = $systemStatus;
                 $params['order_status_payment'] = 'SUCCESS';
             } else if ($params['settlement_now'] == 'Y' && $params['pay_category'] == 'CASH') {    // 余额支付
@@ -2270,7 +2290,7 @@ class WholeController extends Curd
             // 验证库存
             OrderService::checkGoodsStorage($params);
             // 余额、福利、储值卡 验证短信
-            if (!empty($params['pay_category_constitute']) && !in_array('OFFLINE', $params['pay_category_constitute']) && !in_array('QRCODE', $params['pay_category_constitute']) && (in_array('CASH', $params['pay_category_constitute']) || in_array('CARD', $params['pay_category_constitute']) || in_array('WELFARE', $params['pay_category_constitute']))) {
+            if (!empty($params['pay_category_constitute']) && !in_array('OFFLINE', $params['pay_category_constitute']) && !in_array('MONEY', $params['pay_category_constitute']) && !in_array('QRCODE', $params['pay_category_constitute']) && (in_array('CASH', $params['pay_category_constitute']) || in_array('CARD', $params['pay_category_constitute']) || in_array('WELFARE', $params['pay_category_constitute']))) {
                 $code = $params['sms_code'];
                 if (!$code) {
                     return json_fail("验证码错误,请重新输入");
@@ -2285,7 +2305,7 @@ class WholeController extends Curd
                 Redis::del($key);
             }
             // 验证线下付款密码
-            if (!empty($params['pay_category_constitute']) && in_array('OFFLINE', $params['pay_category_constitute'])) {
+            if (!empty($params['pay_category_constitute']) && in_array('OFFLINE', $params['pay_category_constitute']) || in_array('MONEY', $params['pay_category_constitute'])) {
                 $password = $params['offline_password'];
                 if ($password != '666888') {
                     return json_fail("密码错误,请重新输入");
@@ -2334,6 +2354,19 @@ class WholeController extends Curd
                 }
                 $params['order_amount_pay'] = $orderAmountPay;
             }
+            if (!empty($params['pay_category_constitute']) && in_array('MONEY', $params['pay_category_constitute'])) {      // 线下支付
+                $params['order_status_system'] = $systemStatus;
+                $params['order_status_payment'] = 'SUCCESS';
+                $params['pay_category'] = 'MONEY';
+
+                // 线下支付金额
+                if (isset($constituteList['MONEY'])) {
+                    $params['order_amount_pay'] = $constituteList['MONEY'];
+                    // 生成支付记录
+                    OrderService::createPayDetail($params);
+                }
+                $params['order_amount_pay'] = $orderAmountPay;
+            }
             if (!empty($params['pay_category_constitute']) && in_array('CASH', $params['pay_category_constitute'])) {    // 余额支付
                 $account = MemberAccount::where('join_account_member_id', $params['join_order_member_id'])
                     ->where('member_account_classify', 'CASH')

+ 112 - 95
app/admin/service/member/MemberService.php

@@ -31,18 +31,18 @@ class MemberService
         $pageSize = $request->get('pageSize', 10);
         $name = $request->get('name', '');
         $mobile = $request->get('mobile', '');
-        $level = $request->get('level','');
-        $isAuth = $request->get('is_auth','');
-        $addtime = $request->get('member_addtimes',[]);
-        $type = $request->get('type','');
+        $level = $request->get('level', '');
+        $isAuth = $request->get('is_auth', '');
+        $addtime = $request->get('member_addtimes', []);
+        $type = $request->get('type', '');
 
         $rows = Member::with([
-                'account' => function($query){
-                    $query->where('member_account_status','ACTIVED');
-                }
-            ])
+            'account' => function ($query) {
+                $query->where('member_account_status', 'ACTIVED');
+            }
+        ])
             ->where('member_is_owner', 'N')
-            ->where('member_mobile','<>', '0000')
+            ->where('member_mobile', '<>', '0000')
             ->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')
@@ -53,32 +53,32 @@ class MemberService
             })->when($mobile != '', function ($query) use ($mobile) {
                 $query->where('member.member_mobile', 'like', '%' . $mobile . '%');
             })->when($level != '', function ($query) use ($level) {
-                if($level == 'other'){
-                    $query->where('member.join_member_role_id',NULL)->orWhere('member.join_member_role_id','');
-                }else{
+                if ($level == 'other') {
+                    $query->where('member.join_member_role_id', NULL)->orWhere('member.join_member_role_id', '');
+                } else {
                     $query->where('member_role.member_role_id', $level);
                 }
             })->when($isAuth != '', function ($query) use ($isAuth) {
-                if($isAuth == 'Y'){
-                    $query->where('member_cert.member_cert_name','<>',NULL)->where('member_cert.member_cert_nbr','<>',NULL)->where('member_cert.member_cert_name','<>','')->where('member_cert.member_cert_nbr','<>','');
-                }else{
-                    $query->where('member_cert.member_cert_name',NULL)->orWhere('member_cert.member_cert_nbr',NULL)->orWhere('member_cert.member_cert_name','')->orWhere('member_cert.member_cert_nbr','');
+                if ($isAuth == 'Y') {
+                    $query->where('member_cert.member_cert_name', '<>', NULL)->where('member_cert.member_cert_nbr', '<>', NULL)->where('member_cert.member_cert_name', '<>', '')->where('member_cert.member_cert_nbr', '<>', '');
+                } else {
+                    $query->where('member_cert.member_cert_name', NULL)->orWhere('member_cert.member_cert_nbr', NULL)->orWhere('member_cert.member_cert_name', '')->orWhere('member_cert.member_cert_nbr', '');
                 }
             })->when(!empty($addtime), function ($query) use ($addtime) {
                 $addtime[0] = strtotime($addtime[0]);
                 $addtime[1] = strtotime($addtime[1]);
                 $query->whereBetween('member.member_addtimes', $addtime);
-            })->when(!empty($type),function ($query) use ($type) {
-                if ($type == 'todayAdd'){
-                    $addtime[0] = strtotime(date('Y-m-d').' 00:00:00');
-                    $addtime[1] = strtotime(date('Y-m-d').' 23:59:59');
-                }else if ($type == 'monthAdd'){
-                    $addtime[0] = strtotime(date('Y-m-01').' 00:00:00');
-                    $addtime[1] = strtotime(date('Y-m-t').' 23:59:59');
+            })->when(!empty($type), function ($query) use ($type) {
+                if ($type == 'todayAdd') {
+                    $addtime[0] = strtotime(date('Y-m-d') . ' 00:00:00');
+                    $addtime[1] = strtotime(date('Y-m-d') . ' 23:59:59');
+                } else if ($type == 'monthAdd') {
+                    $addtime[0] = strtotime(date('Y-m-01') . ' 00:00:00');
+                    $addtime[1] = strtotime(date('Y-m-t') . ' 23:59:59');
                 }
                 $query->whereBetween('member.member_addtimes', $addtime);
             })
-            ->select('member_id','member_is_vip', 'member_is_owner', 'member_classify', 'member_status', 'member_mobile', 'member_from', 'member_addtimes', 'member_extend_json',
+            ->select('member_id', 'member_is_vip', 'member_is_owner', 'member_classify', 'member_status', 'member_mobile', 'member_from', 'member_addtimes', 'member_extend_json',
                 'member_info.member_info_nickname', 'member_info.member_info_headimg',
                 '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',
@@ -92,9 +92,9 @@ class MemberService
             ->toArray();
 
         foreach ($rows as &$row) {
-            $row['member_mobile'] = substr($row['member_mobile'],0,3).'****'.substr($row['member_mobile'],7);
+            $row['member_mobile'] = substr($row['member_mobile'], 0, 3) . '****' . substr($row['member_mobile'], 7);
             $row['info'] = [
-                'member_info_nickname' => !empty($row['member_info_nickname']) ? $row['member_info_nickname'] : substr($row['member_mobile'],-4,4).'用户',
+                'member_info_nickname' => !empty($row['member_info_nickname']) ? $row['member_info_nickname'] : substr($row['member_mobile'], -4, 4) . '用户',
                 'member_info_headimg' => !empty($row['member_info_headimg']) ? $row['member_info_headimg'] : ''
             ];
             $row['cert'] = [
@@ -168,14 +168,14 @@ class MemberService
                 if (isset($extendJson['come_from'])) {
                     $row['source'] = $extendJson['come_from'] ?? '';
                 }
-                if (isset($extendJson['belong'])){
-                    $user = SysUser::where('user_id',$extendJson['belong']['user_id'])->select('user_name','user_mobile')->first();
-                    if($user){
+                if (isset($extendJson['belong'])) {
+                    $user = SysUser::where('user_id', $extendJson['belong']['user_id'])->select('user_name', 'user_mobile')->first();
+                    if ($user) {
                         $row['belong']['user_id'] = $extendJson['belong']['user_id'];
                         $row['belong']['username'] = $user->user_name;
                         $row['belong']['user_mobile'] = $user->user_mobile;
                     }
-                    $row['belong']['deptName'] = SysDept::where('dept_id',$extendJson['belong']['premises'])->value('dept_name');
+                    $row['belong']['deptName'] = SysDept::where('dept_id', $extendJson['belong']['premises'])->value('dept_name');
                 }
             }
         }
@@ -186,16 +186,16 @@ class MemberService
 
     public static function exportMember(Request $request)
     {
-        $memberIds = $request->get('member_id','');
+        $memberIds = $request->get('member_id', '');
         $name = $request->get('name', '');
         $mobile = $request->get('mobile', '');
-        $level = $request->get('level','');
-        $isAuth = $request->get('is_auth','');
-        $addtime = $request->get('member_addtimes',[]);
+        $level = $request->get('level', '');
+        $isAuth = $request->get('is_auth', '');
+        $addtime = $request->get('member_addtimes', []);
 
         $rows = Member::with('account')
             ->where('member_is_owner', 'N')
-            ->where('member_mobile','<>', '0000')
+            ->where('member_mobile', '<>', '0000')
             ->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')
@@ -208,16 +208,16 @@ class MemberService
             })->when($mobile != '', function ($query) use ($mobile) {
                 $query->where('member.member_mobile', 'like', '%' . $mobile . '%');
             })->when($level != '', function ($query) use ($level) {
-                if($level == 'other'){
-                    $query->where('member.join_member_role_id',NULL)->orWhere('member.join_member_role_id','');
-                }else{
+                if ($level == 'other') {
+                    $query->where('member.join_member_role_id', NULL)->orWhere('member.join_member_role_id', '');
+                } else {
                     $query->where('member_role.member_role_id', $level);
                 }
             })->when($isAuth != '', function ($query) use ($isAuth) {
-                if($isAuth == 'Y'){
-                    $query->where('member_cert.member_cert_name','<>',NULL)->where('member_cert.member_cert_nbr','<>',NULL)->where('member_cert.member_cert_name','<>','')->where('member_cert.member_cert_nbr','<>','');
-                }else{
-                    $query->where('member_cert.member_cert_name',NULL)->where('member_cert.member_cert_nbr',NULL)->where('member_cert.member_cert_name','')->where('member_cert.member_cert_nbr','');
+                if ($isAuth == 'Y') {
+                    $query->where('member_cert.member_cert_name', '<>', NULL)->where('member_cert.member_cert_nbr', '<>', NULL)->where('member_cert.member_cert_name', '<>', '')->where('member_cert.member_cert_nbr', '<>', '');
+                } else {
+                    $query->where('member_cert.member_cert_name', NULL)->where('member_cert.member_cert_nbr', NULL)->where('member_cert.member_cert_name', '')->where('member_cert.member_cert_nbr', '');
                 }
             })->when(!empty($addtime), function ($query) use ($addtime) {
                 $addtime[0] = strtotime($addtime[0]);
@@ -235,7 +235,7 @@ class MemberService
         $exportData = [];
         foreach ($rows as $row) {
             $row['info'] = [
-                'member_info_nickname' => !empty($row['member_info_nickname']) ? $row['member_info_nickname'] : substr($row['member_mobile'],-4,4).'用户',
+                'member_info_nickname' => !empty($row['member_info_nickname']) ? $row['member_info_nickname'] : substr($row['member_mobile'], -4, 4) . '用户',
                 'member_info_headimg' => !empty($row['member_info_headimg']) ? $row['member_info_headimg'] : ''
             ];
             $row['cert'] = [
@@ -276,36 +276,36 @@ class MemberService
                     $row['source'] = $extendJson['come_from'] ?? '';
                 }
             }
-            
-            $sourceStr = ['APP'=>"APP",'CUSTOMER'=>"客户管理",'SYSTEM'=>"后台"];
+
+            $sourceStr = ['APP' => "APP", 'CUSTOMER' => "客户管理", 'SYSTEM' => "后台"];
             $exportData[] = [
-                'member_id'=>$row['member_id'],
-                'member_info_nickname'=>$row['info']['member_info_nickname'] ?? '',
-                'member_mobile'=>$row['member_mobile'] ?? '',
-                'member_cert_name'=>$row['cert']['member_cert_name'] ?? '',
-                'source'=> in_array($row['source'],$sourceStr) ? $sourceStr[$row['source']] : 'APP',
-                'cash'=>isset($account['cash']) ? $account['cash']['member_account_surplus'] + $account['cash']['member_account_added'] : 0,
-                'points'=>isset($account['points']) ? $account['points']['member_account_surplus'] + $account['points']['member_account_added'] : 0,
+                'member_id' => $row['member_id'],
+                'member_info_nickname' => $row['info']['member_info_nickname'] ?? '',
+                'member_mobile' => $row['member_mobile'] ?? '',
+                'member_cert_name' => $row['cert']['member_cert_name'] ?? '',
+                'source' => in_array($row['source'], $sourceStr) ? $sourceStr[$row['source']] : 'APP',
+                'cash' => isset($account['cash']) ? $account['cash']['member_account_surplus'] + $account['cash']['member_account_added'] : 0,
+                'points' => isset($account['points']) ? $account['points']['member_account_surplus'] + $account['points']['member_account_added'] : 0,
                 'is_auth' => $row['is_auth'],
                 'level' => $row['member_role_name'] ?? '普通用户',
-                'member_addtimes'=>$row['member_addtimes']
+                'member_addtimes' => $row['member_addtimes']
             ];
         }
-        return json_success('',$exportData);
+        return json_success('', $exportData);
     }
 
 
     public static function info($memberId)
     {
-        $member = Member::with('cert','info')
+        $member = Member::with('cert', 'info')
             ->where('member_id', $memberId)
             ->first();
-        if (!$member){
+        if (!$member) {
             return json_fail('查询错误');
         }
         $member = $member->toArray();
         $member['info'] = [
-            'member_info_nickname' => !empty($member['info']) && !empty($member['info']['member_info_nickname']) ? $member['info']['member_info_nickname'] : substr($member['member_mobile'],-4,4).'用户',
+            'member_info_nickname' => !empty($member['info']) && !empty($member['info']['member_info_nickname']) ? $member['info']['member_info_nickname'] : substr($member['member_mobile'], -4, 4) . '用户',
             'member_info_headimg' => !empty($member['info']) && !empty($member['info']['member_info_headimg']) ? $member['info']['member_info_headimg'] : ''
         ];
         $member['cert'] = [
@@ -332,14 +332,14 @@ class MemberService
             if (isset($extendJson['come_from'])) {
                 $member['source'] = $extendJson['come_from'] ?? '';
             }
-            if (isset($extendJson['belong'])){
-                $user = SysUser::where('user_id',$extendJson['belong']['user_id'])->select('user_name','user_mobile')->first();
-                if($user){
+            if (isset($extendJson['belong'])) {
+                $user = SysUser::where('user_id', $extendJson['belong']['user_id'])->select('user_name', 'user_mobile')->first();
+                if ($user) {
                     $member['belong']['user_id'] = $extendJson['belong']['user_id'];
                     $member['belong']['username'] = $user->user_name;
                     $member['belong']['user_mobile'] = $user->user_mobile;
                 }
-                $member['belong']['deptName'] = SysDept::where('dept_id',$extendJson['belong']['premises'])->value('dept_name');
+                $member['belong']['deptName'] = SysDept::where('dept_id', $extendJson['belong']['premises'])->value('dept_name');
             }
         }
 
@@ -367,7 +367,7 @@ class MemberService
                 ->where('pay_status', 'SUCCESS');
         })->orWhere(function ($query) use ($memberId) {
             $query->where('join_pay_member_id', $memberId)
-                ->where('pay_prepayid','like', '%VIP%')
+                ->where('pay_prepayid', 'like', '%VIP%')
                 ->where('pay_status', 'SUCCESS');
         })->orderByDesc('pay_addtimes')
             ->get()
@@ -375,12 +375,12 @@ class MemberService
         $data = [];
         foreach ($info as $key => $item) {
             $categoryIds = [];
-            if(!empty($item['join_pay_order_id'])){
+            if (!empty($item['join_pay_order_id'])) {
                 $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) {
@@ -394,7 +394,7 @@ class MemberService
                 }
             }
             $item['goods_category'] = implode(',', array_unique($categoryName));
-            if(mb_substr($item['goods_category'],0,7) == '自定义金额充值'){
+            if (mb_substr($item['goods_category'], 0, 7) == '自定义金额充值') {
                 $item['goods_category'] = '自定义金额充值';
             }
 
@@ -454,8 +454,8 @@ class MemberService
         }
 
         $total = count($data);
-        $start = ($page-1)*$pageSize;
-        $rows = array_slice($data,$start,$pageSize);
+        $start = ($page - 1) * $pageSize;
+        $rows = array_slice($data, $start, $pageSize);
 
         return json_success('', compact('rows', 'page', 'pageSize', 'total'));
     }
@@ -475,11 +475,11 @@ class MemberService
             $query->where('join_pay_member_id', $memberId)
                 // ->whereIn('pay_prepayid', ['W06', 'A01'])
                 ->where('pay_category', 'RECHARGE')
-                ->where('pay_prepayid','WELFARE')
+                ->where('pay_prepayid', 'WELFARE')
                 ->where('pay_status', 'SUCCESS');
         })->orWhere(function ($query) use ($memberId) {
             $query->where('join_pay_member_id', $memberId)
-                ->where('pay_prepayid','like', '%WELFARE%')
+                ->where('pay_prepayid', 'like', '%WELFARE%')
                 ->where('pay_status', 'SUCCESS');
         })->orderByDesc('pay_addtimes')
             ->get()
@@ -487,12 +487,12 @@ class MemberService
         $data = [];
         foreach ($info as $key => $item) {
             $categoryIds = [];
-            if(!empty($item['join_pay_order_id'])){
+            if (!empty($item['join_pay_order_id'])) {
                 $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) {
@@ -506,7 +506,7 @@ class MemberService
                 }
             }
             $item['goods_category'] = implode(',', array_unique($categoryName));
-            if(mb_substr($item['goods_category'],0,7) == '自定义金额充值'){
+            if (mb_substr($item['goods_category'], 0, 7) == '自定义金额充值') {
                 $item['goods_category'] = '自定义金额充值';
             }
 
@@ -566,8 +566,8 @@ class MemberService
         }
 
         $total = count($data);
-        $start = ($page-1)*$pageSize;
-        $rows = array_slice($data,$start,$pageSize);
+        $start = ($page - 1) * $pageSize;
+        $rows = array_slice($data, $start, $pageSize);
 
         return json_success('', compact('rows', 'page', 'pageSize', 'total'));
     }
@@ -587,11 +587,11 @@ class MemberService
             $query->where('join_pay_member_id', $memberId)
                 // ->whereIn('pay_prepayid', ['W06', 'A01'])
                 ->where('pay_category', 'RECHARGE')
-                ->where('pay_prepayid','<>',$memberId.'-WELFARE')
+                ->where('pay_prepayid', '<>', $memberId . '-WELFARE')
                 ->where('pay_status', 'SUCCESS');
         })->orWhere(function ($query) use ($memberId) {
             $query->where('join_pay_member_id', $memberId)
-                ->where('pay_prepayid','like', '%CASH%')
+                ->where('pay_prepayid', 'like', '%CASH%')
                 ->where('pay_status', 'SUCCESS');
         })->orderByDesc('pay_addtimes')
             ->get()
@@ -599,12 +599,12 @@ class MemberService
         $data = [];
         foreach ($info as $key => $item) {
             $categoryIds = [];
-            if(!empty($item['join_pay_order_id'])){
+            if (!empty($item['join_pay_order_id'])) {
                 $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) {
@@ -618,7 +618,7 @@ class MemberService
                 }
             }
             $item['goods_category'] = implode(',', array_unique($categoryName));
-            if(mb_substr($item['goods_category'],0,7) == '自定义金额充值'){
+            if (mb_substr($item['goods_category'], 0, 7) == '自定义金额充值') {
                 $item['goods_category'] = '自定义金额充值';
             }
             if (in_array($item['pay_category'], ['RECHARGE', 'REFUND'])) {
@@ -681,8 +681,8 @@ class MemberService
         }
 
         $total = count($data);
-        $start = ($page-1)*$pageSize;
-        $rows = array_slice($data,$start,$pageSize);
+        $start = ($page - 1) * $pageSize;
+        $rows = array_slice($data, $start, $pageSize);
 
         return json_success('', compact('rows', 'page', 'pageSize', 'total'));
     }
@@ -766,14 +766,14 @@ class MemberService
                 // 'member_extend_json' => json_encode(['come_from' => $params['source']]),
                 'member_addtimes' => time(),
             ];
-            
+
             $extendJson['come_from'] = $params['source'];
-            if(!empty($params['user_id'])){
-                $deptId = SysUser::where('user_id',$params['user_id'])->value('join_user_dept_id');
-                if(!$deptId){
+            if (!empty($params['user_id'])) {
+                $deptId = SysUser::where('user_id', $params['user_id'])->value('join_user_dept_id');
+                if (!$deptId) {
                     throw new BusinessException('请先关联业务员和门店');
                 }
-                $extendJson['belong'] = ['user_id'=>$params['user_id'],'premises'=>$deptId];
+                $extendJson['belong'] = ['user_id' => $params['user_id'], 'premises' => $deptId];
             }
             $memberData['member_extend_json'] = json_encode($extendJson);
 
@@ -834,7 +834,7 @@ class MemberService
             MemberInfo::insert($infoData);
 
             Db::commit();
-        }catch(BusinessException $e){
+        } catch (BusinessException $e) {
             Db::rollBack();
 
             return json_fail($e->getMessage());
@@ -844,7 +844,7 @@ class MemberService
             return json_fail("数据添加失败");
         }
 
-        return json_success('数据添加成功',['member_id'=>$memberId]);
+        return json_success('数据添加成功', ['member_id' => $memberId]);
     }
 
     /**
@@ -870,12 +870,12 @@ class MemberService
             }
             $extendJson['come_from'] = $params['source'];
             // 门店、业务员
-            if(!empty($params['user_id'])){
-                $deptId = SysUser::where('user_id',$params['user_id'])->value('join_user_dept_id');
-                if(!$deptId){
+            if (!empty($params['user_id'])) {
+                $deptId = SysUser::where('user_id', $params['user_id'])->value('join_user_dept_id');
+                if (!$deptId) {
                     throw new BusinessException('请先关联业务员和门店');
                 }
-                $extendJson['belong'] = ['user_id'=>$params['user_id'],'premises'=>$deptId];
+                $extendJson['belong'] = ['user_id' => $params['user_id'], 'premises' => $deptId];
             }
             // 先写主表,要ID
             $memberData = [
@@ -912,7 +912,7 @@ class MemberService
             $avatar = '';
             if ($params['avatar'] && (strpos($params['avatar'], getenv('APP_IMAGE_DOMAIN')) !== false || strpos($params['avatar'], getenv('SYSTEM_AVATAR_DOMAIN')) !== false)) {
                 $avatar = $params['avatar'];
-            } else if($params['avatar']) {
+            } else if ($params['avatar']) {
                 $avatar = getenv('SYSTEM_AVATAR_DOMAIN') . str_replace(getenv('STORAGE_DOMAIN'), '', $params['avatar']);
             }
 
@@ -1104,7 +1104,7 @@ class MemberService
     public static function createMember($params)
     {
         $memberId = $params['member_id'] ?? '';
-        if (!$memberId){
+        if (!$memberId) {
             throw new BusinessException("参数异常");
         }
         // 主表
@@ -1114,7 +1114,7 @@ class MemberService
             'member_classify' => 'MEMBER',
             'member_status' => 'ACTIVED',
             'member_mobile' => $params['mobile'],
-            'member_extend_json'=>json_encode(['come_from'=>'SYSTEM']),
+            'member_extend_json' => json_encode(['come_from' => 'SYSTEM']),
             'member_addtimes' => time()
         ];
         Member::insert($memberData);
@@ -1149,4 +1149,21 @@ class MemberService
 
         return "MR" . str_pad($id, 16, "0", STR_PAD_LEFT) . random_string(6, 'up');
     }
+
+    public static function getMemberName($mobile, $certName, $nickname)
+    {
+        $name = '';
+        if (!empty($certName)){
+            $name = $certName;
+        }elseif (!empty($nickname)){
+            $name = $nickname;
+        }
+        if (!empty($name) && !empty($mobile)){
+            $name .= '-'.$mobile;
+        }elseif (!empty($mobile)){
+            $name = $mobile;
+        }
+
+        return $name;
+    }
 }

+ 30 - 1
app/model/CouponDetail.php

@@ -21,6 +21,11 @@ class CouponDetail extends Model
         return $date->format('Y-m-d H:i:s');
     }
 
+    public function detail()
+    {
+        return $this->hasMany(CouponDetail::class,'join_detail_coupon_id','join_detail_coupon_id');
+    }
+
     /**
      * @Desc 关联会员
      * @Author Gorden
@@ -30,7 +35,31 @@ class CouponDetail extends Model
      */
     public function member()
     {
-        return $this->hasOne(Member::class, 'member_id', 'join_coupon_member_id');
+        return $this->hasOne(Member::class, 'member_id', 'join_coupon_detail_member_id');
+    }
+
+    /**
+     * @Desc 关联实名
+     * @Author Gorden
+     * @Date 2024/8/21 13:50
+     *
+     * @return \Illuminate\Database\Eloquent\Relations\HasOne
+     */
+    public function cert()
+    {
+        return $this->hasOne(MemberCert::class, 'join_cert_member_id', 'join_coupon_detail_member_id');
+    }
+
+    /**
+     * @Desc 关联详情
+     * @Author Gorden
+     * @Date 2024/8/21 13:51
+     *
+     * @return \Illuminate\Database\Eloquent\Relations\HasOne
+     */
+    public function info()
+    {
+        return $this->hasOne(MemberInfo::class, 'join_info_member_id', 'join_coupon_detail_member_id');
     }
 
     /**

+ 6 - 0
route/admin.php

@@ -873,6 +873,12 @@ Route::group('/admin', function () {
         })->middleware([
             \app\middleware\AdminAuthCheck::class
         ]);
+        Route::group('/detail', function () {
+            Route::get('/list', [\app\admin\controller\coupon\CouponDetailController::class, 'select']);
+            Route::get('/info', [\app\admin\controller\coupon\CouponDetailController::class, 'info']);
+        })->middleware([
+            \app\middleware\AdminAuthCheck::class
+        ]);
     });
     /* 订单管理 */
     Route::group('/order', function () {