webman/app/controller/Apiv1Controller.php

154 lines
5.4 KiB
PHP

<?php
namespace app\controller;
use support\Request;
use App\Utils\ApiResponse;
use App\model\Carousel;
use App\model\Project;
use App\model\ProjectDetailed;
use App\model\ProjectRegister;
use App\model\Carouselad;
use App\model\Mechanism;
use Tinywan\Jwt\JwtToken;
use hg\apidoc\annotation as Apidoc;
use support\Db;
/**
* @Apidoc\Title("基础控制器")
*/
class Apiv1Controller
{
protected $noNeedLogin = ['get_carousel', 'get_project', 'get_projectdetailed', 'get_mechanism_list'];
public function index(Request $request)
{
static $readme;
if (!$readme) {
$readme = file_get_contents(base_path('README.md'));
}
return $readme;
}
public function view(Request $request)
{
return view('index/view', ['name' => 'webman']);
}
/**
* @Apidoc\Title("1.0 获取首页轮播图")
* @Apidoc\Url("Apiv1/get_carousel")
* @Apidoc\Method("POST")
*/
public function get_carousel(Request $request)
{
// return json(['code' => 0, 'msg' => 'ok']);
$res['carousel'] = Carousel::all();
$res['carouselad'] = Carouselad::all();
return ApiResponse::success(200, $res);
}
/**
* @Apidoc\Title("1.0 获取所有项目")
* @Apidoc\Url("Apiv1/get_project")
* @Apidoc\Method("POST")
*/
public function get_project(Request $request)
{
//志愿者人数
// $tmp=Project::all();
// foreach($tmp as $k=>$v){
// $res_volunteer=ProjectRegister::where('projectid',$v->id)->where('type',0)->count();
// //被服务者人数
// $res_servants=ProjectRegister::where('projectid',$v->id)->where('type',1)->count();
// $ProjectDetailed = ProjectDetailed::where('projectid',$v->id)->first();
// $data = array(
// "id" => $v->id,
// "created_at" => $v->created_at,
// "updated_at" => $v->updated_at,
// "img" => $v->img,
// "start_time" => $v->start_time,
// "end_time" => $v->end_time,
// "address" => $v->address,
// "title" => $v->title,
// "type" => $v->type,
// "volunteer_max"=>$ProjectDetailed->recruitingpersonnel,
// "servants_max"=>$ProjectDetailed->registerserve,
// "volunteer"=>$res_volunteer,
// "servants"=>$res_servants
// );
// $res[]=$data;
// }
/**
* ?优化
*/
$res = Db::table('project')
->leftJoin('project_register as pr', 'project.id', '=', 'pr.projectid')
->leftJoin('project_detailed as pd', 'project.id', '=', 'pd.projectid')
->select(
'project.*',
'pd.recruitingpersonnel',
'pd.registerserve',
Db::raw('COUNT(CASE WHEN pr.type = 0 THEN 1 END) as volunteer'),
Db::raw('COUNT(CASE WHEN pr.type = 1 THEN 1 END) as servants')
)
->groupBy('project.id')
->orderBy('project.id', 'DESC')
->get();
// 转换为期望的数据结构
foreach ($res as &$v) {
$v->volunteer_max = $v->recruitingpersonnel;
$v->servants_max = $v->registerserve;
unset($v->recruitingpersonnel, $v->registerserve); // 清理不需要的字段
}
return ApiResponse::success(200, $res);
}
/**
* @Apidoc\Title("1.0 获取项目详细信息根据id")
* @Apidoc\Url("Apiv1/get_projectdetailed")
* @Apidoc\Method("POST")
* @Apidoc\Query("projectid", type="int",require=true, desc="项目id",default="1")
* @Apidoc\Returned("projectdetailed", type="string", desc="项目详细信息")
*/
public function get_projectdetailed(Request $request)
{
$data = $request->post();
$res['project'] = Project::where('id', $data['projectid'])->first();
$res['projectdetailed'] = ProjectDetailed::where('projectid', $data['projectid'])->first();
//志愿者人数
$res_volunteer = ProjectRegister::where('projectid', $data['projectid'])->where('type', 0)->count();
//被服务者人数
$res_servants = ProjectRegister::where('projectid', $data['projectid'])->where('type', 1)->count();
$res['projectRegister'] = ProjectRegister::where('projectid', $data['projectid'])->get();
$res['volunteer'] = $res_volunteer;
$res['servants'] = $res_servants;
$res['volunteer_max'] = $res['projectdetailed']->recruitingpersonnel;
$res['servants_max'] = $res['projectdetailed']->registerserve;
return ApiResponse::success(200, $res);
}
/**
* @Apidoc\Title("1.0 获取所有养老机构")
* @Apidoc\Url("Apiv1/get_mechanism_list")
* @Apidoc\Method("POST")
*/
public function get_mechanism_list(Request $request)
{
$res = Mechanism::all();
return ApiResponse::success(200, $res);
}
/**
* @Apidoc\Title("1.0 获取养老机构详细信息")
* @Apidoc\Url("Apiv1/get_mechanism")
* @Apidoc\Query("mechanism", type="int",require=true, desc="养老机构id",default="1")
* @Apidoc\Method("POST")
*/
public function get_mechanism(Request $request)
{
$data = $request->post();
$res = Mechanism::where('id', $data['id'])->get();
return ApiResponse::success(200, $res);
}
}