From 3c208ce5deffbbea5d1b7f9a7871e0ea0e982cf5 Mon Sep 17 00:00:00 2001 From: yanzai Date: Wed, 17 Jul 2024 09:00:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../API/Admin/YeWu/AppointmentController.php | 34 ++- .../app/Http/Controllers/TestController.php | 32 +++ Laravel/app/Lib/Tools.php | 67 ++++++ .../app/Services/mH5/OrganizationService.php | 11 +- Laravel/routes/api.php | 1 + Laravel/routes/web.php | 1 + el-admin/src/api/api.js | 4 + .../src/views/MedicalCenter/Dashboard.vue | 217 ++++++++++++------ .../src/views/Report/AppointmentCount.vue | 11 +- 9 files changed, 302 insertions(+), 76 deletions(-) create mode 100644 Laravel/app/Lib/Tools.php diff --git a/Laravel/app/Http/Controllers/API/Admin/YeWu/AppointmentController.php b/Laravel/app/Http/Controllers/API/Admin/YeWu/AppointmentController.php index 21385a3..26c57f4 100644 --- a/Laravel/app/Http/Controllers/API/Admin/YeWu/AppointmentController.php +++ b/Laravel/app/Http/Controllers/API/Admin/YeWu/AppointmentController.php @@ -28,6 +28,7 @@ class AppointmentController extends Controller $source='接口'; $info=request('info'); + $sfz_mingwen=$info['id_card_num']; //HSM加密 $HSM_sfz =\App\Lib\HSM::HsmEncrypt($info['id_card_num']); if($HSM_sfz['status']!=true){ @@ -72,6 +73,8 @@ class AppointmentController extends Controller 'type'=>$info['type'], 'name'=>$info['name'], 'id_card_num'=>$info['id_card_num'], + 'age'=>\App\Lib\Tools::calculateAgeFromID($sfz_mingwen,$currentDateTime), + 'birthday'=>\App\Lib\Tools::getBirthdayFromIDCard($sfz_mingwen), 'sex'=>$info['sex'], 'tel'=>$info['tel'], 'status'=>2, //1预约2到检 只要调用这个接口 直接到检 @@ -135,6 +138,35 @@ class AppointmentController extends Controller ->where([['a.is_del','=',0],['a.created_at','>=',$searchInfo['start']],['a.created_at','<=',$searchInfo['end']]]) ->groupBy('a.org_code','b.org_name') ->get(); - return \Yz::Return(true,'查询成功',$list); + return \Yz::Return(true,'查询成功',['list'=>$list,'dateRange'=>[$searchInfo['start'],$searchInfo['end']]]); + } + //统计预约数量按月 + public function AppointmentCountByMonth(Request $request) + { + $userid = $request->get('userid');//中间件产生的参数 + $group = $request->get('role');//中间件产生的参数 + $searchInfo=request('searchInfo'); + if($group<>1){ + $cha=DB::table('medical_institution')->where(['link_user_id'=>$userid])->first(); + $searchInfo['sn']=$cha->sn; + } + $list=DB::table('appointment_record as a') + ->select(DB::raw('DATE_FORMAT(a.created_at, "%Y-%m") as month, COUNT(*) as count')) + ->leftJoin('medical_institution as b','a.org_code','=','b.sn'); + if(empty( $searchInfo['dateRange'])){ + $searchInfo['start']=date('Y')."-01-01 00:00:00"; + $searchInfo['end']= date('Y-m')."-31 23:59:59"; + }else{ + $searchInfo['start']=$searchInfo['dateRange'][0]." 00:00:00"; + $searchInfo['end']=$searchInfo['dateRange'][1]." 23:59:59"; + } + if(isset($searchInfo['sn'])){ + $list=$list->where('a.org_code',$searchInfo['sn']); + } + $list=$list + ->where([['a.is_del','=',0],['a.created_at','>=',$searchInfo['start']],['a.created_at','<=',$searchInfo['end']]]) + ->groupBy(DB::raw('DATE_FORMAT(a.created_at, "%Y-%m")')) + ->get(); + return \Yz::Return(true,'查询成功',['list'=>$list,'dateRange'=>[$searchInfo['start'],$searchInfo['end']]]); } } diff --git a/Laravel/app/Http/Controllers/TestController.php b/Laravel/app/Http/Controllers/TestController.php index 549086c..647ce71 100644 --- a/Laravel/app/Http/Controllers/TestController.php +++ b/Laravel/app/Http/Controllers/TestController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers; use App\Services\Admin\YeWu\AppointmentService; +use DateTime; use Illuminate\Http\Request; use App\Lib\HSM; use Illuminate\Support\Facades\DB; @@ -83,4 +84,35 @@ class TestController extends Controller echo"执行完毕,共有待处理:".$count[0]->c."条,共更新".$shu."条"; } + public function jiemi_age() + { + $count=DB::select("select count(*) as c from appointment_record where age is null "); + $list=DB::select("select * from appointment_record where age is null limit 10"); + $shu=0; + if(count($list)>0){ + + foreach ($list as $item){ + $HSM_sfz =\App\Lib\HSM::HsmDecrypt($item->id_card_num); + if($HSM_sfz['status']!=true){ + return \Yz::echoError1('调用HSM解密失败'); + } + $sfz=$HSM_sfz['data']; + + $u=DB::table('appointment_record')->where('id',$item->id)->update([ + 'age'=> \App\Lib\Tools::calculateAgeFromID($sfz,$item->created_at), + 'birthday'=>\App\Lib\Tools::getBirthdayFromIDCard($sfz) + ]); + if($u){ + $shu++; + } + sleep(0.5); + } + + + } + + + echo"执行完毕,共有待处理:".$count[0]->c."条,共更新".$shu."条"; + } + } diff --git a/Laravel/app/Lib/Tools.php b/Laravel/app/Lib/Tools.php new file mode 100644 index 0000000..92e7d40 --- /dev/null +++ b/Laravel/app/Lib/Tools.php @@ -0,0 +1,67 @@ +diff($target); +// $age = $interval->y; +// +// // 如果生日还没到,减一岁 +// if ($target->format('m-d') < $birthdate->format('m-d')) { +// $age--; +// } +// +// return $age; + // 提取出生年月日 + $birthYear = substr($idNumber, 6, 4); + $birthMonth = substr($idNumber, 10, 2); + $birthDay = substr($idNumber, 12, 2); + + // 创建出生日期和目标日期的 DateTime 对象 + $birthdate = new DateTime("$birthYear-$birthMonth-$birthDay"); + $target = new DateTime($targetDate); + + // 计算年龄 + $interval = $birthdate->diff($target); + + // 使用正确的属性获取年龄 + $age = $interval->y; + + return $age; + } +//根据身份证获取生日 + public static function getBirthdayFromIDCard($idCard) { + // 检查身份证号码是否有效 + if (!preg_match("/^(\d{15}$|^\d{17}[xX\d]$)/", $idCard)) { + return false; + } + + // 提取出生日期部分 + $birthday = substr($idCard, 6, 8); + + // 如果是15位的身份证号码,需要将年份从两位扩展到四位(假设1900-2000) + if (strlen($idCard) == 15) { + $year = substr($birthday, 0, 2); + if ($year >= 0 && $year <= 20) { // 2000-2020 + $birthday = '20' . $birthday; + } else { // 1900-1999 + $birthday = '19' . $birthday; + } + } + + // 格式化并返回日期字符串 + return date('Y-m-d', strtotime($birthday)); + } +} diff --git a/Laravel/app/Services/mH5/OrganizationService.php b/Laravel/app/Services/mH5/OrganizationService.php index d7f1985..9c61b79 100644 --- a/Laravel/app/Services/mH5/OrganizationService.php +++ b/Laravel/app/Services/mH5/OrganizationService.php @@ -67,7 +67,7 @@ class OrganizationService $info=$arr['info']; //判断用户是否有效 - $cha_info=DB::table('persons')->select(['id','name','id_card_num'])->where(['openid'=>$openid,'status'=>1])->get(); + $cha_info=DB::table('persons')->select(['id','name','id_card_num','sex'])->where(['openid'=>$openid,'status'=>1])->get(); if(!count($cha_info)){ return \Yz::Return(false,'未找到有效用户'); } @@ -107,7 +107,11 @@ class OrganizationService if($Hmac['status']!=true){ return \Yz::echoError1('HMAC摘要失败'); } - + $sfz_HSM=\App\Lib\HSM::HsmDecrypt($cha_info[0]->id_card_num); + if($sfz_HSM['status']!=true){ + return \Yz::echoError1('身份证解密失败'); + } + $sfz_mingwen=$sfz_HSM['data']; //如果都通过则继续 DB::beginTransaction(); try { @@ -117,6 +121,9 @@ class OrganizationService 'calendar_id' => $info['calendar_id'], 'name' => $cha_info[0]->name, 'id_card_num' => $cha_info[0]->id_card_num, + 'sex'=>$cha_info[0]->sex, + 'age'=>\App\Lib\Tools::calculateAgeFromID($sfz_mingwen,$nowtime), + 'birthday'=>\App\Lib\Tools::getBirthdayFromIDCard($sfz_mingwen), 'person_id'=>$cha_info[0]->id, 'openid'=>$openid, 'date'=>$q_date[0]->date, diff --git a/Laravel/routes/api.php b/Laravel/routes/api.php index 401cae7..0d1c999 100644 --- a/Laravel/routes/api.php +++ b/Laravel/routes/api.php @@ -53,6 +53,7 @@ Route::group(['middleware'=>['checktoken','log'],'prefix'=>'v1'],function () { Route::post('admin/XTSignBindUser','App\Http\Controllers\API\XTSignController@bindUser');//admin后台用户绑定协同签名useid Route::post('admin/UkeyBindUser','App\Http\Controllers\API\UkeyController@Bind');//admin后台用户绑定协同签名useid Route::post('admin/AppointmentCount','App\Http\Controllers\API\Admin\YeWu\AppointmentController@AppointmentCount'); //admin后台预约统计 + Route::post('admin/AppointmentCountByMonth','App\Http\Controllers\API\Admin\YeWu\AppointmentController@AppointmentCountByMonth'); //admin后台预约统计 Route::post('admin/InstitutionGetList','App\Http\Controllers\API\Admin\YeWu\InstitutionController@GetList');//获取体检机构列表 Route::post('admin/InstitutionSavdSeting','App\Http\Controllers\API\Admin\YeWu\InstitutionController@SavdSeting');//保存机构设置 Route::post('admin/InstitutionGetSetingDetail','App\Http\Controllers\API\Admin\YeWu\InstitutionController@GetSetingDetail');//获取机构设置详情 diff --git a/Laravel/routes/web.php b/Laravel/routes/web.php index 17aa519..ce93021 100644 --- a/Laravel/routes/web.php +++ b/Laravel/routes/web.php @@ -37,3 +37,4 @@ Route::any('/yuju_test', function () { //测试 语句 Route::any('/pljm','App\Http\Controllers\TestController@jiami' ); +Route::any('/jiemage','App\Http\Controllers\TestController@jiemi_age' ); diff --git a/el-admin/src/api/api.js b/el-admin/src/api/api.js index db4781d..f037905 100644 --- a/el-admin/src/api/api.js +++ b/el-admin/src/api/api.js @@ -137,6 +137,10 @@ export const GetLogTableName = (data={}) => { export const AppointmentCount = (data={}) => { return axios({url:import.meta.env.VITE_APP_API+'v1/admin/AppointmentCount',data:data}) } +//预约登记统计(按月) +export const AppointmentCountByMonth = (data={}) => { + return axios({url:import.meta.env.VITE_APP_API+'v1/admin/AppointmentCountByMonth',data:data}) +} //机构管理获取列表 export const InstitutionGetList = (data={}) => { return axios({url:import.meta.env.VITE_APP_API+'v1/admin/InstitutionGetList',data:data}) diff --git a/el-admin/src/views/MedicalCenter/Dashboard.vue b/el-admin/src/views/MedicalCenter/Dashboard.vue index b47e6bb..caf04bc 100644 --- a/el-admin/src/views/MedicalCenter/Dashboard.vue +++ b/el-admin/src/views/MedicalCenter/Dashboard.vue @@ -1,20 +1,38 @@