From 81f5e3c8ed12cf37e76921da79cf372457040b49 Mon Sep 17 00:00:00 2001 From: mzl Date: Tue, 14 Oct 2025 10:14:14 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=88=A9=E6=B6=A6?= =?UTF-8?q?=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/common/service/StockOrdersService.php | 105 ++++++++++++++++++---- 1 file changed, 90 insertions(+), 15 deletions(-) diff --git a/app/common/service/StockOrdersService.php b/app/common/service/StockOrdersService.php index dd37378..078bf00 100644 --- a/app/common/service/StockOrdersService.php +++ b/app/common/service/StockOrdersService.php @@ -601,25 +601,100 @@ class StockOrdersService */ private function calculateProfit(array $veh, $order): float { - $unitPrice = (float)($veh['unit_price']['amount'] ?? 0); + $contractExchangeRate = $order->contract_exchange_rate ?: 1; - if (!empty($veh['mileage']) && $veh['mileage'] > 0) { - // 二手车 - $ttPrice = ($veh['listing_price']['amount'] ?? 0) / ($order->contract_exchange_rate ?: 1); - $ddPrice = $veh['reduction_price']['amount'] ?? 0; + // 提取单价并进行汇率转换(如果需要) + $unitPriceRate = $veh['unit_price']['rate'] ?: 1; + if ($unitPriceRate != $contractExchangeRate) { + $unitPrice = (float)($veh['unit_price']['amount'] ?? 0) / $contractExchangeRate; } else { - // 新车 - $ttPrice = ($veh['official_price']['amount'] ?? 0) / ($order->contract_exchange_rate ?: 1); - $ddPrice = $veh['discount_price']['amount'] ?? 0; + $unitPrice = (float)($veh['unit_price']['amount'] ?? 0); } - $handlingFee = (float)($veh['handling_fee']['amount'] ?? 0); - $fobTransportFee = (float)($veh['fob_transport_fee']['amount'] ?? 0); - $portMiscFee = (float)($veh['port_misc_fee']['amount'] ?? 0); - $retrofitFee = (float)($veh['retrofit_fee']['amount'] ?? 0); - $oceanFreight = (float)($veh['ocean_freight']['amount'] ?? 0); - $commission = (float)($veh['commission']['amount'] ?? 0); - $purchaseTax = (float)($veh['purchase_tax']['amount'] ?? 0); + // 处理主要价格字段,根据是否需要汇率转换来计算 + if (!empty($veh['mileage']) && $veh['mileage'] > 0) { + // 二手车 + $listingPriceRate = $veh['listing_price']['rate'] ?: 1; + if ($listingPriceRate != $contractExchangeRate) { + $ttPrice = ($veh['listing_price']['amount'] ?? 0) / $contractExchangeRate; + } else { + $ttPrice = $veh['listing_price']['amount'] ?? 0; + } + + $reductionPriceRate = $veh['reduction_price']['rate'] ?: 1; + if ($reductionPriceRate != $contractExchangeRate) { + $ddPrice = ($veh['reduction_price']['amount'] ?? 0) / $contractExchangeRate; + } else { + $ddPrice = $veh['reduction_price']['amount'] ?? 0; + } + } else { + // 新车 + $officialPriceRate = $veh['official_price']['rate'] ?: 1; + if ($officialPriceRate != $contractExchangeRate) { + $ttPrice = ($veh['official_price']['amount'] ?? 0) / $contractExchangeRate; + } else { + $ttPrice = $veh['official_price']['amount'] ?? 0; + } + + $discountPriceRate = $veh['discount_price']['rate'] ?: 1; + if ($discountPriceRate != $contractExchangeRate) { + $ddPrice = ($veh['discount_price']['amount'] ?? 0) / $contractExchangeRate; + } else { + $ddPrice = $veh['discount_price']['amount'] ?? 0; + } + } + + // 处理其他费用字段,根据是否需要汇率转换来计算 + $handlingFeeRate = $veh['handling_fee']['rate'] ?: 1; + if ($handlingFeeRate != $contractExchangeRate) { + $handlingFee = (float)($veh['handling_fee']['amount'] ?? 0) / $contractExchangeRate; + } else { + $handlingFee = (float)($veh['handling_fee']['amount'] ?? 0); + } + + $fobTransportFeeRate = $veh['fob_transport_fee']['rate'] ?: 1; + if ($fobTransportFeeRate != $contractExchangeRate) { + $fobTransportFee = (float)($veh['fob_transport_fee']['amount'] ?? 0) / $contractExchangeRate; + } else { + $fobTransportFee = (float)($veh['fob_transport_fee']['amount'] ?? 0); + } + + $portMiscFeeRate = $veh['port_misc_fee']['rate'] ?: 1; + if ($portMiscFeeRate != $contractExchangeRate) { + $portMiscFee = (float)($veh['port_misc_fee']['amount'] ?? 0) / $contractExchangeRate; + } else { + $portMiscFee = (float)($veh['port_misc_fee']['amount'] ?? 0); + } + + $retrofitFeeRate = $veh['retrofit_fee']['rate'] ?: 1; + if ($retrofitFeeRate != $contractExchangeRate) { + $retrofitFee = (float)($veh['retrofit_fee']['amount'] ?? 0) / $contractExchangeRate; + } else { + $retrofitFee = (float)($veh['retrofit_fee']['amount'] ?? 0); + } + + $oceanFreightRate = $veh['ocean_freight']['rate'] ?: 1; + if ($oceanFreightRate != $contractExchangeRate) { + $oceanFreight = (float)($veh['ocean_freight']['amount'] ?? 0) / $contractExchangeRate; + } else { + $oceanFreight = (float)($veh['ocean_freight']['amount'] ?? 0); + } + + $commissionRate = $veh['commission']['rate'] ?: 1; + if ($commissionRate != $contractExchangeRate) { + $commission = (float)($veh['commission']['amount'] ?? 0) / $contractExchangeRate; + } else { + $commission = (float)($veh['commission']['amount'] ?? 0); + } + + $purchaseTaxRate = $veh['purchase_tax']['rate'] ?: 1; + if ($purchaseTaxRate != $contractExchangeRate) { + $purchaseTax = (float)($veh['purchase_tax']['amount'] ?? 0) / $contractExchangeRate; + } else { + $purchaseTax = (float)($veh['purchase_tax']['amount'] ?? 0); + } + + // 预估退税不需要参与汇率转换计算,前端已经计算过了 $taxRefund = (float)($veh['tax_refund']['amount'] ?? 0); // 退税额 是增加利润 From 0b8155936ada8bf93d7b79548ec3984267c9203d Mon Sep 17 00:00:00 2001 From: mzl Date: Tue, 14 Oct 2025 11:03:26 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=88=A9=E6=B6=A6?= =?UTF-8?q?=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/common/service/StockOrdersService.php | 90 ++++++++++------------- 1 file changed, 39 insertions(+), 51 deletions(-) diff --git a/app/common/service/StockOrdersService.php b/app/common/service/StockOrdersService.php index 078bf00..0929703 100644 --- a/app/common/service/StockOrdersService.php +++ b/app/common/service/StockOrdersService.php @@ -485,7 +485,7 @@ class StockOrdersService $this->processVehiclePrices($item, $veh); // 计算利润 - $profit = $this->calculateProfit($veh, $order); + $profit = $this->calculateProfit($veh, $item->mileage, $order); $item->addMoney('profit', $order->settlement_currency, $profit, $order->contract_exchange_rate, '利润'); // 累计到岸价 @@ -539,67 +539,55 @@ class StockOrdersService ]; foreach ($priceFields as $field => $description) { - if (!empty($veh[$field]['amount'])) { - $item->addMoney( - $field, - $veh[$field]['currency'], - $veh[$field]['amount'], - $veh[$field]['rate'], - $description - ); - } + $item->addMoney( + $field, + $veh[$field]['currency'], + (float)$veh[$field]['amount'], + $veh[$field]['rate'], + $description + ); } // 根据里程处理新车或二手车价格 if (!empty($veh['mileage']) && $veh['mileage'] > 0) { // 二手车 - if (!empty($veh['listing_price']['amount'])) { - $item->addMoney( - 'listing_price', - $veh['listing_price']['currency'], - $veh['listing_price']['amount'], - $veh['listing_price']['rate'], - '二手挂牌价' - ); - } - - if (!empty($veh['reduction_price']['amount'])) { - $item->addMoney( - 'reduction_price', - $veh['reduction_price']['currency'], - $veh['reduction_price']['amount'], - $veh['reduction_price']['rate'], - '二手减价' - ); - } + $item->addMoney( + 'listing_price', + $veh['listing_price']['currency'], + (float)$veh['listing_price']['amount'], + $veh['listing_price']['rate'], + '二手挂牌价' + ); + $item->addMoney( + 'reduction_price', + $veh['reduction_price']['currency'], + (float)$veh['reduction_price']['amount'], + $veh['reduction_price']['rate'], + '二手减价' + ); } else { // 新车 - if (!empty($veh['official_price']['amount'])) { - $item->addMoney( - 'official_price', - $veh['official_price']['currency'], - $veh['official_price']['amount'], - $veh['official_price']['rate'], - '官方指导价' - ); - } - - if (!empty($veh['discount_price']['amount'])) { - $item->addMoney( - 'discount_price', - $veh['discount_price']['currency'], - $veh['discount_price']['amount'], - $veh['discount_price']['rate'], - '优惠价' - ); - } + $item->addMoney( + 'official_price', + $veh['official_price']['currency'], + (float)$veh['official_price']['amount'], + $veh['official_price']['rate'], + '官方指导价' + ); + $item->addMoney( + 'discount_price', + $veh['discount_price']['currency'], + (float)$veh['discount_price']['amount'], + $veh['discount_price']['rate'], + '优惠价' + ); } } /** * 计算利润 */ - private function calculateProfit(array $veh, $order): float + private function calculateProfit(array $veh, int $mileage, $order): float { $contractExchangeRate = $order->contract_exchange_rate ?: 1; @@ -612,7 +600,7 @@ class StockOrdersService } // 处理主要价格字段,根据是否需要汇率转换来计算 - if (!empty($veh['mileage']) && $veh['mileage'] > 0) { + if ($mileage > 0) { // 二手车 $listingPriceRate = $veh['listing_price']['rate'] ?: 1; if ($listingPriceRate != $contractExchangeRate) { @@ -825,7 +813,7 @@ class StockOrdersService $modificationText = $this->getModificationText($v->options); // 计算单项利润 - $itemProfit = $this->calculateProfit($moneyValues, $item); + $itemProfit = $this->calculateProfit($moneyValues, $v->mileage, $item); // 构建车辆信息 $vehList[$v->unique_id] = [