ROC缓存

main
鹿和sa0ChunLuyu 4 days ago
parent 826ae75df3
commit 13ee1370ac

@ -124,8 +124,8 @@ public static function GetApplyDetail($visitSqNo, $requestNo, $visitTypeCode, $t
$visitTypeCode = $patientHisTypeMap[$visitTypeCode] ?? '09';
}
// ROC 查询用 visitTypeCode 归一:门诊/急诊/体检 -> 01住院 -> 03
$rocVisitTypeCode = in_array($visitTypeCode, ['01', '02', '04']) ? '01' : '03';
// ROC 查询用 visitTypeCode 归一:门诊/急诊 -> 01住院 -> 03,体检 -> 04其他 -> 03
$rocVisitTypeCode = in_array($visitTypeCode, ['01', '02']) ? '01' : (in_array($visitTypeCode, ['03', '04']) ? $visitTypeCode : '03');
// 2. 查缓存表
$cached = DB::table('s_apply_detail_cache')
@ -209,6 +209,64 @@ public static function RequestLog($url, $post_data, $mark, $code = 0)
self::$request->save();
}
/**
* 根据 termCode 更新缓存中对应检查项目的执行科室
* 静默执行,异常不影响调用方
*/
public static function UpdateApplyDetailCache($visitSqNo, $requestNo, $visitTypeCode, $type, $termCode, $execDeptCode, $execDeptName)
{
try {
// 1. 归一化 visitTypeCode与 GetApplyDetail 一致)
if ($type === '本地') {
$patientHisTypeMap = [0 => '03', 1 => '01', 2 => '02', 3 => '04'];
$visitTypeCode = $patientHisTypeMap[$visitTypeCode] ?? '09';
}
$rocVisitTypeCode = in_array($visitTypeCode, ['01', '02']) ? '01' : (in_array($visitTypeCode, ['03', '04']) ? $visitTypeCode : '03');
// 2. 查缓存记录
$cached = DB::table('s_apply_detail_cache')
->where('visit_sq_no', $visitSqNo)
->where('request_no', $requestNo)
->where('visit_type_code', $rocVisitTypeCode)
->first();
if (!$cached) {
return;
}
// 3. 解码 raw_data
$data = json_decode($cached->raw_data, true);
if (empty($data)) {
return;
}
// 4. 遍历所有 data[] 的 itemList按 termCode 匹配并更新
$updated = false;
foreach ($data as &$applyDetail) {
if (!empty($applyDetail['itemList']) && is_array($applyDetail['itemList'])) {
foreach ($applyDetail['itemList'] as &$item) {
if (($item['termCode'] ?? '') == $termCode) {
$item['execDeptCode'] = $execDeptCode;
$item['execDeptName'] = $execDeptName;
$updated = true;
}
}
unset($item);
}
}
unset($applyDetail);
// 5. 写回缓存
if ($updated) {
DB::table('s_apply_detail_cache')
->where('id', $cached->id)
->update(['raw_data' => json_encode($data, JSON_UNESCAPED_UNICODE)]);
}
} catch (\Exception $e) {
// 静默兜底,不影响调用方
}
}
public static function CheckTableName()
{
$table_name = 'zz_peis_log_' . date('ym');

@ -46,22 +46,8 @@ public function SaveApply($orderNo)
}
if ($entrust) {
//查询his获取检查申请单
$patientHisTypeMap = [
0 => '03', // I - 住院
1 => '01', // O - 门诊
2 => '02', // E - 急诊
3 => '04', // H - 体检
];
$sendHisData = [
'visitSqNo' => $entrust->episodeid,
'requestNo' => $entrust->app_num,
'visitTypeCode' => $patientHisTypeMap[$entrust->patient_type],
// 'orderStatus'=>1
'feeFlag' => $entrust->is_pay == 0 ? 0 : 1, // 住院=0其他=1
];
$hisInfo=[];
$His = new HisController();
$res = $His::Get("查询检查申请单", $sendHisData);
$res = HisController::GetApplyDetail($entrust->episodeid, $entrust->app_num, $entrust->patient_type, '本地');
if ($res['code'] == 200) {
$res_data = $res['data'];
foreach ($res_data as $data_k => $data_v) {

@ -103,8 +103,6 @@ public function GetEntrustInfo(){
$His = new HisController();
foreach ($entrust_list as $entrust) {
$entrust->reservation_sources_name=null;
$source = null;
@ -161,29 +159,15 @@ public function GetEntrustInfo(){
$entrust->info['scheduleName'] = (string)$source->department_resources_name;
}
$patientHisTypeMap = [
0 => '03', // I - 住院
1 => '01', // O - 门诊
2 => '02', // E - 急诊
3 => '04', // H - 体检
];
$sendHisData = [
'visitSqNo' => $entrust->episodeid,
'requestNo' => $entrust->app_num,
'visitTypeCode' => $patientHisTypeMap[$entrust->patient_type],
'feeFlag' => $entrust->is_pay == 0 ? 0 : 1, // 住院=0其他=1
];
$entrust->requestTypeCode='';
$entrust->requestTypeName='';
$entrust->orderDeptCode='';
$res = $His::Get("查询检查申请单", $sendHisData);
$res = HisController::GetApplyDetail($entrust->episodeid, $entrust->app_num, $entrust->patient_type, '本地');
if ($res['code'] == 200) {
$res_data = $res['data'];
foreach ($res_data as $data_k => $data_v) {
$hisInfo=$data_v;
$entrust->requestTypeCode=$hisInfo['requestTypeCode'];
$entrust->requestTypeName=$hisInfo['requestTypeName'];
$entrust->orderDeptCode=$hisInfo['orderDeptCode'];
foreach ($res['data'] as $data_v) {
$entrust->requestTypeCode=$data_v['requestTypeCode'];
$entrust->requestTypeName=$data_v['requestTypeName'];
$entrust->orderDeptCode=$data_v['orderDeptCode'];
}
}
}

@ -39,18 +39,7 @@ public function CheckAppointment()
}
foreach ($requestNoList as $requestNo) {
//1.查询his获取申请单全部检查项目
$data = [
'visitSqNo' => $visitSqNo,
'requestNo' => $requestNo,
'visitTypeCode' => $visitTypeCode,
'feeFlag' => 0,
];
$debug_roc_url = 'http://192.168.80.39:7801/roc/order-service/api/v1/apply/pacs/apply/create/query';
$debug_roc_params = $data;
$His = new HisController();
$res = $His::Get("查询检查申请单", $data);
$res = HisController::GetApplyDetail($visitSqNo, $requestNo, $visitTypeCode, 'HIS');
$debug_hisResponse = $res;
if ($res['code'] == 200) {
$res_data = $res['data'];
@ -223,8 +212,6 @@ public function CheckAppointment()
if ($dev === 1) {
$data['debug_termCodes'] = $termCodes;
$data['debug_hisResponse'] = $debug_hisResponse ?? [];
$data['debug_roc_url'] = $debug_roc_url ?? '';
$data['debug_roc_params'] = $debug_roc_params ?? [];
}
return \Yz::JsonReturn(true, '查询成功', $data);
} catch (\Exception $e) {
@ -269,20 +256,16 @@ public function CheckAppointmentTest()
],
];
// 1. 调用 HIS 接口查询申请单
$data = [
'visitSqNo' => $sList->episodeid,
'requestNo' => $sList->app_num,
'visitTypeCode' => $visitTypeCode,
'feeFlag' => 0,
];
$His = new HisController();
$hisRes = $His::Get('查询检查申请单', $data);
// 1. 调用 HIS 接口查询申请单(走缓存)
$hisRes = HisController::GetApplyDetail($sList->episodeid, $sList->app_num, $sList->patient_type, '本地');
$result['his_query'] = [
'params' => $data,
'params' => [
'visitSqNo' => $sList->episodeid,
'requestNo' => $sList->app_num,
'visitTypeCode' => $visitTypeCode,
],
'response' => $hisRes,
'success' => ($hisRes['code'] == 200),
'success' => ($hisRes['code'] == 200 && !empty($hisRes['data'])),
];
// 2. 检查科室是否参与预约
@ -451,21 +434,18 @@ public function TestHisCallbackParams()
];
$visitTypeCode = $patientHisTypeMap[$sList->patient_type] ?? '09';
$hisQueryData = [
'visitSqNo' => $sList->episodeid,
'requestNo' => $sList->app_num,
'visitTypeCode' => $visitTypeCode,
'feeFlag' => 0,
];
$result['his_query'] = [
'params' => $hisQueryData,
'params' => [
'visitSqNo' => $sList->episodeid,
'requestNo' => $sList->app_num,
'visitTypeCode' => $visitTypeCode,
],
];
try {
$hisRes = HisController::Get('查询检查申请单', $hisQueryData);
$hisRes = HisController::GetApplyDetail($sList->episodeid, $sList->app_num, $sList->patient_type, '本地');
$result['his_query']['response'] = $hisRes;
$result['his_query']['success'] = ($hisRes['code'] == 200);
$result['his_query']['success'] = ($hisRes['code'] == 200 && !empty($hisRes['data']));
if ($hisRes['code'] == 200 && !empty($hisRes['data'])) {
$hisData = $hisRes['data'][0] ?? null;

@ -1933,28 +1933,12 @@ private function notifyHisAfterYuYue($oldMainInfos, $planInfo)
return;
}
// patient_type 到 visitTypeCode 映射
$patientHisTypeMap = [
0 => '03', // 住院
1 => '01', // 门诊
2 => '02', // 急诊
3 => '04', // 体检
];
// 3. 遍历每组,调 HIS 查询接口获取最新数据
// 3. 遍历每组,调 GetApplyDetail 获取申请单数据(带缓存)
foreach ($grouped as $appNum => $group) {
$visitSqNo = $group['episodeid'];
$visitTypeCode = $patientHisTypeMap[$group['patient_type']] ?? '09';
$hisQueryData = [
'visitSqNo' => $visitSqNo,
'requestNo' => $appNum,
'visitTypeCode' => $visitTypeCode,
'feeFlag' => 0,
];
try {
$hisRes = HisController::Get('查询检查申请单', $hisQueryData);
$hisRes = HisController::GetApplyDetail($visitSqNo, $appNum, $group['patient_type'], '本地');
} catch (\Exception $e) {
Log::warning('HIS 查询申请单异常', [
'app_num' => $appNum,
@ -2047,6 +2031,12 @@ private function notifyHisAfterYuYue($oldMainInfos, $planInfo)
'new_implement_department' => $execDeptName,
], JSON_UNESCAPED_UNICODE),
]);
// 同步更新 ROC 缓存中对应检查项目的执行科室
HisController::UpdateApplyDetailCache(
$visitSqNo, $appNum, $group['patient_type'], '本地',
$entrustCode, $execDeptCode, $execDeptName
);
}
} catch (\Exception $e) {
Log::error('HIS 回写接口请求异常', [

Loading…
Cancel
Save