采购单优化
This commit is contained in:
@@ -7,19 +7,14 @@ use App\Models\PurchaseOrderModel;
|
||||
use App\Models\StoreOrderItemModel;
|
||||
use App\Models\StoreOrderModel;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Throwable;
|
||||
|
||||
/**
|
||||
* C1 订单汇总生成采购单
|
||||
*
|
||||
* 流程(事务内):
|
||||
* 1. 行锁「已接单」订单(可传 orderIds 只合并指定订单;状态条件天然排除已归集订单,幂等)
|
||||
* 2. 创建采购单头(PO 单号;total_quantity / estimate_amount 取订货明细汇总)
|
||||
* 3. 源订单批量回写 status = 采购中、purchase_id = 采购单ID,
|
||||
* 订货明细同步回写 purchase_id(采购明细直接溯源订货明细,无独立采购明细表)
|
||||
* 订单汇总生成采购单
|
||||
*/
|
||||
class PurchaseGenerateService
|
||||
readonly class PurchaseGenerateService
|
||||
{
|
||||
public function __construct(private readonly BillNumberService $billNumberService)
|
||||
public function __construct(private BillNumberService $billNumberService)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -27,6 +22,8 @@ class PurchaseGenerateService
|
||||
* @param string $date 采购日期(Y-m-d)
|
||||
* @param int $operatorId 制单人(后台系统用户ID)
|
||||
* @param int[] $orderIds 指定合并的门店订单ID(空 = 全部已接单订单)
|
||||
* @return PurchaseOrderModel
|
||||
* @throws Throwable
|
||||
*/
|
||||
public function generate(string $date, int $operatorId, array $orderIds = []): PurchaseOrderModel
|
||||
{
|
||||
@@ -62,7 +59,7 @@ class PurchaseGenerateService
|
||||
'0'
|
||||
);
|
||||
$estimateAmount = $items->reduce(
|
||||
static fn (string $carry, $item): string => bcadd($carry, (string) $item->amount, 2),
|
||||
static fn (string $carry, $item): string => bcadd($carry, bcmul($item->quantity, (string) $item->cost_price, 2), 2),
|
||||
'0'
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user