|
@@ -85,6 +85,10 @@ class DataController extends BaseController
|
|
{
|
|
{
|
|
return strlen($date) <= 7 ? Carbon::createFromTimeString($date . '-01 00:00:00')->addMonth(1)->toDateTimeString() : Carbon::createFromTimeString($date . ' 00:00:00')->addDay(1)->toDateTimeString();
|
|
return strlen($date) <= 7 ? Carbon::createFromTimeString($date . '-01 00:00:00')->addMonth(1)->toDateTimeString() : Carbon::createFromTimeString($date . ' 00:00:00')->addDay(1)->toDateTimeString();
|
|
}
|
|
}
|
|
|
|
+ public function getYearEnd($date,$is_end=true)
|
|
|
|
+ {
|
|
|
|
+ return $is_end ? Carbon::createFromTimeString(substr($date,0,4) . '-01-01 00:00:00')->addYear(1)->toDateTimeString() : Carbon::createFromTimeString(substr($date,0,4) . '-01-01 00:00:00')->toDateTimeString() ;
|
|
|
|
+ }
|
|
|
|
|
|
public function getOrders(Request $request)
|
|
public function getOrders(Request $request)
|
|
{
|
|
{
|
|
@@ -334,49 +338,61 @@ class DataController extends BaseController
|
|
// return $this->success(['data' => $values]);
|
|
// return $this->success(['data' => $values]);
|
|
|
|
|
|
|
|
|
|
- $date = $this->getStartAt($request->input('date'));
|
|
|
|
- $year = date('Y',strtotime($date));
|
|
|
|
|
|
+ $start_date = $this->getStartAt($request->input('start_date'));
|
|
|
|
+ $end_date = $this->getYearEnd($request->input('end_date'));
|
|
|
|
+
|
|
$project_id = $request->input('project_ids');
|
|
$project_id = $request->input('project_ids');
|
|
$project_id = $project_id[0];
|
|
$project_id = $project_id[0];
|
|
- $devices = Device::all();
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ if($request->input('type') == 'year'){
|
|
|
|
+ $year = date('Y',strtotime($start_date));
|
|
|
|
+ $items = OrderOverviewModel::whereYear('date',$year)->where('project_id',$project_id)->get()->toArray();
|
|
|
|
+ $device_ids = OrderDevice::where('project_id',$project_id)->whereYear('created_at',$year)->where('device_id','>',0)->distinct('device_id')->pluck('device_id')->toArray();
|
|
|
|
+
|
|
|
|
+ } else {
|
|
|
|
+ $items = OrderOverviewModel::whereBetween('date',[$start_date,$end_date])->where('project_id',$project_id)->get()->toArray();
|
|
|
|
+ $device_ids = OrderDevice::where('project_id',$project_id)->whereBetween('created_at',[$start_date,$end_date])>where('device_id','>',0)->distinct('device_id')->pluck('device_id')->toArray();
|
|
|
|
+ }
|
|
|
|
+ $base_name = [];
|
|
|
|
+ if(!empty($device_ids)){
|
|
|
|
+ //设备基础金额 默认为0
|
|
|
|
+ $base_data = array_fill(0,count($device_ids),0);
|
|
|
|
+ $base_name = Device::whereIn('id',$device_ids)->pluck('name')->toArray();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //头部标题
|
|
$data = [
|
|
$data = [
|
|
- ['date' => '日期', 'total' => '总金额', 'data' => $devices->pluck('name')->toArray()]
|
|
|
|
|
|
+ ['date' => '日期', 'total' => '总金额', 'data' => $base_name]
|
|
];
|
|
];
|
|
- $items = OrderOverviewModel::whereYear('date',$year)->where('project_id',$project_id)->get()->toArray();
|
|
|
|
|
|
+
|
|
foreach ($items as &$item)
|
|
foreach ($items as &$item)
|
|
{
|
|
{
|
|
$arr = [
|
|
$arr = [
|
|
- 'data'=>[],
|
|
|
|
|
|
+ 'data'=>$base_data
|
|
];
|
|
];
|
|
- $arr_data = $devices->pluck('id')->toArray();
|
|
|
|
$arr['total'] = $item['total_price']/100;
|
|
$arr['total'] = $item['total_price']/100;
|
|
$arr['date'] = date('Y-m',strtotime($item['date']));
|
|
$arr['date'] = date('Y-m',strtotime($item['date']));
|
|
//获取到月份的开始时间和结束时间
|
|
//获取到月份的开始时间和结束时间
|
|
$start_at = $item['date'];
|
|
$start_at = $item['date'];
|
|
$end_at = $this->getEndAt(date('Y-m',strtotime($item['date'])));
|
|
$end_at = $this->getEndAt(date('Y-m',strtotime($item['date'])));
|
|
//获取到订单数组
|
|
//获取到订单数组
|
|
- $order_arr = Order::where('project_id',$project_id)
|
|
|
|
|
|
+ $order_arr = Order::
|
|
|
|
+ whereBetween('updated_at',[$start_at,$end_at])
|
|
|
|
+ ->where('project_id',$project_id)
|
|
->where('status',3)
|
|
->where('status',3)
|
|
->where('type',1)
|
|
->where('type',1)
|
|
- ->whereBetween('updated_at',[$start_at,$end_at])
|
|
|
|
->pluck('id')->toArray();
|
|
->pluck('id')->toArray();
|
|
- $order_details = OrderDevice::whereIn('order_id',$order_arr)->get(['quantity','price','device_id'])->groupBy('device_id')->toArray();
|
|
|
|
- foreach ($order_details as $key=>&$detail)
|
|
|
|
- {
|
|
|
|
- $total_nums = 0;
|
|
|
|
- foreach ($detail as $detail_value)
|
|
|
|
- {
|
|
|
|
- $total_nums += ($detail_value['price']*$detail_value['quantity'])/100;
|
|
|
|
- }
|
|
|
|
- $device_data = $arr_data;
|
|
|
|
- //重置键值数组
|
|
|
|
- foreach ($device_data as $k=>&$device_datum)
|
|
|
|
- {
|
|
|
|
- $device_datum = 0;
|
|
|
|
- }
|
|
|
|
- $device_data[$key-1] = $total_nums;
|
|
|
|
- $arr['data']=$device_data;
|
|
|
|
|
|
+ if(!empty($order_arr)){
|
|
|
|
+ //获取对应设备的总金额
|
|
|
|
+ foreach ($device_ids as $k=>$id){
|
|
|
|
+ $device_total = OrderDevice::whereIn('order_id',$order_arr)->where('device_id',$id)->select('quantity','price','device_id',DB::raw('SUM(price * quantity) AS total_price'))->first()->toArray();
|
|
|
|
+ if(!empty($device_total['total_price'])){
|
|
|
|
+ $base_data[$k] = $device_total['total_price']/100;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
+ $arr['data'] = $base_data;
|
|
array_push($data,$arr);
|
|
array_push($data,$arr);
|
|
}
|
|
}
|
|
return $this->success(['data' => $data]);
|
|
return $this->success(['data' => $data]);
|