|
|
|
|
@ -72,61 +72,96 @@ public function CheckAppointment()
|
|
|
|
|
$entrust_ids[] = $item['orderNo'];
|
|
|
|
|
$termCodes[] = $item['termCode'];
|
|
|
|
|
$execDeptCodes[] = $item['execDeptCode'];
|
|
|
|
|
// UPSERT:原子操作,消除 SELECT + INSERT 之间的竞态
|
|
|
|
|
$params = [
|
|
|
|
|
'list_status' => 0,
|
|
|
|
|
'reg_num' => $data_v['cardNo'],
|
|
|
|
|
'user_name' =>$data_v['patientName'],
|
|
|
|
|
'user_sex' => $data_v['patientGenderName'] == '男' ? 1 : 2,
|
|
|
|
|
'entrust_code' => $item['termCode'],
|
|
|
|
|
'entrust' => $item['termName'],
|
|
|
|
|
'is_pay' => $data_v["chargeStatusName"] == '已收费' ? 1 : 0,
|
|
|
|
|
'reservation_department' =>$data_v["orderDeptName"],
|
|
|
|
|
'entrust_date' =>$entrust_datePart,
|
|
|
|
|
'entrust_time' =>$entrust_timePart,
|
|
|
|
|
'user_brithday' =>$birthday,
|
|
|
|
|
'docotr' => $data_v["orderPersonName"],
|
|
|
|
|
'patient_type' => $patientType,
|
|
|
|
|
'user_phone' => $data_v["mobile"],
|
|
|
|
|
'implement_department' =>$item['execDeptName'],
|
|
|
|
|
'entrust_id' => $item['orderNo'],
|
|
|
|
|
'episodeid' => $visitSqNo,
|
|
|
|
|
'RISRAcceptDeptCode' => $item["execDeptCode"],
|
|
|
|
|
'warddesc' => $data_v["areaName"],
|
|
|
|
|
'wardcode' => $data_v["areaCode"],
|
|
|
|
|
'bedname' => $data_v["bedName"],
|
|
|
|
|
'bedno' => $data_v["bedNo"],
|
|
|
|
|
'app_num' => $data_v["requestNo"],
|
|
|
|
|
'idCardNumber' => $data_v["idCardNumber"],
|
|
|
|
|
'medicalHistory' => $data_v["medicalHistory"],
|
|
|
|
|
'diagnosisName' => $data_v["diagnosisName"],
|
|
|
|
|
'his_is_emergency'=> intval($data_v["urgentFlag"]),
|
|
|
|
|
'reservation_department_code' =>$data_v["orderDeptCode"],
|
|
|
|
|
'doctor_code' => $data_v["orderPersonCode"],
|
|
|
|
|
'requestComment' => $data_v["requestComment"] ?? null,
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
$columns = '`' . implode('`, `', array_keys($params)) . '`';
|
|
|
|
|
$holders = implode(', ', array_fill(0, count($params), '?'));
|
|
|
|
|
$assigns = implode(', ', array_map(fn($k) => "`$k` = VALUES(`$k`)", array_keys($params)));
|
|
|
|
|
|
|
|
|
|
$sql = "INSERT INTO `s_list` ({$columns}) VALUES ({$holders}) ON DUPLICATE KEY UPDATE {$assigns}";
|
|
|
|
|
DB::statement($sql, array_values($params));
|
|
|
|
|
|
|
|
|
|
$rowCount = DB::select("SELECT ROW_COUNT() AS `affected`")[0]->affected;
|
|
|
|
|
$note = ($rowCount == 1) ? '创建记录' : 'MQ冲突更新';
|
|
|
|
|
// 先查 s_list,区分"已存在"和"MQ 冲突"两种场景
|
|
|
|
|
$db_item = DB::table('s_list')->where(['entrust_id' => $item['orderNo']])->first();
|
|
|
|
|
|
|
|
|
|
if ($db_item) {
|
|
|
|
|
// 情景 A:已存在,更新部分字段即可
|
|
|
|
|
$params = [
|
|
|
|
|
'medicalHistory' => $data_v["medicalHistory"],
|
|
|
|
|
'diagnosisName' => $data_v["diagnosisName"],
|
|
|
|
|
'his_is_emergency'=> intval($data_v["urgentFlag"]),
|
|
|
|
|
'reservation_department_code' =>$data_v["orderDeptCode"],
|
|
|
|
|
'doctor_code' => $data_v["orderPersonCode"],
|
|
|
|
|
'requestComment' => $data_v["requestComment"] ?? null,
|
|
|
|
|
];
|
|
|
|
|
if ($db_item->wardcode == $data_v["areaCode"] && $db_item->warddesc != $data_v["areaName"]) {
|
|
|
|
|
$params['warddesc'] = $data_v["areaName"];
|
|
|
|
|
}
|
|
|
|
|
DB::table('s_list')->where(['id' => $db_item->id])->update($params);
|
|
|
|
|
|
|
|
|
|
DB::table('s_list_log')->insert([
|
|
|
|
|
'list_id' => $db_item->id,
|
|
|
|
|
'reg_num' => $data_v['cardNo'],
|
|
|
|
|
'old_status' => 0,
|
|
|
|
|
'new_status' => 0,
|
|
|
|
|
'create_user' => 'his',
|
|
|
|
|
'note' => '创建记录',
|
|
|
|
|
'data' => json_encode($params),
|
|
|
|
|
]);
|
|
|
|
|
} else {
|
|
|
|
|
// 情景 B:不存在,全量 UPSERT 兜底(极短窗口内的 MQ 并发)
|
|
|
|
|
$params = [
|
|
|
|
|
'list_status' => 0,
|
|
|
|
|
'reg_num' => $data_v['cardNo'],
|
|
|
|
|
'user_name' =>$data_v['patientName'],
|
|
|
|
|
'user_sex' => $data_v['patientGenderName'] == '男' ? 1 : 2,
|
|
|
|
|
'entrust_code' => $item['termCode'],
|
|
|
|
|
'entrust' => $item['termName'],
|
|
|
|
|
'is_pay' => $data_v["chargeStatusName"] == '已收费' ? 1 : 0,
|
|
|
|
|
'reservation_department' =>$data_v["orderDeptName"],
|
|
|
|
|
'entrust_date' =>$entrust_datePart,
|
|
|
|
|
'entrust_time' =>$entrust_timePart,
|
|
|
|
|
'user_brithday' =>$birthday,
|
|
|
|
|
'docotr' => $data_v["orderPersonName"],
|
|
|
|
|
'patient_type' => $patientType,
|
|
|
|
|
'user_phone' => $data_v["mobile"],
|
|
|
|
|
'implement_department' =>$item['execDeptName'],
|
|
|
|
|
'entrust_id' => $item['orderNo'],
|
|
|
|
|
'episodeid' => $visitSqNo,
|
|
|
|
|
'RISRAcceptDeptCode' => $item["execDeptCode"],
|
|
|
|
|
'warddesc' => $data_v["areaName"],
|
|
|
|
|
'wardcode' => $data_v["areaCode"],
|
|
|
|
|
'bedname' => $data_v["bedName"],
|
|
|
|
|
'bedno' => $data_v["bedNo"],
|
|
|
|
|
'app_num' => $data_v["requestNo"],
|
|
|
|
|
'idCardNumber' => $data_v["idCardNumber"],
|
|
|
|
|
'medicalHistory' => $data_v["medicalHistory"],
|
|
|
|
|
'diagnosisName' => $data_v["diagnosisName"],
|
|
|
|
|
'his_is_emergency'=> intval($data_v["urgentFlag"]),
|
|
|
|
|
'reservation_department_code' =>$data_v["orderDeptCode"],
|
|
|
|
|
'doctor_code' => $data_v["orderPersonCode"],
|
|
|
|
|
'requestComment' => $data_v["requestComment"] ?? null,
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
$list_id = DB::table('s_list')->where('entrust_id', $item['orderNo'])->value('id');
|
|
|
|
|
$columns = '`' . implode('`, `', array_keys($params)) . '`';
|
|
|
|
|
$holders = implode(', ', array_fill(0, count($params), '?'));
|
|
|
|
|
|
|
|
|
|
DB::table('s_list_log')->insert([
|
|
|
|
|
'list_id' => $list_id,
|
|
|
|
|
'reg_num' => $data_v['cardNo'],
|
|
|
|
|
'old_status' => 0,
|
|
|
|
|
'new_status' => 0,
|
|
|
|
|
'create_user' => 'his',
|
|
|
|
|
'note' => $note,
|
|
|
|
|
'data' => json_encode($params),
|
|
|
|
|
]);
|
|
|
|
|
$updateFields = [
|
|
|
|
|
'medicalHistory', 'diagnosisName', 'his_is_emergency',
|
|
|
|
|
'reservation_department_code', 'doctor_code', 'requestComment',
|
|
|
|
|
];
|
|
|
|
|
$assigns = implode(', ', array_map(fn($k) => "`$k` = VALUES(`$k`)", $updateFields));
|
|
|
|
|
$assigns .= ", `warddesc` = IF(`wardcode` = VALUES(`wardcode`) AND `warddesc` != VALUES(`warddesc`), VALUES(`warddesc`), `warddesc`)";
|
|
|
|
|
|
|
|
|
|
$sql = "INSERT INTO `s_list` ({$columns}) VALUES ({$holders}) ON DUPLICATE KEY UPDATE {$assigns}";
|
|
|
|
|
DB::statement($sql, array_values($params));
|
|
|
|
|
|
|
|
|
|
$rowCount = DB::select("SELECT ROW_COUNT() AS `affected`")[0]->affected;
|
|
|
|
|
$note = ($rowCount == 1) ? '创建记录' : 'MQ冲突更新';
|
|
|
|
|
|
|
|
|
|
$list_id = DB::table('s_list')->where('entrust_id', $item['orderNo'])->value('id');
|
|
|
|
|
|
|
|
|
|
DB::table('s_list_log')->insert([
|
|
|
|
|
'list_id' => $list_id,
|
|
|
|
|
'reg_num' => $data_v['cardNo'],
|
|
|
|
|
'old_status' => 0,
|
|
|
|
|
'new_status' => 0,
|
|
|
|
|
'create_user' => 'his',
|
|
|
|
|
'note' => $note,
|
|
|
|
|
'data' => json_encode($params),
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}else{
|
|
|
|
|
|