154 lines
5.4 KiB
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);
|
||
|
}
|
||
|
}
|