gorden 5 luni în urmă
părinte
comite
0590e79192

+ 1 - 1
app/admin/controller/finance/CommissionListController.php

@@ -134,7 +134,7 @@ class CommissionListController extends Curd
                     }
                 ])->where('member_id', $accountListJson['master_member_id'])
                     ->first();
-                $info->master_nickname = isset($member->info) && !empty($member->info->member_info_nickname) ? $member->info->member_info_nickname : '';
+                $info->master_nickname = isset($member->info) && !empty($member->info->member_info_nickname) ? $member->info->member_info_nickname : MemberService::getMemberNickname($member->member_mobile ?? '');
                 $info->master_certname = isset($member->cert) && !empty($member->cert->member_cert_name) ? $member->cert->member_cert_name : '';
                 $info->master_mobile = isset($member) && !empty($member->member_mobile) ? $member->member_mobile : '';
                 $info->master_member_name = MemberService::getMemberName($info->master_mobile, $info->master_certname, $info->master_nickname);

+ 71 - 13
app/admin/controller/member/WriteOffController.php

@@ -2,14 +2,17 @@
 
 namespace app\admin\controller\member;
 
+use app\admin\service\member\MemberService;
 use app\controller\Curd;
 use app\model\Appointment;
+use app\model\Member;
 use app\model\MemberBenefit;
 use app\model\MemberQuota;
 use app\model\RuleAddedComponent;
 use app\model\SysUser;
 use support\Db;
 use support\Request;
+use support\Response;
 
 class WriteOffController extends Curd
 {
@@ -26,13 +29,13 @@ class WriteOffController extends Curd
         $userId = $request->get('user_id', '');
         $premises = $request->get('premises', '');
         $date = $request->get('date', []);
-        $memberId = $request->get('member_id','');
+        $memberId = $request->get('member_id', '');
 
         $appointmentList = Db::table('appointment')
             ->leftJoin('member', 'member.member_id', '=', 'appointment.join_appointment_member_id')
             ->leftJoin('member_cert', 'member_cert.join_cert_member_id', '=', 'appointment.join_appointment_member_id')
             ->select('appointment.appointment_id as quota_id', 'appointment.join_appointment_member_id as member_id', 'appointment.appointment_classify as classify', 'appointment.appointment_done_json as used_json', 'appointment.appointment_done_datetime as used_time', 'appointment.join_appointment_member_benefit_id as benefit_id',
-                'member.member_mobile', 'member_cert.member_cert_name','appointment_extend_json as extend_json'
+                'member.member_mobile', 'member_cert.member_cert_name', 'appointment_extend_json as extend_json'
             )
             ->when($keywords != '', function ($query) use ($keywords) {
                 $query->where('member.member_mobile', 'like', '%' . $keywords . '%');
@@ -44,15 +47,15 @@ class WriteOffController extends Curd
                 $query->whereJsonContains('appointment.appointment_done_json->charge->charge_user_id', $userId);
             })->when($premises != '', function ($query) use ($premises) {
                 $query->whereJsonContains('appointment.appointment_done_json->charge->charge_premises', $premises);
-            })->when(!empty($memberId),function ($query) use ($memberId){
-                $query->where('join_appointment_member_id',$memberId);
+            })->when(!empty($memberId), function ($query) use ($memberId) {
+                $query->where('join_appointment_member_id', $memberId);
             })
             ->where('appointment_status', 'DONE');
         $quotaList = Db::table('member_quota')
             ->leftJoin('member', 'member.member_id', '=', 'member_quota.join_quota_member_id')
             ->leftJoin('member_cert', 'member_cert.join_cert_member_id', '=', 'member_quota.join_quota_member_id')
             ->select('member_quota.member_quota_id as quota_id', 'member_quota.join_quota_member_id as member_id', 'member_quota.member_quota_category as classify', 'member_quota.member_quota_used_json as used_json', "member_quota.member_quota_extend_json->writeOffTime as used_time", "member_quota.join_member_rule_added_component_id as benefit_id",
-                'member.member_mobile', 'member_cert.member_cert_name','member_quota_extend_json as extend_json')
+                'member.member_mobile', 'member_cert.member_cert_name', 'member_quota_extend_json as extend_json')
             ->when($keywords != '', function ($query) use ($keywords) {
                 $query->where('member.member_mobile', 'like', '%' . $keywords . '%');
             })->when(!empty($date), function ($query) use ($date) {
@@ -94,9 +97,9 @@ class WriteOffController extends Curd
                 }
             }
             $remark = [];
