|
|
@@ -349,7 +349,8 @@ class OrderClearClass extends BaseClass
|
|
|
}
|
|
|
OrderClass::updateById($orderId, $orderUpdate);
|
|
|
|
|
|
- self::syncHdPurchaseAfterOrderClear($orderId, $cgId, $mayClear, $clearId, $clearTime);
|
|
|
+ // 批发单销账后立即按 xhGhsOrder 结果写回 xhCg,与充值 FIFO 同一事务内完成
|
|
|
+ self::syncHdPurchaseAfterOrderClear($orderId, $cgId, $clearId, $clearTime);
|
|
|
|
|
|
$totalSettled = bcadd($totalSettled, $mayClear, 2);
|
|
|
$os->amount = $mayClear;
|
|
|
@@ -403,29 +404,69 @@ class OrderClearClass extends BaseClass
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 批发订单销账后同步花店采购单待结(充值 FIFO 等);cgId 缺失时按 saleId 回查。
|
|
|
+ * 批发订单销账后同步花店采购单待结(充值 FIFO、结账单确认等)。
|
|
|
+ * 以销账后的 xhGhsOrder 为准写回 xhCg,避免两边各自加减导致 remainDebtPrice 不一致。
|
|
|
+ *
|
|
|
+ * @param int $orderId 批发销售单 id(xhGhsOrder.id)
|
|
|
+ * @param int $cgId 结账单明细上的采购单 id,缺失时按 saleId 回查 xhCg
|
|
|
+ * @param int $clearId 结账单 id
|
|
|
+ * @param string $clearTime 销账时间
|
|
|
*/
|
|
|
- protected static function syncHdPurchaseAfterOrderClear($orderId, $cgId, $mayClear, $clearId, $clearTime)
|
|
|
+ protected static function syncHdPurchaseAfterOrderClear($orderId, $cgId, $clearId, $clearTime)
|
|
|
{
|
|
|
+ $orderId = intval($orderId);
|
|
|
+ $cgId = intval($cgId);
|
|
|
+ $clearId = intval($clearId);
|
|
|
+ if ($orderId <= 0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ $order = OrderClass::getById($orderId, true);
|
|
|
+ if (empty($order)) {
|
|
|
+ noticeUtil::push("批发销账后同步采购单失败:未找到销售单 orderId:{$orderId} clearId:{$clearId}", '15280215347');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
$purchase = null;
|
|
|
- if (intval($cgId) > 0) {
|
|
|
+ if ($cgId > 0) {
|
|
|
$purchase = PurchaseClass::getById($cgId, true);
|
|
|
- } elseif (intval($orderId) > 0) {
|
|
|
- $purchase = PurchaseClass::getByCondition(['saleId' => $orderId], true);
|
|
|
}
|
|
|
if (empty($purchase)) {
|
|
|
+ $orderSn = $order->orderSn ?? '';
|
|
|
+ noticeUtil::push(
|
|
|
+ "批发销账后同步采购单失败:未找到采购单 orderId:{$orderId} orderSn:{$orderSn} cgId:{$cgId} clearId:{$clearId}",
|
|
|
+ '15280215347'
|
|
|
+ );
|
|
|
return;
|
|
|
}
|
|
|
- $pRemain = bcsub((string)($purchase->remainDebtPrice ?? 0), (string)$mayClear, 2);
|
|
|
- $pUpdate = [
|
|
|
- 'remainDebtPrice' => bccomp($pRemain, '0', 2) > 0 ? $pRemain : '0.00',
|
|
|
- 'clearTime' => $clearTime,
|
|
|
- ];
|
|
|
- if (bccomp($pRemain, '0', 2) <= 0) {
|
|
|
- $pUpdate['debt'] = PurchaseClass::DEBT_NO;
|
|
|
- $pUpdate['clearId'] = $clearId;
|
|
|
+
|
|
|
+ $orderRemain = bcadd((string)($order->remainDebtPrice ?? '0'), '0', 2);
|
|
|
+ $orderDebtFlag = intval($order->debt ?? 0);
|
|
|
+ $orderDebtPrice = bcadd((string)($order->debtPrice ?? $order->orderPrice ?? '0'), '0', 2);
|
|
|
+
|
|
|
+ $saveFields = ['remainDebtPrice', 'clearTime', 'debt'];
|
|
|
+ $purchase->remainDebtPrice = bccomp($orderRemain, '0', 2) > 0 ? $orderRemain : '0.00';
|
|
|
+ $purchase->clearTime = $clearTime;
|
|
|
+
|
|
|
+ if ($orderDebtFlag === OrderClass::DEBT_YES) {
|
|
|
+ $purchase->debt = PurchaseClass::DEBT_YES;
|
|
|
+ } else {
|
|
|
+ $purchase->debt = PurchaseClass::DEBT_NO;
|
|
|
+ $orderClearId = intval($order->clearId ?? 0);
|
|
|
+ if ($orderClearId > 0) {
|
|
|
+ $purchase->clearId = $orderClearId;
|
|
|
+ } elseif ($clearId > 0) {
|
|
|
+ $purchase->clearId = $clearId;
|
|
|
+ }
|
|
|
+ $saveFields[] = 'clearId';
|
|
|
+ }
|
|
|
+
|
|
|
+ if (bccomp((string)($purchase->debtPrice ?? '0'), '0', 2) <= 0 && bccomp($orderDebtPrice, '0', 2) > 0) {
|
|
|
+ $purchase->debtPrice = $orderDebtPrice;
|
|
|
+ $saveFields[] = 'debtPrice';
|
|
|
}
|
|
|
- $purchase->save(false, array_keys($pUpdate));
|
|
|
+
|
|
|
+ $purchase->save(false, array_values(array_unique($saveFields)));
|
|
|
}
|
|
|
|
|
|
}
|