Răsfoiți Sursa

feat(lakala): 优化微信订单定时任务逻辑

- 引入 Query 和 Db 类以支持更复杂的查询条件
- 修改订单状态筛选逻辑,支持 order_state 为 null 或 1 的情况
- 增加对 order_state 非空时的处理注释(待实现发货逻辑)
- 添加 WechatOrderCronTest 测试类并监听 SQL 执行
- 为 TransactionServiceTest 添加严格类型声明
- 修复 Extension 类中 getCronJobs 方法的返回类型声明
runphp 4 luni în urmă
părinte
comite
df4cf5db38

+ 13 - 5
src/Cron/WechatOrderCron.php

@@ -5,6 +5,8 @@ namespace SixShop\Lakala\Cron;
 use SixShop\Core\Attribute\Cron;
 use SixShop\Lakala\Service\PaymentRecordService;
 use SixShop\Payment\Model\ExtensionPaymentModel;
+use think\db\Query;
+use think\facade\Db;
 
 class WechatOrderCron
 {
@@ -21,13 +23,19 @@ class WechatOrderCron
             ->where([
                 'p.pay_type' => 'lakala',
                 'p.status' => 2,
-                'o.shipping_status' => 1,
-                'w.status' => 1
+                'o.shipping_status' => 1
             ])
-            ->whereNull('w.order_state')
-            ->field('p.id')
+            ->where(function (Query $query) {
+                $query->where('w.order_state', 1)
+                    ->whereOr('w.order_state', null);
+            })
+            ->field('p.id,w.order_state')
             ->select()->each(function ($payment){
-                $this->paymentRecordService->createWechatOrder($payment->id);
+                if ($payment->order_state === null) {
+                    $this->paymentRecordService->createWechatOrder($payment->id);
+                } else {
+                    // 发货 todo
+                }
             });
     }
 }

+ 1 - 1
src/Extension.php

@@ -33,7 +33,7 @@ class Extension extends ExtensionAbstract implements PaymentExtensionInterface
         ];
     }
 
-    #[\Override] public function getCronJobs()
+    #[\Override] public function getCronJobs(): array
     {
         return [
             WechatOrderCron::class,

+ 25 - 0
tests/Cron/WechatOrderCronTest.php

@@ -0,0 +1,25 @@
+<?php
+declare(strict_types=1);
+namespace SixShop\Lakala\Cron;
+
+use PHPUnit\Framework\Attributes\Test;
+use PHPUnit\Framework\TestCase;
+use think\facade\Db;
+
+class WechatOrderCronTest extends TestCase
+{
+    private WechatOrderCron $wechatOrderCron;
+    protected function setUp(): void
+    {
+        $this->wechatOrderCron = app(WechatOrderCron::class);
+    }
+
+    #[Test]
+    public function orderShipping()
+    {
+        Db::listen(function ($sql, $time, $explain) {
+            dump($sql);
+        });
+        $this->wechatOrderCron->orderShipping();
+    }
+}

+ 1 - 1
tests/Service/TransactionServiceTest.php

@@ -1,5 +1,5 @@
 <?php
-
+declare(strict_types=1);
 namespace SixShop\Lakala\Service;
 
 use PHPUnit\Framework\Attributes\Test;