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(
'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_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() {
$id = $this->post('id')+0;
$uid = $this->post('uid');
$token = $this->post('token');
$id = $this->post('id')+0;
if(empty($uid) || empty($token) || empty($id))$this->ajax_json(false, '非法请求');
$m_user_case = new mUserCase();
@ -144,11 +144,11 @@ class index extends publicBase {
}
public function ajax_collect_log() {
$start = $this->get('start') ? $this->get('start') : 0;
$pagesize = $this->get('pagesize') ? $this->get('pagesize') : 500;
$page_num = $this->post('page_num') ? $this->post('page_num') : 1;
$page_size = $this->post('page_size') ? $this->post('page_size') : 100;
$mCase = new mCase();
$data = $mCase->getCollectLog($start,$pagesize);
$m_case = new mCase();
$data = $m_case->getCollectLog($page_num, $page_size);
$this->ajax_json(true, '获取成功', $data);
}
@ -157,73 +157,85 @@ class index extends publicBase {
$code = $this->get('code');
if(!$code)$this->ajax_json(false, '非法请求');
$mUser = new mUser();
$openid = $mUser->getOpenid($code);
if(!$openid)$this->ajax_json(false, $mUser->getError());
$m_user = new mUser();
$openid = $m_user->getOpenid($code);
if(!$openid)$this->ajax_json(false, $m_user->getError());
$user = $mUser->getUserByOpenid($openid);
$user = $m_user->getUserByOpenid($openid);
if($user){
$data = array(
'uid' => $user['uid'],
'token'=> $mUser->getToken($user['uid']),
);
$this->ajax_json(true, '登录成功', $data);
$token = $m_user->getToken($user['uid']);
$this->ajax_json(true, '登录成功', array('uid' => $user['uid'], 'token'=> $token));
}
//获取唯一uid串
$uid = $mUser->createUniqueUid($openid);
$user = $mUser->getUserByUid($uid);
$uid = $m_user->createUniqueUid($openid);
$user = $m_user->getUserByUid($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, '用户创建失败');
$data = array(
'uid' => $uid,
'token'=> $mUser->getToken($uid),
);
$this->ajax_json(true, '登录成功', $data);
$token = $m_user->getToken($user['uid']);
$this->ajax_json(true, '登录成功', array('uid' => $user['uid'], 'token'=> $token));
}
public function ajax_contact_us(){
$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');
$token = $this->post('token');
if(empty($uid) || empty($token))$this->ajax_json(false, '非法请求');
$mUser = new mUser();
$is_login = $mUser->validateToken($uid,$token);
if(!$is_login)$this->ajax_json(false, '请登录后操作');
$page_num = $this->post('page_num') ? $this->post('page_num') : 1;
$page_size = $this->post('page_size') ? $this->post('page_size') : 100;
$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');
if($id){
$data = $mUserCase->getUserCaseInfo($id, $uid);
if (!$data) $this->ajax_json(false, $mUserCase->getError());
$data_key = sprintf(RQ_USER_CASE_DATA, $uid, 0);
$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));
}
//如果id不存在默认保存前500个医案
$start = $this->post('start') ? $this->post('start') : 0;
$pagesize = $this->post('pagesize') ? $this->post('pagesize') : 500;
public function export_user_case(){
$uid = $this->post('uid');
$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);
if (!$data) $this->ajax_json(false, $mUserCase->getError());
$m_user_case = new mUserCase();
$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));
}
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(){
$uid = $this->post('uid');
$token = $this->post('token');

5
model/mCase.php

@ -186,8 +186,9 @@ class mCase extends mBase {
return true;
}
public function getCollectLog($start,$pagesize) {
return $this->obj->selectAll($this->collect_log_tbl, array(), 'collect_time desc ', array($start, $pagesize));
public function getCollectLog($page_num, $page_size) {
$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;
}
public function getUserCaseInfo($uid, $token, $id){
public function getUserCaseInfo($uid, $token, $id, $is_format_data = false){
$m_user = new mUser();
$is_login = $m_user->validateToken($uid,$token);
if(!$is_login){$this->setError('请登录后操作');return false;}
@ -134,15 +134,18 @@ class mUserCase extends mBase {
$user_herb = $this->getUserHerbByIds($user_herb_ids);
if(empty($herb) && empty($user_herb)){$this->setError('找不到相关药材');return false;}
return array(
$data = array(
'user_case' => $user_case,
'case' => $case,
'herb' => array_column($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();
$is_login = $m_user->validateToken($uid,$token);
if(!$is_login){$this->setError('请登录后操作');return false;}
@ -181,19 +184,22 @@ class mUserCase extends mBase {
$user_herb = $this->getUserHerbByIds($user_herb_ids);
if(empty($herb) && empty($user_herb)){$this->setError('找不到相关药材');return false;}
return array(
$data = array(
'user_case_list' => $user_case,
'case_list' => $case,
'herb' => array_column($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){
return $this->obj->selectIn($this->user_herb_tbl, array('id'=>$ids));
}
public function createUserCasePdf($uid, $data){
public function formatUserCaseData($data){
//兼容单个医案导出pdf
if(isset($data['user_case'])){
$data['user_case_list'][0] = $data['user_case'];
@ -202,34 +208,12 @@ class mUserCase extends mBase {
unset($data['case']);
}
// 创建PDF对象
$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'];
foreach ($data['user_case_list'] as &$item){
$item['patient_sex'] = $item['patient_sex']==0?'男':'女';
$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_str = "选&nbsp;".$case['source']."&nbsp;".$case['name'];
$item['case_info'] = "选&nbsp;".$case['source']."&nbsp;".$case['name'].":";
$herb_arr = array();
foreach ($item['prescribe_herb'] as $herb){
@ -243,15 +227,21 @@ class mUserCase extends mBase {
}
$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);
if(!is_dir($temp_dir)) {
@ -260,8 +250,6 @@ class mUserCase extends mBase {
chgrp($temp_dir, 'nobody');
}
$mpdf->WriteHTML($htmlContent);
$mpdf->Output($temp_dir . $pdf_name . ".pdf" , 'F'); // D表示下载,I表示在浏览器中查看
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