main
鹿和sa0ChunLuyu 2 days ago
parent 7d5ef3b89a
commit 6aa484e0c2

@ -72,7 +72,35 @@ public function CheckAppointment()
$entrust_ids[] = $item['orderNo']; $entrust_ids[] = $item['orderNo'];
$termCodes[] = $item['termCode']; $termCodes[] = $item['termCode'];
$execDeptCodes[] = $item['execDeptCode']; $execDeptCodes[] = $item['execDeptCode'];
// UPSERT原子操作消除 SELECT + INSERT 之间的竞态 // 先查 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 = [ $params = [
'list_status' => 0, 'list_status' => 0,
'reg_num' => $data_v['cardNo'], 'reg_num' => $data_v['cardNo'],
@ -108,7 +136,13 @@ public function CheckAppointment()
$columns = '`' . implode('`, `', array_keys($params)) . '`'; $columns = '`' . implode('`, `', array_keys($params)) . '`';
$holders = implode(', ', array_fill(0, count($params), '?')); $holders = implode(', ', array_fill(0, count($params), '?'));
$assigns = implode(', ', array_map(fn($k) => "`$k` = VALUES(`$k`)", array_keys($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}"; $sql = "INSERT INTO `s_list` ({$columns}) VALUES ({$holders}) ON DUPLICATE KEY UPDATE {$assigns}";
DB::statement($sql, array_values($params)); DB::statement($sql, array_values($params));
@ -129,6 +163,7 @@ public function CheckAppointment()
]); ]);
} }
} }
}
}else{ }else{
return \Yz::JsonError('Roc接口查询失败'); return \Yz::JsonError('Roc接口查询失败');
} }

Loading…
Cancel
Save