|
|
@@ -9,6 +9,7 @@ use bizGhs\book\classes\BookCustomClass;
|
|
|
use bizGhs\book\classes\BookItemCustomClass;
|
|
|
use bizGhs\custom\classes\AccountMoneyClass;
|
|
|
use bizGhs\custom\models\Custom;
|
|
|
+use bizGhs\custom\services\GhsRechargeSettleService;
|
|
|
use bizGhs\ghs\classes\GhsBalanceChangeClass;
|
|
|
use bizGhs\shop\classes\MainClass;
|
|
|
use bizGhs\shop\classes\ShopMoneyClass;
|
|
|
@@ -697,7 +698,8 @@ class CustomClass extends BaseClass
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 隔天冲销返充余额:成对账户加余额,不改订单 actPrice;流水挂售后单。
|
|
|
+ * 隔天冲销/无原单返充余额:成对账户加余额,不改订单 actPrice;流水挂售后单。
|
|
|
+ * 入账后按本次金额 FIFO 销挂账(与客户详情充值消欠一致)。
|
|
|
* 调用方须已 lockAccountPair。
|
|
|
*/
|
|
|
public static function nextDayRefundReturnBalance($custom, $ghs, $refund, $order)
|
|
|
@@ -711,7 +713,9 @@ class CustomClass extends BaseClass
|
|
|
if (bccomp($refundPrice, '0', 2) <= 0) {
|
|
|
util::fail('返充金额必须大于0');
|
|
|
}
|
|
|
- $newBalance = bcadd((string)($custom->balance ?? '0'), $refundPrice, 2);
|
|
|
+ // 入账前净余额:供 FIFO 结账单 payWay 判定
|
|
|
+ $balanceBefore = bcadd((string)($custom->balance ?? '0'), '0', 2);
|
|
|
+ $newBalance = bcadd($balanceBefore, $refundPrice, 2);
|
|
|
self::savePairBalanceAfterDeduct($custom, $ghs, $newBalance);
|
|
|
|
|
|
$refundSn = $refund->orderSn ?? '';
|
|
|
@@ -743,12 +747,15 @@ class CustomClass extends BaseClass
|
|
|
'remark' => '',
|
|
|
], true);
|
|
|
self::addGhsRefundBalanceChange($custom, $ghs, $refund, $order, $refundPrice, $newBalance);
|
|
|
- return $newBalance;
|
|
|
+ // 有挂账欠款时:本次返充金额去消欠(与充值 merchantRechargeWithAutoClear 一致)
|
|
|
+ self::fifoClearAfterRefundCredit($custom, $ghs, $refund, $refundPrice, $balanceBefore);
|
|
|
+ $custom = CustomClass::getById(intval($custom->id ?? 0), true);
|
|
|
+ return bcadd((string)($custom->balance ?? $newBalance), '0', 2);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 花店采购余额付售后:成对账户原路退回(与 payToChangeBalance 对称)。
|
|
|
- * 调用方须已 lockAccountPair;同时写客户余额明细与 xhGhs 余额明细(hdApp 可查)。
|
|
|
+ * 钱退回余额后同样 FIFO 销挂账;调用方须已 lockAccountPair。
|
|
|
*/
|
|
|
public static function refundBalancePayToPair($custom, $ghs, $refund, $order)
|
|
|
{
|
|
|
@@ -761,7 +768,8 @@ class CustomClass extends BaseClass
|
|
|
if (bccomp($refundPrice, '0', 2) <= 0) {
|
|
|
return;
|
|
|
}
|
|
|
- $newBalance = bcadd((string)($custom->balance ?? '0'), $refundPrice, 2);
|
|
|
+ $balanceBefore = bcadd((string)($custom->balance ?? '0'), '0', 2);
|
|
|
+ $newBalance = bcadd($balanceBefore, $refundPrice, 2);
|
|
|
self::savePairBalanceAfterDeduct($custom, $ghs, $newBalance);
|
|
|
|
|
|
$relateId = $refund->id ?? 0;
|
|
|
@@ -793,6 +801,25 @@ class CustomClass extends BaseClass
|
|
|
];
|
|
|
CustomBalanceChangeClass::add($change, true);
|
|
|
self::addGhsRefundBalanceChange($custom, $ghs, $refund, $order, $refundPrice, $newBalance);
|
|
|
+ // 余额付原路退回 = 加余额,有挂账时一并消欠
|
|
|
+ self::fifoClearAfterRefundCredit($custom, $ghs, $refund, $refundPrice, $balanceBefore);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 售后加余额后的 FIFO 销挂账封装:组装门店/操作人后交给 GhsRechargeSettleService。
|
|
|
+ */
|
|
|
+ protected static function fifoClearAfterRefundCredit($custom, $ghs, $refund, $amount, $balanceBefore)
|
|
|
+ {
|
|
|
+ $shopId = intval($refund->shopId ?? 0);
|
|
|
+ $shop = $shopId > 0 ? ShopClass::getById($shopId, true) : null;
|
|
|
+ $staff = (object)[
|
|
|
+ 'id' => intval($refund->shopAdminId ?? 0),
|
|
|
+ 'name' => (string)($refund->shopAdminName ?? ''),
|
|
|
+ ];
|
|
|
+ GhsRechargeSettleService::afterCreditFifoClear($custom, $ghs, $amount, $shop, $staff, [
|
|
|
+ 'balanceBeforeRecharge' => $balanceBefore,
|
|
|
+ 'payWay' => dict::getDict('payWay', 'balancePay'),
|
|
|
+ ]);
|
|
|
}
|
|
|
|
|
|
/** 花店采购余额退款:记 xhGhs 余额变动(与 addGhsOrderBalanceChange 对称,hdApp 余额明细展示) */
|