Browse Source

VIP发放优惠券

gorden 6 months ago
parent
commit
a091c1e5ab

+ 4 - 0
app/admin/controller/coupon/CouponController.php

@@ -37,7 +37,11 @@ class CouponController extends Curd
      */
     public function select(Request $request): Response
     {
+        $joinCouponCategoryId = $request->get('join_coupon_category_id',[]);
         [$where, $format, $limit, $field, $order] = $this->selectInput($request);
+        if (!empty($joinCouponCategoryId)){
+            $where['join_coupon_category_id'] = ['in',implode(',',$joinCouponCategoryId)];
+        }
         $order = $request->get('order', 'desc');
         $field = $field ?? 'coupon_addtimes';
         $query = $this->doSelect($where, $field, $order);

+ 37 - 0
app/command/TestCommand.php

@@ -0,0 +1,37 @@
+<?php
+
+namespace app\command;
+
+use app\model\Member;
+use app\model\MemberAccount;
+use app\model\Order;
+use app\model\PayDetail;
+use support\Db;
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Webman\Event\Event;
+
+class TestCommand extends Command
+{
+
+    protected static $defaultName = 'TestCommand';
+    protected static $defaultDescription = 'TestCommand Desc';
+
+    /**
+     * @return void
+     */
+    protected function configure()
+    {
+        // $this->addArgument('name', InputArgument::OPTIONAL, '余额账户转福利账户');
+        $this->addArgument('name', InputArgument::OPTIONAL, '福利账户余额清空');
+    }
+
+    protected function execute(InputInterface $input, OutputInterface $output): int
+    {
+        Event::dispatch('order_pay.member_level.up','MR20240624091039F5HSLY');
+
+        return self::SUCCESS;
+    }
+}

+ 65 - 0
app/event/MemberLevelEvent.php

@@ -0,0 +1,65 @@
+<?php
+
+namespace app\event;
+
+use app\admin\service\notify\RechargeService;
+use app\model\Member;
+use app\model\MemberAccount;
+use app\model\MemberRole;
+use app\model\PayDetail;
+use support\Db;
+
+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;
+
+            $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%');
+                });
+            $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')
+                ->sum('pay_amount');
+            $amount = $payAmount - $refundAmount;
+            $resultAmount = max($income,$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){
+                    $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();
+                }
+            }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();
+            }
+        }catch (\Exception $e){
+            Db::rollBack();
+            _syslog("会员升级","会员升级失败,原因:".$e->getMessage(),false,['member'=>$memberId],1001);
+        }
+    }
+}

+ 2 - 2
app/functions.php

@@ -77,9 +77,9 @@ if (!function_exists('_syslog')) {
         $model = new \app\model\SysLog();
         $model->log_admin_id = $logAdminId;
         $model->log_name = $name;
-        $model->log_route = \request()->uri() ?? \request()->route->getPath();
+        $model->log_route = \request() && \request()->uri() ? \request()->uri() : (\request() && \request()->route && \request()->route->getPath() ? \request()->route->getPath() : '');
         $model->log_operation = $operation;
-        $model->log_ip = \request()->getRealIp();
+        $model->log_ip = \request() && \request()->getRealIp() ? \request()->getRealIp() : '0.0.0.0';
         $model->log_request_params = $requestParams ? json_encode($requestParams) : json_encode(\request()->all());
         $model->log_operation_data = $operationData ? json_encode($operationData) : null;
         $model->save();

+ 3 - 0
config/event.php

@@ -12,5 +12,8 @@ return [
     ],
     'order.kangyangCityVIP.grant' => [
         [\app\event\order\KangyangCityEvent::class, 'grant']
+    ],
+    'order_pay.member_level.up' => [
+        [\app\event\MemberLevelEvent::class,'payOrderLevelUp']
     ]
 ];