|
|
@@ -7,6 +7,8 @@ use bizHd\balance\classes\BalanceChangeClass;
|
|
|
use bizHd\custom\classes\CustomClass;
|
|
|
use bizHd\custom\classes\HdClass;
|
|
|
use bizHd\member\classes\MemberWealClass;
|
|
|
+use bizHd\order\classes\OrderClass;
|
|
|
+use bizHd\order\classes\SettleClass;
|
|
|
use bizHd\shop\classes\MainClass;
|
|
|
use common\components\arrayUtil;
|
|
|
use common\components\dict;
|
|
|
@@ -55,7 +57,8 @@ class RechargeClass extends BaseClass
|
|
|
public static function complete($recharge, $payWay, $params)
|
|
|
{
|
|
|
$onlinePay = $params['onlinePay'];
|
|
|
- $side = $params['side'];
|
|
|
+ //0 花店端操作,1 客户端操作
|
|
|
+ $side = $params['side'] ?? 0;
|
|
|
$recharge->onlinePay = $onlinePay;
|
|
|
$recharge->payWay = $payWay;
|
|
|
$recharge->payStatus = 1;
|
|
|
@@ -93,8 +96,8 @@ class RechargeClass extends BaseClass
|
|
|
$rechargeWeal = $shop->rechargeWeal ?? 0;
|
|
|
$addGiveAmount = 0;
|
|
|
|
|
|
- //如果客户有本身有欠款,充值不享受任何福利
|
|
|
- if ($custom->balance > 0) {
|
|
|
+ //如果客户余额不足,本身有欠款,充值不享受任何福利;结账充值,不参与优惠
|
|
|
+ if ($custom->balance > 0 || $recharge->settelId > 0) {
|
|
|
if ($rechargeWeal == 1 || $rechargeWeal == 2) {
|
|
|
$weal = MemberWealClass::getAllByCondition(['shopId' => $shopId], null, '*');
|
|
|
if (!empty($weal)) {
|
|
|
@@ -150,6 +153,55 @@ class RechargeClass extends BaseClass
|
|
|
Yii::info($msg);
|
|
|
util::fail($msg);
|
|
|
}
|
|
|
+
|
|
|
+ $settleId = $recharge->settleId;
|
|
|
+ $settleAmount = 0;
|
|
|
+ $lastClearOrderId = 0;
|
|
|
+ $lastClearOrderAmount = 0;
|
|
|
+ if (!empty($settleId)) {
|
|
|
+ //如果有结账单,按结账单销账
|
|
|
+ $set = SettleClass::getById($settleId, true);
|
|
|
+ SettleClass::clearSettle($set);
|
|
|
+ $settleAmount = $set->actPrice ?? 0;
|
|
|
+ } else {
|
|
|
+ //没有结账单,按顺序去销账,这里的逻辑,请去查看原型文档,来理解需求
|
|
|
+ $orderList = OrderClass::getAllByCondition(['customId' => $customId, 'debt' => 1], 'id asc', '*', null, true);
|
|
|
+ if (!empty($orderList)) {
|
|
|
+ $totalRemainAmount = 0;
|
|
|
+ $need = [];
|
|
|
+ $hasPass = false;
|
|
|
+ foreach ($orderList as $order) {
|
|
|
+ $orderId = $order->id ?? 0;
|
|
|
+ $remainDebtPrice = $order->remainDebtPrice ?? 0;
|
|
|
+ $currentTotal = bcadd($totalRemainAmount, $remainDebtPrice, 2);
|
|
|
+ if ($currentTotal > $totalAmount) {
|
|
|
+ continue;
|
|
|
+ } else {
|
|
|
+ if (!$hasPass) {
|
|
|
+ $lastClearOrderAmount = bcsub($totalAmount, $totalRemainAmount, 2);
|
|
|
+ if ($lastClearOrderAmount > 0) {
|
|
|
+ $lastClearOrderId = $orderId;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $hasPass = true;
|
|
|
+ }
|
|
|
+ $totalRemainAmount = bcadd($totalRemainAmount, $remainDebtPrice, 2);
|
|
|
+ $need[] = $orderId;
|
|
|
+ }
|
|
|
+ if (!empty($need)) {
|
|
|
+ //创建结账单,并且销结账单
|
|
|
+ $orderData = OrderClass::getAllByCondition(['id' => ['in', $need]], null, '*', null, true);
|
|
|
+ $staffId = $recharge->staffId ?? 0;
|
|
|
+ $staffName = $recharge->staffName ?? '';
|
|
|
+ $settleParams = ['staffId' => $staffId, 'staffName' => $staffName];
|
|
|
+ $set = SettleClass::addSettle($orderData, $shop, $custom, $hd, $settleParams);
|
|
|
+ $settleId = $set->id;
|
|
|
+ $settleAmount = $set->actPrice ?? 0;
|
|
|
+ SettleClass::clearSettle($set);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
$change = [
|
|
|
'customId' => $customId,
|
|
|
'customName' => $customName,
|
|
|
@@ -166,6 +218,10 @@ class RechargeClass extends BaseClass
|
|
|
'staffName' => $staffName,
|
|
|
'shopId' => $shopId,
|
|
|
'mainId' => $mainId,
|
|
|
+ 'settleId' => $settleId,
|
|
|
+ 'settleAmount' => $settleAmount,
|
|
|
+ 'orderId' => $lastClearOrderId,
|
|
|
+ 'orderAmount' => $lastClearOrderAmount,
|
|
|
'remark' => '',
|
|
|
];
|
|
|
$returnChange = BalanceChangeClass::add($change, true);
|
|
|
@@ -175,6 +231,7 @@ class RechargeClass extends BaseClass
|
|
|
$main = MainClass::getLockById($mainId);
|
|
|
ShopClass::skRechargeAddBalance($main, $shop, $recharge);
|
|
|
}
|
|
|
+
|
|
|
return $returnChange;
|
|
|
}
|
|
|
|