wesmiler 8 часов назад
Родитель
Сommit
845add5948

+ 2 - 1
app/Services/Api/GoodsService.php

@@ -301,7 +301,7 @@ class GoodsService extends BaseService
 
             $skus = GoodsSkuModel::whereIn('goods_id', $ids)->select(['id','sku_name','price','cost_price','stock'])->get()->keyBy('id');
             $skus = $skus?$skus->toArray() : [];
-            $result = ['discount_point'=>$discountPoint,'meal_type'=>0,'profit_total'=>0,'net_profit'=>0,'store_id'=>0,'discount_total'=>0.00,'delivery_fee'=>0.00,'goods_total'=>0,'order_total'=>0,'bd_score_total'=>0,'count'=>0,'goods'=>[]];
+            $result = ['discount_point'=>$discountPoint,'meal_type'=>0,'profit_total'=>0,'net_profit'=>0,'cost_total'=>0,'store_id'=>0,'discount_total'=>0.00,'delivery_fee'=>0.00,'goods_total'=>0,'order_total'=>0,'bd_score_total'=>0,'count'=>0,'goods'=>[]];
             foreach ($goods as $params){
                 $goodsId = isset($params['id'])?$params['id']:0;
                 $skuId = isset($params['sku_id'])?$params['sku_id']:0;
@@ -374,6 +374,7 @@ class GoodsService extends BaseService
                     $result['order_total'] += $total;
                     $result['bd_score_total'] += $bdScore;
                     $result['profit_total'] += $profitTotal;
+                    $result['cost_total'] += $costPrice;
                     $result['net_profit'] += $netProfit;
                     $result['count']++;
                 }

+ 2 - 0
app/Services/Api/OrderService.php

@@ -247,6 +247,7 @@ class OrderService extends BaseService
         $orderTotal = isset($result['order_total']) ? $result['order_total'] : 0; // 订单结算金额(折后)
         $bdScoreTotal = isset($result['bd_score_total']) ? $result['bd_score_total'] : 0; // 报单积分
         $profitTotal = isset($result['profit_total']) ? $result['profit_total'] : 0; // 毛利
+        $costTotal = isset($result['cost_total']) ? $result['cost_total'] : 0; // 成本
         $netProfit = isset($result['net_profit']) ? $result['net_profit'] : 0; // 净利润
         $discountTotal = isset($result['discount_total']) ? $result['discount_total'] : 0; // 折扣金额
         $orderCount = isset($result['count']) ? $result['count'] : 0;
@@ -328,6 +329,7 @@ class OrderService extends BaseService
             'total' => $goodsTotal, // 商品总价
             'num' => $orderCount,
             'bd_score' => $bdScoreTotal, // 报单积分金额
+            'cost_total' => $costTotal, // 总成本
             'profit_total' => $profitTotal, // 商品总毛利
             'net_profit' => $netProfit, // 商品总净利润
             'pay_money' => $orderTotal, // 折扣后商品总价(不含运费)

+ 12 - 10
app/Services/Api/SettleService.php

@@ -120,7 +120,9 @@ class SettleService extends BaseService
         $orderId = isset($order['id']) ? $order['id'] : 0;
         $orderNo = isset($order['order_no']) ? $order['order_no'] : '';
         $orderTotal = isset($order['pay_total']) ? $order['pay_total'] : 0;
-        $profitTotal = isset($order['profit_total']) ? $order['profit_total'] : 0;
+        $profitTotal = isset($order['profit_total']) ? $order['profit_total'] : 0; // 毛利
+        $costTotal = isset($order['cost_total']) ? $order['cost_total'] : 0; // 总成本
+        $netProfit = isset($order['net_profit']) ? $order['net_profit'] : 0; // 净利润
         $data = [
             'order_id' => $orderId,
             'user_id' => $userId,
@@ -219,10 +221,8 @@ class SettleService extends BaseService
             /* TODO 计算商家佣金 */
             $storeInfo = StoreModel::where(['id' => $storeId])->first();
             $bonusRate = isset($storeInfo['bonus_rate']) ? floatval($storeInfo['bonus_rate']) : 0;
-            $storeBonusRate = ConfigService::make()->getConfigByCode('store_bonus_rate', 0);
-            $storeBonusRate = $storeBonusRate > 0 && $storeBonusRate <= 100 ? $storeBonusRate : 0;
-            $bonusRate = $bonusRate > 0 && $bonusRate <= 100 ? $bonusRate : $storeBonusRate;
-            $bonus = moneyFormat($orderTotal * $bonusRate / 100, 2);
+            $bonusRate = $bonusRate > 0 && $bonusRate < 100 ? $bonusRate : 0;
+            $bonus = $bonusRate? moneyFormat($orderTotal * $bonusRate / 100, 2) : $costTotal;
             $data['bonus'] = $bonus;
             $data['bonus_rate'] = $bonusRate;
 
@@ -236,12 +236,14 @@ class SettleService extends BaseService
                 foreach ($orderGoods as $goods) {
                     $lsScoreRate = isset($goods['ls_score_rate']) ? $goods['ls_score_rate'] : 0;
                     $lsScoreRate = $lsScoreRate > 0 && $lsScoreRate <= 50 ? $lsScoreRate : $ptLsScoreRate;
-                    $profitTotal = isset($goods['profit_total']) ? $goods['profit_total'] : 0;
-                    if ($profitTotal > 0 && $lsScoreRate > 0) {
-                        $lsScoreTotal += moneyFormat($profitTotal * $lsScoreRate / 100, 2);
+                    //$profitTotal = isset($goods['profit_total']) ? $goods['profit_total'] : 0;
+                    $netProfit = isset($goods['net_profit']) ? $goods['net_profit'] : 0;
+                    if ($netProfit > 0 && $lsScoreRate > 0) {
+                        $lsScoreTotal += moneyFormat($netProfit * $lsScoreRate / 100, 2);
                     }
                     $data['ls_score_rates'][$goods['goods_id']] = [
                         'goods_id' => $goods['goods_id'],
+                        'net_profit' => $netProfit,
                         'score' => $lsScoreRate
                     ];
                 }
@@ -255,8 +257,8 @@ class SettleService extends BaseService
             $ptPoolRate = $ptPoolRate > 0 && $ptPoolRate < 50 ? $ptPoolRate : 0;
             $rewardPropertyRate = ConfigService::make()->getConfigByCode('reward_property_rate', 0);
             $rewardPropertyRate = $rewardPropertyRate > 0 && $rewardPropertyRate <= 50 ? $rewardPropertyRate : 0;
-            $propertyTotal = moneyFormat($rewardPropertyRate * $profitTotal / 100, 2);
-            $poolTotal = moneyFormat($ptPoolRate * $profitTotal / 100, 2);
+            $propertyTotal = moneyFormat($rewardPropertyRate * $netProfit / 100, 2);
+            $poolTotal = moneyFormat($ptPoolRate * $netProfit / 100, 2);
             $data['pt_pool_rate'] = $ptPoolRate;
             $data['pt_pool'] = $poolTotal;
             $data['property'] = $propertyTotal;