Explorar el Código

feat(lakala): add wallet_id field and optimize profit share receiver logic

- Added wallet_id column to profit share receiver migration
- Implemented automatic status update and wallet ID sync after receiver verification
- Added exception handling for ledger receiver application retry logic
- Improved error handling in ledger service APIs with proper response codes and messages
- Removed debug print statements from ledger service methods
runphp hace 4 meses
padre
commit
b0efd03df6

+ 1 - 0
database/migrations/20251109121623_profit_share_receiver.php

@@ -42,6 +42,7 @@ final class ProfitShareReceiver extends AbstractMigration
             ->addColumn('entrust_file_name', 'string', ['null' => true, 'limit' => 32, 'comment' => '合作协议附件名称'])
             ->addColumn('entrust_file_path', 'string', ['null' => true, 'limit' => 32, 'comment' => '合作协议附件路径'])
             ->addColumn('entrust_local_path', 'string', ['null' => true, 'limit' => 32, 'comment' => '合作协议附件本地路径'])
+            ->addColumn('wallet_id', 'string', ['null' => true, 'limit' => 32, 'comment' => '钱包ID'])
             ->addTimestamps('create_time', 'update_time')
             ->addColumn('delete_time', 'timestamp', ['null' => true, 'comment' => '删除时间'])
             ->addIndex('user_id', ['name' => 'idx_user_id'])

+ 25 - 4
src/Entity/ProfitShareReceiverEntity.php

@@ -4,6 +4,7 @@ declare(strict_types=1);
 namespace SixShop\Lakala\Entity;
 
 use SixShop\Core\Entity\BaseEntity;
+use SixShop\Core\Exception\LogicException;
 use SixShop\Lakala\Config;
 use SixShop\Lakala\Enum\ProfitShareOrderStatusEnum;
 use SixShop\Lakala\Enum\ReceiverStatusEnum;
@@ -48,13 +49,21 @@ class ProfitShareReceiverEntity extends BaseEntity
 
     public function getReceiver(array $params):self
     {
-        $result = $this->where($params)
+        $entity = $this->where($params)
             ->append(['status_text'])
             ->findOrEmpty();
-        if ($result->isEmpty()) {
+        if ($entity->isEmpty()) {
             throw_logic_exception('分账接收方申请记录不存在!');
         }
-        return $result;
+        if ($entity->receiver_no && $entity->status == ReceiverStatusEnum::SUBMITTING) {
+            $response = LedgerService::queryReceiverDetail($entity->order_no, $entity->receiver_no);
+            if ($response->rowStatus == 'VALID') {
+                $entity->status = ReceiverStatusEnum::VERIFIED;
+                $entity->wallet_id = $response->walletId;
+            }
+            $entity->save();
+        }
+        return $entity;
     }
 
     public function apply(int $id):self
@@ -77,7 +86,19 @@ class ProfitShareReceiverEntity extends BaseEntity
             'acctOpenBankName' => $entity->acct_open_bank_name,
             'acctClearBankCode' => $entity->acct_clear_bank_code,
         ];
-        $response = LedgerService::applyLedgerReceiver($reqData);
+        try {
+            $response = LedgerService::applyLedgerReceiver($reqData);
+        } catch (LogicException $e) {
+            if ($e->getResponse()->getData()['code'] == 103001) {
+                // 系统异常,请稍后重试
+                // 创建新的申请记录
+                $newEntity = $entity->clone()->toArray();
+                unset($newEntity['id'],$newEntity['order_no']);
+                $this->save($newEntity);
+                $entity->delete();
+            }
+            throw $e;
+        }
         $entity->org_id = $response->orgId;
         $entity->org_name = $response->orgName;
         $entity->receiver_no = $response->receiverNo;

+ 14 - 20
src/Service/LedgerService.php

@@ -53,18 +53,15 @@ class LedgerService
         $reqData['version'] = $version;
         $request->setReqData($reqData);
         $response = $this->v2LakalaApi->tradeApi('/api/v2/mms/openApi/ledger/modifyLedgerReceiver', $request);
-        if ($response->getRespData()) {
-            print_r($response->getRespData());
+        if ($response->getRetCode() == '000000') {
+            return $response->getRespData();
         } else {
-            print_r($response);
+            throw_logic_exception(
+                msg:$response->getRetMsg(),
+                code: (int)$response->getRetCode(),
+                data: $response->getRespData(),
+            );
         }
-        echo $response->getRetCode();
-
-        # 响应头信息
-        print_r($response->getHeaders());
-
-        # 响应原文
-        echo $response->getOriginalText();
     }
 
     /**
@@ -87,18 +84,15 @@ class LedgerService
             'receiverNo' => $receiverNo,
         ]);
         $response = $this->v2LakalaApi->tradeApi('/api/v2/mms/openApi/ledger/queryReceiverDetail', $request);
-        if ($response->getRespData()) {
-            print_r($response->getRespData());
+        if ($response->getRetCode() == '000000') {
+            return $response->getRespData();
         } else {
-            print_r($response);
+            throw_logic_exception(
+                msg:$response->getRetMsg(),
+                code: (int)$response->getRetCode(),
+                data: $response->getRespData(),
+            );
         }
-        echo $response->getRetCode();
-
-        # 响应头信息
-        print_r($response->getHeaders());
-
-        # 响应原文
-        echo $response->getOriginalText();
     }
 
     /**