Browse Source

医案导出相关优化

pull/1/head
pengda 9 months ago
parent
commit
25ce7c87e8
  1. 2
      config/define.php
  2. 92
      control/index.php
  3. 5
      model/mCase.php
  4. 60
      model/mUserCase.php
  5. 62
      view/templates/index/user_case.html

2
config/define.php

@ -29,6 +29,8 @@
$GLOBALS['notice_qqmail_list'] = array( $GLOBALS['notice_qqmail_list'] = array(
'wangpd5@163.com' => 'GTKEOWXEGEUOERNR', 'wangpd5@163.com' => 'GTKEOWXEGEUOERNR',
); );
define('RQ_USER_CASE_DATA', 'rq_user_case_data_%s_%d');
define('RQ_USER_CASE_HTML_URL', TCM_DOMAIN . '/export_pdf?key=%s');
define('USER_CASE_PDF_PATH', DATACENTER_ROOT.'/tcm_pdf/%d/'); define('USER_CASE_PDF_PATH', DATACENTER_ROOT.'/tcm_pdf/%d/');
define('USER_CASE_PDF_URL', TCM_DOMAIN.'/case_pdf/%d/%s.pdf'); define('USER_CASE_PDF_URL', TCM_DOMAIN.'/case_pdf/%d/%s.pdf');

92
control/index.php

