|
|
@@ -186,6 +186,83 @@ class OrderCgClearClass extends BaseClass
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 销售单已销账的结账单列表(部分销、多次销均含,对齐 hd orderSettleList)
|
|
|
+ *
|
|
|
+ * @return array<int, array{clearId:int, clearSn:string, amount:string}>
|
|
|
+ */
|
|
|
+ public static function listPaidClearRecordsForOrder($orderId)
|
|
|
+ {
|
|
|
+ $orderId = intval($orderId);
|
|
|
+ if ($orderId <= 0) {
|
|
|
+ return [];
|
|
|
+ }
|
|
|
+ $list = self::getAllByCondition([
|
|
|
+ 'orderId' => $orderId,
|
|
|
+ 'status' => self::STATUS_HAS_PAY,
|
|
|
+ ], 'id asc', '*', null, true);
|
|
|
+ return self::mapPaidClearRecordRows($list);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 采购单关联的已销结账单(按 cgId / 销售单 orderId 合并去重)
|
|
|
+ */
|
|
|
+ public static function listPaidClearRecordsForPurchase($purchaseId, $saleOrderId = 0)
|
|
|
+ {
|
|
|
+ $purchaseId = intval($purchaseId);
|
|
|
+ $saleOrderId = intval($saleOrderId);
|
|
|
+ $merged = [];
|
|
|
+
|
|
|
+ if ($saleOrderId > 0) {
|
|
|
+ foreach (self::listPaidClearRecordsForOrder($saleOrderId) as $row) {
|
|
|
+ $merged[intval($row['clearId'])] = $row;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ($purchaseId > 0) {
|
|
|
+ $cgList = self::getAllByCondition([
|
|
|
+ 'cgId' => $purchaseId,
|
|
|
+ 'status' => self::STATUS_HAS_PAY,
|
|
|
+ ], 'id asc', '*', null, true);
|
|
|
+ foreach (self::mapPaidClearRecordRows($cgList) as $row) {
|
|
|
+ $clearId = intval($row['clearId']);
|
|
|
+ if ($clearId <= 0) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (!isset($merged[$clearId])) {
|
|
|
+ $merged[$clearId] = $row;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ $merged[$clearId]['amount'] = bcadd($merged[$clearId]['amount'], $row['amount'], 2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (empty($merged)) {
|
|
|
+ return [];
|
|
|
+ }
|
|
|
+ ksort($merged);
|
|
|
+ return array_values($merged);
|
|
|
+ }
|
|
|
+
|
|
|
+ protected static function mapPaidClearRecordRows($list)
|
|
|
+ {
|
|
|
+ if (empty($list)) {
|
|
|
+ return [];
|
|
|
+ }
|
|
|
+ $rows = [];
|
|
|
+ foreach ($list as $item) {
|
|
|
+ $clearId = intval(is_object($item) ? ($item->clearId ?? 0) : ($item['clearId'] ?? 0));
|
|
|
+ if ($clearId <= 0) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ $rows[] = [
|
|
|
+ 'clearId' => $clearId,
|
|
|
+ 'clearSn' => (string)(is_object($item) ? ($item->clearSn ?? '') : ($item['clearSn'] ?? '')),
|
|
|
+ 'amount' => self::normalizeAmount(is_object($item) ? ($item->amount ?? 0) : ($item['amount'] ?? 0)),
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ return $rows;
|
|
|
+ }
|
|
|
+
|
|
|
public static function getOrderIdsByClearId($clearId)
|
|
|
{
|
|
|
$clearId = intval($clearId);
|