all()); // $totalNum = (clone $query)->sum('yield'); //总产量 $list = $query->sort()->paginate(Paginator::resolvePerPage('per_page', 20, 50)); $list->load(['base', 'crop', 'createdBy']); return $this->json(CropYieldListResource::collection($list)); } public function store(CropYieldRequest $request) { //判断同地区,同农作物,同年份,同季度,只能有一条 $baseId = $request->input('base_id'); $cropId = $request->input('crop_id'); $timeYear = $request->input('time_year'); $quarter = $request->input('quarter'); if (CropYield::where([ 'base_id' => $baseId, 'crop_id' => $cropId, 'time_year' => $timeYear, 'quarter' => $quarter, ])->exists()) { return $this->error('该数据已存在,无法添加,请修改'); } $crop = Crop::find($cropId); $cropYield = CropYield::create(array_merge($request->input(), [ 'category_id' => $crop->category_id ?? 0, 'created_by' => auth('api')->user()?->id ?? 0, 'updated_by' => auth('api')->user()?->id ?? 0, ])); (new OperationLogService())->inLog(OperationType::Create, '', $cropYield, $request->input()); return $this->success('添加成功'); } public function show(CropYield $cropYield) { $cropYield->load(['base', 'crop', 'createdBy']); return $this->json(CropYieldResource::make($cropYield)); } public function update(CropYield $cropYield, CropYieldRequest $request) { $baseId = $request->input('base_id'); $cropId = $request->input('crop_id'); $timeYear = $request->input('time_year'); $quarter = $request->input('quarter'); if (CropYield::where([ 'base_id' => $baseId, 'crop_id' => $cropId, 'time_year' => $timeYear, 'quarter' => $quarter, ])->where('id', '<>', $cropYield->id)->exists()) { return $this->error('该数据已存在,无法添加,请修改'); } $crop = Crop::find($cropId); $cropYield->update(array_merge($request->input(), [ 'category_id' => $crop->category_id ?? 0, 'updated_by' => auth('api')->user()?->id ?? 0, ])); (new OperationLogService())->inLog(OperationType::Update, '', $cropYield, $request->input()); return $this->success('修改成功'); } public function destroy(CropYield $cropYield) { $cropYield->delete(); (new OperationLogService())->inLog(OperationType::Delete, '', $cropYield); return $this->success('删除成功'); } /** * 季度统计图 * * @param Request $request * @return void */ public function quarterStaticsChart(Request $request) { $categoryId = $request->input('category_id'); //获取产业ID $cropId = $request->input('crop_id', 0); //农作物ID //统计区域范围 $baseId = $request->input('base_id', 0); //统计时间 $year = $request->input('year', date('Y')); //默认今年 $crop = Crop::where([ // 'category_id' => $categoryId, 'id' => $cropId, ])->first(); $staticCropIds = []; $extendsQ = ''; //常规统计 $staticsData = [ 'yield' => [ 'name' => '产量', 'unit' => $crop?->unit ?? '吨', 'list' => [ '第1季度' => null, '第2季度' => null, '第3季度' => null, '第4季度' => null, ], ], 'cultivated' => [ 'name' => '种养殖面积', 'unit' => '亩', 'list' => [ '第1季度' => null, '第2季度' => null, '第3季度' => null, '第4季度' => null, ], ], 'output' => [ 'name' => '产值', 'unit' => '元', 'list' => [ '第1季度' => null, '第2季度' => null, '第3季度' => null, '第4季度' => null, ], ], ]; if ($crop?->is_end) { $staticCropIds[] = $crop->id; if ($crop->extends) { $i = 0; if(is_array($crop->extends)){ $extends = $crop->extends; }else{ $extends = json_decode($crop->extends, true); } foreach ($extends as $item) { $i++; $_key = 'extend_'.$i; $staticsData[$_key] = [ 'name' => $item['name'], 'unit' => $item['unit'], 'list' => [ '第1季度' => null, '第2季度' => null, '第3季度' => null, '第4季度' => null, ], ]; $extendsQ .= ", sum((extends->> '".$item['name']."')::NUMERIC) as extend_".$i.'_total '; } } } else { $cropQ = Crop::query(); if ($crop) { $cropQ->where('path', 'like', '%-'.$crop->id.'-'); } else { $cropQ->where('category_id', $categoryId); } $staticCropIds = $cropQ->where('is_end', 1)->pluck('id')->toArray(); } $q = CropYield::query(); $q->where('time_year', $year)->whereIn('crop_id', $staticCropIds)->groupBy('quarter'); if ($baseId) { $q->where('base_id', $baseId); }else{ $baseIds = AgriculturalBase::where('type', BaseType::Town)->pluck('id')->toArray(); $q->whereIn('base_id', $baseIds); } $q1 = clone $q; $sumSql = 'quarter, sum(yield) as yield_total, sum(cultivated) as cultivated_total, sum(output) as output_total '; if ($extendsQ) { $sumSql .= $extendsQ; } $data1 = $q1->select(DB::raw($sumSql))->get(); $data1 = $data1->keyBy('quarter'); foreach ($staticsData as $key => $value) { foreach ($data1 as $quarter => $item) { $_key = $key.'_total'; $_value = $item->$_key; if($_value > 10000 && strpos($staticsData[$key]['unit'], '元') !== false && strpos($staticsData[$key]['unit'], '万') === false ){ $staticsData[$key]['unit'] = '万'.$staticsData[$key]['unit']; } if(strpos($staticsData[$key]['unit'], '万') !== false ){ $_value = bcdiv($_value, 10000, 2); } $staticsData[$key]['list']['第'.$quarter.'季度'] = $_value; } } return $this->json($staticsData); } /** * 行业产值统计,查询某年,可选镇(饼状图) */ public function categoryStaticsChart(Request $request) { $baseId = $request->input('base_id'); //镇 $year = $request->input('year', date('Y')); //年份 //使用单独配置,不再做统计 // $q = CropYield::query(); // $q->where('time_year', $year); // if ($baseId) { // $q->where('base_id', $baseId); // }else{ // $baseIds = AgriculturalBase::where('type', BaseType::Town)->pluck('id')->toArray(); // $q->whereIn('base_id', $baseIds); // } // $q->groupBy('category_id'); // $totalData = $q->select(DB::raw('category_id, sum(output) as output_total ')) // ->get() // ->keyBy('category_id')->toArray(); $categories = Keywords::filter($request->all())->where('type_key', 'crops-category')->get(); $data = []; $settingCharts = []; if(!($baseId > 0)){ $settingCharts = Setting::where('slug', 'like', 'city_data_chart_%')->get()->pluck('value', 'slug')->toArray(); } foreach ($categories as $category) { $data[$category->name] = 0; //使用单独配置,不再做统计 // if (isset($totalData[$category->id])) { // $data[$category->name] = $totalData[$category->id]['output_total']; // } //如果是没有查指定城镇,则如果设置数据统计,则使用统计数值; if(!($baseId > 0)){ $data[$category->name] = 0; switch($category->key){ case 'crops-cate-nongye': if(isset(json_decode($settingCharts['city_data_chart_nongye'], true)[$year])){ $data[$category->name] = (json_decode($settingCharts['city_data_chart_nongye'], true)[$year])*10000; } break; case 'crops-cate-yuye': if(isset(json_decode($settingCharts['city_data_chart_yuye'], true)[$year])){ $data[$category->name] = (json_decode($settingCharts['city_data_chart_yuye'], true)[$year])*10000; } break; case 'crops-cate-xumuye': if(isset(json_decode($settingCharts['city_data_chart_xumuye'], true)[$year])){ $data[$category->name] = (json_decode($settingCharts['city_data_chart_xumuye'], true)[$year])*10000; } break; case 'crops-cate-lingye': if(isset(json_decode($settingCharts['city_data_chart_lingye'], true)[$year])){ $data[$category->name] = (json_decode($settingCharts['city_data_chart_lingye'], true)[$year])*10000; } break; case 'crops-cate-activity': if(isset(json_decode($settingCharts['city_data_chart_activity'], true)[$year])){ $data[$category->name] = (json_decode($settingCharts['city_data_chart_activity'], true)[$year])*10000; } break; } }else{ $baseExtends = AgriculturalBase::where('id', $baseId)->value('extends'); $baseExtends = json_decode($baseExtends, true); switch($category->key){ case 'crops-cate-nongye': if(isset($baseExtends['chart_nongye'][$year])){ $data[$category->name] = ($baseExtends['chart_nongye'][$year])*10000; } break; case 'crops-cate-yuye': if(isset($baseExtends['chart_yuye'][$year])){ $data[$category->name] = ($baseExtends['chart_yuye'][$year])*10000; } break; case 'crops-cate-xumuye': if(isset($baseExtends['chart_xumuye'][$year])){ $data[$category->name] = ($baseExtends['chart_xumuye'][$year])*10000; } break; case 'crops-cate-lingye': if(isset($baseExtends['chart_lingye'][$year])){ $data[$category->name] = ($baseExtends['chart_lingye'][$year])*10000; } break; case 'crops-cate-activity': if(isset($baseExtends['chart_activity'][$year])){ $data[$category->name] = ($baseExtends['chart_activity'][$year])*10000; } break; } } } return $this->json([ 'list' => $data, ]); } /** * 总产值,查询年折线图(当年往前查4年),可选镇 */ public function totalStaticsChart(Request $request) { $baseId = $request->input('base_id'); //镇 $nowYear = date('Y'); //默认当前年开始往前4年; // $nowYear--; //使用单独配置,不再做统计 // $q = CropYield::query(); // if ($baseId) { // $q->where('base_id', $baseId); // }else{ // $baseIds = AgriculturalBase::where('type', BaseType::Town)->pluck('id')->toArray(); // $q->whereIn('base_id', $baseIds); // } // $q->where('time_year', '>=', $nowYear - 3); // $q->groupBy('time_year'); // $totalData = $q->select(DB::raw('time_year, sum(output) as output_total ')) // ->get() // ->keyBy('time_year')->toArray(); $data = []; $settingCharts = []; if(!($baseId > 0)){ $settingCharts = Setting::where('slug', 'like', 'city_data_chart_%')->get()->pluck('value', 'slug')->toArray(); } for ($i = 0; $i < 4; $i++) { $_year = $nowYear - $i; $data[$_year] = 0; //使用单独配置,不再做统计 // if (isset($totalData[$_year])) { // $data[$_year] = $totalData[$_year]['output_total']; // } if(!($baseId > 0)){ $data[$_year] = 0; if(isset(json_decode($settingCharts['city_data_chart_nongye'], true)[$_year])){ $data[$_year] += (json_decode($settingCharts['city_data_chart_nongye'], true)[$_year])*10000; } if(isset(json_decode($settingCharts['city_data_chart_yuye'], true)[$_year])){ $data[$_year] += (json_decode($settingCharts['city_data_chart_yuye'], true)[$_year])*10000; } if(isset(json_decode($settingCharts['city_data_chart_xumuye'], true)[$_year])){ $data[$_year] += (json_decode($settingCharts['city_data_chart_xumuye'], true)[$_year])*10000; } if(isset(json_decode($settingCharts['city_data_chart_lingye'], true)[$_year])){ $data[$_year] += (json_decode($settingCharts['city_data_chart_lingye'], true)[$_year])*10000; } if(isset(json_decode($settingCharts['city_data_chart_activity'], true)[$_year])){ $data[$_year] += (json_decode($settingCharts['city_data_chart_activity'], true)[$_year])*10000; } }else{//使用单独配置,不再做统计 $baseExtends = AgriculturalBase::where('id', $baseId)->value('extends'); $baseExtends = json_decode($baseExtends, true); if(isset($baseExtends['chart_nongye'][$_year])){ $data[$_year] += ($baseExtends['chart_nongye'][$_year])*10000; } if(isset($baseExtends['chart_yuye'][$_year])){ $data[$_year] += ($baseExtends['chart_yuye'][$_year])*10000; } if(isset($baseExtends['chart_xumuye'][$_year])){ $data[$_year] += ($baseExtends['chart_xumuye'][$_year])*10000; } if(isset($baseExtends['chart_lingye'][$_year])){ $data[$_year] += ($baseExtends['chart_lingye'][$_year])*10000; } if(isset($baseExtends['chart_activity'][$_year])){ $data[$_year] += ($baseExtends['chart_activity'][$_year])*10000; } } } return $this->json([ 'list' => $data, ]); } /** * 查询镇,行业产值列表(可选年,行业) * * @return void */ public function totalStaticsList(Request $request) { $year = $request->input('year', date('Y')); //年份 $categoryId = $request->input('category_id'); //行业ID //使用单独配置,不再做统计 // $q = CropYield::query(); // $q->where('time_year', $year); // if ($categoryId) { // $q->where('category_id', $categoryId); // } // $q->groupBy('base_id'); // $totalData = $q->select(DB::raw('base_id, sum(output) as output_total ')) // ->get() // ->keyBy('base_id')->toArray(); $bases = AgriculturalBase::town()->get(); $data = []; foreach ($bases as $base) { $data[$base->name] = 0; $baseExtends = json_decode($base->extends, true); if(isset($baseExtends['chart_nongye'][$year])){ $data[$base->name] += ($baseExtends['chart_nongye'][$year])*10000; } if(isset($baseExtends['chart_yuye'][$year])){ $data[$base->name] += ($baseExtends['chart_yuye'][$year])*10000; } if(isset($baseExtends['chart_xumuye'][$year])){ $data[$base->name] += ($baseExtends['chart_xumuye'][$year])*10000; } if(isset($baseExtends['chart_lingye'][$year])){ $data[$base->name] += ($baseExtends['chart_lingye'][$year])*10000; } if(isset($baseExtends['chart_activity'][$year])){ $data[$base->name] += ($baseExtends['chart_activity'][$year])*10000; } //使用单独配置,不再做统计 // if (isset($totalData[$base->id])) { // $data[$base->name] = $totalData[$base->id]['output_total']; // } } arsort($data); return $this->json([ 'list' => $data, ]); } }