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.

232 lines
9.2 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\Services\Admin\YeWu;
use DateTime;
use Illuminate\Support\Facades\DB;
class AppointmentService
{
//获取体检记录列表
public function GetAppointmentList($arr){
$sql=' where 1=1';
$canshu=array();
if($arr['searchInfo']['status']){
$sql=$sql .' and a.status = ? ';
array_push($canshu, $arr['searchInfo']['status']);
}
if($arr['searchInfo']['userinfo']){
if (preg_match('/\d/', $arr['searchInfo']['userinfo'])) {
$HSM =\App\Lib\HSM::HsmEncrypt($arr['searchInfo']['userinfo']);
if($HSM['status'] !=true){
return \Yz::echoError1('身份证号加密失败');
}
$encode_id_card_num=$HSM['data'];
$sql=$sql .' and (a.id_card_num like ? or a.id_card_num = ?)';
array_push($canshu, '%'.$arr['searchInfo']['userinfo'].'%');
array_push($canshu, $encode_id_card_num);
}else{
$sql=$sql .' and a.name like ?';
array_push($canshu, '%'.$arr['searchInfo']['userinfo'].'%');
}
}
if($arr['searchInfo']['calendarId']){
$sql=$sql .' and a.calendar_id = ? ';
array_push($canshu, $arr['searchInfo']['calendarId']);
}
if($arr['searchInfo']['dateRange']){
$sql=$sql . ' and a.created_at>=? and a.created_at<=? ';
array_push($canshu,$arr['searchInfo']['dateRange'][0].' 00:00:00',$arr['searchInfo']['dateRange'][1].' 23:59:59');
}
if($arr['group']==7){
$cha=DB::table('medical_institution')->where(['link_user_id'=>$arr['userid']])->get();
$sql=$sql .' and a.org_code=?';
array_push($canshu, $cha[0]->sn);
}else{
if($arr['searchInfo']['orgId']){
$cha=DB::table('medical_institution')->where(['id'=>$arr['searchInfo']['orgId']])->get();
$sql=$sql .' and a.org_code=?';
array_push($canshu, $cha[0]->sn);
}
}
array_push($canshu,($arr['page']-1)*$arr['pageSize'],$arr['pageSize']);
$query=DB::select("select a.*,b.org_name from appointment_record as a LEFT JOIN
medical_institution as b on a.org_code=b.sn ".$sql." and (a.is_del<>1 or a.is_del is null) order by a.id desc limit ?,?",$canshu);
$count=DB::select("select count(*) as c from appointment_record as a ".$sql ." and (a.is_del<>1 or a.is_del is null) ",$canshu);
return \Yz::Return(true,'',['list'=>$query,'count'=>$count[0]->c]);
}
//检测是否有登记预约记录
public function CheckAppointment($name,$id_card_num,$type){
if(strlen($id_card_num)>0){
date_default_timezone_set('PRC');
$currentYear = date('Y');
$firstDay = date('Y-01-01', strtotime($currentYear));
$lastDay = date('Y-12-31', strtotime($currentYear));
//查询预约登记表
if($type==2 and $this->isOver65($id_card_num)===false){
return \Yz::echoError1("年龄不满足条件");
}
$HSM =\App\Lib\HSM::HsmEncrypt($id_card_num);
if($HSM['status'] !=true){
return \Yz::echoError1('身份证号加密失败');
}
$encode_id_card_num=$HSM['data'];
// $c=DB::table('appointment_record as a')
// ->leftJoin('medical_institution as b', 'a.org_id', '=', 'b.id')
// ->select(['a.id','a.org_id','a.id_card_num','a.created_at as insertime','b.org_name'])
// ->where(['a.id_card_num'=>$id_card_num,'a.is_del'=>0,'a.type'=>$type,['a.created_at','>=',$firstDay],['a.created_at','<=',$lastDay]])->whereIn('a.status',[1,2])->get();
$c=DB::table('appointment_record as a')
->leftJoin('medical_institution as b', 'a.org_id', '=', 'b.id')
->select(['a.id','a.org_id','a.id_card_num','a.created_at as insertime','b.org_name'])
->where(function ($query) use ($id_card_num, $encode_id_card_num) {
$query->where('a.id_card_num', $id_card_num)
->orWhere('a.id_card_num', $encode_id_card_num);
});
if($type==2){
$c=$c->whereIn('a.status', [1, 2]);
}
if($type==1){
$month=config('app.globals.HealthyCardTimeRange');
//如果是健康证体检,则先查寻是否有体检记录
$cha_jkz=DB::table('examination_records')->where(['id_card_num'=>$encode_id_card_num])->orderBy('id','desc')->first();
//,如果有判断是否快到期(先不判断是否体检通过),能否继续预约
if(!!$cha_jkz){
$date = new DateTime($cha_jkz->created_at);
$date->modify('+'.$month.' months');
$now = new DateTime();
if ($date > $now) {
return \Yz::Return(false,'已体检过');
}
}
//查询是否有预约记录
$currentDate = date('Y-m-d');
$firstDay = date('Y-m-d', strtotime('-'.$month.' months', strtotime($currentDate)));
// $firstDay = date('Y-01-01', strtotime($currentYear));
$lastDay = date('Y-12-31', strtotime($currentYear));
$c=$c->whereIn('a.status', [2]);
}
$c=$c->where(['a.type' => $type,'a.is_del'=>0, ['a.created_at', '>=', $firstDay], ['a.created_at', '<=', $lastDay]]);
$c=$c->get();
if(count($c)){
$result['status']=false;
$result['msg']='已体检过';
$result['info']=$c;
}else{
if($type==2){
$gongwei= self::CheckGongWei($name,$id_card_num);
if( $gongwei['status']===false) {
$result['status'] = false;
$result['msg'] = $gongwei['msg'];
$result['GongWeiinfo'] = $gongwei['GongWeiinfo'];
return $result;
}
}
$result['status']=true;
$result['msg']='可以继续,本年度无免费体检记录';
$result['info']=$c;
}
}else{
$result['status']=false;
$result['msg']='用户证件号未传';
}
return $result;
}
public function CheckGongWei($name,$id_card_num){
date_default_timezone_set('PRC');
$currentYear = date('Y');
$firstDay = date('Y-01-01', strtotime($currentYear));
$lastDay = date('Y-12-31', strtotime($currentYear));
$SendData='<com:queryCheckUp>
<!--Optional:-->
<xm>'.$name.'</xm>
<!--Optional:-->
<sfz>'.$id_card_num.'</sfz>
</com:queryCheckUp>';
$url = config('app.globals.GongWeiBaseUrl');
$res=\Yz::XmlHttp($SendData,$url);
//如果没有返回queryCheckUp节点返回异常
if(!isset($res['queryCheckUp']) and $res!="") {
$result['status']=false;
$result['msg']='公卫接口异常';
$result['GongWeiinfo']=$res;
return $result;
}
$result=[];
if(isset($res['queryCheckUp']['tjrq']) and ($res['queryCheckUp']['tjrq']>=$firstDay and $res['queryCheckUp']['tjrq']<=$lastDay)){
//判断老年人体检字段
if(isset($res['queryCheckUp']['sflnrtj']) and $res['queryCheckUp']['sflnrtj']==1){
$result['status']=false;
$result['msg']='公卫有记录';
$result['GongWeiinfo']=$res['queryCheckUp'];
}else{
$result['status']=true;
$result['msg']='公卫有记录,但是没有老年人体检';
$result['GongWeiinfo']=$res['queryCheckUp'];
}
}else{
$result['status']=true;
$result['msg']='公卫无记录';
if( $res=="" or $res==null){
$result['GongWeiinfo']="公卫返回空";
}else{
$result['GongWeiinfo']=$res['queryCheckUp'];
}
}
return $result;
}
public function isOver65($idCard) {
// 从身份证号中提取出生日期
if(strlen($idCard)<>18) return false;
$birthYear = substr($idCard, 6, 4);
$birthMonth = substr($idCard, 10, 2);
$birthDay = substr($idCard, 12, 2);
// // 将出生日期转换为日期对象
// $birthdate = new DateTime($birthYear . '-' . $birthMonth . '-' . $birthDay);
//
// // 获取当前日期
// $currentDate = new DateTime();
//
// // 计算年龄差
// $ageDiff = $birthdate->diff($currentDate)->y;
$birthYear = substr($idCard, 6, 4); // 例如假设身份证号的格式为XXXXXXYYMMDDZZZZ
$currentYear = date('Y'); // 获取当前年份
// 将字符串转换为整数
$birthYear = intval($birthYear);
$currentYear = intval($currentYear);
$ageDiff= $currentYear - $birthYear;
// 判断年龄是否大于65岁
if ($ageDiff >= 65) {
return true;
} else {
return false;
}
}
}