|
@@ -9,7 +9,9 @@ use biz\shop\classes\ShopCouponClass;
|
|
|
use biz\stat\classes\StatCgClass;
|
|
use biz\stat\classes\StatCgClass;
|
|
|
use biz\stat\classes\StatCgGhsClass;
|
|
use biz\stat\classes\StatCgGhsClass;
|
|
|
use biz\stat\classes\StatOutClass;
|
|
use biz\stat\classes\StatOutClass;
|
|
|
|
|
+use bizGhs\custom\classes\AccountMoneyClass;
|
|
|
use bizGhs\custom\classes\CustomClass;
|
|
use bizGhs\custom\classes\CustomClass;
|
|
|
|
|
+use bizGhs\custom\services\GhsRechargeSettleService;
|
|
|
use bizGhs\order\classes\OrderClass;
|
|
use bizGhs\order\classes\OrderClass;
|
|
|
use bizGhs\order\services\OrderService;
|
|
use bizGhs\order\services\OrderService;
|
|
|
use bizHd\base\services\BaseService;
|
|
use bizHd\base\services\BaseService;
|
|
@@ -349,15 +351,81 @@ class PurchaseService extends BaseService
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- //余额支付 ssh 2021.1.24
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 采购单余额支付(超管密码入口等)。
|
|
|
|
|
+ * 批发-客户资金只在 xhGhs / xhGhsCustom,不扣 xhShop / xhMain.balance。
|
|
|
|
|
+ */
|
|
|
public static function balancePay($info)
|
|
public static function balancePay($info)
|
|
|
{
|
|
{
|
|
|
|
|
+ $result = self::payByGhsCustomBalance($info);
|
|
|
|
|
+ return $result['purchase'] ?? $info;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 花店采购余额付:批发商-客户资金只在 xhGhs/xhGhsCustom,先销售单 payAfter 扣净余额,再采购单 payAfter 改状态。
|
|
|
|
|
+ * xhShop/xhMain 仅为花店门店属性,不参与本关系余额扣减。须在事务内调用;并发由外层重试 + 行锁保证。
|
|
|
|
|
+ */
|
|
|
|
|
+ public static function payByGhsCustomBalance($purchase)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (empty($purchase)) {
|
|
|
|
|
+ util::fail('没有找到采购单');
|
|
|
|
|
+ }
|
|
|
|
|
+ if (intval($purchase->status ?? 0) == PurchaseClass::STATUS_CANCEL) {
|
|
|
|
|
+ util::fail('订单已取消');
|
|
|
|
|
+ }
|
|
|
|
|
+ if (intval($purchase->status ?? 0) != PurchaseClass::STATUS_UN_PAY) {
|
|
|
|
|
+ util::fail('订单不是待付款状态');
|
|
|
|
|
+ }
|
|
|
|
|
+ if (intval($purchase->payStatus ?? 0) === 1) {
|
|
|
|
|
+ util::fail('订单已经付过款了');
|
|
|
|
|
+ }
|
|
|
|
|
+ $saleId = intval($purchase->saleId ?? 0);
|
|
|
|
|
+ if ($saleId <= 0) {
|
|
|
|
|
+ util::fail('订单无法余额支付');
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ $purchaseId = intval($purchase->id ?? 0);
|
|
|
|
|
+ $purchase = PurchaseClass::getLockById($purchaseId);
|
|
|
|
|
+ $order = OrderClass::getLockById($saleId);
|
|
|
|
|
+ if (empty($order)) {
|
|
|
|
|
+ util::fail('没有找到销售单');
|
|
|
|
|
+ }
|
|
|
|
|
+ if (intval($order->status ?? 0) != OrderClass::ORDER_STATUS_UN_PAY) {
|
|
|
|
|
+ util::fail('重复操作');
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ $customId = intval($order->customId ?? 0);
|
|
|
|
|
+ $pair = GhsRechargeSettleService::lockAccountPair(['id' => $customId]);
|
|
|
|
|
+ $custom = $pair['custom'];
|
|
|
|
|
+ if (empty($custom)) {
|
|
|
|
|
+ util::fail('没有找到客户信息');
|
|
|
|
|
+ }
|
|
|
|
|
+ AccountMoneyClass::ensureCustomMoneyReady($custom, true);
|
|
|
|
|
+ // 与待支付页 realPrice 一致,避免 actPrice 与 realPrice 不一致时误报余额不足
|
|
|
|
|
+ $payAmount = bcadd((string)($purchase->realPrice ?? $order->realPrice ?? $order->actPrice ?? '0'), '0', 2);
|
|
|
|
|
+ $beforeBalance = bcadd((string)($custom->balance ?? '0'), '0', 2);
|
|
|
|
|
+ if (bccomp($beforeBalance, $payAmount, 2) < 0) {
|
|
|
|
|
+ util::fail('余额不足');
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
$payWay = dict::getDict('payWay', 'balancePay');
|
|
$payWay = dict::getDict('payWay', 'balancePay');
|
|
|
- self::payAfter($info, $payWay);
|
|
|
|
|
|
|
+ OrderService::payAfter($order, $payWay, false);
|
|
|
|
|
|
|
|
- $saleId = $info->saleId ?? 0;
|
|
|
|
|
- $order = OrderClass::getById($saleId, true);
|
|
|
|
|
- OrderService::payAfter($order, $payWay, true);
|
|
|
|
|
|
|
+ $purchase = PurchaseClass::getLockById($purchaseId);
|
|
|
|
|
+ $saleOrder = OrderClass::getById($saleId, true);
|
|
|
|
|
+ if (!empty($purchase) && !empty($saleOrder) && intval($saleOrder->payStatus ?? 0) === 1) {
|
|
|
|
|
+ $purchase->remainDebtPrice = $saleOrder->remainDebtPrice ?? '0.00';
|
|
|
|
|
+ $purchase->debtPrice = $saleOrder->debtPrice ?? '0.00';
|
|
|
|
|
+ $purchase->debt = ($saleOrder->debt ?? 0) == OrderClass::DEBT_YES
|
|
|
|
|
+ ? PurchaseClass::DEBT_YES : PurchaseClass::DEBT_NO;
|
|
|
|
|
+ $purchase->save(false, ['remainDebtPrice', 'debtPrice', 'debt']);
|
|
|
|
|
+ }
|
|
|
|
|
+ self::payAfter($purchase, $payWay);
|
|
|
|
|
+
|
|
|
|
|
+ return [
|
|
|
|
|
+ 'purchase' => $purchase,
|
|
|
|
|
+ 'saleOrder' => OrderClass::getById($saleId, true),
|
|
|
|
|
+ ];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//付款码支付处理流程 ssh 20211231
|
|
//付款码支付处理流程 ssh 20211231
|
|
@@ -457,31 +525,6 @@ class PurchaseService extends BaseService
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /**
|
|
|
|
|
- * 采购单余额付是否扣减花店 main.balance。
|
|
|
|
|
- * main.balance 已废弃、后续会删,批发余额以 xhGhsCustom 净余额为准(OrderService::payToChangeBalance)。
|
|
|
|
|
- * 仅「花店自助采购、先付采购单」等遗留路径仍可能走 purchaseReduceBalance,待 main.balance 下线后一并改。
|
|
|
|
|
- */
|
|
|
|
|
- protected static function shouldReduceMainBalanceOnBalancePay($info)
|
|
|
|
|
- {
|
|
|
|
|
- if (intval($info->cgStyle ?? 0) !== intval(dict::getDict('cgStyle', 'ghs'))) {
|
|
|
|
|
- return true;
|
|
|
|
|
- }
|
|
|
|
|
- $saleId = intval($info->saleId ?? 0);
|
|
|
|
|
- if ($saleId <= 0) {
|
|
|
|
|
- return true;
|
|
|
|
|
- }
|
|
|
|
|
- $saleOrder = OrderClass::getById($saleId, true);
|
|
|
|
|
- if (empty($saleOrder) || intval($saleOrder->payStatus ?? 0) !== 1) {
|
|
|
|
|
- return true;
|
|
|
|
|
- }
|
|
|
|
|
- // 批发开单先完成销售单 payAfter:客户余额已扣,勿再动 main.balance
|
|
|
|
|
- if (intval($saleOrder->payWay ?? -1) === intval(dict::getDict('payWay', 'balancePay'))) {
|
|
|
|
|
- return false;
|
|
|
|
|
- }
|
|
|
|
|
- return true;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
//第三方支付、余额支付和欠款支付后调用的流程 ssh 2021.4.27
|
|
//第三方支付、余额支付和欠款支付后调用的流程 ssh 2021.4.27
|
|
|
public static function payAfter($info, $payWay)
|
|
public static function payAfter($info, $payWay)
|
|
|
{
|
|
{
|
|
@@ -563,10 +606,7 @@ class PurchaseService extends BaseService
|
|
|
}
|
|
}
|
|
|
$realPrice = $info->realPrice;
|
|
$realPrice = $info->realPrice;
|
|
|
$actPrice = $info->actPrice;
|
|
$actPrice = $info->actPrice;
|
|
|
- // 余额支付:批发开单只扣 xhGhsCustom;main.balance 已废弃,见 shouldReduceMainBalanceOnBalancePay
|
|
|
|
|
- if ($payWay == dict::getDict('payWay', 'balancePay') && self::shouldReduceMainBalanceOnBalancePay($info)) {
|
|
|
|
|
- ShopClass::purchaseReduceBalance($main, $shop, $realPrice, $info);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ // 余额支付:批发商-客户资金在 xhGhs/xhGhsCustom(销售单 payAfter 扣款),不扣 xhMain.balance
|
|
|
$main->totalPurchase = bcadd($main->totalPurchase, $actPrice, 2);
|
|
$main->totalPurchase = bcadd($main->totalPurchase, $actPrice, 2);
|
|
|
$currentExpend = bcadd($main->totalExpend, $actPrice, 2);
|
|
$currentExpend = bcadd($main->totalExpend, $actPrice, 2);
|
|
|
$main->totalExpend = $currentExpend;
|
|
$main->totalExpend = $currentExpend;
|