CaiWuXiTong/modules/EcommerceFinance/Repositories/ProductPurchasePriceRepository.php
limeng d87ca96593 普通商品增加1688代发采购单价来源 (#74)
保留并标注普通商品采购价,接入已完成1688代发采购单价的只读共享业务镜像。
2026-08-21 14:49:16 +08:00

49 lines
1.7 KiB
PHP

<?php
namespace Modules\EcommerceFinance\Repositories;
use Modules\EcommerceFinance\Services\UpstreamReadOnlyQueryFactory;
class ProductPurchasePriceRepository
{
private const SOURCE = 'jiansun';
public function __construct(private readonly UpstreamReadOnlyQueryFactory $queries)
{
}
/**
* @param array{updated_at:string,item_id:int}|null $cursor
* @return list<array<string,mixed>>
*/
public function mirrorBatch(?array $cursor, string $since, string $until, int $limit): array
{
$limit = min(max($limit, 1), 5000);
$where = [
'p.[updateTime] >= ?',
'p.[updateTime] < ?',
];
$bindings = [$since, $until];
if ($cursor !== null) {
$where[] = '(p.[updateTime] > ? OR (p.[updateTime] = ? AND i.[Id] > ?))';
$bindings[] = $cursor['updated_at'];
$bindings[] = $cursor['updated_at'];
$bindings[] = $cursor['item_id'];
}
$sql = 'SELECT TOP (' . $limit . ') '
. 'i.[Id] AS item_id, p.[po_id] AS purchase_order_id, '
. 'i.[sku_id] AS sku_id, i.[i_id] AS style_id, i.[price] AS unit_price, '
. 'p.[status] AS document_status, p.[labels] AS labels, '
. 'CONVERT(varchar(27), p.[finish_time], 126) AS finished_at, '
. 'CONVERT(varchar(27), p.[updateTime], 126) AS purchase_updated_at '
. 'FROM [dbo].[jst_purchase] p '
. 'INNER JOIN [dbo].[jst_purchaseItem] i ON i.[po_id] = p.[po_id] '
. 'WHERE (' . implode(') AND (', $where) . ') '
. 'ORDER BY p.[updateTime], i.[Id]';
return $this->queries->forSource(self::SOURCE)->select($sql, $bindings);
}
}