增加三方报告查询

main
yanzai 1 month ago
parent f9e0135bc4
commit 7c63e9b520

@ -30,6 +30,8 @@ class PersonController extends Controller
public function GetPersonReportDetail(){
$sfz =request('sfz');
$type =request('type');
$orig_sfz=$sfz;
$tijian_count=0;//最近体检的总数
//HSM加密
$HSM_sfz =\App\Lib\HSM::HsmEncrypt($sfz);
if($HSM_sfz['status']!=true){
@ -41,11 +43,15 @@ class PersonController extends Controller
$info=$info->where('type',$type);
}
$info=$info ->orderBy('id', 'desc')->first();
if($info){
$sixin_info=false;
if(!!$info){
$tijian_count++;
$info->pdfs=count(json_decode($info->pdfs, true));
$info->biao='examination_records';
$item=DB::table('report_result_item')
->where(['examination_id'=>$info->id])
->select(['item_name','item_result','flag'])->get();
$info->items=$item;
if(strlen($info->id_card_num)>30){
//HSM解密
@ -63,8 +69,89 @@ class PersonController extends Controller
}
$info->tel=$HSM_tel['data'];
}
$sixin_info=$info;
return \Yz::Return(true,'',['info'=>$info]);
}
$pingTaiOrgList=['北京市大兴区西红门镇社区卫生服务中心'];
$pingTaiInfo=false;
$pingTai=DB::table('health_certificate_push')
->select('*','identifierValue as id_card_num','examDate as tijian_time','healthExaminationId as tijian_num')
->where(['identifierValue'=>$orig_sfz])
->whereIn('hospitalName',$pingTaiOrgList)
->orderBy('id', 'desc')
->first();
if(!!$pingTai && $type==1){
$pingTai->biao='health_certificate_push';
$tijian_count++;
$fieldsMap = [
'hasBacterialDysentery' => '细菌性痢疾',
'hasTyphoid' => '伤寒和副伤寒',
'hasViralHepatitis' => '病毒性肝炎(甲型、戊型)',
'hasActiveTB' => '活动性肺结核',
'hasSkinDiseases' => '化脓性或渗出性皮肤病',
'hasHandFungal' => '手部真菌感染性疾病(如手癣、指甲癣等)',
'hasCholera' => '霍乱',
'hasAmebicDysentery' => '阿米巴性痢疾',
'hasHandEczema' => '手部湿疹',
'hasHandPsoriasis' => '手部的银屑病或者鳞屑',
];
$pingTaiInfo=$pingTai;
$pingTaiInfo->type=1;
$item = [];
foreach ($fieldsMap as $field => $name) {
$value = $pingTaiInfo->$field ?? null;
// 根据字段值判断状态
switch ($value) {
case 1:
$status = '有';
break;
case 2:
$status = '无';
break;
case -1:
$status = '未检查';
break;
case null:
$status = '未填写';
break;
default:
$status = '未填写';
}
$d=[
'field' => $field,
'item_name' => $name,
'value' => $value, // 原始值(可选,用于前端判断或回显)
'item_result' => $status, // 中文状态
'flag'=>null,
];
if($status<>'无'){
$d=[
'field' => $field,
'item_name' => $name,
'value' => $value, // 原始值(可选,用于前端判断或回显)
'item_result' => $status, // 中文状态
'flag'=>'异常',
];
}
$item[] = $d;
}
$pingTaiInfo->items=$item;
$pdf=DB::table('health_certificate_push_pdf')
->where([ 'hospitalCode' => $pingTaiInfo->hospitalCode,'healthExaminationId' => $pingTaiInfo->healthExaminationId])
->orderBy('id', 'desc')
->first();
$pingTaiInfo->pdfs=0;
if(!!$pdf){
$pingTaiInfo->pdfs=1;
}
}
if($sixin_info || $pingTaiInfo){
$list=[$sixin_info,$pingTaiInfo];
return \Yz::Return(true,'',['list'=>$list,'tijian_count'=>$tijian_count]);
}else{
return \Yz::echoError1('未找到相关体检信息');
}
@ -75,10 +162,27 @@ class PersonController extends Controller
{
$recordid =request('recordid');
$pdf_num =request('pdf_num');
$biao =request('biao');
if($biao=='examination_records'){
$query=DB::table('examination_records')->where(['id'=>$recordid])->first();
}
if($biao=='health_certificate_push'){
$query=DB::table('health_certificate_push')->where(['id'=>$recordid])->first();
$pdf=DB::table('health_certificate_push_pdf')
->where([ 'hospitalCode' => $query->hospitalCode,'healthExaminationId' => $query->healthExaminationId])
->orderBy('id', 'desc')
->first();
$query->pdfs=json_encode([$pdf->pdf_url],JSON_UNESCAPED_UNICODE);
}
if(!$query) return \Yz::echoError1('未找到对应体检记录');
$pdfs=json_decode($query->pdfs, true);
$pdfurl=$pdfs[$pdf_num];
// 使用 GuzzleHttp 获取第三方 PDF 地址的内容
$client = new Client();
$response = $client->get($pdfurl);

@ -296,6 +296,7 @@
//
let encryptedText = "AmAYzZaAwbOMPUptaxWQeE1WSE85wt7TxejYjxRXua5%2BAPGSiw8dPM5LMW1ti2ex11";
console.log('55555555',encryptedText)
// console.log('jiami',sm4Util.encryptData_ECB('userid=13062619850808587X'));
let hash1 = window.location.hash;
encryptedText= hash1.split('?')[1];
try {
@ -310,7 +311,7 @@
console.log("解密结果:", openid);
sessionStorage.setItem('openid', openid);
AppGetUserinfoAction()
//tiaoGuoAppYanzheng();
tiaoGuoAppYanzheng();
GetConfigInArrayFunc();
} catch (e) {
console.error("解密失败:", e);
@ -326,8 +327,8 @@
})
// app
const tiaoGuoAppYanzheng = () => {
sessionStorage.setItem('sfz', "130302194510011112");
//sessionStorage.setItem('sfz', "110224195909090061");
//sessionStorage.setItem('sfz', "130302194510011112");
sessionStorage.setItem('sfz', "110224195909090061");
sessionStorage.setItem('name', '测试');
sessionStorage.setItem('tel', "13333356789");
sessionStorage.setItem('sex', 1);

@ -32,7 +32,7 @@
let loading = ref(false);
let pdf_num = route.query.pdf_num //pdf arraykey
let recordid = route.query.recordid
let biao = route.query.biao
let pdfData = ref(null);
@ -43,7 +43,8 @@
loading.value = true
GetPersonPdfDetailByLink({
recordid: recordid,
pdf_num: pdf_num
pdf_num: pdf_num,
biao:biao
}).then(res => {
loading.value = false

@ -48,6 +48,18 @@
<van-popup v-model:show="showPicker" round position="bottom">
<van-picker :columns="columns" @cancel="showPicker = false" @confirm="selectPDF" />
</van-popup>
<div class="tankuang" v-if="tijian_count>1 &&tijian_dialog_show==true">
<div class="baikuang">
<div style="font-size: 16px;font-weight: 700;margin-bottom: 8px;">请选择要查看的报告</div>
<van-radio-group v-model="selectedTijianNum" >
<van-radio class="radio_item" v-for="(item,index) in tijian_list" :key="index" :name="item.tijian_num">{{item.tijian_time.substring(0,10)}} </van-radio>
</van-radio-group>
<div style="width: 100%;text-align: center;">
<van-button type="primary" size="small" style="width: 150px;" @click="xuanZeTiJian()"> </van-button>
</div>
</div>
</div>
</div>
</template>
<script setup>
@ -72,6 +84,10 @@
let type=route.query.type
let loading = ref(false)
let title=ref("");
let selectedTijianNum=ref('');
let tijian_count=ref(0);
let tijian_list=ref([])
let tijian_dialog_show=ref(false)
let list = [{
name: "细菌性痢疾",
value: "无"
@ -107,6 +123,7 @@
]
document.title = '报告查询'
let reportinfo = ref('')
const getDetail = () => {
let sfz = sessionStorage.getItem('sfz');
loading.value = true
@ -116,7 +133,63 @@
}).then(res => {
loading.value = false
if (res.status) {
reportinfo.value = res.data.info
tijian_count.value=res.data.tijian_count
res.data.list.forEach((v,i)=>{
if(v!==false){
tijian_list.value.push({
id:v.id,
name:v.name,
tel:v.tel,
id_card_num:v.id_card_num,
tijian_time:v.tijian_time,
tijian_num:v.tijian_num,
items:v.items,
pdfs:v.pdfs,
biao:v.biao //
})
}
})
if(tijian_list.value.length==1){
selectedTijianNum.value=tijian_list.value[0].tijian_num
xuanZeTiJian()
}
if(tijian_list.value.length>1){
tijian_dialog_show.value=true
}
// if(tijian_count.value==1){
// reportinfo.value = res.data.info
// if(reportinfo.value.type==1){
// title.value=""
// }
// if(reportinfo.value.type==2){
// title.value=""
// }
// for (var i = 0; i < reportinfo.value.pdfs; i++) {
// let ii = 0;
// ii = i + 1;
// console.log(999)
// columns.value.push({
// text: '' + ii,
// value: i
// });
// }
// }
console.log(columns.value);
} else {
showToast(res.msg);
}
})
}
const xuanZeTiJian=()=>{
tijian_list.value.forEach((v,i)=>{
console.log(selectedTijianNum.value)
if(v.tijian_num==selectedTijianNum.value){
reportinfo.value = v
if(reportinfo.value.type==1){
title.value="北京市从业人员体检结果"
}
@ -132,13 +205,9 @@
value: i
});
}
console.log(columns.value);
} else {
showToast(res.msg);
}
})
tijian_dialog_show.value=false
}
//
const previewReport = () => {
@ -189,13 +258,31 @@
showPicker.value = false;
console.log(selectedOptions[0].value);
router.push('/previewReport?recordid=' + reportinfo.value.id + '&pdf_num=' + selectedOptions[0].value)
router.push('/previewReport?recordid=' + reportinfo.value.id + '&pdf_num=' + selectedOptions[0].value+'&biao='+reportinfo.value.biao)
}
onMounted(() => {
getDetail()
})
</script>
<style scoped>
.tankuang{
position: absolute;
top:0px;
z-index: 999;
width: 100%;
height: 100vh;
background-color: #efefef;
padding: 20px;
}
.baikuang{
background-color: #fff;
padding: 10px;
margin-top: 50%;
border-radius: 8px;
}
.radio_item{
margin-bottom: 8px;
}
.showreport {
height: 100vh;
background: radial-gradient(circle at top center, #33cdc9 30%, #e3e3e3, transparent 2%);

Loading…
Cancel
Save