|
|
@@ -15,6 +15,7 @@ use bizHd\order\classes\OrderGoodsClass;
|
|
|
use bizHd\order\classes\OrderItemClass;
|
|
|
use bizHd\refund\services\HdRefundService;
|
|
|
use bizHd\shop\classes\ShopClass;
|
|
|
+use biz\shop\classes\MainClass;
|
|
|
use biz\shop\classes\ShopClass as SharedShopClass;
|
|
|
use common\components\imgUtil;
|
|
|
use common\components\orderSn;
|
|
|
@@ -66,8 +67,17 @@ class HdRefundMallClass
|
|
|
util::fail('退款金额超过可退金额');
|
|
|
}
|
|
|
|
|
|
+ // 申请时写入原单支付快照,待审核详情/列表即可展示退回方式;通过时 addRefund 会再按原单刷新
|
|
|
+ $snap = HdNextDayRefundClass::buildRefundPaySnapshot($order, true);
|
|
|
+ // 预判当天/封账退款口径,便于待审核展示;最终以审核通过时 mustUseNextDay 为准
|
|
|
+ $mainId = (int)($extra['mainId'] ?? $order->mainId ?? 0);
|
|
|
+ $main = $mainId > 0 ? MainClass::getById($mainId, true) : null;
|
|
|
+ $sameDay = HdNextDayRefundClass::mustUseNextDay($order, $main)
|
|
|
+ ? HdRefundClass::SAME_DAY_NO
|
|
|
+ : HdRefundClass::SAME_DAY_YES;
|
|
|
+
|
|
|
$data = [
|
|
|
- 'mainId' => (int)($extra['mainId'] ?? $order->mainId ?? 0),
|
|
|
+ 'mainId' => $mainId,
|
|
|
'shopId' => (int)($extra['shopId'] ?? $order->shopId ?? 0),
|
|
|
'sjId' => (int)($extra['sjId'] ?? $order->sjId ?? 0),
|
|
|
'hdId' => (int)($extra['hdId'] ?? $order->hdId ?? 0),
|
|
|
@@ -86,9 +96,12 @@ class HdRefundMallClass
|
|
|
'shopAdminName' => '',
|
|
|
'passTime' => null,
|
|
|
'rejectReason' => '',
|
|
|
- 'hasReturn' => 0,
|
|
|
- 'returnBalance' => 0,
|
|
|
- 'couldReturn' => 1,
|
|
|
+ 'sameDay' => $sameDay,
|
|
|
+ 'onlinePay' => $snap['onlinePay'],
|
|
|
+ 'payWay' => $snap['payWay'],
|
|
|
+ 'hasReturn' => $snap['hasReturn'],
|
|
|
+ 'returnBalance' => $snap['returnBalance'],
|
|
|
+ 'couldReturn' => $snap['couldReturn'],
|
|
|
];
|
|
|
|
|
|
// 撤销后重新申请:复用已取消记录,避免同一订单堆多条取消单
|
|
|
@@ -352,16 +365,21 @@ class HdRefundMallClass
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 剩余可退现金:实付合计 orderPrice 减已退 tkPrice
|
|
|
+ * 剩余可退现金:实付合计 orderPrice 减当天已退 tkPrice 与封账退款 nextDayTkPrice
|
|
|
* 红包抵扣已计入 orderPrice,所以红包全额单这里为 0
|
|
|
* @param array|object $order
|
|
|
* @return string 两位小数字符串,不会为负
|
|
|
*/
|
|
|
public static function remainRefundCash($order)
|
|
|
{
|
|
|
+ $already = bcadd(
|
|
|
+ self::toMoney(self::orderField($order, 'tkPrice', 0)),
|
|
|
+ self::toMoney(self::orderField($order, 'nextDayTkPrice', 0)),
|
|
|
+ 2
|
|
|
+ );
|
|
|
$could = bcsub(
|
|
|
self::toMoney(self::orderField($order, 'orderPrice', 0)),
|
|
|
- self::toMoney(self::orderField($order, 'tkPrice', 0)),
|
|
|
+ $already,
|
|
|
2
|
|
|
);
|
|
|
if (bccomp($could, '0', 2) < 0) {
|
|
|
@@ -477,24 +495,28 @@ class HdRefundMallClass
|
|
|
// 复用待审核行写明细/回库/资金,避免再插一条
|
|
|
$refund = HdRefundService::addRefund($post, $order, $refund);
|
|
|
|
|
|
- $custom = CustomClass::getLockById($order->customId);
|
|
|
- if (!empty($custom)) {
|
|
|
- $custom->buyAmount = bcsub((string)$custom->buyAmount, (string)$refund->refundPrice, 2);
|
|
|
- $customName = $custom->name ?? $order->customName ?? '';
|
|
|
- $orderSnText = $order->orderSn ?? '';
|
|
|
- $eventPrefix = $customName !== '' ? $customName : '客户';
|
|
|
- $custom->eventRemark = $eventPrefix . '商城售后' . $orderSnText;
|
|
|
- $custom->relateId = $order->id;
|
|
|
- $custom->relateType = 1;
|
|
|
- $custom->staffId = (int)($shopAdmin['id'] ?? 0);
|
|
|
- $custom->staffName = $shopAdmin['name'] ?? '';
|
|
|
- $custom->mainId = (int)($shopAdmin['mainId'] ?? $refund->mainId);
|
|
|
- $custom->save();
|
|
|
-
|
|
|
- $hd = HdClass::getLockById($custom->hdId);
|
|
|
- if (!empty($hd)) {
|
|
|
- $hd->expendAmount = bcsub((string)$hd->expendAmount, (string)$refund->refundPrice, 2);
|
|
|
- $hd->save();
|
|
|
+ // 当天售后才在此回退累计消费;封账/隔天已在 applyHdAmountAndFund 扣过,避免重复
|
|
|
+ $sameDay = intval($refund->sameDay ?? HdRefundClass::SAME_DAY_YES);
|
|
|
+ if ($sameDay === HdRefundClass::SAME_DAY_YES) {
|
|
|
+ $custom = CustomClass::getLockById($order->customId);
|
|
|
+ if (!empty($custom)) {
|
|
|
+ $custom->buyAmount = bcsub((string)$custom->buyAmount, (string)$refund->refundPrice, 2);
|
|
|
+ $customName = $custom->name ?? $order->customName ?? '';
|
|
|
+ $orderSnText = $order->orderSn ?? '';
|
|
|
+ $eventPrefix = $customName !== '' ? $customName : '客户';
|
|
|
+ $custom->eventRemark = $eventPrefix . '商城售后' . $orderSnText;
|
|
|
+ $custom->relateId = $order->id;
|
|
|
+ $custom->relateType = 1;
|
|
|
+ $custom->staffId = (int)($shopAdmin['id'] ?? 0);
|
|
|
+ $custom->staffName = $shopAdmin['name'] ?? '';
|
|
|
+ $custom->mainId = (int)($shopAdmin['mainId'] ?? $refund->mainId);
|
|
|
+ $custom->save();
|
|
|
+
|
|
|
+ $hd = HdClass::getLockById($custom->hdId);
|
|
|
+ if (!empty($hd)) {
|
|
|
+ $hd->expendAmount = bcsub((string)$hd->expendAmount, (string)$refund->refundPrice, 2);
|
|
|
+ $hd->save();
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|