|
|
<?php
|
|
|
|
|
|
namespace App\Http\Controllers\API\Admin;
|
|
|
|
|
|
use App\Http\Controllers\Controller;
|
|
|
use Illuminate\Http\Request;
|
|
|
use App\Lib\Rs;
|
|
|
use Illuminate\Support\Facades\DB;
|
|
|
use Illuminate\Validation\Rule;
|
|
|
|
|
|
class ExamItemController extends Controller
|
|
|
{
|
|
|
/**
|
|
|
* 获取大类列表(exam_item_class表中pid=0或pid为null)
|
|
|
*/
|
|
|
public function getBigClassList(Request $request)
|
|
|
{
|
|
|
$name = $request->input('name', '');
|
|
|
$status = $request->input('status', null);
|
|
|
$page = $request->input('page', 1);
|
|
|
$pageSize = $request->input('page_size', 10);
|
|
|
|
|
|
$query = DB::table('exam_item_class')
|
|
|
->where('deleted', 0)
|
|
|
->where(function($q) {
|
|
|
$q->where('pid', 0)->orWhereNull('pid');
|
|
|
});
|
|
|
|
|
|
if (!empty($name)) {
|
|
|
$query->where('name', 'like', '%' . $name . '%');
|
|
|
}
|
|
|
|
|
|
if ($status !== null) {
|
|
|
$query->where('status', $status);
|
|
|
}
|
|
|
|
|
|
$total = $query->count();
|
|
|
$list = $query->orderBy('id', 'asc')
|
|
|
->skip(($page - 1) * $pageSize)
|
|
|
->take($pageSize)
|
|
|
->get();
|
|
|
|
|
|
return Rs::success([
|
|
|
'list' => $list,
|
|
|
'total' => $total,
|
|
|
'page' => $page,
|
|
|
'page_size' => $pageSize,
|
|
|
'total_pages' => ceil($total / $pageSize)
|
|
|
]);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取子类列表(exam_item_class表中pid>0)
|
|
|
*/
|
|
|
public function getSubClassList(Request $request)
|
|
|
{
|
|
|
$bigClassId = $request->input('big_class_id', '');
|
|
|
$name = $request->input('name', '');
|
|
|
$status = $request->input('status', null);
|
|
|
$page = $request->input('page', 1);
|
|
|
$pageSize = $request->input('page_size', 10);
|
|
|
|
|
|
$query = DB::table('exam_item_class')
|
|
|
->where('deleted', 0)
|
|
|
->where('pid', '>', 0);
|
|
|
|
|
|
if (!empty($bigClassId)) {
|
|
|
$query->where('pid', $bigClassId);
|
|
|
}
|
|
|
|
|
|
if (!empty($name)) {
|
|
|
$query->where('name', 'like', '%' . $name . '%');
|
|
|
}
|
|
|
|
|
|
if ($status !== null) {
|
|
|
$query->where('status', $status);
|
|
|
}
|
|
|
|
|
|
$total = $query->count();
|
|
|
$list = $query->orderBy('id', 'asc')
|
|
|
->skip(($page - 1) * $pageSize)
|
|
|
->take($pageSize)
|
|
|
->get();
|
|
|
|
|
|
return Rs::success([
|
|
|
'list' => $list,
|
|
|
'total' => $total,
|
|
|
'page' => $page,
|
|
|
'page_size' => $pageSize,
|
|
|
'total_pages' => ceil($total / $pageSize)
|
|
|
]);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取项目列表(exam_item表)
|
|
|
*/
|
|
|
public function getItemList(Request $request)
|
|
|
{
|
|
|
$classId = $request->input('class_id', '');
|
|
|
$bigClassId = $request->input('big_class_id', '');
|
|
|
$name = $request->input('name', '');
|
|
|
$code = $request->input('code', '');
|
|
|
$status = $request->input('status', null);
|
|
|
$page = $request->input('page', 1);
|
|
|
$pageSize = $request->input('page_size', 10);
|
|
|
|
|
|
$query = DB::table('exam_item as ei')
|
|
|
->leftJoin('exam_item_class as sub_class', 'ei.class_id', '=', 'sub_class.id')
|
|
|
->leftJoin('exam_item_class as big_class', 'sub_class.pid', '=', 'big_class.id')
|
|
|
->where('ei.deleted', 0)
|
|
|
->select(
|
|
|
'ei.*',
|
|
|
'big_class.id as big_class_id',
|
|
|
'big_class.name as big_class_name',
|
|
|
'sub_class.name as sub_class_name'
|
|
|
);
|
|
|
|
|
|
if (!empty($classId)) {
|
|
|
$query->where('ei.class_id', $classId);
|
|
|
}
|
|
|
|
|
|
if (!empty($bigClassId)) {
|
|
|
$query->where('sub_class.pid', $bigClassId);
|
|
|
}
|
|
|
|
|
|
if (!empty($name)) {
|
|
|
$query->where(function($q) use ($name) {
|
|
|
$q->where('ei.name', 'like', '%' . $name . '%')
|
|
|
->orWhere('ei.code', 'like', '%' . $name . '%');
|
|
|
});
|
|
|
}
|
|
|
|
|
|
if (!empty($code)) {
|
|
|
$query->where('ei.code', 'like', '%' . $code . '%');
|
|
|
}
|
|
|
|
|
|
if ($status !== null) {
|
|
|
$query->where('ei.status', $status);
|
|
|
}
|
|
|
|
|
|
$total = $query->count();
|
|
|
$list = $query->orderBy('ei.id', 'asc')
|
|
|
->skip(($page - 1) * $pageSize)
|
|
|
->take($pageSize)
|
|
|
->get();
|
|
|
|
|
|
// 为每个项目加载资源信息
|
|
|
foreach ($list as $item) {
|
|
|
$resources = DB::table('exam_item_resource as eir')
|
|
|
->leftJoin('department_resource as dr', 'eir.resource_id', '=', 'dr.id')
|
|
|
->where('eir.item_id', $item->id)
|
|
|
->where('eir.deleted', 0)
|
|
|
->select('dr.id', 'dr.name')
|
|
|
->get();
|
|
|
$item->resources = $resources;
|
|
|
|
|
|
// 加载关联部位
|
|
|
$bodyParts = DB::table('exam_item_body_part as eibp')
|
|
|
->join('exam_body_part as ebp', 'eibp.body_part_id', '=', 'ebp.id')
|
|
|
->where('eibp.item_id', $item->id)
|
|
|
->where('ebp.deleted', 0)
|
|
|
->select('ebp.id', 'ebp.code', 'ebp.name', 'ebp.parent_id')
|
|
|
->orderBy('ebp.sort_order', 'asc')
|
|
|
->get();
|
|
|
$item->body_parts = $bodyParts;
|
|
|
}
|
|
|
|
|
|
return Rs::success([
|
|
|
'list' => $list,
|
|
|
'total' => $total,
|
|
|
'page' => $page,
|
|
|
'page_size' => $pageSize,
|
|
|
'total_pages' => ceil($total / $pageSize)
|
|
|
]);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 保存大类
|
|
|
*/
|
|
|
public function saveBigClass(Request $request)
|
|
|
{
|
|
|
$data = $request->validate([
|
|
|
'id' => 'required|integer',
|
|
|
'code' => 'sometimes|string|max:50',
|
|
|
'name' => 'required|string|max:255',
|
|
|
'status' => 'required|integer|in:0,1',
|
|
|
]);
|
|
|
|
|
|
$conditions = ['id' => $data['id']];
|
|
|
$values = [
|
|
|
'code' => $data['code'] ?? '',
|
|
|
'name' => $data['name'],
|
|
|
'status' => $data['status'],
|
|
|
'pid' => 0,
|
|
|
];
|
|
|
|
|
|
$updated = DB::table('exam_item_class')->updateOrInsert($conditions, $values);
|
|
|
|
|
|
if ($updated) {
|
|
|
return Rs::success();
|
|
|
}
|
|
|
|
|
|
return Rs::error('操作失败');
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 保存子类
|
|
|
*/
|
|
|
public function saveSubClass(Request $request)
|
|
|
{
|
|
|
$data = $request->validate([
|
|
|
'id' => 'required|integer',
|
|
|
'code' => 'sometimes|string|max:50',
|
|
|
'name' => 'required|string|max:255',
|
|
|
'pid' => 'required|integer',
|
|
|
'status' => 'required|integer|in:0,1',
|
|
|
]);
|
|
|
|
|
|
$conditions = ['id' => $data['id']];
|
|
|
$values = [
|
|
|
'code' => $data['code'] ?? '',
|
|
|
'name' => $data['name'],
|
|
|
'pid' => $data['pid'],
|
|
|
'status' => $data['status'],
|
|
|
];
|
|
|
|
|
|
$updated = DB::table('exam_item_class')->updateOrInsert($conditions, $values);
|
|
|
|
|
|
if ($updated) {
|
|
|
return Rs::success();
|
|
|
}
|
|
|
|
|
|
return Rs::error('操作失败');
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 保存项目
|
|
|
*/
|
|
|
public function saveItem(Request $request)
|
|
|
{
|
|
|
$data = $request->validate([
|
|
|
'id' => 'required|integer',
|
|
|
'big_class_id' => 'sometimes|integer',
|
|
|
'class_id' => 'required|integer',
|
|
|
'code' => 'sometimes|string|max:50',
|
|
|
'name' => 'required|string|max:100',
|
|
|
'desc' => 'sometimes|string|max:255',
|
|
|
'need_appointment' => 'sometimes|integer|in:0,1',
|
|
|
'exam_part_code' => 'sometimes|string|max:50',
|
|
|
'fasting_status' => 'sometimes|integer|in:0,1',
|
|
|
'check_tips' => 'sometimes|string',
|
|
|
'check_time' => 'sometimes|integer',
|
|
|
'use_seats' => 'sometimes|integer',
|
|
|
'enable_channel_mask' => 'sometimes|integer',
|
|
|
'status' => 'required|integer|in:0,1',
|
|
|
]);
|
|
|
|
|
|
$conditions = ['id' => $data['id']];
|
|
|
$values = [
|
|
|
'class_id' => $data['class_id'],
|
|
|
'code' => $data['code'] ?? '',
|
|
|
'name' => $data['name'],
|
|
|
'desc' => $data['desc'] ?? '',
|
|
|
'need_appointment' => $data['need_appointment'] ?? 1,
|
|
|
'exam_part_code' => $data['exam_part_code'] ?? '',
|
|
|
'fasting_status' => $data['fasting_status'] ?? 0,
|
|
|
'check_tips' => $data['check_tips'] ?? '',
|
|
|
'check_time' => $data['check_time'] ?? null,
|
|
|
'use_seats' => $data['use_seats'] ?? 1,
|
|
|
'enable_channel_mask' => $data['enable_channel_mask'] ?? 0,
|
|
|
'status' => $data['status'],
|
|
|
];
|
|
|
|
|
|
$updated = DB::table('exam_item')->updateOrInsert($conditions, $values);
|
|
|
|
|
|
if ($updated) {
|
|
|
return Rs::success();
|
|
|
}
|
|
|
|
|
|
return Rs::error('操作失败');
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 删除大类
|
|
|
*/
|
|
|
public function deleteBigClass(Request $request)
|
|
|
{
|
|
|
$data = $request->validate([
|
|
|
'id' => 'required|integer',
|
|
|
]);
|
|
|
|
|
|
// 检查是否有子类
|
|
|
$hasSubClass = DB::table('exam_item_class')
|
|
|
->where('pid', $data['id'])
|
|
|
->where('deleted', 0)
|
|
|
->exists();
|
|
|
|
|
|
if ($hasSubClass) {
|
|
|
return Rs::error('该大类下存在子类,无法删除');
|
|
|
}
|
|
|
|
|
|
$deleted = DB::table('exam_item_class')->where('id', $data['id'])->update(['deleted' => 1]);
|
|
|
|
|
|
if ($deleted) {
|
|
|
return Rs::success();
|
|
|
}
|
|
|
|
|
|
return Rs::error('删除失败');
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 删除子类
|
|
|
*/
|
|
|
public function deleteSubClass(Request $request)
|
|
|
{
|
|
|
$data = $request->validate([
|
|
|
'id' => 'required|integer',
|
|
|
]);
|
|
|
|
|
|
// 检查是否有项目
|
|
|
$hasItem = DB::table('exam_item')
|
|
|
->where('class_id', $data['id'])
|
|
|
->where('deleted', 0)
|
|
|
->exists();
|
|
|
|
|
|
if ($hasItem) {
|
|
|
return Rs::error('该子类下存在项目,无法删除');
|
|
|
}
|
|
|
|
|
|
$deleted = DB::table('exam_item_class')->where('id', $data['id'])->update(['deleted' => 1]);
|
|
|
|
|
|
if ($deleted) {
|
|
|
return Rs::success();
|
|
|
}
|
|
|
|
|
|
return Rs::error('删除失败');
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 删除项目
|
|
|
*/
|
|
|
public function deleteItem(Request $request)
|
|
|
{
|
|
|
$data = $request->validate([
|
|
|
'id' => 'required|integer',
|
|
|
]);
|
|
|
|
|
|
$deleted = DB::table('exam_item')->where('id', $data['id'])->update(['deleted' => 1]);
|
|
|
|
|
|
if ($deleted) {
|
|
|
return Rs::success();
|
|
|
}
|
|
|
|
|
|
return Rs::error('删除失败');
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取所有大类(用于下拉选择)
|
|
|
*/
|
|
|
public function getAllBigClasses()
|
|
|
{
|
|
|
$list = DB::table('exam_item_class')
|
|
|
->where('deleted', 0)
|
|
|
->where(function($q) {
|
|
|
$q->where('pid', 0)->orWhereNull('pid');
|
|
|
})
|
|
|
->where('status', 1)
|
|
|
->orderBy('id', 'asc')
|
|
|
->get();
|
|
|
|
|
|
return Rs::success($list);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取渠道列表(用于多选)
|
|
|
*/
|
|
|
public function getChannelList()
|
|
|
{
|
|
|
$list = DB::table('channel')
|
|
|
->where('status', 1)
|
|
|
->orderBy('id', 'asc')
|
|
|
->get();
|
|
|
|
|
|
return Rs::success($list);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取分组列表
|
|
|
*/
|
|
|
public function getGroupList(Request $request)
|
|
|
{
|
|
|
$name = $request->input('name', '');
|
|
|
$code = $request->input('code', '');
|
|
|
$page = $request->input('page', 1);
|
|
|
$pageSize = $request->input('page_size', 10);
|
|
|
|
|
|
$query = DB::table('exam_group as eg')
|
|
|
->leftJoin('exam_group_item as egi', 'eg.id', '=', 'egi.group_id')
|
|
|
->select(
|
|
|
'eg.*',
|
|
|
DB::raw('COUNT(DISTINCT egi.item_id) as item_count')
|
|
|
)
|
|
|
->groupBy('eg.id');
|
|
|
|
|
|
if (!empty($name)) {
|
|
|
$query->where('eg.name', 'like', '%' . $name . '%');
|
|
|
}
|
|
|
|
|
|
if (!empty($code)) {
|
|
|
$query->where('eg.code', 'like', '%' . $code . '%');
|
|
|
}
|
|
|
|
|
|
$total = $query->get()->count();
|
|
|
$list = $query->orderBy('eg.id', 'desc')
|
|
|
->skip(($page - 1) * $pageSize)
|
|
|
->take($pageSize)
|
|
|
->get();
|
|
|
|
|
|
return Rs::success([
|
|
|
'list' => $list,
|
|
|
'total' => $total,
|
|
|
'page' => $page,
|
|
|
'page_size' => $pageSize,
|
|
|
'total_pages' => ceil($total / $pageSize)
|
|
|
]);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 保存分组
|
|
|
*/
|
|
|
public function saveGroup(Request $request)
|
|
|
{
|
|
|
$data = $request->validate([
|
|
|
'id' => 'required|integer',
|
|
|
'name' => 'required|string|max:50',
|
|
|
'code' => 'sometimes|string|max:50',
|
|
|
]);
|
|
|
|
|
|
$conditions = ['id' => $data['id']];
|
|
|
$values = [
|
|
|
'name' => $data['name'],
|
|
|
'code' => $data['code'] ?? '',
|
|
|
];
|
|
|
|
|
|
DB::table('exam_group')->updateOrInsert($conditions, $values);
|
|
|
|
|
|
return Rs::success();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 删除分组
|
|
|
*/
|
|
|
public function deleteGroup(Request $request)
|
|
|
{
|
|
|
$data = $request->validate([
|
|
|
'id' => 'required|integer',
|
|
|
]);
|
|
|
|
|
|
$deleted = DB::table('exam_group')->where('id', $data['id'])->delete();
|
|
|
|
|
|
if ($deleted) {
|
|
|
return Rs::success();
|
|
|
}
|
|
|
|
|
|
return Rs::error('删除失败');
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取分组内的项目列表
|
|
|
*/
|
|
|
public function getGroupItemList(Request $request)
|
|
|
{
|
|
|
$data = $request->validate([
|
|
|
'group_id' => 'required|integer',
|
|
|
]);
|
|
|
|
|
|
$list = DB::table('exam_item as ei')
|
|
|
->join('exam_group_item as egi', 'ei.id', '=', 'egi.item_id')
|
|
|
->leftJoin('exam_item_class as sub_class', 'ei.class_id', '=', 'sub_class.id')
|
|
|
->leftJoin('exam_item_class as big_class', 'sub_class.pid', '=', 'big_class.id')
|
|
|
->where('egi.group_id', $data['group_id'])
|
|
|
->where('ei.deleted', 0)
|
|
|
->select(
|
|
|
'ei.*',
|
|
|
'big_class.id as big_class_id',
|
|
|
'big_class.name as big_class_name',
|
|
|
'sub_class.name as sub_class_name'
|
|
|
)
|
|
|
->orderBy('ei.id', 'asc')
|
|
|
->get();
|
|
|
|
|
|
return Rs::success($list);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 添加项目到分组
|
|
|
*/
|
|
|
public function addItemToGroup(Request $request)
|
|
|
{
|
|
|
$data = $request->validate([
|
|
|
'group_id' => 'required|integer',
|
|
|
'item_id' => 'required|integer',
|
|
|
]);
|
|
|
|
|
|
$exists = DB::table('exam_group_item')
|
|
|
->where('group_id', $data['group_id'])
|
|
|
->where('item_id', $data['item_id'])
|
|
|
->exists();
|
|
|
|
|
|
if ($exists) {
|
|
|
return Rs::error('该项目已存在于分组中');
|
|
|
}
|
|
|
|
|
|
DB::table('exam_group_item')->insert([
|
|
|
'group_id' => $data['group_id'],
|
|
|
'item_id' => $data['item_id'],
|
|
|
'created_at' => now(),
|
|
|
'updated_at' => now(),
|
|
|
]);
|
|
|
|
|
|
return Rs::success();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 从分组移除项目
|
|
|
*/
|
|
|
public function removeItemFromGroup(Request $request)
|
|
|
{
|
|
|
$data = $request->validate([
|
|
|
'group_id' => 'required|integer',
|
|
|
'item_id' => 'required|integer',
|
|
|
]);
|
|
|
|
|
|
$deleted = DB::table('exam_group_item')
|
|
|
->where('group_id', $data['group_id'])
|
|
|
->where('item_id', $data['item_id'])
|
|
|
->delete();
|
|
|
|
|
|
if ($deleted) {
|
|
|
return Rs::success();
|
|
|
}
|
|
|
|
|
|
return Rs::error('移除失败');
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取项目的资源配置列表
|
|
|
*/
|
|
|
public function getItemResourceList(Request $request)
|
|
|
{
|
|
|
$data = $request->validate([
|
|
|
'item_id' => 'required|integer',
|
|
|
]);
|
|
|
|
|
|
$list = DB::table('exam_item_resource as eir')
|
|
|
->join('department_resource as dr', 'eir.resource_id', '=', 'dr.id')
|
|
|
->leftJoin('department as d', 'dr.department_id', '=', 'd.id')
|
|
|
->where('eir.item_id', $data['item_id'])
|
|
|
->where('eir.deleted', 0)
|
|
|
->select(
|
|
|
'dr.id',
|
|
|
'dr.name',
|
|
|
'dr.code',
|
|
|
'dr.department_id',
|
|
|
'd.name as department_name',
|
|
|
'dr.status'
|
|
|
)
|
|
|
->orderBy('eir.id', 'asc')
|
|
|
->get();
|
|
|
|
|
|
return Rs::success([
|
|
|
'list' => $list
|
|
|
]);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 添加资源到项目
|
|
|
*/
|
|
|
public function addItemResources(Request $request)
|
|
|
{
|
|
|
$data = $request->validate([
|
|
|
'item_id' => 'required|integer',
|
|
|
'resource_ids' => 'required|array',
|
|
|
'resource_ids.*' => 'integer',
|
|
|
]);
|
|
|
|
|
|
$item_id = $data['item_id'];
|
|
|
$resource_ids = $data['resource_ids'];
|
|
|
|
|
|
$insertData = [];
|
|
|
foreach ($resource_ids as $resource_id) {
|
|
|
$exists = DB::table('exam_item_resource')
|
|
|
->where('item_id', $item_id)
|
|
|
->where('resource_id', $resource_id)
|
|
|
->where('deleted', 0)
|
|
|
->exists();
|
|
|
|
|
|
if (!$exists) {
|
|
|
$insertData[] = [
|
|
|
'item_id' => $item_id,
|
|
|
'resource_id' => $resource_id,
|
|
|
'deleted' => 0,
|
|
|
'created_at' => now(),
|
|
|
'updated_at' => now()
|
|
|
];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (!empty($insertData)) {
|
|
|
DB::table('exam_item_resource')->insert($insertData);
|
|
|
}
|
|
|
|
|
|
return Rs::success();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 从项目移除资源
|
|
|
*/
|
|
|
public function removeItemResource(Request $request)
|
|
|
{
|
|
|
$data = $request->validate([
|
|
|
'item_id' => 'required|integer',
|
|
|
'resource_id' => 'required|integer',
|
|
|
]);
|
|
|
|
|
|
$deleted = DB::table('exam_item_resource')
|
|
|
->where('item_id', $data['item_id'])
|
|
|
->where('resource_id', $data['resource_id'])
|
|
|
->update(['deleted' => 1]);
|
|
|
|
|
|
if ($deleted) {
|
|
|
return Rs::success();
|
|
|
}
|
|
|
|
|
|
return Rs::error('移除失败');
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取检查组列表
|
|
|
*/
|
|
|
public function getExamGroupList(Request $request)
|
|
|
{
|
|
|
$page = $request->input('page', 1);
|
|
|
$pageSize = $request->input('page_size', 10);
|
|
|
$name = $request->input('name', '');
|
|
|
|
|
|
$query = DB::table('exam_group');
|
|
|
|
|
|
if (!empty($name)) {
|
|
|
$query->where('name', 'like', '%' . $name . '%');
|
|
|
}
|
|
|
|
|
|
$total = $query->count();
|
|
|
$list = $query->orderBy('id', 'asc')
|
|
|
->skip(($page - 1) * $pageSize)
|
|
|
->take($pageSize)
|
|
|
->get();
|
|
|
|
|
|
return Rs::success([
|
|
|
'list' => $list,
|
|
|
'total' => $total,
|
|
|
'page' => $page,
|
|
|
'page_size' => $pageSize,
|
|
|
'total_pages' => ceil($total / $pageSize)
|
|
|
]);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取项目关联的部位列表
|
|
|
*/
|
|
|
public function getItemBodyParts(Request $request)
|
|
|
{
|
|
|
$data = $request->validate([
|
|
|
'item_id' => 'required|integer',
|
|
|
]);
|
|
|
|
|
|
$list = DB::table('exam_item_body_part as eibp')
|
|
|
->join('exam_body_part as ebp', 'eibp.body_part_id', '=', 'ebp.id')
|
|
|
->where('eibp.item_id', $data['item_id'])
|
|
|
->where('ebp.deleted', 0)
|
|
|
->select('ebp.id', 'ebp.code', 'ebp.name', 'ebp.parent_id')
|
|
|
->orderBy('ebp.sort_order', 'asc')
|
|
|
->get();
|
|
|
|
|
|
return Rs::success($list);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 保存项目关联的部位(全量覆盖)
|
|
|
*/
|
|
|
public function saveItemBodyParts(Request $request)
|
|
|
{
|
|
|
$data = $request->validate([
|
|
|
'item_id' => 'required|integer',
|
|
|
'body_part_ids' => 'required|array',
|
|
|
'body_part_ids.*' => 'integer',
|
|
|
]);
|
|
|
|
|
|
$itemId = $data['item_id'];
|
|
|
$bodyPartIds = $data['body_part_ids'];
|
|
|
|
|
|
// 先删除旧关联
|
|
|
DB::table('exam_item_body_part')->where('item_id', $itemId)->delete();
|
|
|
|
|
|
// 插入新关联
|
|
|
if (!empty($bodyPartIds)) {
|
|
|
$insertData = [];
|
|
|
foreach ($bodyPartIds as $partId) {
|
|
|
$insertData[] = [
|
|
|
'item_id' => $itemId,
|
|
|
'body_part_id' => $partId,
|
|
|
'created_at' => now(),
|
|
|
];
|
|
|
}
|
|
|
DB::table('exam_item_body_part')->insert($insertData);
|
|
|
}
|
|
|
|
|
|
return Rs::success();
|
|
|
}
|
|
|
}
|