obj = new dUserCase(); $this->tbl = 'tcm_user_case'; } public function insertUserCase($info) { $id = $this->obj->insert($this->tbl, $info); if (empty($id)) { $this->setError('添加医案失败'); return false; } return $id; } public function updateUserCase($id, $info) { $res = $this->obj->update($this->tbl, $info, array('sql' => '`id`=?', 'vals' => array($id))); if (!$res) { $this->setError('更新失败'); return false; } return true; } public function getUserCaseById($uid, $id) { return $this->obj->select($this->tbl, array('sql' => '`id`=? and `uid`=?', 'vals' => array($id, $uid))); } public function saveUserCase($uid, $id, $data) { if (empty($data['name'])) { $this->setError('药方名称不能为空'); return false; } if (empty($data['feedback'])) { $this->setError('用药反馈不能为空'); return false; } $user_case = $this->getUserCaseById($uid, $id); if (empty($user_case)) { $this->setError('找不到相关医案'); return false; } $res = $this->updateUserCase($id, $data); if (!$res) { $this->writeLog('user_case', 'update_error_log', '更新医案失败|' . $uid . '|' . json_encode($data, JSON_UNESCAPED_UNICODE)); return false; } return true; } public function createUserCase($uid, $formula_id, $data) { if (empty($data['patient_name'])) { $this->setError('患者姓名不能为空'); return false; } if ($data['patient_age'] <= 0) { $this->setError('患者年龄不正确'); return false; } if ($data['sex'] < 0) { $this->setError('患者性别不能为空'); return false; } if ($data['prescribe_num'] <= 0) { $this->setError('开药数量不正确'); return false; } if (empty($data['prescribe_herb'])) { $this->setError('开药详情不能为空'); return false; } if (empty($data['patient_say'])) { $this->setError('主诉不能为空'); return false; } if (empty($data['first_diagnosis'])) { $this->setError('舌诊脉诊不能为空'); return false; } if (empty($data['diagnosis'])) { $this->setError('诊断不能为空'); return false; } //录医案 医案名称默认为药方名称 if ($formula_id > 0) { $mformula = new mFormula(); $formula = $mformula->getFormulaById($formula_id); if (!$formula) { $this->setError('找不到相关药方'); return false; } if ($formula['uid'] > 0 && $uid != $formula['uid']) { $this->setError('这不是你的药方'); return false; } $data['name'] = $formula['name']; } //手工录医案 生成随机医案名称 if ($formula_id == 0) { $data['name'] = "手工录入医案" . date("mdHi"); } //格式化医案开药详情 $mformula = new mFormula(); $prescribe_herb = array(); $prescribe_herb_data = json_decode($data['prescribe_herb'], true); foreach ($prescribe_herb_data as $item) { $temp = array( 'num' => $item['num'], ); if (isset($item['herb_id'])) { $herb = $mformula->getHerbById($item['herb_id']); if (!$herb) { $this->setError('药材不存在|' . $item['herb_id']); return false; } $temp['herb_id'] = $herb['id']; $prescribe_herb[] = $temp; continue; } if (isset($item['name'])) { $herb = $mformula->getHerb($uid, $item['name'], ''); if ($herb) { $temp['herb_id'] = $herb['id']; $prescribe_herb[] = $temp; continue; } $herb_id = $mformula->insertHerb(array('uid' => $uid, 'name' => $item['name'])); if (!$herb_id) { $this->writeLog('formula', 'insert_error_log', '添加药材失败|' . $uid . '|' . $item['name']); return false; } $temp['herb_id'] = $herb_id; $prescribe_herb[] = $temp; } } if (!$prescribe_herb) { $this->setError('医案开药详情不正确'); return false; } $data['prescribe_herb'] = json_encode($prescribe_herb); $data['formula_id'] = $formula_id; $data['uid'] = $uid; $id = $this->insertUserCase($data); if (!$id) { $this->writeLog('user_case', 'insert_error_log', '添加医案失败|' . $uid . '|' . json_encode($data, JSON_UNESCAPED_UNICODE)); return false; } if ($formula_id > 0) { //更新用户药方使用次数 $res = $mformula->updateFormulaUseLog($uid, $formula_id); if (!$res) { $this->writeLog('formula', 'update_error_log', '药方使用次数更新失败|' . $uid . '|' . $formula_id); return false; } } return $id; } public function getUserCaseInfo($uid, $id) { $user_case = $this->getUserCaseById($uid, $id); if (empty($user_case)) { $this->setError('找不到相关医案'); return false; } $mformula = new mFormula(); if ($user_case['formula_id'] > 0) { $formula = $mformula->getFormulaInfo($user_case['formula_id'], $uid); if (empty($formula)) { $this->setError('找不到相关药方'); return false; } $user_case['formula'] = $formula; } //格式化医案开药详情 $prescribe_herb_data = json_decode($user_case['prescribe_herb'], true); $herbids = array_column($prescribe_herb_data, 'herb_id'); $herbs = $mformula->getHerbs($herbids); $herb_arr = array_column($herbs, null, 'id'); $prescribe_herb = array(); foreach ($prescribe_herb_data as &$item) { $temp = array( 'id' => $item['id'], 'name' => $herb_arr[$item['herb_id']]['name'], 'num' => $item['num'], 'desc' => $herb_arr[$item['herb_id']]['desc'], ); $prescribe_herb[] = $temp; } $user_case['prescribe_herb'] = $prescribe_herb; return $user_case; } public function getUserCaseList($uid, $page_num, $page_size, $start_date = '', $end_date = '') { $offset = ($page_num - 1) * $page_size; $where = 'uid = ?'; $vals = array($uid); if ($start_date) { $where .= ' and case_time > ?'; array_push($vals, $start_date); } if ($end_date) { $where .= ' and case_time < ?'; array_push($vals, $end_date); } return $this->obj->selectAll($this->tbl, array('sql' => $where, 'vals' => $vals), 'case_time desc ', array($offset, $page_size)); } public function getUserCaseListCount($uid) { return $this->obj->count($this->tbl, array('sql' => '`uid`=?', 'vals' => array($uid))); } public function getUserCaseListPdfInfo($uid, $page_num, $page_size, $start_date, $end_date) { $data = $this->getUserCaseList($uid, $page_num, $page_size, $start_date, $end_date); $formula_ids = array(); $herb_ids = array(); foreach ($data as &$value) { $value['prescribe_herb'] = json_decode($value['prescribe_herb'], true); $herb_ids = array_merge($herb_ids, array_column($value['prescribe_herb'], 'herb_id')); $formula_ids[] = $value['formula_id']; } $mformula = new mFormula(); //查询药方索引 if (!empty($formula_ids)) { $formula_data = $mformula->getFormulaByIds($formula_ids); $formula_arr = array_column($formula_data, null, 'id'); } $herbs = $mformula->getHerbs($herb_ids); $herb_arr = array_column($herbs, null, 'id'); //格式化pdf数据 foreach ($data as &$value) { $value['patient_sex'] = $value['patient_sex'] == 0 ? '男' : '女'; $value['case_time'] = date('Y年m月d日', strtotime($value['case_time'])); //格式化开药详情 $herb_str_arr = array(); foreach ($value['prescribe_herb'] as $va) { $herb_name = $herb_arr[$va['herb_id']]['name']; $herb_num = $va['num']; $herb_desc = $herb_arr[$va['herb_id']]['desc']; $herb_str_arr[] = $herb_name . $herb_desc . $herb_num . "克"; } $value['prescribe_herb_info'] = implode('、', $herb_str_arr); $value['formula_info'] = ''; if (isset($formula_arr[$value['formula_id']])) { $formula_info = $formula_arr[$value['formula_id']]; $value['formula_info'] .= "选 "; if (!empty($formula_info['source'])) { $value['formula_info'] .= $formula_info['source'] . " "; } if (!empty($formula_info['name'])) { $value['formula_info'] .= $formula_info['name'] . ":"; } } unset($value['id']); unset($value['uid']); unset($value['formula_id']); unset($value['prescribe_herb']); unset($value['create_time']); } return $data; } public function getUserCasePdfInfo($uid, $id) { $data = $this->getUserCaseInfo($uid, $id); $data['patient_sex'] = $data['patient_sex'] == 0 ? '男' : '女'; $data['case_time'] = date('Y年m月d日', strtotime($data['case_time'])); //格式化pdf数据 $herb_arr = array(); foreach ($data['prescribe_herb'] as $herb) { $herb_arr[] = $herb['name'] . $herb['num'] . "克"; } $herb_str = implode('、', $herb_arr); $data['prescribe_herb_info'] = $herb_str; //查询药方索引 $data['formula_info'] = ''; if (!empty($data['formula'])) { $data['formula_info'] .= "选 "; if (!empty($data['formula']['source'])) { $data['formula_info'] .= $data['formula']['source'] . " "; } if (!empty($data['formula']['name'])) { $data['formula_info'] .= $data['formula']['name'] . ":"; } } unset($data['id']); unset($data['uid']); unset($data['index_id']); unset($data['prescribe_herb']); unset($data['create_time']); unset($data['formula']); return $data; } public function createPdf($uid, $pdf_name, $pdf_html) { $temp_dir = sprintf(USER_CASE_PDF_PATH, $uid); if (!is_dir($temp_dir)) { mkdir($temp_dir, 0755, true); chown($temp_dir, 'nobody'); chgrp($temp_dir, 'nobody'); } $mpdf = new mPDF(); $mpdf->WriteHTML($pdf_html); return $mpdf->Output($temp_dir . $pdf_name, 'F'); // D表示下载,I表示在浏览器中查看 } }