Quellcode durchsuchen

feat(wechatpay): 添加转账单审核功能

- 新增 approve 和 reject 路由接口
- 实现 approveTransferBill 方法用于审核通过转账单
- 实现 rejectTransferBill 方法用于拒绝转账单并记录失败原因
- 添加 TransferBillFailedEvent 事件类用于处理转账失败逻辑
runphp vor 4 Monaten
Ursprung
Commit
c101cb5c6b

+ 2 - 0
route/admin.php

@@ -13,6 +13,8 @@ use SixShop\System\Middleware\MacroPageMiddleware;
 
 Route::resource('transfer_bill', TransferBillController::class, function (){
     Route::get('refresh', [TransferBillController::class, 'refresh']);
+    Route::post('approve', [TransferBillController::class, 'approve']);
+    Route::post('reject', [TransferBillController::class, 'reject']);
 })
     ->only(['index'])
     ->middleware(['auth', MacroPageMiddleware::class]);

+ 16 - 3
src/Controller/TransferBillController.php

@@ -1,15 +1,18 @@
 <?php
 declare(strict_types=1);
+
 namespace SixShop\WechatPay\Controller;
 
 use SixShop\Core\Request;
 use SixShop\WechatPay\Entity\WechatpayTransferBillEntity;
 use SixShop\WechatPay\Enum\TransferBillStatusEnum;
+use think\Response;
 use function SixShop\Core\page_response;
+use function SixShop\Core\success_response;
 
 class TransferBillController
 {
-    public function index(Request $request, WechatpayTransferBillEntity $transferBillEntity)
+    public function index(Request $request, WechatpayTransferBillEntity $transferBillEntity): Response
     {
         $params = $request->get([
             'state/s' => 'all',
@@ -18,12 +21,22 @@ class TransferBillController
         $page = $request->pageAndLimit();
         $stats = $transferBillEntity->getTransferBillStats($params);
         return page_response(
-            page:$transferBillEntity->getTransferBillList($params, $page)
+            page: $transferBillEntity->getTransferBillList($params, $page)
         );
     }
 
-    public function refresh(int $id, WechatpayTransferBillEntity $transferBillEntity)
+    public function refresh(int $id, WechatpayTransferBillEntity $transferBillEntity): Response
     {
         return success_response($transferBillEntity->refreshTransferBill($id));
     }
+
+    public function approve(int $id, WechatpayTransferBillEntity $transferBillEntity): Response
+    {
+        return success_response($transferBillEntity->approveTransferBill($id));
+    }
+
+    public function reject(int $id, Request $request, WechatpayTransferBillEntity $transferBillEntity): Response
+    {
+        return success_response($transferBillEntity->rejectTransferBill($id, $request->post('fail_reason/s')));
+    }
 }

+ 23 - 0
src/Entity/WechatpayTransferBillEntity.php

@@ -5,6 +5,9 @@ namespace SixShop\WechatPay\Entity;
 
 use SixShop\Core\Entity\BaseEntity;
 use SixShop\WechatPay\Enum\TransferBillStatusEnum;
+use SixShop\WechatPay\Event\TransferBillFailedEvent;
+use think\facade\Db;
+use think\facade\Event;
 use think\Paginator;
 
 /**
@@ -31,4 +34,24 @@ class WechatpayTransferBillEntity extends BaseEntity
         // todo: 刷新转账单状态
         return $this->find($id)->toArray();
     }
+
+    public function approveTransferBill(int $id): array
+    {
+    }
+
+    public function rejectTransferBill(int $id, string $failReason): self
+    {
+        $transferBill = $this->findOrEmpty($id);
+        if ($transferBill->isEmpty()) {
+            throw new Exception('提现单不存在');
+        }
+        $transferBill->state = TransferBillStatusEnum::FAIL;
+        $transferBill->fail_reason = $failReason;
+        Db::transaction(function () use ($transferBill) {
+            $transferBill->save();
+            Event::trigger(new TransferBillFailedEvent($transferBill->id));
+        });
+
+        return $transferBill;
+    }
 }

+ 15 - 0
src/Event/TransferBillFailedEvent.php

@@ -0,0 +1,15 @@
+<?php
+declare(strict_types=1);
+namespace SixShop\WechatPay\Event;
+
+class TransferBillFailedEvent
+{
+    public function __construct(private int $id)
+    {
+    }
+
+    public function getId(): int
+    {
+        return $this->id;
+    }
+}