get('userid');//中间件产生的参数 $group = $request->get('role');//中间件产生的参数 $searchInfo = request('searchInfo'); $page = request('page'); $pageSize = request('pageSize'); $department_id = 0; $list = DB::table('s_source_roster') ->leftJoin('s_department_resources', 's_source_roster.resources_id', '=', 's_department_resources.id') // ->leftJoin('s_devices', 's_source_roster.device_id', '=', 's_devices.id') ->leftJoin('s_period', 's_source_roster.period_id', '=', 's_period.id') ->select('s_source_roster.*', 's_department_resources.department_resources_name', 's_period.period_name') ->where(['s_source_roster.is_del' => 0]); if ($group == 1) {//如果是管理员 if (!empty($searchInfo['department_id'])) { $list = $list->where('s_source_roster.department_id', $searchInfo['department_id']); } } else { $userInfo = DB::table('users')->where(['id' => $userid])->get(); $department_id = $userInfo[0]->department_id; $list = $list->where(['s_source_roster.department_id' => $department_id]); } if (!empty($searchInfo['resources_id'])) { $list = $list->where('s_source_roster.resources_id', $searchInfo['resources_id']); } if (!empty($searchInfo['device_id'])) { //$list = $list->where('s_source_roster.device_id', 'like','%,'.$searchInfo['device_id'].',%' ); $list = $list->whereRaw("FIND_IN_SET({$searchInfo['device_id']}, s_source_roster.device_id)"); } if (!empty($searchInfo['xingqi'])) { $list = $list->where('s_source_roster.weekname', $searchInfo['xingqi']); } if (isset($searchInfo['status'])) { $list = $list->where('s_source_roster.status', $searchInfo['status']); } $count = $list; $count = $count->count(); //按诊室排序 $list = $list->orderBy('s_source_roster.resources_id'); //按星期排序 $list=$list->orderByRaw(DB::raw( "FIELD(`weekname`, '星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日') ASC" )); $list = $list->orderBy('s_source_roster.begin_time')->get(); $ids = []; foreach ($list as $key => $value) { $list[$key]->countsInfo = []; $ids[] = $value->id; } //匹配渠道数量 $countsInfo = DB::table('s_source_roster_count') ->leftJoin('s_appointment_type', 's_source_roster_count.appointment_type_id', '=', 's_appointment_type.id') ->select('s_source_roster_count.*', 's_appointment_type.name') ->whereIn('roster_id', $ids)->get(); if (count($countsInfo) > 0) { foreach ($list as $key => $value) { foreach ($countsInfo as $k => $v) { if ($value->id == $v->roster_id) { $list[$key]->countsInfo[] = $v; } } } } //匹配设备(服务组) $devices = DB::table('s_devices')->get(); foreach ($list as $key => $value) { $list[$key]->devices = []; $array_device_id = explode(",", $value->device_id); foreach ($devices as $k => $v) { if (in_array($v->id, $array_device_id)) { $list[$key]->devices[] = $v; } } } return \Yz::Return(true, '操作成功', ['list' => $list, 'count' => $count]); } public function Save(Request $request) { $userid = $request->get('userid');//中间件产生的参数 $bitian = array('xingqi', 'max_total', 'qudao_total', 'period_id', 'begin_time', 'end_time', 'end_reservation_time', 'resources_id', 'devices', 'patientType'); $bitian_zh = array('星期', '当日总量', '渠道数量', '时间段', '开始时间', '结束时间', '停止预约时间', '资源', '设备', '患者类型'); $planInfo = request('planInfo'); foreach ($bitian as $key => $field) { //必填项不能为空 if (array_key_exists($field, $planInfo) && $planInfo[$field] !== '' && $planInfo[$field] !== null && $planInfo[$field] !== [] && $planInfo[$field] !== 0) { } else { return \Yz::echoError1($bitian_zh[$key] . ' 不能为空'); } } $userInfo = DB::table('users')->where(['id' => $userid])->first(); if (!isset($userInfo->department_id)) return \Yz::echoError1('该用户未绑定科室'); $department_id = $userInfo->department_id; DB::beginTransaction(); foreach ($planInfo['xingqi'] as $key => $value) { $data = [ 'department_id' => $department_id, 'weekname' => $value, 'resources_id' => $planInfo['resources_id'], 'device_id' => isset($planInfo['devices']) ? implode(',', $planInfo['devices']) : '', 'period_id' => $planInfo['period_id'], //时间段id 'patient_type' => isset($planInfo['patientType']) ? implode(',', $planInfo['patientType']) : '',//病人类型 'begin_time' => $planInfo['begin_time'], 'end_time' => $planInfo['end_time'], 'end_reservation_time' => $planInfo['end_reservation_time'], 'time_unit' => $planInfo['time_unit'], 'status' => $planInfo['status'], 'adduser' => $userid, ]; if($planInfo['end_reservation_time']>$planInfo['end_time']) return \Yz::echoError1('停止预约时间不能超过结束时间'); //判断记录是否存在 $is_ex = DB::table('s_source_roster')->where([ 'department_id' => $department_id, 'weekname' => $value, 'resources_id' => $planInfo['resources_id'], // 'period_id' => $planInfo['period_id'], //时间段id 'is_del' => 0, ]); if ($planInfo['id'] > 0) { $is_ex = $is_ex->where('id', '<>', $planInfo['id']); } $start = $planInfo['begin_time']; $end = $planInfo['end_time']; $is_ex = $is_ex->where(function ($query) use ($start, $end) { // 情况1:开始时间在查询区间内 $query->whereBetween('begin_time', [$start, $end]) ->orWhereBetween('end_time', [$start, $end]); // 情况2:查询区间的开始时间在数据库记录的开始和结束时间之间 // 注意:对于时间类型的比较,直接使用字符串比较可能不够精确,特别是跨天情况,以下逻辑需根据实际情况调整 $query->orWhere(function ($query) use ($start, $end) { $query->where('begin_time', '<=', $start) ->where('end_time', '>=', $end); }); })->get(); // dd($is_ex); //遍历判断设备是否有重叠,有则返回错误 foreach ($is_ex as $k => $v) { $db_device_ids = explode(',', $v->device_id); $overlap = array_intersect($planInfo['devices'], $db_device_ids); if (count($overlap) > 0) { DB::rollBack(); return \Yz::echoError1($value . '时段服务组关联重复,计划id为:' . $v->id); } } if ($planInfo['id'] == 0) {//新增 $roster_id = DB::table('s_source_roster')->insertGetId($data); if ($roster_id) { foreach ($planInfo['qudao_total'] as $k => $v) { $i_c = DB::table('s_source_roster_count')->insert([ 'roster_id' => $roster_id, 'appointment_type_id' => $v['id'], 'max_total' => $planInfo['max_total'], 'count' => $v['count'], ]); if (!$i_c) { DB::rollBack(); return \Yz::echoError1('保存失败'); } } } else { DB::rollBack(); return \Yz::echoError1('保存失败'); } } else {//修改 $data['id'] = $planInfo['id']; $i = DB::table('s_source_roster')->where(['id' => $planInfo['id'], 'is_del' => 0])->update($data); foreach ($planInfo['qudao_total'] as $k => $v) { $i_c = DB::table('s_source_roster_count')->where(['roster_id' => $planInfo['id'], 'appointment_type_id' => $v['appointment_type_id']])->update([ 'max_total' => $planInfo['max_total'], 'count' => $v['count'], ]); } if ($i or $i_c) { } else { DB::rollBack(); return \Yz::echoError1('保存失败'); } } } DB::commit(); return \Yz::Return(true, '保存成功', []); } //获取模板信息详情 public function GetDetailInfo() { $id = request('id'); $info = DB::table('s_source_roster')->where(['id' => $id])->first(); if (!!$info) { $info->devices = array_map('intval', explode(',', $info->device_id)); $info->patientType = explode(',', $info->patient_type); $info->qudao_total = DB::table('s_source_roster_count') ->select('s_source_roster_count.*', 's_appointment_type.name') ->leftJoin('s_appointment_type', 's_source_roster_count.appointment_type_id', '=', 's_appointment_type.id') ->where(['roster_id' => $id])->get(); $ratio = DB::table('s_appointment_type_ratio') ->where(['department_id' => $info->department_id])->get(); foreach ($info->qudao_total as $key => $value) { foreach ($ratio as $k => $v) { if ($value->appointment_type_id == $v->appointment_type_id) { $info->qudao_total[$key]->ratio = $v->ratio; } } } return \Yz::Return(true, '操作成功', $info); } else { return \Yz::echoError1('数据不存在'); } } //获取自己的预约类型比例 public function GetAppointmentRatio(Request $request) { $userid = $request->get('userid');//中间件产生的参数 $userInfo = DB::table('users')->where(['id' => $userid])->first(); if (!!$userInfo) { $appointment_type = DB::table('s_appointment_type')->where(['status' => 1, 'is_del' => 0])->get(); $department_id = $userInfo->department_id; $ratio = DB::table('s_appointment_type_ratio') ->where(['department_id' => $department_id])->get(); foreach ($appointment_type as $key => $value) { $appointment_type[$key]->ratio = 0; foreach ($ratio as $k => $v) { if ($value->id == $v->appointment_type_id) { $appointment_type[$key]->ratio = $v->ratio; } } } return \Yz::Return(true, '操作成功', $appointment_type); } } //保存预约类型比例 public function SaveAppointmentRatio(Request $request) { $userid = $request->get('userid');//中间件产生的参数 $userInfo = DB::table('users')->where(['id' => $userid])->first(); if (!!$userInfo) { $department_id = $userInfo->department_id; $ratioInfo = request('ratioInfo'); $u = false; DB::table('s_appointment_type_ratio')->where(['department_id' => $department_id])->delete(); foreach ($ratioInfo as $key => $value) { $u = DB::table('s_appointment_type_ratio')->insert([ 'department_id' => $department_id, 'appointment_type_id' => $value['id'], 'ratio' => $value['ratio'], ]); } if ($u) { return \Yz::Return(true, '操作成功', []); } else { return \Yz::echoError1('保存失败,无数据更新'); } } } //删除计划模板 public function Del(Request $request) { $userid = $request->get('userid');//中间件产生的参数 $ids = request('ids'); $userInfo = DB::table('users')->where(['id' => $userid])->first(); if (!!$userInfo) { $appointment_type = DB::table('s_appointment_type')->where(['status' => 1, 'is_del' => 0])->get(); $department_id = $userInfo->department_id; $d = DB::table('s_source_roster') ->where(['department_id' => $department_id])->whereIn('id', $ids)->update([ 'is_del' => 1, ]); if ($d) { return \Yz::Return(true, '操作成功', []); } else { return \Yz::echoError1('操作失败'); } } } }