|
|
@@ -460,6 +460,11 @@ class RefundController extends BaseController
|
|
|
if (!empty($orderSn)) {
|
|
|
$where['relateOrderSn'] = $orderSn;
|
|
|
}
|
|
|
+ // 工作台「退款记录」:只查无关联销售单的退款
|
|
|
+ $freeOnly = intval($get['freeOnly'] ?? 0);
|
|
|
+ if ($freeOnly === 1) {
|
|
|
+ $where['relateOrderSn'] = '';
|
|
|
+ }
|
|
|
$searchTime = $get['searchTime'] ?? '';
|
|
|
if (!empty($searchTime)) {
|
|
|
$startTime = $get['startTime'] ?? '';
|
|
|
@@ -469,9 +474,13 @@ class RefundController extends BaseController
|
|
|
}
|
|
|
|
|
|
$refundSearchTime = $get['refundSearchTime'] ?? '';
|
|
|
+ // 退款记录默认近30天(按售后单创建时间)
|
|
|
+ if ($freeOnly === 1 && empty($refundSearchTime) && empty($searchTime)) {
|
|
|
+ $refundSearchTime = 'last30Days';
|
|
|
+ }
|
|
|
if (!empty($refundSearchTime)) {
|
|
|
- $startTime = $get['refundStartTime'] ?? '';
|
|
|
- $endTime = $get['refundEndTime'] ?? '';
|
|
|
+ $startTime = $get['refundStartTime'] ?? ($get['startTime'] ?? '');
|
|
|
+ $endTime = $get['refundEndTime'] ?? ($get['endTime'] ?? '');
|
|
|
$period = dateUtil::formatTime($refundSearchTime, $startTime, $endTime);
|
|
|
$where['addTime'] = ['between', [$period['startTime'], $period['endTime']]];
|
|
|
}
|
|
|
@@ -582,22 +591,30 @@ class RefundController extends BaseController
|
|
|
}
|
|
|
$imgString = $refund['imgList'] ?? '';
|
|
|
$relateOrderSn = $refund['relateOrderSn'] ?? '';
|
|
|
- $order = OrderClass::getByCondition(['orderSn' => $relateOrderSn], true);
|
|
|
- if (empty($order)) {
|
|
|
- util::fail('数据出错了');
|
|
|
- }
|
|
|
- $refund['relateOrderId'] = $order->id;
|
|
|
- //补充原单信息,供前端判断该售后是否要走"转冲销单"(非当天单/欠款已结清),
|
|
|
- //以及转冲销单弹框里只读展示原单支付渠道。ssh 冲销单功能
|
|
|
- $refund['orderInfo'] = [
|
|
|
- 'id' => $order->id,
|
|
|
- 'payTime' => $order->payTime,
|
|
|
- 'debtPrice' => $order->debtPrice,
|
|
|
- 'remainDebtPrice' => $order->remainDebtPrice,
|
|
|
- 'actPrice' => $order->actPrice,
|
|
|
- 'forwardPrice' => $order->forwardPrice,
|
|
|
- 'payWay' => $order->payWay,
|
|
|
- ];
|
|
|
+ // 无原单退款:不强制关联销售单
|
|
|
+ $order = null;
|
|
|
+ if ($relateOrderSn !== '' && $relateOrderSn !== null) {
|
|
|
+ $order = OrderClass::getByCondition(['orderSn' => $relateOrderSn], true);
|
|
|
+ }
|
|
|
+ if (!empty($order)) {
|
|
|
+ $refund['relateOrderId'] = $order->id;
|
|
|
+ //补充原单信息,供前端判断该售后是否要走"转冲销单"(非当天单/欠款已结清),
|
|
|
+ //以及转冲销单弹框里只读展示原单支付渠道。ssh 冲销单功能
|
|
|
+ $refund['orderInfo'] = [
|
|
|
+ 'id' => $order->id,
|
|
|
+ 'payTime' => $order->payTime,
|
|
|
+ 'debtPrice' => $order->debtPrice,
|
|
|
+ 'remainDebtPrice' => $order->remainDebtPrice,
|
|
|
+ 'actPrice' => $order->actPrice,
|
|
|
+ 'forwardPrice' => $order->forwardPrice ?? 0,
|
|
|
+ 'payWay' => $order->payWay,
|
|
|
+ ];
|
|
|
+ $refund['isFreeRefund'] = 0;
|
|
|
+ } else {
|
|
|
+ $refund['relateOrderId'] = 0;
|
|
|
+ $refund['orderInfo'] = null;
|
|
|
+ $refund['isFreeRefund'] = 1;
|
|
|
+ }
|
|
|
|
|
|
if (!empty($imgString)) {
|
|
|
$imgArr = json_decode($imgString, true);
|
|
|
@@ -813,7 +830,16 @@ class RefundController extends BaseController
|
|
|
$connection = Yii::$app->db;
|
|
|
$transaction = $connection->beginTransaction();
|
|
|
try {
|
|
|
- $refundType = intval($post['refundType'] ?? RefundOrderClass::REFUND_TYPE_MONEY_GOOD);
|
|
|
+ // returnWay 优先:1库存退回要花材;0库存不退可只记金额
|
|
|
+ $returnWay = intval($post['returnWay'] ?? -1);
|
|
|
+ if ($returnWay === 1) {
|
|
|
+ $refundType = RefundOrderClass::REFUND_TYPE_MONEY_GOOD;
|
|
|
+ } elseif ($returnWay === 0) {
|
|
|
+ $refundType = RefundOrderClass::REFUND_TYPE_MONEY;
|
|
|
+ } else {
|
|
|
+ $refundType = intval($post['refundType'] ?? RefundOrderClass::REFUND_TYPE_MONEY_GOOD);
|
|
|
+ }
|
|
|
+ $post['refundType'] = $refundType;
|
|
|
if ($refundType == RefundOrderClass::REFUND_TYPE_MONEY_GOOD) {
|
|
|
$productJson = $post['product'] ?? '';
|
|
|
if (empty($productJson)) {
|
|
|
@@ -825,7 +851,14 @@ class RefundController extends BaseController
|
|
|
}
|
|
|
$post['product'] = $productList;
|
|
|
} else {
|
|
|
- $post['product'] = [];
|
|
|
+ // 库存不退:金额已够,明细可选保留供对账
|
|
|
+ $productJson = $post['product'] ?? '';
|
|
|
+ if (!empty($productJson)) {
|
|
|
+ $productList = is_array($productJson) ? $productJson : json_decode($productJson, true);
|
|
|
+ $post['product'] = is_array($productList) ? $productList : [];
|
|
|
+ } else {
|
|
|
+ $post['product'] = [];
|
|
|
+ }
|
|
|
}
|
|
|
$post['price'] = $post['price'] ?? 0;
|
|
|
if ($post['price'] <= 0) {
|