seed_mini_rewards_demo.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <?php
  2. declare(strict_types=1);
  3. require dirname(__DIR__) . '/vendor/autoload.php';
  4. \Dotenv\Dotenv::createUnsafeMutable(dirname(__DIR__))->load();
  5. \support\App::loadAllConfig(['route']);
  6. date_default_timezone_set('Asia/Shanghai');
  7. use app\miniapi\auth\TestPhoneIdentityProvider;
  8. use plugin\saiadmin\app\model\water\WaterEnterprise;
  9. use plugin\saiadmin\app\model\water\WaterLedger;
  10. use plugin\saiadmin\app\model\water\WaterModel;
  11. if (!TestPhoneIdentityProvider::enabled()) {
  12. throw new RuntimeException('Requires local test environment');
  13. }
  14. $result = WaterModel::transaction(function (): array {
  15. $enterprise = WaterEnterprise::query()->where('id', 49)->lockForUpdate()->first();
  16. if (!$enterprise || $enterprise->name !== '【测试0910】科技园配送测试') {
  17. throw new RuntimeException('Expected test enterprise 49');
  18. }
  19. $key = ['enterprise_id' => 49, 'kind' => 'demo_seed', 'reference' => 'TEST-MINI-REWARDS-49-20261007'];
  20. if (WaterLedger::query()->where($key)->exists()) {
  21. return ['replayed' => true];
  22. }
  23. $data = [
  24. 'enabled' => false,
  25. 'demo' => true,
  26. 'reason' => '测试数据仅用于页面展示,不可提现,不产生真实奖励。分享和海报功能尚未开放。',
  27. 'total_cents' => 268000,
  28. 'withdrawable_cents' => 86000,
  29. 'successful_invites' => 36,
  30. 'first_order_enterprises' => 28,
  31. 'invite_code' => 'TEST-HC202609',
  32. 'items' => [
  33. ['id' => 1, 'title' => '新用户首单奖励', 'enterprise_name' => '【测试】云启商务有限公司', 'status' => 'credited', 'status_text' => '订单已完成', 'amount_cents' => 8000],
  34. ['id' => 2, 'title' => '奖励观察期', 'enterprise_name' => '【测试】海博设计', 'status' => 'pending', 'status_text' => '预计明日生效', 'amount_cents' => 6000],
  35. ['id' => 3, 'title' => '新用户首单奖励', 'enterprise_name' => '【测试】星辰科技', 'status' => 'credited', 'status_text' => '订单已完成', 'amount_cents' => 10000],
  36. ],
  37. ];
  38. $items = $data['items'];
  39. $data['items'] = [];
  40. WaterLedger::query()->create($key + [
  41. 'sku_id' => 5, 'quantity' => 0, 'created_by' => 1,
  42. 'note' => json_encode($data, JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR),
  43. 'created_at' => date('Y-m-d H:i:s'),
  44. ]);
  45. foreach ($items as $item) {
  46. WaterLedger::query()->create([
  47. 'enterprise_id' => 49, 'kind' => 'demo_seed', 'reference' => $key['reference'] . '-ITEM-' . $item['id'],
  48. 'sku_id' => 5, 'quantity' => 0, 'created_by' => 1,
  49. 'note' => json_encode($item, JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR),
  50. 'created_at' => date('Y-m-d H:i:s'),
  51. ]);
  52. }
  53. return ['replayed' => false, 'enterprise_id' => 49, 'reward_records' => count($items)];
  54. });
  55. echo json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) . PHP_EOL;