|
@@ -16,6 +16,7 @@ use App\Model\ReturnExchangeOrder;
|
|
|
use App\Model\ReturnExchangeOrderProductInfo;
|
|
|
use App\Model\SalesOrder;
|
|
|
use App\Model\SalesOrderProductInfo;
|
|
|
+use App\Model\Setting;
|
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
|
|
class StatisticsService extends Service
|
|
@@ -24,10 +25,8 @@ class StatisticsService extends Service
|
|
|
public function statisticsBt($data,$user){
|
|
|
if(empty($data['crt_time'][0]) || empty($data['crt_time'][1])) return [false, '请选择销售订单时间区间'];
|
|
|
|
|
|
- $model = SalesOrder::Clear($user,$data);
|
|
|
- $model = $model->where('del_time',0)
|
|
|
- ->select('model_type',DB::raw("sum(contract_fee) as total"))
|
|
|
- ->groupBy('model_type');
|
|
|
+ $model = SalesOrder::where('del_time',0)
|
|
|
+ ->select('model_type','contract_fee as total','top_depart_id');
|
|
|
|
|
|
if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) {
|
|
|
$return = $this->changeDateToTimeStampAboutRange($data['crt_time']);
|
|
@@ -44,11 +43,36 @@ class StatisticsService extends Service
|
|
|
public function fillStatisticsBt($data){
|
|
|
if(empty($data)) return $data;
|
|
|
|
|
|
- foreach ($data as $key => $value){
|
|
|
- $data[$key]['model_type_title'] = SalesOrder::$model_type_title[$value['model_type']] ?? "";
|
|
|
+ $setting = Setting::where('setting_name','bt_top_depart_id')->first();
|
|
|
+ $bt_top_depart_id = $setting['setting_value'] ?? [];
|
|
|
+ $bt_top_depart_id = json_decode($bt_top_depart_id,true);
|
|
|
+
|
|
|
+ $return = [];
|
|
|
+ foreach ($data as $value){
|
|
|
+ $model_type_title = SalesOrder::$model_type_title[$value['model_type']] ?? "";
|
|
|
+ if($value['model_type'] != SalesOrder::Model_type_two){
|
|
|
+ if(in_array($value['top_depart_id'], $bt_top_depart_id)){
|
|
|
+ $this->makeThis($return,$value,$model_type_title);
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ $this->makeThis($return,$value,$model_type_title);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- return $data;
|
|
|
+ return array_values($return);
|
|
|
+ }
|
|
|
+
|
|
|
+ public function makeThis(&$return,$value,$model_type_title){
|
|
|
+ if(isset($return[$value['model_type']])){
|
|
|
+ $total = bcadd($value['total'], $return[$value['model_type']]['total'],2);
|
|
|
+ $return[$value['model_type']]['total'] = $total;
|
|
|
+ }else{
|
|
|
+ $return[$value['model_type']] = [
|
|
|
+ 'model_type' => $value['model_type'],
|
|
|
+ 'model_type_title' => $model_type_title,
|
|
|
+ 'total' => $value['total'],
|
|
|
+ ];
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//省 订单类型细分统计
|
|
@@ -98,26 +122,34 @@ class StatisticsService extends Service
|
|
|
$final_address_map[] = $tmp;
|
|
|
}
|
|
|
|
|
|
- $model = SalesOrder::Clear($user,$data);
|
|
|
- $sale_order = $model->where("del_time",0)
|
|
|
+ //特殊的门店
|
|
|
+ $setting = Setting::where('setting_name','bt_top_depart_id')->first();
|
|
|
+ $bt_top_depart_id = $setting['setting_value'] ?? [];
|
|
|
+ $bt_top_depart_id = json_decode($bt_top_depart_id,true);
|
|
|
+
|
|
|
+ $sale_order = SalesOrder::where("del_time",0)
|
|
|
->where('crt_time','>=',$return[0])
|
|
|
->where('crt_time','<=',$return[1])
|
|
|
->when(! empty($model_type), function ($query) use ($model_type) {
|
|
|
return $query->where('model_type',$model_type);
|
|
|
})
|
|
|
- ->select('id','top_depart_id','contract_fee')
|
|
|
+ ->select('id','top_depart_id','contract_fee','model_type')
|
|
|
->get()->toArray();
|
|
|
|
|
|
//合同
|
|
|
- $purchase_map = [];
|
|
|
+ $purchase_map = $sale_order_id = [];
|
|
|
foreach ($sale_order as $value){
|
|
|
$area = $depart_map[$value['top_depart_id']] ?? 0;
|
|
|
if(! $area) continue;
|
|
|
- if(isset($purchase_map[$area])){
|
|
|
- $total = bcadd($purchase_map[$area], $value['contract_fee'],2);
|
|
|
- $purchase_map[$area] = $total;
|
|
|
+
|
|
|
+ if($value['model_type'] != SalesOrder::Model_type_two){
|
|
|
+ if(in_array($value['top_depart_id'], $bt_top_depart_id)){
|
|
|
+ $sale_order_id[] = $value['id'];
|
|
|
+ $this->makeData($purchase_map,$value,$area);
|
|
|
+ }
|
|
|
}else{
|
|
|
- $purchase_map[$area] = $value['contract_fee'];
|
|
|
+ $sale_order_id[] = $value['id'];
|
|
|
+ $this->makeData($purchase_map,$value,$area);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -125,7 +157,7 @@ class StatisticsService extends Service
|
|
|
$returnExchange_map = [];
|
|
|
$returnExchange = ReturnExchangeOrder::where('del_time',0)
|
|
|
->where('type',ReturnExchangeOrder::Order_type)
|
|
|
- ->whereIn('data_id',array_column($sale_order,'id'))
|
|
|
+ ->whereIn('data_id',array_unique($sale_order_id))
|
|
|
->select('top_depart_id','difference_amount')
|
|
|
->get()->toArray();
|
|
|
foreach ($returnExchange as $value){
|
|
@@ -152,6 +184,15 @@ class StatisticsService extends Service
|
|
|
return [true, $final_address_map];
|
|
|
}
|
|
|
|
|
|
+ public function makeData(&$purchase_map, $value,$area){
|
|
|
+ if(isset($purchase_map[$area])){
|
|
|
+ $total = bcadd($purchase_map[$area], $value['contract_fee'],2);
|
|
|
+ $purchase_map[$area] = $total;
|
|
|
+ }else{
|
|
|
+ $purchase_map[$area] = $value['contract_fee'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
//大区 订单类型细分统计
|
|
|
public function statisticsArea($data,$user){
|
|
|
if(empty($data['crt_time'][0]) || empty($data['crt_time'][1])) return [false, '请选择时间区间'];
|
|
@@ -197,26 +238,33 @@ class StatisticsService extends Service
|
|
|
$area_map[] = $tmp;
|
|
|
}
|
|
|
|
|
|
- //合同
|
|
|
- $model = SalesOrder::Clear($user,$data);
|
|
|
- $sale_order = $model->where("del_time",0)
|
|
|
+ //特殊的门店
|
|
|
+ $setting = Setting::where('setting_name','bt_top_depart_id')->first();
|
|
|
+ $bt_top_depart_id = $setting['setting_value'] ?? [];
|
|
|
+ $bt_top_depart_id = json_decode($bt_top_depart_id,true);
|
|
|
+
|
|
|
+ $sale_order = SalesOrder::where("del_time",0)
|
|
|
->where('crt_time','>=',$return[0])
|
|
|
->where('crt_time','<=',$return[1])
|
|
|
->when(! empty($model_type), function ($query) use ($model_type) {
|
|
|
return $query->where('model_type',$model_type);
|
|
|
})
|
|
|
- ->select('top_depart_id','contract_fee')
|
|
|
+ ->select('top_depart_id','contract_fee','model_type','id')
|
|
|
->get()->toArray();
|
|
|
|
|
|
- $purchase_map = [];
|
|
|
+ $purchase_map = $sale_order_id = [];
|
|
|
foreach ($sale_order as $value){
|
|
|
$area = $depart_map[$value['top_depart_id']] ?? 0;
|
|
|
if(! $area) continue;
|
|
|
- if(isset($purchase_map[$area])){
|
|
|
- $total = bcadd($purchase_map[$area], $value['contract_fee'],2);
|
|
|
- $purchase_map[$area] = $total;
|
|
|
+
|
|
|
+ if($value['model_type'] != SalesOrder::Model_type_two){
|
|
|
+ if(in_array($value['top_depart_id'], $bt_top_depart_id)){
|
|
|
+ $sale_order_id[] = $value['id'];
|
|
|
+ $this->makeData($purchase_map,$value,$area);
|
|
|
+ }
|
|
|
}else{
|
|
|
- $purchase_map[$area] = $value['contract_fee'];
|
|
|
+ $sale_order_id[] = $value['id'];
|
|
|
+ $this->makeData($purchase_map,$value,$area);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -224,7 +272,7 @@ class StatisticsService extends Service
|
|
|
$returnExchange_map = [];
|
|
|
$returnExchange = ReturnExchangeOrder::where('del_time',0)
|
|
|
->where('type',ReturnExchangeOrder::Order_type)
|
|
|
- ->whereIn('data_id',array_column($sale_order,'id'))
|
|
|
+ ->whereIn('data_id',array_unique($sale_order_id))
|
|
|
->select('top_depart_id','difference_amount')
|
|
|
->get()->toArray();
|
|
|
foreach ($returnExchange as $value){
|
|
@@ -291,6 +339,11 @@ class StatisticsService extends Service
|
|
|
->pluck('param_one','top_depart_id')
|
|
|
->toArray();
|
|
|
|
|
|
+ //特殊的门店
|
|
|
+ $setting = Setting::where('setting_name','bt_top_depart_id')->first();
|
|
|
+ $bt_top_depart_id = $setting['setting_value'] ?? [];
|
|
|
+ $bt_top_depart_id = json_decode($bt_top_depart_id,true);
|
|
|
+
|
|
|
//合同
|
|
|
$sale_order = SalesOrder::where("del_time",0)
|
|
|
->where('crt_time','>=',$return[0])
|
|
@@ -298,16 +351,19 @@ class StatisticsService extends Service
|
|
|
->when(! empty($model_type), function ($query) use ($model_type) {
|
|
|
return $query->where('model_type',$model_type);
|
|
|
})
|
|
|
- ->select('top_depart_id','contract_fee')
|
|
|
+ ->select('top_depart_id','contract_fee','id','model_type')
|
|
|
->get()->toArray();
|
|
|
//向总社采购的钱
|
|
|
- $purchase_map = [];
|
|
|
+ $purchase_map = $sale_order_id = [];
|
|
|
foreach ($sale_order as $value){
|
|
|
- if(isset($purchase_map[$value['top_depart_id']])){
|
|
|
- $total = bcadd($purchase_map[$value['top_depart_id']], $value['contract_fee'],2);
|
|
|
- $purchase_map[$value['top_depart_id']] = $total;
|
|
|
+ if($value['model_type'] != SalesOrder::Model_type_two){
|
|
|
+ if(in_array($value['top_depart_id'], $bt_top_depart_id)){
|
|
|
+ $sale_order_id[] = $value['id'];
|
|
|
+ $this->makeData($purchase_map,$value,$value['top_depart_id']);
|
|
|
+ }
|
|
|
}else{
|
|
|
- $purchase_map[$value['top_depart_id']] = $value['contract_fee'];
|
|
|
+ $sale_order_id[] = $value['id'];
|
|
|
+ $this->makeData($purchase_map,$value,$value['top_depart_id']);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -316,7 +372,7 @@ class StatisticsService extends Service
|
|
|
$returnExchange = ReturnExchangeOrder::where('del_time',0)
|
|
|
->whereIn('top_depart_id',array_column($depart,'id'))
|
|
|
->where('type',ReturnExchangeOrder::Order_type)
|
|
|
- ->whereIn('data_id',array_column($sale_order,'id'))
|
|
|
+ ->whereIn('data_id',array_unique($sale_order_id))
|
|
|
->select('top_depart_id','difference_amount')
|
|
|
->get()->toArray();
|
|
|
foreach ($returnExchange as $value){
|
|
@@ -495,7 +551,7 @@ class StatisticsService extends Service
|
|
|
$returnExchange_map = $returnExchange_map_2 = [];
|
|
|
$returnExchange = ReturnExchangeOrder::where('del_time',0)
|
|
|
->where('type',ReturnExchangeOrder::Order_type)
|
|
|
- ->whereIn('data_id',$sale_order_id)
|
|
|
+ ->whereIn('data_id', $sale_order_id)
|
|
|
->select('id')
|
|
|
->get()->toArray();
|
|
|
$returnExchange_product = ReturnExchangeOrderProductInfo::where("del_time",0)
|