回筐逻辑修改

This commit is contained in:
liu
2026-08-14 23:47:49 +08:00
parent 4bdaf2a219
commit 7c3f6147ac
20 changed files with 325 additions and 342 deletions
+15 -16
View File
@@ -18,8 +18,10 @@ use Throwable;
* 流程(事务内):
* 1. 锁定采购单全部有效订单,按门店分组,校验提交门店完整覆盖
* 2. 商品金额 = 门店订单商品金额汇总(快照,生成后不可修改)
* 3. 附加金额 = 周转筐数量×筐单价 + 托盘数量×托盘单价(单价取站点配置快照
* 3. 附加金额 = 周转筐数量×筐单价 + 托盘数量×托盘单价(单价取站点配置快照
* 数量正数=压筐附加金额,负数=回筐抵扣金额)
* 4. 总金额 = 商品金额 + 配送费 + 附加金额;回写门店订单 bill_id 完成关联,订单状态置为已完成
* 5. 压回筐记录:筐/托盘数量非 0 时写入完整快照(数量/单价/金额均可为负)
*/
readonly class BillGenerateService
{
@@ -122,22 +124,19 @@ readonly class BillGenerateService
->whereIn('order_id', $storeOrders->pluck('id'))
->update(['bill_id' => $bill->id]);
// 压筐:累加门店待回筐/托盘(行锁防并发),并写入压筐记录
$store = StoreModel::query()->lockForUpdate()->find((int) $storeId);
if ($store !== null) {
$store->pending_box_num = (int) $store->pending_box_num + (int) $row['box_num'];
$store->pending_tray_num = (int) $store->pending_tray_num + (int) $row['tray_num'];
$store->save();
// 压回筐记录:数量为 0 不写记录;正数=压筐附加金额,负数=回筐抵扣金额
if ((int) $row['box_num'] !== 0 || (int) $row['tray_num'] !== 0) {
ContainerReturnModel::create([
'store_id' => (int) $storeId,
'bill_id' => $bill->id,
'box_num' => (int) $row['box_num'],
'tray_num' => (int) $row['tray_num'],
'box_price' => bcadd($boxPrice, '0', 2),
'tray_price' => bcadd($trayPrice, '0', 2),
'amount' => $addedAmount,
'operator_id' => $operatorId,
]);
}
ContainerReturnModel::create([
'store_id' => (int) $storeId,
'bill_id' => $bill->id,
'type' => ContainerReturnModel::TYPE_PRESS,
'box_num' => (int) $row['box_num'],
'tray_num' => (int) $row['tray_num'],
'return_date' => $billDate,
'operator_id' => $operatorId,
]);
$bills[] = $bill;
}