|
|
|
@ -2,6 +2,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
namespace App\Services\Admin\YeWu;
|
|
|
|
namespace App\Services\Admin\YeWu;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
use App\Http\Controllers\API\His\HisController;
|
|
|
|
use App\Http\Controllers\API\Third\CSharpController;
|
|
|
|
use App\Http\Controllers\API\Third\CSharpController;
|
|
|
|
use App\Services\SendMessgeService;
|
|
|
|
use App\Services\SendMessgeService;
|
|
|
|
use DateInterval;
|
|
|
|
use DateInterval;
|
|
|
|
@ -820,6 +821,18 @@ public function YuYue($planid, $appointment_type, $mainlistids, $do_type,$is_eme
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
DB::commit();
|
|
|
|
DB::commit();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// HIS 回写通知
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
$this->notifyHisAfterYuYue($oldMainInfos, $planInfo);
|
|
|
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
|
|
|
Log::error('HIS 回写通知异常', [
|
|
|
|
|
|
|
|
'planid' => $planid,
|
|
|
|
|
|
|
|
'mainlistids' => $mainlistids,
|
|
|
|
|
|
|
|
'error' => $e->getMessage()
|
|
|
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(config('app.globals.预约完成短信通知')==1){
|
|
|
|
if(config('app.globals.预约完成短信通知')==1){
|
|
|
|
$this->SendMsg($oldMainInfos,$do_type);
|
|
|
|
$this->SendMsg($oldMainInfos,$do_type);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -1065,6 +1078,155 @@ private function releaseSourceFallback($mainInfo)
|
|
|
|
return $affected > 0;
|
|
|
|
return $affected > 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 预约完成后通知 HIS 回写执行科室
|
|
|
|
|
|
|
|
* 在事务提交后调用,异常不影响主流程
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
private function notifyHisAfterYuYue($oldMainInfos, $planInfo)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
// 1. 获取 execDeptCode / execDeptName(本地数据库)
|
|
|
|
|
|
|
|
$execDeptCode = '';
|
|
|
|
|
|
|
|
$execDeptName = '';
|
|
|
|
|
|
|
|
$resource = DB::table('s_department_resources')
|
|
|
|
|
|
|
|
->where('id', $planInfo->resources_id)
|
|
|
|
|
|
|
|
->first();
|
|
|
|
|
|
|
|
if ($resource) {
|
|
|
|
|
|
|
|
$deptId = $resource->execute_department_id ?: $resource->department_id;
|
|
|
|
|
|
|
|
if ($deptId) {
|
|
|
|
|
|
|
|
$dept = DB::table('s_department')
|
|
|
|
|
|
|
|
->where('id', $deptId)
|
|
|
|
|
|
|
|
->first();
|
|
|
|
|
|
|
|
if ($dept) {
|
|
|
|
|
|
|
|
$execDeptCode = $dept->department_number;
|
|
|
|
|
|
|
|
$execDeptName = $dept->department_name;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (empty($execDeptCode)) {
|
|
|
|
|
|
|
|
Log::warning('HIS 回写通知跳过:未找到执行科室信息', [
|
|
|
|
|
|
|
|
'resources_id' => $planInfo->resources_id
|
|
|
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 2. 按 app_num 分组去重
|
|
|
|
|
|
|
|
$grouped = [];
|
|
|
|
|
|
|
|
foreach ($oldMainInfos as $mainInfo) {
|
|
|
|
|
|
|
|
$appNum = $mainInfo->app_num;
|
|
|
|
|
|
|
|
if (empty($appNum)) continue;
|
|
|
|
|
|
|
|
if (!isset($grouped[$appNum])) {
|
|
|
|
|
|
|
|
$grouped[$appNum] = [
|
|
|
|
|
|
|
|
'episodeid' => $mainInfo->episodeid,
|
|
|
|
|
|
|
|
'patient_type' => $mainInfo->patient_type,
|
|
|
|
|
|
|
|
'items' => [],
|
|
|
|
|
|
|
|
];
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
$grouped[$appNum]['items'][] = $mainInfo;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (empty($grouped)) {
|
|
|
|
|
|
|
|
Log::warning('HIS 回写通知跳过:没有有效的申请单号');
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// patient_type 到 visitTypeCode 映射
|
|
|
|
|
|
|
|
$patientHisTypeMap = [
|
|
|
|
|
|
|
|
0 => '03', // 住院
|
|
|
|
|
|
|
|
1 => '01', // 门诊
|
|
|
|
|
|
|
|
2 => '02', // 急诊
|
|
|
|
|
|
|
|
3 => '04', // 体检
|
|
|
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 3. 遍历每组,调 HIS 查询接口获取最新数据
|
|
|
|
|
|
|
|
foreach ($grouped as $appNum => $group) {
|
|
|
|
|
|
|
|
$visitSqNo = $group['episodeid'];
|
|
|
|
|
|
|
|
$visitTypeCode = $patientHisTypeMap[$group['patient_type']] ?? '09';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$hisQueryData = [
|
|
|
|
|
|
|
|
'visitSqNo' => $visitSqNo,
|
|
|
|
|
|
|
|
'requestNo' => $appNum,
|
|
|
|
|
|
|
|
'visitTypeCode' => $visitTypeCode,
|
|
|
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
$hisRes = HisController::Get('查询检查申请单', $hisQueryData);
|
|
|
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
|
|
|
Log::warning('HIS 查询申请单异常', [
|
|
|
|
|
|
|
|
'app_num' => $appNum,
|
|
|
|
|
|
|
|
'error' => $e->getMessage()
|
|
|
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ($hisRes['code'] != 200 || empty($hisRes['data'])) {
|
|
|
|
|
|
|
|
Log::warning('HIS 查询申请单失败', [
|
|
|
|
|
|
|
|
'app_num' => $appNum,
|
|
|
|
|
|
|
|
'response' => $hisRes
|
|
|
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$hisData = $hisRes['data'][0] ?? null;
|
|
|
|
|
|
|
|
if (!$hisData) {
|
|
|
|
|
|
|
|
Log::warning('HIS 查询返回数据为空', ['app_num' => $appNum]);
|
|
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 4. 提取申请单级数据(comboNo 从 HIS 返回数据获取最新)
|
|
|
|
|
|
|
|
$comboNo = $hisData['requestNo'] ?? '';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 5. 遍历每条 s_list,匹配 entrust_code 获取项目级数据
|
|
|
|
|
|
|
|
foreach ($group['items'] as $mainInfo) {
|
|
|
|
|
|
|
|
// 住院取 episodeid,门诊取 reg_num
|
|
|
|
|
|
|
|
$inpatientNo = $mainInfo->patient_type == 0 ? $mainInfo->episodeid : $mainInfo->reg_num;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$entrustCode = $mainInfo->entrust_code;
|
|
|
|
|
|
|
|
$moOrder = '';
|
|
|
|
|
|
|
|
$hisOrderNo = '';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 在 itemList 中匹配 termCode == entrust_code
|
|
|
|
|
|
|
|
if (!empty($hisData['itemList']) && is_array($hisData['itemList'])) {
|
|
|
|
|
|
|
|
foreach ($hisData['itemList'] as $item) {
|
|
|
|
|
|
|
|
if (($item['termCode'] ?? '') == $entrustCode) {
|
|
|
|
|
|
|
|
$moOrder = $item['orderNo'] ?? '';
|
|
|
|
|
|
|
|
$hisOrderNo = $item['chargeList'][0]['hisOrderNo'] ?? '';
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (empty($moOrder)) {
|
|
|
|
|
|
|
|
Log::warning('HIS 回写:未匹配到 itemList 中的项目', [
|
|
|
|
|
|
|
|
'entrust_code' => $entrustCode,
|
|
|
|
|
|
|
|
'app_num' => $appNum
|
|
|
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 6. 组装并调用 HIS 回写接口
|
|
|
|
|
|
|
|
$body = [
|
|
|
|
|
|
|
|
'moOrder' => $moOrder,
|
|
|
|
|
|
|
|
'execDeptCode' => $execDeptCode,
|
|
|
|
|
|
|
|
'execDeptName' => $execDeptName,
|
|
|
|
|
|
|
|
'inpatientNo' => $inpatientNo,
|
|
|
|
|
|
|
|
'hisOrderNo' => $hisOrderNo,
|
|
|
|
|
|
|
|
'comboNo' => $comboNo,
|
|
|
|
|
|
|
|
'itemCode' => $entrustCode,
|
|
|
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
HisController::Post('/roc/api/v1/qhd/common/yjyy/updateExecDept', $body);
|
|
|
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
|
|
|
Log::error('HIS 回写接口请求异常', [
|
|
|
|
|
|
|
|
'body' => $body,
|
|
|
|
|
|
|
|
'error' => $e->getMessage()
|
|
|
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//短信提醒
|
|
|
|
//短信提醒
|
|
|
|
public function SendMsg($infos,$dotype=1)
|
|
|
|
public function SendMsg($infos,$dotype=1)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|