|
@@ -972,6 +972,86 @@ class NextDayRefundClass
|
|
|
];
|
|
];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 与 affectByOrderPayTime 同口径的售后明细:售后 addTime + 原单 payTime,必须挂上批发单。
|
|
|
|
|
+ * /refund/list?matchPayTime=1 用,避免列表按 xhRefund.orderTime 或漏申请日导致金额对不上。
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param int $mainId
|
|
|
|
|
+ * @param array $refundPeriod addTime 起止(含时分秒)
|
|
|
|
|
+ * @param array $payPeriod 原单 payTime 起止
|
|
|
|
|
+ * @param array $extra status/sameDay/customId/shopAdminId,-1 或不传表示不限
|
|
|
|
|
+ * @return array{list:array,totalNum:int,totalPage:int,moreData:int,totalRefundPrice:string}
|
|
|
|
|
+ */
|
|
|
|
|
+ public static function getListByOrderPayTime($mainId, $refundPeriod, $payPeriod, $extra = [])
|
|
|
|
|
+ {
|
|
|
|
|
+ $addStart = $refundPeriod['startTime'] ?? '';
|
|
|
|
|
+ $addEnd = $refundPeriod['endTime'] ?? '';
|
|
|
|
|
+ $payStart = $payPeriod['startTime'] ?? '';
|
|
|
|
|
+ $payEnd = $payPeriod['endTime'] ?? '';
|
|
|
|
|
+ $params = [
|
|
|
|
|
+ ':mainId' => intval($mainId),
|
|
|
|
|
+ ':addStart' => $addStart,
|
|
|
|
|
+ ':addEnd' => $addEnd,
|
|
|
|
|
+ ':payStart' => $payStart,
|
|
|
|
|
+ ':payEnd' => $payEnd,
|
|
|
|
|
+ ];
|
|
|
|
|
+ $whereSql = "r.mainId = :mainId
|
|
|
|
|
+ AND r.addTime BETWEEN :addStart AND :addEnd
|
|
|
|
|
+ AND o.payTime BETWEEN :payStart AND :payEnd
|
|
|
|
|
+ AND o.payTime > '1970-01-01'";
|
|
|
|
|
+ // 状态/跨天与影响页一致时才收窄,列表改 tab 后按用户当前筛选项
|
|
|
|
|
+ $status = isset($extra['status']) ? intval($extra['status']) : -1;
|
|
|
|
|
+ if ($status > -1) {
|
|
|
|
|
+ $whereSql .= ' AND r.status = :status';
|
|
|
|
|
+ $params[':status'] = $status;
|
|
|
|
|
+ }
|
|
|
|
|
+ $sameDay = isset($extra['sameDay']) ? intval($extra['sameDay']) : -1;
|
|
|
|
|
+ if ($sameDay === 0 || $sameDay === 1) {
|
|
|
|
|
+ $whereSql .= ' AND r.sameDay = :sameDay';
|
|
|
|
|
+ $params[':sameDay'] = $sameDay;
|
|
|
|
|
+ }
|
|
|
|
|
+ $customId = intval($extra['customId'] ?? 0);
|
|
|
|
|
+ if ($customId > 0) {
|
|
|
|
|
+ $whereSql .= ' AND r.customId = :customId';
|
|
|
|
|
+ $params[':customId'] = $customId;
|
|
|
|
|
+ }
|
|
|
|
|
+ $shopAdminId = intval($extra['shopAdminId'] ?? 0);
|
|
|
|
|
+ if ($shopAdminId > 0) {
|
|
|
|
|
+ $whereSql .= ' AND r.shopAdminId = :shopAdminId';
|
|
|
|
|
+ $params[':shopAdminId'] = $shopAdminId;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ $fromSql = "FROM xhRefund r
|
|
|
|
|
+ INNER JOIN xhGhsOrder o ON o.orderSn = r.relateOrderSn AND o.mainId = r.mainId
|
|
|
|
|
+ WHERE {$whereSql}";
|
|
|
|
|
+ $count = intval(Yii::$app->db->createCommand("SELECT COUNT(*) {$fromSql}", $params)->queryScalar());
|
|
|
|
|
+ $totalRefundPrice = bcadd(
|
|
|
|
|
+ (string)(Yii::$app->db->createCommand("SELECT COALESCE(SUM(r.refundPrice),0) {$fromSql}", $params)->queryScalar() ?: '0'),
|
|
|
|
|
+ '0',
|
|
|
|
|
+ 2
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ $get = Yii::$app->request->get();
|
|
|
|
|
+ $page = max(1, intval($get['page'] ?? 1));
|
|
|
|
|
+ $pageSize = isset($get['pageSize']) && !empty($get['pageSize'])
|
|
|
|
|
+ ? max(1, intval($get['pageSize']))
|
|
|
|
|
+ : intval(Yii::$app->params['pageSize'] ?? 20);
|
|
|
|
|
+ $offset = ($page - 1) * $pageSize;
|
|
|
|
|
+ $totalPage = $pageSize > 0 ? (int)ceil($count / $pageSize) : 1;
|
|
|
|
|
+ $list = Yii::$app->db->createCommand(
|
|
|
|
|
+ "SELECT r.* {$fromSql} ORDER BY r.addTime DESC LIMIT {$offset}, {$pageSize}",
|
|
|
|
|
+ $params
|
|
|
|
|
+ )->queryAll();
|
|
|
|
|
+
|
|
|
|
|
+ return [
|
|
|
|
|
+ 'list' => $list ?: [],
|
|
|
|
|
+ 'totalNum' => $count,
|
|
|
|
|
+ 'totalPage' => $totalPage,
|
|
|
|
|
+ 'moreData' => $totalPage > $page ? 1 : 0,
|
|
|
|
|
+ 'totalRefundPrice' => $totalRefundPrice,
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* @param array $rows
|
|
* @param array $rows
|
|
|
* @return array
|
|
* @return array
|