Browse Source

会员升级

gorden 6 months ago
parent
commit
2bd1c117cb

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

@@ -1213,12 +1213,14 @@ class WholeController extends Curd
                 Event::dispatch('order.kangyangCityVIP.grant', $params);
             }
 
-            if ($order->order_is_complete == 'Y') {
+            Db::commit();
+
+            // 会员升级
+            if ($order->order_is_complete == 'Y' && $order->order_status_payment == 'SUCCESS') {
                 Event::dispatch('order.complete', $params);
+                Event::dispatch('order_pay.member_level.up', $params['join_order_member_id']);
             }
 
-            Db::commit();
-
             // 打小票
             if (!empty($premises) && $params['goods_classify'] == 'MEALS') {
                 dump("pay 打小票");
@@ -1655,12 +1657,13 @@ class WholeController extends Curd
                 Event::dispatch('order.kangyangCityVIP.grant', $params);
             }
 
-            if ($order->order_is_complete == 'Y') {
+            Db::commit();
+            // 会员升级
+            if ($order->order_is_complete == 'Y' && $order->order_status_payment == 'SUCCESS') {
                 Event::dispatch('order.complete', $params);
+                Event::dispatch('order_pay.member_level.up', $params['join_order_member_id']);
             }
 
-            Db::commit();
-
             // 打小票
             if (!empty($premises) && $params['goods_classify'] == "MEALS") {
                 dump('payCons 打小票');
@@ -2335,12 +2338,15 @@ class WholeController extends Curd
                 $params['member_id'] = $params['join_order_member_id'];
                 Event::dispatch('order.kangyangCityVIP.grant', $params);
             }
-            if (!empty($params['order_is_complete']) && $params['order_is_complete'] == 'Y') {
-                Event::dispatch('order.complete', $params);
-            }
 
             Db::commit();
 
+            // 会员升级
+            if (!empty($params['order_is_complete']) && $params['order_is_complete'] == 'Y' && $params['order_status_payment'] == 'SUCCESS') {
+                Event::dispatch('order.complete', $params);
+                Event::dispatch('order_pay.member_level.up', $params['join_order_member_id']);
+            }
+
             // 打小票
             if (!empty($premises) && isset($params['submit_goods_classify']) && $params['submit_goods_classify'] == 'MEALS') {
                 dump("insert 打小票");
@@ -2817,12 +2823,14 @@ class WholeController extends Curd
                 Event::dispatch('order.kangyangCityVIP.grant', $params);
             }
 
-            if (!empty($params['order_is_complete']) && $params['order_is_complete'] == 'Y') {
+            Db::commit();
+
+            // 会员升级
+            if (!empty($params['order_is_complete']) && $params['order_is_complete'] == 'Y' && $params['order_status_payment'] == 'SUCCESS') {
                 Event::dispatch('order.complete', $params);
+                Event::dispatch('order_pay.member_level.up', $params['join_order_member_id']);
             }
 
-            Db::commit();
-
             // 打小票
             if (!empty($premises) && isset($params['submit_goods_classify']) && $params['submit_goods_classify'] == 'MEALS') {
 //            if (!empty($premises)){

+ 22 - 8
app/admin/service/notify/RechargeService.php

@@ -77,18 +77,32 @@ class RechargeService
                     ->orWhere('pay_prepayid', 'like', '%CASH%');
             })
             ->sum('pay_amount');
-        $expend = PayDetail::where('join_pay_member_id',$memberId)
+//        $expend = PayDetail::where('join_pay_member_id',$memberId)
+//            ->whereIn('pay_category',['GOODS','SERVICE','CHNMED','CHNNCD','PACKAGE','MEALS'])
+//            ->where('pay_status','SUCCESS')
+//            ->whereIn('pay_prepayid', ['ALIPAY', 'WXPAY','OFFLINE_WXPAY','OFFLINE_ALIPAY','MONEY'])
+//            ->sum('pay_amount');
+        $paySuccessDetail = PayDetail::where('join_pay_member_id',$memberId)
+            ->where('pay_status','SUCCESS')
             ->whereIn('pay_category',['GOODS','SERVICE','CHNMED','CHNNCD','PACKAGE','MEALS'])
+            ->whereIn('pay_prepayid', ['ALIPAY', 'WXPAY','OFFLINE_WXPAY','OFFLINE_ALIPAY','MONEY']);
+        $payAmount = $paySuccessDetail->sum('pay_amount');
+        $paySuccessDetail = $paySuccessDetail->select('pay_id','join_pay_order_id','pay_amount')
+            ->get()
+            ->toArray();
+        $orderIds = array_column($paySuccessDetail,'join_pay_order_id');
+        $refundAmount = PayDetail::whereIn('join_pay_order_id',$orderIds)
+            ->where('pay_category','REFUND')
             ->where('pay_status','SUCCESS')
-            ->whereIn('pay_prepayid', ['ALIPAY', 'WXPAY','OFFLINE_WXPAY','OFFLINE_ALIPAY','MONEY'])
             ->sum('pay_amount');
-        $money = max($recharge, $expend);
+        $amount = $payAmount - $refundAmount;
 
-        $memberRoles = MemberRole::where('member_role_status', 'ACTIVED')->get()->toArray();
-        foreach ($memberRoles as $role) {
-            if ($money >= floatval($role['member_role_range_begin']) && $money < floatval($role['member_role_range_end'])) {
-                return $role['member_role_id'];
-            }
+        $money = max($recharge, $amount);
+        $memberRole = MemberRole::where('member_role_range_begin' ,'<=',$money)
+            ->where('member_role_range_end','>',$money)
+            ->first();
+        if (!empty($memberRole->member_role_id)){
+            return $memberRole->member_role_id;
         }
 
         return false;

+ 41 - 29
app/event/MemberLevelEvent.php

@@ -8,55 +8,67 @@ use app\model\MemberAccount;
 use app\model\MemberRole;
 use app\model\PayDetail;
 use support\Db;
+use support\exception\BusinessException;
 
 class MemberLevelEvent
 {
     public function payOrderLevelUp($memberId)
     {
         Db::beginTransaction();
-        try{
-            $member = Member::where('member_id',$memberId)->select('member_id','join_member_role_id')->first();
-            $account = MemberAccount::where('join_account_member_id',$memberId)->where('member_account_classify','CASH')->first();
-            $income = $account->member_account_income;
+        try {
+            $member = Member::where('member_id', $memberId)->select('member_id', 'join_member_role_id', 'member_mobile')->first();
+            if ($member->member_mobile == '0000') {
+                throw new BusinessException("散客不参与升级");
+            }
+//            $account = MemberAccount::where('join_account_member_id',$memberId)->where('member_account_classify','CASH')->first();
+//            $income = $account->member_account_income;
+
+            $recharge = PayDetail::where('join_pay_member_id', $memberId)
+                ->where('pay_category', 'RECHARGE')
+                ->where('pay_status', 'SUCCESS')
+                ->where(function ($query) {
+                    $query->whereIn('pay_prepayid', ['ALIPAY', 'WXPAY', 'OFFLINE_WXPAY', 'OFFLINE_ALIPAY', 'MONEY'])
+                        ->orWhere('pay_prepayid', 'like', '%CASH%');
+                })
+                ->sum('pay_amount');
 
-            $paySuccessDetail = PayDetail::where('join_pay_member_id',$memberId)
-                ->where('pay_status','SUCCESS')
-                ->where('pay_category','<>','RECHARGE')
-                ->where(function ($query){
-                    $query->where('pay_prepayid','WXPAY')
-                        ->orWhere('pay_prepayid','ALIPAY')
-                        ->orWhere('pay_prepayid','like','%CASH%');
+            $paySuccessDetail = PayDetail::where('join_pay_member_id', $memberId)
+                ->where('pay_status', 'SUCCESS')
+                ->whereIn('pay_category', ['GOODS', 'SERVICE', 'CHNMED', 'CHNNCD', 'PACKAGE', 'MEALS'])
+                ->where(function ($query) {
+                    $query->whereIn('pay_prepayid', ['ALIPAY', 'WXPAY', 'OFFLINE_WXPAY', 'OFFLINE_ALIPAY', 'MONEY']);
                 });
             $payAmount = $paySuccessDetail->sum('pay_amount');
-            $paySuccessDetail = $paySuccessDetail->select('pay_id','join_pay_order_id','pay_amount')
+            $paySuccessDetail = $paySuccessDetail->select('pay_id', 'join_pay_order_id', 'pay_amount')
                 ->get()
                 ->toArray();
-            $orderIds = array_column($paySuccessDetail,'join_pay_order_id');
-            $refundAmount = PayDetail::whereIn('join_pay_order_id',$orderIds)
-                ->where('pay_category','REFUND')
-                ->where('pay_status','SUCCESS')
+            $orderIds = array_column($paySuccessDetail, 'join_pay_order_id');
+            $refundAmount = PayDetail::whereIn('join_pay_order_id', $orderIds)
+                ->where('pay_category', 'REFUND')
+                ->where('pay_status', 'SUCCESS')
                 ->sum('pay_amount');
             $amount = $payAmount - $refundAmount;
-            $resultAmount = max($income,$amount);
-            $memberRole = MemberRole::where('member_role_range_begin' ,'<=',$resultAmount)
-                ->where('member_role_range_end','>',$resultAmount)
+            $resultAmount = max($recharge, $amount);
+            $memberRole = MemberRole::where('member_role_range_begin', '<=', $resultAmount)
+                ->where('member_role_range_end', '>', $resultAmount)
                 ->first();
-            if(!empty($memberRole->member_role_id) && !empty($member->join_member_role_id) && $memberRole->member_role_id != $member->join_member_role_id){
-                $oldRole = MemberRole::where('member_role_id',$member->join_member_role_i)->first();
-                if (!empty($oldRole->member_role_range_begin) && $oldRole->member_role_range_begin < $memberRole->member_role_range_begin){
+            if (!empty($memberRole->member_role_id) && !empty($member->join_member_role_id) && $memberRole->member_role_id != $member->join_member_role_id) {
+                $oldRole = MemberRole::where('member_role_id', $member->join_member_role_id)->first();
+                if (!empty($oldRole->member_role_range_begin) && $oldRole->member_role_range_begin < $memberRole->member_role_range_begin) {
                     $member->join_member_role_id = $memberRole->member_role_id;
                     $member->save();
-                    RechargeService::disposeAdded($memberRole->member_role_id,$memberId);
-                    _syslog("会员升级","会员升级成功",false,['member'=>$memberId],1001);
-                    Db::commit();
+                    RechargeService::disposeAdded($memberRole->member_role_id, $memberId);
                 }
-            }elseif (!empty($memberRole->member_role_id) && empty($member->join_member_role_id)){
+            } elseif (!empty($memberRole->member_role_id) && empty($member->join_member_role_id)) {
                 $member->join_member_role_id = $memberRole->member_role_id;
                 $member->save();
-                RechargeService::disposeAdded($memberRole->member_role_id,$memberId);
-                _syslog("会员升级","会员升级成功",false,['member'=>$memberId],1001);
-                Db::commit();
+                RechargeService::disposeAdded($memberRole->member_role_id, $memberId);
             }
+            Db::commit();
+            _syslog("会员升级", "会员升级成功", false, ['member' => $memberId], 1001);
+        }catch (BusinessException $e){
+            Db::rollBack();
+            _syslog("会员升级","会员升级失败,原因:".$e->getMessage(),false,['member'=>$memberId],1001);
         }catch (\Exception $e){
             Db::rollBack();
             _syslog("会员升级","会员升级失败,原因:".$e->getMessage(),false,['member'=>$memberId],1001);