Przeglądaj źródła

feat(admin): 更新分账订单统计展示和接口逻辑

- 调整前端统计数据布局,优化字段显示逻辑
- 新增分账账户余额查询功能并展示
- 修改后端接口逻辑,支持拉卡拉行业钱包分账余额查询
- 优化用户待分账金额计算逻辑
- 更新测试用例参数传递方式以适配新接口签名
runphp 3 miesięcy temu
rodzic
commit
eac9b7b497

+ 16 - 10
resource/admin/ProfitShareOrder.vue

@@ -31,29 +31,35 @@
 
     <!-- 统计数据 -->
     <el-card class="stats-card" v-if="statsData">
-      <el-row :gutter="20">
-        <el-col :span="6">
+      <el-row justify="space-between">
+        <el-col  :span="4">
           <div class="stat-item">
             <div class="stat-label">总分账金额</div>
             <div class="stat-value">¥{{ formatAmountToYuan(statsData.total_amount) }}</div>
           </div>
         </el-col>
-        <el-col :span="6">
+        <el-col  :span="4">
           <div class="stat-item">
-            <div class="stat-label">商户分账总金额</div>
+            <div class="stat-label">商户最低分账</div>
             <div class="stat-value merchant">¥{{ formatAmountToYuan(statsData.merchant_total_amount) }}</div>
           </div>
         </el-col>
-        <el-col :span="6">
+        <el-col  :span="4">
           <div class="stat-item">
-            <div class="stat-label">用户分账总金额</div>
+            <div class="stat-label">分账账户余额</div>
+            <div class="stat-value merchant">¥{{statsData.profit_share_balance}}</div>
+          </div>
+        </el-col>
+        <el-col  :span="4">
+          <div class="stat-item">
+            <div class="stat-label">用户成功分账</div>
             <div class="stat-value user">¥{{ formatAmountToYuan(statsData.user_total_amount) }}</div>
           </div>
         </el-col>
-        <el-col :span="6">
+        <el-col  :span="4">
           <div class="stat-item">
-            <div class="stat-label">待分账总金额</div>
-            <div class="stat-value pending">¥{{ formatAmountToYuan(statsData.pending_amount) }}</div>
+            <div class="stat-label">用户待分账</div>
+            <div class="stat-value pending">¥{{ formatAmountToYuan(statsData.user_pending_amount) }}</div>
           </div>
         </el-col>
       </el-row>
@@ -125,7 +131,7 @@
               <div class="merchant-no" :title="row.merchant_no">分账商户号: {{ row.merchant_no }}</div>
               <div class="amount-details">
                 <div class="amount-row">
-                  <span class="label">分账金额:</span>
+                  <span class="label">最低分账金额:</span>
                   <span class="value">¥{{ formatAmountToYuan(row.total_amt - row.separate_value) }}</span>
                 </div>
               </div>

+ 9 - 2
src/Controller/Admin/ProfitShareOrderController.php

@@ -15,16 +15,23 @@ use function SixShop\Core\throw_logic_exception;
 
 class ProfitShareOrderController
 {
-    public function index(Request $request, ProfitShareOrderEntity $profitShareOrderEntity): Response
+    public function index(
+        Request $request,
+        ProfitShareOrderEntity $profitShareOrderEntity,
+        LaepIndustryService $laepIndustryService
+    ): Response
     {
         $params = $request->get([
             'status/s',
             'out_separate_no/s',
         ]);
+        $stats = $profitShareOrderEntity->getStats();
+        $ewalletBalance = $laepIndustryService->ewalletBalanceQuery(payType: '03');
+        $stats['profit_share_balance'] = $ewalletBalance->curBalance;
         return page_response(
             page: $profitShareOrderEntity->getOrderList($params, $request->pageAndLimit()),
             data: [
-                'stats' => $profitShareOrderEntity->getStats(),
+                'stats' => $stats,
             ]
         );
     }

+ 3 - 2
src/Entity/ProfitShareOrderEntity.php

@@ -8,6 +8,7 @@ use SixShop\Lakala\Enum\ProfitShareOrderCMDTypeEnum;
 use SixShop\Lakala\Enum\ProfitShareOrderStatusEnum;
 use SixShop\Lakala\Enum\ReceiverStatusEnum;
 use SixShop\Lakala\Facade\Config;
+use SixShop\Lakala\Facade\LaepIndustryService;
 use SixShop\Lakala\Facade\LedgerService;
 use SixShop\Lakala\Model\ProfitShareOrderModel;
 use SixShop\Lakala\Model\ProfitShareReceiverModel;
@@ -95,12 +96,12 @@ class ProfitShareOrderEntity extends BaseEntity
         $stats =  $this->whereIn('status',['SUCCESS', 'PENDING'])->field([
             "COALESCE(SUM(CASE WHEN status = 'SUCCESS' THEN total_amt ELSE 0 END), 0) AS total_amount", // 总分账金额
             "COALESCE(SUM(CASE WHEN status = 'SUCCESS' THEN separate_value ELSE 0 END), 0) AS user_total_amount", // 用户分账总金额
-            "COALESCE(SUM(CASE WHEN status = 'PENDING' THEN total_amt ELSE 0 END), 0) AS pending_amount", // 待分账总金额
+            "COALESCE(SUM(CASE WHEN status = 'PENDING' THEN separate_value ELSE 0 END), 0) AS user_pending_amount", // 用户待分账总金额
         ])->find();
         return [
             'total_amount' => (float)$stats['total_amount'],
             'user_total_amount' => (float)$stats['user_total_amount'],
-            'pending_amount' => (float)$stats['pending_amount'],
+            'user_pending_amount' => (float)$stats['user_pending_amount'],
         ];
     }
 }

+ 9 - 2
src/Service/LaepIndustryService.php

@@ -18,12 +18,19 @@ class LaepIndustryService
 
     /**
      * 账户余额查询
+     *
+     * @param string $merchantNo 商户号
+     * @param string $payType 账户类型 01:收款账户,02:付款账户,03:分账商户账户,04:分账接收方账户,05:充值代付账户,06:结算代付账户)- 未上送则默认为01
      * @link https://o.lakala.com/#/home/document/detail?id=364
      */
-    public function ewalletBalanceQuery(array $reqData): object
+    public function ewalletBalanceQuery(string $merchantNo = '', string $payType = '01'): object
     {
         $request = new V2ModelRequest();
-        $reqData['orgNo'] = $this->config->org_code;
+        $reqData = [
+            'orgNo' => $this->config->org_code,
+            'merchantNo' => $merchantNo?:$this->config->merchant_no,
+            'payType' => $payType,
+        ];
         $request->setReqData($reqData);
         $response = $this->v2LakalaApi->tradeApi('/api/v2/laep/industry/ewalletBalanceQuery', $request);
         if ($response->getRetCode() == '000000') {

+ 1 - 4
tests/Service/LaepIndustryServiceTest.php

@@ -18,10 +18,7 @@ class LaepIndustryServiceTest extends TestCase
     #[Test]
     public function ewalletBalanceQuery()
     {
-        $response = $this->laepIndustryService->ewalletBalanceQuery([
-            'merchantNo' => '822451048160BXH',
-            'payType' => '03',
-        ]);
+        $response = $this->laepIndustryService->ewalletBalanceQuery(payType: '03');
         dump($response);
     }
     #[Test]