CaiWuXiTong/modules/EcommerceFinance/Console/SyncJushuitanShipping.php
limeng 8cae97df0d fix(发货数据): 对齐工作平台口径并补足两边差异
- 确认基表为发货明细 jst_order_express_details(聚水潭发货单dlv镜像)
- 快递单号回落: logistic_id -> jst_Orders.l_id -> 运费表 expressNo
- 发货时间 send_time 缺失时回落 jst_Orders.send_date(修滞后单)
- 并入自动发货仓(jst_Orders已发货但不在发货明细表), 约2179条
- 剔除补差虚拟单(商品名含 补收差价/差价专用)
- 窗口重跑先按发货时间删旧行再重建, 批量 insertOrIgnore 提速
- 每日 01:28 滚动同步 --days=3

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014nvGZkg27YMEdhRy6EiUwf
2026-09-21 03:11:31 +00:00

51 lines
2.1 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace Modules\EcommerceFinance\Console;
use Illuminate\Console\Command;
use Illuminate\Support\Carbon;
use Modules\EcommerceFinance\Services\Jushuitan\ShippingReplicaSynchronizer;
/**
* 发货数据同步:从经营分析副本库(operations_replica)直读聚水潭发货明细,清洗进本地展示表。
*
* php artisan jushuitan:sync-shipping --from=2026-09-01 --to=2026-09-17 # 按发货时间窗口拉全量
* php artisan jushuitan:sync-shipping --days=3 # 滚动最近 3 天(每日调度用)
* php artisan jushuitan:sync-shipping # 最近 2000 条(快速看效果)
*
* 按 id 去重 upsert,任何时候补拉早期区间都不会重复。
*/
class SyncJushuitanShipping extends Command
{
protected $signature = 'jushuitan:sync-shipping {--from=} {--to=} {--days=} {--limit=2000}';
protected $description = '从经营分析副本库直读聚水潭发货明细,清洗写入 caiwu 发货数据表';
public function handle(): int
{
$from = $this->option('from') ? Carbon::parse($this->option('from')) : null;
$to = $this->option('to') ? Carbon::parse($this->option('to')) : null;
// --days=N:滚动最近 N 天(含今天)。显式 --from/--to 优先。
if (! $from && ! $to && $this->option('days')) {
$days = max((int) $this->option('days'), 1);
$from = now()->startOfDay()->subDays($days - 1);
$to = now()->startOfDay()->addDay();
}
$limit = (int) ($this->option('limit') ?: 2000);
$range = ($from && $to) ? $from->toDateString() . ' ~ ' . $to->toDateString() : '最近 ' . $limit . ' 条';
$this->info('开始从副本库同步发货明细(' . $range . ')...');
try {
$result = ShippingReplicaSynchronizer::make()->sync($from, $to, $limit);
} catch (\Throwable $e) {
$this->error('同步失败:' . $e->getMessage());
return self::FAILURE;
}
$this->info('完成:写入 ' . ($result['processed'] ?? 0) . ' 条发货明细。');
return self::SUCCESS;
}
}