@ -131,9 +131,9 @@ class index extends publicBase {
} }
public function ajax_user_case_detail() { public function ajax_user_case_detail() {
$id = $this->post('id')+0;
$uid = $this->post('uid'); $uid = $this->post('uid');
$token = $this->post('token'); $token = $this->post('token');
$id = $this->post('id')+0;
if(empty($uid) || empty($token) || empty($id))$this->ajax_json(false, '非法请求'); if(empty($uid) || empty($token) || empty($id))$this->ajax_json(false, '非法请求');
$m_user_case = new mUserCase(); $m_user_case = new mUserCase();
@ -144,11 +144,11 @@ class index extends publicBase {
} }
public function ajax_collect_log() { public function ajax_collect_log() {
$start = $this->get('start') ? $this->get('start') : 0; $page_num = $this->post('page_num') ? $this->post('page_num') : 1;
$pagesize = $this->get('pagesize') ? $this->get('pagesize') : 500; $page_size = $this->post('page_size') ? $this->post('page_size') : 100;
$mCase = new mCase(); $m_case = new mCase();
$data = $mCase->getCollectLog($start,$pagesize); $data = $m_case->getCollectLog($page_num, $page_size);
$this->ajax_json(true, '获取成功', $data); $this->ajax_json(true, '获取成功', $data);
} }
@ -157,73 +157,85 @@ class index extends publicBase {
$code = $this->get('code'); $code = $this->get('code');
if(!$code)$this->ajax_json(false, '非法请求'); if(!$code)$this->ajax_json(false, '非法请求');
$mUser = new mUser(); $m_user = new mUser();
$openid = $m_user->getOpenid($code);
$openid = $mUser->getOpenid($code); if(!$openid)$this->ajax_json(false, $m_user->getError());
if(!$openid)$this->ajax_json(false, $mUser->getError());
$user = $mUser->getUserByOpenid($openid); $user = $m_user->getUserByOpenid($openid);
if($user){ if($user){
$data = array( $token = $m_user->getToken($user['uid']);
'uid' => $user['uid'], $this->ajax_json(true, '登录成功', array('uid' => $user['uid'], 'token'=> $token));
'token'=> $mUser->getToken($user['uid']),
);
$this->ajax_json(true, '登录成功', $data);
} }
//获取唯一uid串 //获取唯一uid串
$uid = $mUser->createUniqueUid($openid); $uid = $m_user->createUniqueUid($openid);
$user = $mUser->getUserByUid($uid); $user = $m_user->getUserByUid($uid);
if($user)$this->ajax_json(false, 'uid生成失败'); if($user)$this->ajax_json(false, 'uid生成失败');
$id = $mUser->createUser(array('uid'=>$uid,'openid'=>$openid)); $id = $m_user->createUser(array('uid'=>$uid,'openid'=>$openid));
if(!$id)$this->ajax_json(false, '用户创建失败'); if(!$id)$this->ajax_json(false, '用户创建失败');
$data = array( $token = $m_user->getToken($user['uid']);
'uid' => $uid, $this->ajax_json(true, '登录成功', array('uid' => $user['uid'], 'token'=> $token));
'token'=> $mUser->getToken($uid),
);
$this->ajax_json(true, '登录成功', $data);
} }
public function ajax_contact_us(){ public function ajax_contact_us(){
$this->ajax_json(true, '获取成功',array('img_url'=> CONTACT_US_IMG_URL)); $this->ajax_json(true, '获取成功',array('img_url'=> CONTACT_US_IMG_URL));
} }
public function ajax_pdf_url(){ public function export_user_case_list(){
$uid = $this->post('uid'); $uid = $this->post('uid');
$token = $this->post('token'); $token = $this->post('token');
if(empty($uid) || empty($token))$this->ajax_json(false, '非法请求'); if(empty($uid) || empty($token))$this->ajax_json(false, '非法请求');
$mUser = new mUser(); $page_num = $this->post('page_num') ? $this->post('page_num') : 1;
$is_login = $mUser->validateToken($uid,$token); $page_size = $this->post('page_size') ? $this->post('page_size') : 100;
if(!$is_login)$this->ajax_json(false, '请登录后操作');
$mUserCase = new mUserCase(); $m_user_case = new mUserCase();
$data = $m_user_case->getUserCaseList($uid, $token, $page_num, $page_size, true, true);
if(!$data)$this->ajax_json(false, $m_user_case->getError());
$id = $this->post('id'); $data_key = sprintf(RQ_USER_CASE_DATA, $uid, 0);
if($id){
$data = $mUserCase->getUserCaseInfo($id, $uid);
if (!$data) $this->ajax_json(false, $mUserCase->getError());
$pdf_url = $mUserCase->createUserCasePdf($uid, $data); $robj = $m_user_case->initRedis();
$robj->setex($data_key,60,json_encode($data));
$pdf_url = $m_user_case->createPdf($uid, $data_key);
$this->ajax_json(true, '获取成功',array('pdf_url'=> $pdf_url)); $this->ajax_json(true, '获取成功',array('pdf_url'=> $pdf_url));
} }
//如果id不存在默认保存前500个医案 public function export_user_case(){
$start = $this->post('start') ? $this->post('start') : 0; $uid = $this->post('uid');
$pagesize = $this->post('pagesize') ? $this->post('pagesize') : 500; $token = $this->post('token');
$id = $this->post('id')+0;
if(empty($uid) || empty($token) || empty($id))$this->ajax_json(false, '非法请求');
$data = $mUserCase->getUserCaseList($uid, $start, $pagesize, true); $m_user_case = new mUserCase();
if (!$data) $this->ajax_json(false, $mUserCase->getError()); $data = $m_user_case->getUserCaseInfo($uid, $token, $id, true);
if(!$data)$this->ajax_json(false, $m_user_case->getError());
$data_key = sprintf(RQ_USER_CASE_DATA, $uid, $id);
$pdf_url = $mUserCase->createUserCasePdf($uid, $data); $robj = $m_user_case->initRedis();
$robj->setex($data_key,60,json_encode($data));
$pdf_url = $m_user_case->createPdf($uid, $data_key);
$this->ajax_json(true, '获取成功',array('pdf_url'=> $pdf_url)); $this->ajax_json(true, '获取成功',array('pdf_url'=> $pdf_url));
} }
public function export_pdf()
{
$key = $this->get('key');
$m_user_case = new mUserCase();
$robj = $m_user_case->initRedis();
$data = $robj->get($key);
$this->view['data'] = json_decode($data,true);
$this->setViewFormat('html');
$this->setViewTpl('index/user_case.html');
}
public function ajax_mail(){ public function ajax_mail(){
$uid = $this->post('uid'); $uid = $this->post('uid');
$token = $this->post('token'); $token = $this->post('token');

5
model/mCase.php

@ -186,8 +186,9 @@ class mCase extends mBase {
return true; return true;
} }
public function getCollectLog($start,$pagesize) { public function getCollectLog($page_num, $page_size) {
return $this->obj->selectAll($this->collect_log_tbl, array(), 'collect_time desc ', array($start, $pagesize)); $offset = ($page_num - 1) * $page_size;
return $this->obj->selectAll($this->collect_log_tbl, array(), 'collect_time desc ', array($offset, $page_size));
} }
} }

60
model/mUserCase.php

