Bläddra i källkod

feat(lakala): 新增分账订单拒绝功能

- 修改拒绝订单接口为 PUT 方法
- 在路由中注册分账订单拒绝接口
- 实现分账订单拒绝逻辑,包括状态更新和余额退回
- 添加订单状态校验,仅允许拒绝待处理订单
- 记录分账失败日志并更新订单状态为失败
runphp 4 månader sedan
förälder
incheckning
c616f4a836

+ 1 - 1
resource/admin/ProfitShareOrder.vue

@@ -447,7 +447,7 @@ export default {
       
       this.rejectLoading = true;
       try {
-        const res = await this.axiosInstance.post(`/lakala/profit_share_order/${this.rejectForm.orderId}/reject`, {
+        const res = await this.axiosInstance.put(`/lakala/profit_share_order/${this.rejectForm.orderId}/reject`, {
           reason: this.rejectForm.reason
         });
         

+ 7 - 7
route/admin.php

@@ -8,6 +8,7 @@ use SixShop\Lakala\Controller\Admin\{
     TradeOrderController
 };
 use SixShop\System\Middleware\MacroPageMiddleware;
+
 // Admin路由
 // 路由前缀: /admin/lakala
 //
@@ -18,13 +19,12 @@ Route::resource('profit_share_receiver', ProfitShareReceiverController::class, f
     Route::put('apply', [ProfitShareReceiverController::class, 'apply']);
     Route::put('bind', [ProfitShareReceiverController::class, 'bind']);
     Route::put('modify', [ProfitShareReceiverController::class, 'modify']);
-})
-    ->middleware(['auth', MacroPageMiddleware::class]);
+})->middleware(['auth', MacroPageMiddleware::class]);
 
-Route::resource('profit_share_order', ProfitShareOrderController::class)
-    ->middleware(['auth', MacroPageMiddleware::class]);
+Route::resource('profit_share_order', ProfitShareOrderController::class, function () {
+    Route::put('reject', [ProfitShareOrderController::class, 'reject']);
+})->middleware(['auth', MacroPageMiddleware::class]);
 
-Route::resource('trade_order', TradeOrderController::class, function (){
+Route::resource('trade_order', TradeOrderController::class, function () {
     Route::put('express_company', [TradeOrderController::class, 'updateExpressCompany']);
-})
-    ->middleware(['auth', MacroPageMiddleware::class]);
+})->middleware(['auth', MacroPageMiddleware::class]);

+ 30 - 3
src/Controller/Admin/ProfitShareOrderController.php

@@ -2,24 +2,51 @@
 declare(strict_types=1);
 namespace SixShop\Lakala\Controller\Admin;
 
+use SixShop\Balpay\Entity\ExtensionBalpayLogEntity;
+use SixShop\Balpay\Enum\BalpayLogTypeEnum;
 use SixShop\Core\Request;
 use SixShop\Lakala\Entity\ProfitShareOrderEntity;
+use SixShop\Lakala\Enum\ProfitShareOrderStatusEnum;
 use think\Response;
 use function SixShop\Core\page_response;
+use function SixShop\Core\success_response;
+use function SixShop\Core\throw_logic_exception;
 
 class ProfitShareOrderController
 {
-    public function index(Request $request, ProfitShareOrderEntity $entity): Response
+    public function index(Request $request, ProfitShareOrderEntity $profitShareOrderEntity): Response
     {
         $params = $request->get([
             'status/s',
             'out_separate_no/s',
         ]);
         return page_response(
-            page: $entity->getOrderList($params, $request->pageAndLimit()),
+            page: $profitShareOrderEntity->getOrderList($params, $request->pageAndLimit()),
             data: [
-                'stats' => $entity->getStats(),
+                'stats' => $profitShareOrderEntity->getStats(),
             ]
         );
     }
+
+    public function reject(
+        int $id,
+        Request $request,
+        ProfitShareOrderEntity $profitShareOrderEntity,
+        ExtensionBalpayLogEntity $extensionBalpayLogEntity): Response
+    {
+        $reason = $request->put('reason/s');
+        $entity = $profitShareOrderEntity->where(['id' => $id, 'status' => ProfitShareOrderStatusEnum::PENDING])->findOrEmpty();
+        if ($entity->isEmpty()) {
+            throw_logic_exception('订单不存在或状态异常');
+        }
+        $profitShareOrderEntity->transaction(function () use ($entity, $extensionBalpayLogEntity, $id, $reason){
+            $entity->status = ProfitShareOrderStatusEnum::FAIL;
+            $entity->fail_reason = $reason;
+            $entity->save();
+            $amount = bcadd((string)$entity->separate_value, (string)$entity->fee_amt, 2);
+            $amount = bcdiv($amount, '100', 2);
+            $extensionBalpayLogEntity->change($entity->user_id, (float)$amount, BalpayLogTypeEnum::RECHARGE, '分账失败退回', $entity->id);
+        });
+        return success_response($entity);
+    }
 }