Ver código fonte

feat(lakala): 更新分账订单查询逻辑并添加失败退款记录

- 使用悲观锁查询分账订单,避免并发问题
- 分账失败时,计算退回金额并记录到余额支付日志
- 引入ExtensionBalpayLogEntity和BalpayLogTypeEnum类
runphp 3 meses atrás
pai
commit
c2aef839a4
1 arquivos alterados com 8 adições e 2 exclusões
  1. 8 2
      src/Entity/ProfitShareOrderEntity.php

+ 8 - 2
src/Entity/ProfitShareOrderEntity.php

@@ -3,6 +3,8 @@ declare(strict_types=1);
 
 namespace SixShop\Lakala\Entity;
 
+use SixShop\Balpay\Entity\ExtensionBalpayLogEntity;
+use SixShop\Balpay\Enum\BalpayLogTypeEnum;
 use SixShop\Core\Entity\BaseEntity;
 use SixShop\Lakala\Enum\ProfitShareOrderCMDTypeEnum;
 use SixShop\Lakala\Enum\ProfitShareOrderStatusEnum;
@@ -115,7 +117,7 @@ class ProfitShareOrderEntity extends BaseEntity
 
     public function queryProfitShareOrderResult(int $id): self
     {
-        $entity = $this->findOrEmpty($id);
+        $entity = $this->lock(true)->find($id);
         if ($entity->isEmpty()) {
             throw_logic_exception('分账订单不存在');
         }
@@ -131,7 +133,11 @@ class ProfitShareOrderEntity extends BaseEntity
                 default => throw_logic_exception('分账状态异常')
             };
             $resData->acc_result_desc && $entity->fail_reason = $resData->acc_result_desc;
-            $entity->save();
+            if ($entity->status == ProfitShareOrderStatusEnum::FAIL) {
+                $amount = bcadd((string)$entity->separate_value, (string)$entity->fee_amt, 2);
+                $amount = bcdiv($amount, '100', 2);
+                app()->make(ExtensionBalpayLogEntity::class)->change($entity->user_id, (float)$amount, BalpayLogTypeEnum::RECHARGE, '分账失败退回', $entity->id);
+            }
         }
         return $entity;
     }