diff --git a/Laravel/app/Http/Controllers/API/Admin/YeWu/CheckItemController.php b/Laravel/app/Http/Controllers/API/Admin/YeWu/CheckItemController.php index c74ce3a..78f8b71 100644 --- a/Laravel/app/Http/Controllers/API/Admin/YeWu/CheckItemController.php +++ b/Laravel/app/Http/Controllers/API/Admin/YeWu/CheckItemController.php @@ -151,4 +151,21 @@ WHERE return \Yz::Return(true, '操作成功', $q); } + + public function GetRules() + { + $item_id = request('item_id'); + if (!$item_id) return \Yz::echoError1('item_id不能为空'); + $s = new CheckItemService; + return $s->GetRules($item_id); + } + + public function SaveRules() + { + $item_id = request('item_id'); + $rules = request('rules'); + if (!$item_id) return \Yz::echoError1('item_id不能为空'); + $s = new CheckItemService; + return $s->SaveRules($item_id, $rules); + } } diff --git a/Laravel/app/Services/Admin/YeWu/CheckItemService.php b/Laravel/app/Services/Admin/YeWu/CheckItemService.php index bd8771e..9fc78d7 100644 --- a/Laravel/app/Services/Admin/YeWu/CheckItemService.php +++ b/Laravel/app/Services/Admin/YeWu/CheckItemService.php @@ -93,4 +93,52 @@ class CheckItemService return \Yz::Return(false, 'id不能为空'); } } + + public function GetRules($item_id) + { + $rules = DB::table('s_check_item_rule') + ->where(['target_type' => 'ITEM', 'target_id' => $item_id, 'deleted' => 0, 'status' => 1]) + ->get(); + foreach ($rules as $rule) { + $rule->rule_value = json_decode($rule->rule_value, true); + } + return \Yz::Return(true, '查询成功', $rules); + } + + public function SaveRules($item_id, $rules) + { + DB::beginTransaction(); + try { + DB::table('s_check_item_rule') + ->where(['target_type' => 'ITEM', 'target_id' => $item_id]) + ->delete(); + + if (!empty($rules)) { + $insertData = []; + foreach ($rules as $rule) { + $rule_value = $rule['rule_value']; + if (is_array($rule_value)) { + $rule_value = json_encode($rule_value, JSON_UNESCAPED_UNICODE); + } + $insertData[] = [ + 'target_type' => 'ITEM', + 'target_id' => $item_id, + 'rule_type' => $rule['rule_type'], + 'rule_value' => $rule_value, + 'status' => 1, + 'deleted' => 0, + 'created_at' => date('Y-m-d H:i:s'), + 'updated_at' => date('Y-m-d H:i:s'), + ]; + } + DB::table('s_check_item_rule')->insert($insertData); + } + + DB::commit(); + return \Yz::Return(true, '保存成功'); + } catch (\Exception $e) { + DB::rollBack(); + return \Yz::Return(false, '保存失败:' . $e->getMessage()); + } + } } diff --git a/Laravel/app/Services/Admin/YeWu/PlanListService.php b/Laravel/app/Services/Admin/YeWu/PlanListService.php index 730cb0c..c598003 100644 --- a/Laravel/app/Services/Admin/YeWu/PlanListService.php +++ b/Laravel/app/Services/Admin/YeWu/PlanListService.php @@ -21,6 +21,7 @@ class PlanListService $allDevice = [];//所有医嘱检查项目绑定的设备id $commPatientType = [];//所有医嘱共同的病人类型 $zhanweiCount=0;//勾选的检查项目共计占多少名额 + $allItemRules = [];//所有检查项目的TIME_RESTRICTION规则 foreach ($entrustids as $key => $entrustid) { // $info = DB::table('s_list')->where(['reg_num' => $regnum, 'entrust_id' => $entrustid, 'episodeid' => $episodeid, 'is_nullify' => 0])->first(); $info = DB::table('s_list')->where(['entrust_id' => $entrustid, 'is_nullify' => 0])->first(); @@ -38,7 +39,16 @@ class PlanListService //只判断主渠道,如果主渠道支持,则子渠道默认也支持,即使项目没绑定子渠道 if (!in_array($appointment_type, $qudaos)) return \Yz::echoError1('此检查项目不支持在当前渠道预约'); - + $itemRules = DB::table('s_check_item_rule') + ->where(['target_type' => 'ITEM', 'target_id' => $itemInfo->id, 'rule_type' => 'TIME_RESTRICTION', 'status' => 1, 'deleted' => 0]) + ->get(); + if ($itemRules->isNotEmpty()) { + $itemRulesArray = []; + foreach ($itemRules as $r) { + $itemRulesArray[] = json_decode($r->rule_value, true); + } + $allItemRules[$itemInfo->id] = $itemRulesArray; + } //获取检查项目绑定的服务组(设备),判断状态正常的 $devices = DB::table('s_check_item_device') @@ -155,6 +165,15 @@ WHERE if (!empty(array_diff($commPatientType, $planPatientType))) { continue; } + + //检查项目时段规则过滤 + if (!empty($allItemRules)) { + $rulePass = $this->checkPlanAgainstRules($p, $allItemRules); + if (!$rulePass) { + continue; + } + } + //过期的排在后面 $time = $p->date . ' ' . $p->end_time; if ($time > $nowtime) { @@ -319,6 +338,37 @@ WHERE } } + //校验检查项目时段规则 + $itemRules = DB::table('s_check_item_rule') + ->where(['target_type' => 'ITEM', 'target_id' => $item->id, 'rule_type' => 'TIME_RESTRICTION', 'status' => 1, 'deleted' => 0]) + ->get(); + if ($itemRules->isNotEmpty()) { + $planWeekName = $planInfo->weekname; + $planBeginTime = $planInfo->begin_time; + $rulePass = false; + foreach ($itemRules as $rule) { + $rv = json_decode($rule->rule_value, true); + $days = $rv['days'] ?? []; + $startTime = $rv['start_time'] ?? null; + $endTime = $rv['end_time'] ?? null; + + if (!in_array($planWeekName, $days)) continue; + + if ($startTime && $endTime && $planBeginTime) { + if ($planBeginTime >= $startTime && $planBeginTime < $endTime) { + $rulePass = true; + break; + } + } else { + $rulePass = true; + break; + } + } + if (!$rulePass) { + return \Yz::echoError1($item->item_name . ' 当前时段不在可预约时间范围内'); + } + } + } DB::beginTransaction(); @@ -867,6 +917,36 @@ public function CancelYuYue($MainListId, $reg_num,$do_user=null) } } + //判断号源是否满足所有检查项目的时段规则 + private function checkPlanAgainstRules($plan, $allItemRules) + { + $planWeekName = $plan->weekname; + $planBeginTime = $plan->begin_time; + + foreach ($allItemRules as $itemId => $rules) { + $itemPass = false; + foreach ($rules as $rule) { + $days = $rule['days'] ?? []; + $startTime = $rule['start_time'] ?? null; + $endTime = $rule['end_time'] ?? null; + + if (!in_array($planWeekName, $days)) continue; + + if ($startTime && $endTime && $planBeginTime) { + if ($planBeginTime >= $startTime && $planBeginTime < $endTime) { + $itemPass = true; + break; + } + } else { + $itemPass = true; + break; + } + } + if (!$itemPass) return false; + } + return true; + } + //判断是否在互斥组内 function isMutuallyExclusive($ids, $huchi) { foreach ($huchi as $pair) { diff --git a/Laravel/routes/api.php b/Laravel/routes/api.php index 24a34c6..f6d5fd4 100644 --- a/Laravel/routes/api.php +++ b/Laravel/routes/api.php @@ -97,6 +97,8 @@ Route::group(['middleware'=>['checktoken','log'],'prefix'=>'v1'],function () { Route::post('admin/DelHuChi','App\Http\Controllers\API\Admin\YeWu\CheckItemController@DelHuChi');//删除互斥 Route::post('admin/CheckEntrstItemGroup','App\Http\Controllers\API\Admin\YeWu\WorkMainController@CheckEntrstItemGroup');//批量检查医嘱检查项目是否可以同时预约 Route::post('admin/GetHuChiList','App\Http\Controllers\API\Admin\YeWu\CheckItemController@GetHuChiList');//获取某个项目已经设置的互斥列表 + Route::post('admin/GetCheckItemRules','App\Http\Controllers\API\Admin\YeWu\CheckItemController@GetRules');//获取检查项目规则 + Route::post('admin/SaveCheckItemRules','App\Http\Controllers\API\Admin\YeWu\CheckItemController@SaveRules');//保存检查项目规则 Route::post('admin/InpatientWardGetList','App\Http\Controllers\API\Admin\YeWu\InpatientWardController@GetList');//获取病区列表 Route::post('admin/InpatientWardSave','App\Http\Controllers\API\Admin\YeWu\InpatientWardController@Save');//保存病区 Route::post('admin/InpatientWardDel','App\Http\Controllers\API\Admin\YeWu\InpatientWardController@Del');//删除病区 diff --git a/YiJi-admin/src/api/api.js b/YiJi-admin/src/api/api.js index bb6107e..a959c5c 100644 --- a/YiJi-admin/src/api/api.js +++ b/YiJi-admin/src/api/api.js @@ -277,6 +277,12 @@ export const DelHuChi = (data = {}) => { export const GetHuChiList = (data = {}) => { return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/GetHuChiList', data: data }) } +export const GetCheckItemRules = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/GetCheckItemRules', data: data }) +} +export const SaveCheckItemRules = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/SaveCheckItemRules', data: data }) +} //重置密码 export const resetPwd = (data = {}) => { return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/resetPwd', data: data }) diff --git a/YiJi-admin/src/components/Yewu/YuYue202506.vue b/YiJi-admin/src/components/Yewu/YuYue202506.vue index 515591f..560ecbc 100644 --- a/YiJi-admin/src/components/Yewu/YuYue202506.vue +++ b/YiJi-admin/src/components/Yewu/YuYue202506.vue @@ -13,6 +13,7 @@ 获取患者信息失败