You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

172 lines
7.2 KiB
PHP

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
namespace App\Services\Admin\YeWu;
use Illuminate\Support\Facades\DB;
class DeptCheckItemService
{
//获取检查项目类别列表
public function GetClassList($searchInfo){
$bigClass=DB::table('s_check_item_class')->where(['pid'=>0,'is_del'=>0])->get();
$smallClass=[];
if(!empty($searchInfo['bigClass'])) {
$smallClass = DB::table('s_check_item_class')->where(['pid'=>$searchInfo['bigClass'],'is_del'=>0])->get();
}
return \Yz::Return(true, '查询成功', ['bigClass'=>$bigClass,'smallClass'=>$smallClass]);
}
//获取当前科室权限范围内的检查项目列表
public function GetItemList($searchInfo,$page,$pageSize,$userid){
$user = DB::table('users')->where('id', $userid)->first();
if (!$user || !$user->department_id) {
return \Yz::Return(true, '查询成功', ['list' => [], 'count' => 0]);
}
//获取当前科室及子科室的 department_number
$deptNumbers = DB::table('s_department')
->where('is_del', 0)
->where(function($q) use ($user) {
$q->where('id', $user->department_id)
->orWhere('pid', $user->department_id);
})
->pluck('department_number')
->toArray();
$small_id=[];
$list=DB::table('s_check_item')->where('s_check_item.is_del', 0)->whereNotNull('sheetType')->where('sheetType', '!=', '');
//科室过滤hisExecDepts 包含当前科室及子科室编号
$list->whereNotNull('hisExecDepts')->where('hisExecDepts', '!=', '');
if (!empty($deptNumbers)) {
$list->where(function($q) use ($deptNumbers) {
foreach ($deptNumbers as $num) {
$q->orWhere('hisExecDepts', 'like', '%"' . $num . '"%');
}
});
} else {
return \Yz::Return(true, '查询成功', ['list' => [], 'count' => 0]);
}
if(empty($searchInfo['bigClass'])!==true and empty($searchInfo['smallClass'])===true){
$small_id= DB::table('s_check_item_class')->where(['pid'=>$searchInfo['bigClass'],'is_del'=>0])->pluck('id')->toArray();
$list= $list->whereIn('item_class_id',$small_id);
}
if(!empty($searchInfo['smallClass'])){
$small_id[0]=$searchInfo['smallClass'];
$list= $list->whereIn('item_class_id',$small_id);
}
if(!empty($searchInfo['name'])){
$list->where(function($query) use ($searchInfo) {
$query->where('item_name', 'like', '%'.$searchInfo['name'].'%')
->orWhere('item_code', 'like', '%'.$searchInfo['name'].'%');
});
}
if (isset($searchInfo['deviceBind']) && $searchInfo['deviceBind'] !== '') {
if ($searchInfo['deviceBind'] == 1) {
$list->whereIn('s_check_item.id', function($q) {
$q->select('item_id')->from('s_check_item_device');
});
} elseif ($searchInfo['deviceBind'] == 0) {
$list->whereNotIn('s_check_item.id', function($q) {
$q->select('item_id')->from('s_check_item_device');
});
}
}
//执行科室筛选
if (isset($searchInfo['hisExecDepts']) && $searchInfo['hisExecDepts'] !== '') {
if ($searchInfo['hisExecDepts'] == 1) {
$list->whereNotNull('hisExecDepts')->where('hisExecDepts', '!=', '');
} elseif ($searchInfo['hisExecDepts'] == 0) {
$list->where(function($q) {
$q->whereNull('hisExecDepts')->orWhere('hisExecDepts', '');
});
}
}
$count = $list->count();
$list= $list
->leftJoin('s_appointment_type', 's_check_item.reservation_method', '=', 's_appointment_type.id')
->select('s_check_item.*','s_appointment_type.name as reservation_method_name');
if (!empty($searchInfo['orderField']) && !empty($searchInfo['orderDirection'])) {
$direction = $searchInfo['orderDirection'] == 'ascending' ? 'asc' : 'desc';
$list->orderBy($searchInfo['orderField'], $direction);
}
$list = $list->skip(($page-1)*$pageSize)->take($pageSize)->get();
//查询出所有的预约渠道
$qudaoList=DB::table('s_appointment_type')->get();
//获取当前科室下的设备 IDs
$deptDeviceIds = DB::table('s_department_resources_device')
->where('department_id', $user->department_id)
->pluck('device_id')
->toArray();
foreach ($list as $k=>$v){
$qudao_names=[];
$qudao_ids = explode(",", $v->reservation_method);
foreach ($qudaoList as $k1=>$v1){
foreach ($qudao_ids as $k2=>$v2){
if($v1->id==$v2){
$qudao_names[]=$v1->name;
}
}
}
$list[$k]->reservation_method= array_map('intval', $qudao_ids);
$list[$k]->reservation_method_name=$qudao_names;
$list[$k]->devicesInfo=DB::table('s_check_item_device')
->join('s_devices', 's_check_item_device.device_id', '=', 's_devices.id')
->select('s_devices.*')
->where('item_id',$v->id)
->whereIn('s_check_item_device.device_id', $deptDeviceIds)
->get();
}
return \Yz::Return(true, '查询成功', ['list'=>$list,'count'=>$count]);
}
//绑定设备(只影响当前科室下的排班关联)
public function BindDevice($item_id,$device_ids,$userid){
$user = DB::table('users')->where('id', $userid)->first();
if (!$user || !$user->department_id) {
return \Yz::Return(false, '用户科室信息不存在');
}
//获取当前科室下的设备 IDs
$deptDeviceIds = DB::table('s_department_resources_device')
->where('department_id', $user->department_id)
->pluck('device_id')
->toArray();
$data=[];
foreach ($device_ids as $k=>$v){
$data[$k]['item_id']=$item_id;
$data[$k]['device_id']=$v;
}
DB::beginTransaction();
//只删除当前科室下的关联
DB::table('s_check_item_device')
->where('item_id',$item_id)
->whereIn('device_id', $deptDeviceIds)
->delete();
$i= DB::table('s_check_item_device')->insert($data);
if($i>0){
DB::commit();
return \Yz::Return(true, '绑定成功', []);
}else{
DB::rollBack();
return \Yz::Return(false, '绑定失败');
}
}
public function Save($Info){
if(!empty($Info['id'])){
$Info['reservation_method']=implode(',', $Info['reservation_method']);
$res=DB::table('s_check_item')->where('id',$Info['id'])->update($Info);
if($res){
return \Yz::Return(true, '修改成功');
}else{
return \Yz::Return(false, '修改失败');
}
}else{
return \Yz::Return(false, 'id不能为空');
}
}
}