You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

182 lines
7.6 KiB
PHP

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
namespace App\Http\Controllers\API\His;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class CheckItemController extends Controller
{
public function UpdateItemClass()
{
$data = [
'consTypeId' => 'EXAMSHEETTYPE'
];
$His = new HisController();
$res = $His::Get("查询所有检查项目分类", $data);
$success_count=0;
if ($res['code'] == 200) {
$res_data = $res['data'];
foreach ($res_data as $data_k => $data_v) {
$type= DB::table('s_check_item_class')->where(['consInfoCode' => $data_v['consInfoCode']])->first();
$data=[
'item_class_name'=> $data_v['consInfoName'],
'pid'=> 1,
'CTC_Code'=> $data_v['consInfoName'],
'CTC_Desc'=> $data_v['consInfoName'],
'CTC_Status'=> 1,
'consInfoCode'=> $data_v['consInfoCode'],
];
if(!!$type){
$u= DB::table('s_check_item_class')->where(['id'=>$type->id])->update([
'item_class_name'=> $data_v['consInfoName'],
'CTC_Code'=> $data_v['consInfoName'],
'CTC_Desc'=> $data_v['consInfoName'],
]);
}else{
$u= DB::table('s_check_item_class')->insert($data);
}
if($u) $success_count++;
}
}
return \Yz::JsonReturn(true,"更新完成",['success_count'=>$success_count]);
}
public function UpdateCheckItem(){
$termClassId = request('termClassId');
if(!isset($termClassId)){
return \Yz::echoError1('类别id不能为空');
}
$data=[];
$where=[];
if($termClassId<>'all'){ //155为检查项目 不要使用all
$data=[
'termClassId' => $termClassId,
];
}
$His = new HisController();
$res = $His::Get("查询非药品列表", $data);
if($res['code']==200){
$res_data=$res['data'];
if(isset($res_data['list']) and !empty($res_data['list'])){
$db_data=DB::table('s_check_item')->get();//库里的数据
//根据 接收数据的undrugId和库里的item_code进行比对如果库里存在则更新如果库里没有则添加如果库里有但是接收数据里没有则在库里标记is_del=0
$db_map = [];
foreach ($db_data as $db_item) {
$db_map[$db_item->item_code] = $db_item;
}
// 用于记录接收到的数据中的 item_code方便后面判断哪些需要删除
$received_ids = [];
foreach ($res_data['list'] as $item) {
// 假设远程返回字段是 undrugId 和 undrugName对应数据库字段是 item_code 和 item_name
$item_code = $item['undrugId'];
$item_name = $item['termName'];
// 添加到接收 ID 列表
$received_ids[] = $item_code;
$item_class_id=null;
$class_type= DB::table('s_check_item_class')->where(['consInfoCode'=>$item['sheetType']])->first();
if($class_type and !empty($item['sheetType'])){
$item_class_id=$class_type->id;
}
$department_arr=[];
//优先取默认科室如果存在默认则忽略范围科室。2025-06-24 与叶工微信群沟通
if(isset($item['defaultExecDepts']) and !empty($item['defaultExecDepts'])){
$department_arr=[$item['defaultExecDepts']];
}else{
if(isset($item['execDepts']) and !empty($item['execDepts'])){
foreach ($item['execDepts'] as $dept) {
$department_arr[]=$dept['code'];
}
}
}
// 快速查找是否已存在该 item_code
if (isset($db_map[$item_code])) {
// 存在则更新
DB::table('s_check_item')
->where('item_code', $item_code)
->update([
'item_class_id'=>$item_class_id,
'sheetType'=>$item['sheetType'],
'item_name' => $item_name,
'item_desc' => $item_name,
'is_del' => 0, // 取消删除标记
'hisExecDepts'=>json_encode($department_arr, JSON_UNESCAPED_UNICODE),
]);
} else {
// 不存在则插入新记录
DB::table('s_check_item')->insert([
'item_class_id'=>$item_class_id,
'sheetType'=>$item['sheetType'],
'item_code' => $item_code,
'item_name' => $item_name,
'item_desc' => $item_name,
'reservation_method' =>'0,1,2,3,4',
'limosis' =>0,
'check_time' =>0,
'hisExecDepts'=>json_encode($department_arr, JSON_UNESCAPED_UNICODE),
]);
$this->updateBindDrivers($item_code,$department_arr);
}
}
// 处理数据库中存在但远程没有返回的数据,标记为删除
foreach ($db_map as $item_code => $db_item) {
if (!in_array($item_code, $received_ids)) {
DB::table('s_check_item')
->where('item_code', (string)$item_code)
->update([
'is_del' => 1
]);
}
}
return \Yz::return(true,'更新检查项目成功',[]);
}else{
return \Yz::echoError1('His接口返回数据为空');
}
}else{
return \Yz::echoError1('更新失败');
}
}
//绑定设备
public function updateBindDrivers($item_code,$department_arr)
{
$iteminfo=DB::table('s_check_item')->where('item_code',$item_code)->first();
$departments = DB::table('s_department')->whereIn('department_number',$department_arr)->get();
$department_ids=[];
foreach ($departments as $department) {
$department_ids[]=$department->id;
}
if(count($department_ids)>0 and !!$iteminfo){
$devices=DB::table('s_department_resources_device')->whereIn('department_id',$department_ids)->pluck('device_id')->toArray();
//删除库里项目和设备绑定关系
DB::table('s_check_item_device')->where(['item_id'=>$iteminfo->id])->whereIn('device_id',$devices)->delete();
$data=[];
foreach ($devices as $device) {
$data[]=[
'item_id' => $iteminfo->id,
'device_id' => $device,
];
}
if(count($devices)>0 and !!$iteminfo){
//插入表
DB::table('s_check_item_device')->insert($data);
}
}
}
}