@ -104,7 +104,7 @@ class mUserCase extends mBase {
return $id; return $id;
} }
public function getUserCaseInfo($uid, $token, $id){ public function getUserCaseInfo($uid, $token, $id, $is_format_data = false){
$m_user = new mUser(); $m_user = new mUser();
$is_login = $m_user->validateToken($uid,$token); $is_login = $m_user->validateToken($uid,$token);
if(!$is_login){$this->setError('请登录后操作');return false;} if(!$is_login){$this->setError('请登录后操作');return false;}
@ -134,15 +134,18 @@ class mUserCase extends mBase {
$user_herb = $this->getUserHerbByIds($user_herb_ids); $user_herb = $this->getUserHerbByIds($user_herb_ids);
if(empty($herb) && empty($user_herb)){$this->setError('找不到相关药材');return false;} if(empty($herb) && empty($user_herb)){$this->setError('找不到相关药材');return false;}
return array( $data = array(
'user_case' => $user_case, 'user_case' => $user_case,
'case' => $case, 'case' => $case,
'herb' => array_column($herb,null,'id'), 'herb' => array_column($herb,null,'id'),
'user_herb' => array_column($user_herb,null,'id'), 'user_herb' => array_column($user_herb,null,'id'),
); );
if($is_format_data)return $this->formatUserCaseData($data);
return $data;
} }
public function getUserCaseList($uid, $token, $page_num, $page_size, $get_case_herb = false){ public function getUserCaseList($uid, $token, $page_num, $page_size, $get_case_herb = false, $is_format_data = false){
$m_user = new mUser(); $m_user = new mUser();
$is_login = $m_user->validateToken($uid,$token); $is_login = $m_user->validateToken($uid,$token);
if(!$is_login){$this->setError('请登录后操作');return false;} if(!$is_login){$this->setError('请登录后操作');return false;}
@ -181,19 +184,22 @@ class mUserCase extends mBase {
$user_herb = $this->getUserHerbByIds($user_herb_ids); $user_herb = $this->getUserHerbByIds($user_herb_ids);
if(empty($herb) && empty($user_herb)){$this->setError('找不到相关药材');return false;} if(empty($herb) && empty($user_herb)){$this->setError('找不到相关药材');return false;}
return array( $data = array(
'user_case_list' => $user_case, 'user_case_list' => $user_case,
'case_list' => $case, 'case_list' => $case,
'herb' => array_column($herb,null,'id'), 'herb' => array_column($herb,null,'id'),
'user_herb' => array_column($user_herb,null,'id'), 'user_herb' => array_column($user_herb,null,'id'),
); );
if($is_format_data)return $this->formatUserCaseData($data);
return $data;
} }
public function getUserHerbByIds($ids){ public function getUserHerbByIds($ids){
return $this->obj->selectIn($this->user_herb_tbl, array('id'=>$ids)); return $this->obj->selectIn($this->user_herb_tbl, array('id'=>$ids));
} }
public function createUserCasePdf($uid, $data){ public function formatUserCaseData($data){
//兼容单个医案导出pdf //兼容单个医案导出pdf
if(isset($data['user_case'])){ if(isset($data['user_case'])){
$data['user_case_list'][0] = $data['user_case']; $data['user_case_list'][0] = $data['user_case'];
@ -202,34 +208,12 @@ class mUserCase extends mBase {
unset($data['case']); unset($data['case']);
} }
// 创建PDF对象 foreach ($data['user_case_list'] as &$item){
$mpdf = new mPDF();
$pdf_name = "";
$htmlContent = "<p style='text-align: center;font-size: 40px;font-weight: bold'>我的医案</p>";
foreach ($data['user_case_list'] as $item){
$pdf_name .= $item['name'];
$item['patient_sex'] = $item['patient_sex']==0?'男':'女'; $item['patient_sex'] = $item['patient_sex']==0?'男':'女';
$item['case_time'] = date('Y年m月d日',strtotime($item['case_time'])); $item['case_time'] = date('Y年m月d日',strtotime($item['case_time']));
$htmlContent .= "<p style='border-left:10px solid #DD4B38;font-size: 32px;padding-left: 5px;font-weight: bold;line-height: 37px;'>{$item['name']}</p>";
$htmlContent .= "<p style='font-size: 26px;line-height: 37px;'>{$item['patient_name']},{$item['patient_sex']},{$item['patient_age']}岁,{$item['case_time']}诊</p>";
if($item['patient_say']){
$htmlContent .= "<p style='font-size: 26px;line-height: 37px;'>{$item['patient_say']}</p>";
}
if($item['first_diagnosis']){
$htmlContent .= "<p style='font-size: 26px;line-height: 37px;'>{$item['first_diagnosis']}</p>";
}
if($item['diagnosis']){
$htmlContent .= "<p style='font-size: 26px;line-height: 37px;'>{$item['diagnosis']}</p>";
}
$htmlContent .= "<div style='background-color: #FDF9F2;font-size: 26px;line-height: 37px;padding:0 37px'>";
$htmlContent .= "<p><span style='color: #955239;'>处方</span>&nbsp;&nbsp;&nbsp;&nbsp;共{$item['prescribe_num']}付</p>";
$case = $data['case_list'][$item['case_id']]; $case = $data['case_list'][$item['case_id']];
$case_str = "选&nbsp;".$case['source']."&nbsp;".$case['name']; $item['case_info'] = "选&nbsp;".$case['source']."&nbsp;".$case['name'].":";
$herb_arr = array(); $herb_arr = array();
foreach ($item['prescribe_herb'] as $herb){ foreach ($item['prescribe_herb'] as $herb){
@ -243,15 +227,21 @@ class mUserCase extends mBase {
} }
$herb_str = implode('、',$herb_arr); $herb_str = implode('、',$herb_arr);
$htmlContent .= "<p>{$case_str}:&nbsp;{$herb_str}</p>"; $item['case_herb_info'] = $herb_str;
$htmlContent .= "</div>";
if($data['feedback']){
$htmlContent .= "<p style='font-size: 26px;line-height: 37px;'>{$item['feedback']}</p>";
} }
return $data;
} }
$pdf_name = md5($pdf_name); public function createPdf($uid, $data_key)
{
$mpdf = new mPDF();
$htmlContent = file_get_contents(sprintf(RQ_USER_CASE_HTML_URL, $data_key));
$mpdf->WriteHTML($htmlContent);
$pdf_name = md5($data_key);
$temp_dir = sprintf(USER_CASE_PDF_PATH, $uid); $temp_dir = sprintf(USER_CASE_PDF_PATH, $uid);
if(!is_dir($temp_dir)) { if(!is_dir($temp_dir)) {
@ -260,8 +250,6 @@ class mUserCase extends mBase {
chgrp($temp_dir, 'nobody'); chgrp($temp_dir, 'nobody');
} }
$mpdf->WriteHTML($htmlContent);
$mpdf->Output($temp_dir . $pdf_name . ".pdf" , 'F'); // D表示下载,I表示在浏览器中查看 $mpdf->Output($temp_dir . $pdf_name . ".pdf" , 'F'); // D表示下载,I表示在浏览器中查看
return sprintf(USER_CASE_PDF_URL, $uid, $pdf_name); return sprintf(USER_CASE_PDF_URL, $uid, $pdf_name);

62
view/templates/index/user_case.html

@ -0,0 +1,62 @@
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="{$smarty.const.CSS_URL}/js/jquery-1.8.1.min.js"></script>
<script type="text/javascript" src="{$smarty.const.CSS_URL}/js/jquery.form.js"></script>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>首页</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
{literal}
<style>
body{
padding: 70px;
font-size: 26px;
line-height: 37px;
}
.title{
text-align: center;
font-size: 40px;
font-weight: bold;
}
.user_case_name{
border-left:10px solid #DD4B38;
font-size: 32px;
padding-left: 5px;
font-weight: bold;
margin-top: 50px;
}
.line{
margin: 20px 0;
}
.case{
background-color: #FDF9F2;
padding: 20px;
margin: 20px 0;
}
.case-title{
color: #955239;
}
.case-line{
line-height: 37px;
padding-bottom: 20px;
}
</style>
{/literal}
</head>
<body>
<div class="title">我的医案</div>
{foreach from=$data.user_case_list key=key item=item}
<div class="user_case_name">{$item.name}</div>
<div class="line">{$item.patient_name},{$item.patient_sex},{$item.patient_age}岁,{$item.case_time}诊</div>
<div class="line">{$item.patient_say}</div>
<div class="line">{$item.first_diagnosis}</div>
<div class="line">{$item.diagnosis}</div>
<div class="case">
<div class="case-line"><span class="case-title">处方</span>&nbsp;&nbsp;&nbsp;共{$item.prescribe_num}付</div>
<div>{$item.case_info}{$item.case_herb_info}</div>
</div>
<div class="line">{$item.feedback}</div>
{/foreach}
</body>
</html>
Loading…
Cancel
Save