-            if (!empty($item->extend_json)){
-                $extendJson = json_decode($item->extend_json,true);
-                if (isset($extendJson['remark'])){
+            if (!empty($item->extend_json)) {
+                $extendJson = json_decode($item->extend_json, true);
+                if (isset($extendJson['remark'])) {
                     $remark = $extendJson['remark'];
                 }
             }
@@ -116,7 +119,7 @@ class WriteOffController extends Curd
                 'member_mobile' => $item->member_mobile ? $item->member_mobile : '',
                 'classify' => $classify,
                 'nbr' => 1,
-                'remark'=>$remark
+                'remark' => $remark
             ];
 
         }
@@ -124,6 +127,61 @@ class WriteOffController extends Curd
         return json_success('', compact('rows', 'page', 'pageSize', 'total'));
     }
 
+    /**
+     * @Desc 核销详情
+     * @Author Gorden
+     * @Date 2024/10/10 14:00
+     *
+     * @param Request $request
+     * @return Response
+     */
+    public function info(Request $request): Response
+    {
+        $quotaId = $request->get('quota_id');
+        if (!$quotaId) {
+            return json_fail("参数异常");
+        }
+
+        if (substr($quotaId, 0, 2) == 'AP') {
+            $quota = Appointment::where('appointment_id', $quotaId)
+                ->select('appointment_id', 'join_appointment_member_id as member_id')
+                ->first();
+        } elseif (substr($quotaId, 0, 2) == 'MQ') {
+            $quota = MemberQuota::where('member_quota_id', $quotaId)
+                ->select('member_quota_id', 'join_quota_member_id as member_id')
+                ->first();
+        } else {
+            return json_fail("参数异常");
+        }
+
+        $member = Member::with([
+            'cert' => function ($query) {
+                $query->select('join_cert_member_id', 'member_cert_name');
+            },
+            'info' => function ($query) {
+                $query->select('join_info_member_id', 'member_info_nickname', 'member_info_headimg');
+            }
+        ])->where('member_id', $quota['member_id'])
+            ->select('member_id', 'member_mobile', 'join_member_role_id', 'member_is_owner', 'member_is_vip', 'member_is_partner', 'member_is_referrer')
+            ->first();
+        if (!$member){
+            return json_fail('数据异常');
+        }
+        $member = $member->toArray();
+        $certName = $member['cert']['member_cert_name'] ?? '';
+        $nickname = $member['info']['member_info_nickname'] ?? MemberService::getMemberNickname($member['member_mobile'] ?? '');
+        $mobile = $member['member_mobile'] ?? '';
+        $member['member_name'] = MemberService::getMemberCertName($mobile, $certName, $nickname);
+        $member['info']['member_info_headimg'] = MemberService::getAvatarUrl($member['info']['member_info_headimg'] ?? '');
+        $member['level'] = MemberService::getRoleName($member['join_member_role_id']);
+
+        $data = [
+            'member'=>$member
+        ];
+
+        return json_success('success',$data);
+    }
+
     /**
      * @Desc 核销备注
      * @Author Gorden
@@ -160,11 +218,11 @@ class WriteOffController extends Curd
                 'business' => $request->post('business', ''),
                 'service' => $request->post('service', '')
             ];
-            if (!empty($appointment)){
-                $appointment->appointment_extend_json = json_encode($extendJson,JSON_UNESCAPED_UNICODE);
+            if (!empty($appointment)) {
+                $appointment->appointment_extend_json = json_encode($extendJson, JSON_UNESCAPED_UNICODE);
                 $appointment->save();
-            }elseif (!empty($quota)){
-                $quota->member_quota_extend_json = json_encode($extendJson,JSON_UNESCAPED_UNICODE);
+            } elseif (!empty($quota)) {
+                $quota->member_quota_extend_json = json_encode($extendJson, JSON_UNESCAPED_UNICODE);
                 $quota->save();
             }
 

+ 4 - 0
app/admin/controller/order/PayDetailController.php

@@ -321,6 +321,10 @@ class PayDetailController extends Curd
         ])->where('member_id', $memberId)
             ->select('member_id', 'member_mobile', 'join_member_role_id', 'member_is_owner', 'member_is_vip', 'member_is_partner', 'member_is_referrer')
             ->first();
+        if (!$member){
+            return json_fail('数据异常');
+        }
+        $member = $member->toArray();
         $certName = $member['cert']['member_cert_name'] ?? '';
         $nickname = $member['info']['member_info_nickname'] ?? '';
         $mobile = $member['member_mobile'] ?? '';

+ 27 - 2
app/admin/controller/order/RefundController.php

@@ -2,6 +2,7 @@
 
 namespace app\admin\controller\order;
 
+use app\admin\service\member\MemberService;
 use app\admin\validate\order\ReturnValidate;
 use app\controller\Curd;
 use app\model\CouponDetail;
@@ -173,7 +174,7 @@ class RefundController extends Curd
         $orderId = $request->get('order_id');
         $orderSheet = OrderSheet::with([
             'member' => function ($query) {
-                $query->select('member_id', 'member_mobile');
+                $query->select('member_id', 'member_mobile','join_member_role_id','member_is_owner','member_is_vip','member_is_partner','member_is_referrer');
             },
             'goods' => function ($query) {
                 $query->select('goods_id', 'goods_name', 'goods_cover', 'goods_market_price', 'goods_sales_price', 'goods_classify');
@@ -193,12 +194,15 @@ class RefundController extends Curd
         foreach ($orderSheet as &$item) {
             if (isset($item['member']) && empty($member)) {
                 $member = $item['member'];
+                $member['level'] = MemberService::getRoleName($member['join_member_role_id'] ?? '');
             }
             if (isset($item['cert']) && empty($cert)) {
                 $cert = $item['cert'];
             }
             if (isset($item['member_info']) && empty($memberInfo)) {
                 $memberInfo = $item['member_info'];
+                $memberInfo['member_info_nickname'] = $memberInfo['member_info_nickname'] ?? MemberService::getMemberNickname($member['member_mobile'] ?? '');
+                $memberInfo['member_info_headimg'] = MemberService::getAvatarUrl($memberInfo['member_info_headimg'] ?? '');
             }
             $item['goods']['goods_cover'] = getenv('STORAGE_DOMAIN') . $item['goods']['goods_cover'];
             if (!empty($item['goods']) && $item['goods']['goods_classify'] == 'PACKAGE') {
@@ -258,6 +262,25 @@ class RefundController extends Curd
             }
         }
         $express = OrderExpress::where('join_express_order_id', $orderId)->first();
+        $payDetails = PayDetail::where('join_pay_order_id',$order->order_groupby)
+            ->whereJsonContains('join_pay_object_json->order_id',$orderId)
+            ->where('pay_status','SUCCESS')
+            ->where('pay_category', '<>', 'REFUND')
+            ->get()
+            ->toArray();
+        if (count($payDetails) > 1){
+            $order->pay_category = 'CONSTITUTE';
+        }
+        $payDetail = !empty($payDetails) && count($payDetails) > 0 ? $payDetails[0] : [];
+        if (!empty($payDetail) && !empty($payDetail['pay_prepayid'])) {
+            $categoryArray = explode('-', $payDetail['pay_prepayid']);
+            if (isset($categoryArray[1])) {
+                $payDetail['pay_category'] = $categoryArray[1];
+            } else if (in_array($categoryArray[0], ['WXPAY', 'ALIPAY', 'OFFLINE', 'OFFLINE_ALIPAY', 'OFFLINE_WXPAY', 'MONEY'])) {
+                $payDetail['pay_category'] = $categoryArray[0];
+            }
+        }
+
         $data = [
             'member' => $member,
             'cert' => $cert,
@@ -265,7 +288,9 @@ class RefundController extends Curd
             'order' => $order,
             'refund' => $return,
             'sheet' => $orderSheet,
-            'express' => $express
+            'express' => $express,
+            'payDetail' => json_decode(json_encode($payDetail)),
+            'payDetails' => json_decode(json_encode($payDetails))
         ];
 
         return json_success('', $data);

+ 51 - 0
app/admin/service/member/MemberService.php

@@ -225,6 +225,17 @@ class MemberService
                 }
                 if (isset($extendJson['referee'])) {
                     foreach ($extendJson['referee'] as $key => $referee) {
+                        if (preg_match('/^1[3-9]\d{9}$/', $referee)) {
+                            $member = Member::with([
+                                'cert' => function ($query) {
+                                    $query->select('join_cert_member_id', 'member_cert_name');
+                                }
+                            ])->where('member_mobile', $referee)->where('member_status', 'ACTIVED')
+                                ->first();
+                            if ($member->cert && $member->cert->member_cert_name) {
+                                $referee = $member->cert->member_cert_name . '-' . $referee;
+                            }
+                        }
                         $row['referee'][] = [
                             'name' => $referee,
                             'time' => $key
@@ -389,6 +400,7 @@ class MemberService
             return json_fail('查询错误');
         }
         $member = $member->toArray();
+        unset($member['member_password']);
         $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_headimg' => !empty($member['info']) && !empty($member['info']['member_info_headimg']) ? $member['info']['member_info_headimg'] : '',
@@ -463,6 +475,17 @@ class MemberService
             }
             if (isset($extendJson['referee'])) {
                 foreach ($extendJson['referee'] as $key => $referee) {
+                    if (preg_match('/^1[3-9]\d{9}$/', $referee)) {
+                        $refereeMember = Member::with([
+                            'cert' => function ($query) {
+                                $query->select('join_cert_member_id', 'member_cert_name');
+                            }
+                        ])->where('member_mobile', $referee)->where('member_status', 'ACTIVED')
+                            ->first();
+                        if ($refereeMember->cert && $refereeMember->cert->member_cert_name) {
+                            $referee = $refereeMember->cert->member_cert_name . '-' . $referee;
+                        }
+                    }
                     $member['referee'][] = [
                         'name' => $referee,
                         'time' => $key
@@ -494,6 +517,25 @@ class MemberService
             }
         }
 
+        if (!empty($member['member_partner_json'])) {
+            $partnerJson = json_decode($member['member_partner_json'], true);
+            if (isset($partnerJson['duedate'])){
+                $member['partner_info'] = [
+                    'surplus' => ceil((strtotime($partnerJson['duedate'].' 23:59:59') - time())/(3600*24)),
+                    'dates' => date('Y/m/d 00:00:00',strtotime($partnerJson['datetime'])).'-'.date('Y/m/d 23:59:59',strtotime($partnerJson['duedate']))
+                ];
+            }
+        }
+        if (!empty($member['member_referrer_json'])) {
+            $referrerJson = json_decode($member['member_referrer_json'], true);
+            if (isset($referrerJson['duedate'])){
+                $member['referrer_info'] = [
+                    'surplus' => ceil((strtotime($referrerJson['duedate'].' 23:59:59') - time())/(3600*24)),
+                    'dates' => date('Y/m/d 00:00:00',strtotime($referrerJson['datetime'])).'-'.date('Y/m/d 23:59:59',strtotime($referrerJson['duedate']))
+                ];
+            }
+        }
+
         return json_success('', $member);
     }
 
@@ -1650,6 +1692,15 @@ class MemberService
         return $name;
     }
 
+    public static function getMemberNickname($mobile)
+    {
+        if (empty($mobile)) {
+            return '';
+        }
+
+        return substr($mobile, -4, 4) . '会员';
+    }
+
     public static function getMemberNameByMemberId($memberId)
     {
         $member = Member::with([

+ 1 - 0
route/admin.php

@@ -718,6 +718,7 @@ Route::group('/admin', function () {
         ]);
         Route::group('/writeOff', function () {
             Route::get('/list', [\app\admin\controller\member\WriteOffController::class, 'list']);
+            Route::get('/info', [\app\admin\controller\member\WriteOffController::class, 'info']);
             Route::post('/remark', [\app\admin\controller\member\WriteOffController::class, 'remark']);
         })->middleware([
             \app\middleware\AdminAuthCheck::class