Browse Source

查药方接口 列表增加用户自拟药方

查药方详情 兼容查询用户自拟药方
pull/1/head
pengda 8 months ago
parent
commit
07e73e0064
  1. 57
      control/index.php
  2. 21
      data/dFormula.php
  3. 214
      model/mFormula.php

57
control/index.php

@ -27,27 +27,27 @@ class index extends publicBase {
public function home() { public function home() {
$id = $this->get('id'); $id = $this->get('id');
$m_case = new mCase(); $mformula = new mFormulaNew();
$data = $m_case->getCaseInfo($id); $data = $mformula->getFormulaInfo($id);
$this->view['data'] = $data; $this->view['data'] = $data;
} }
public function ajax_save_case() { public function ajax_save_formula() {
$name = trim($this->post('name')); $name = trim($this->post('name'));
$source = trim($this->post('source')); $source = trim($this->post('source'));
$method = trim($this->post('method')); $method = trim($this->post('method'));
$herbs = $this->post('herbs'); $herbs = $this->post('herbs');
//新增药方 //新增药方
$m_case = new mCase(); $mformula = new mFormulaNew();
$id = $m_case->createCase($name, $source, $method, $herbs); $id = $mformula->createCase($name, $source, $method, $herbs);
if (!$id) $this->ajax_json(false, $m_case->getError()); if (!$id) $this->ajax_json(false, $mformula->getError());
$this->ajax_json(true, '添加成功'); $this->ajax_json(true, '添加成功');
} }
public function ajax_update_case() { public function ajax_update_formula() {
$id = $this->post('id') + 0; $id = $this->post('id') + 0;
$name = trim($this->post('name')); $name = trim($this->post('name'));
$source = trim($this->post('source')); $source = trim($this->post('source'));
@ -55,9 +55,9 @@ class index extends publicBase {
$method = trim($this->post('method')); $method = trim($this->post('method'));
$herbs = $this->post('herbs'); $herbs = $this->post('herbs');
$m_case = new mCase(); $mformula = new mFormulaNew();
$res = $m_case->updateCase($id, $name, $source, $original, $method, $herbs); $res = $mformula->updateCase($id, $name, $source, $method, $herbs);
if (!$res) $this->ajax_json(false, $m_case->getError()); if (!$res) $this->ajax_json(false, $mformula->getError());
$this->ajax_json(true, '保存成功'); $this->ajax_json(true, '保存成功');
} }
@ -71,27 +71,30 @@ class index extends publicBase {
$page_num = $this->post('page_num') ? $this->post('page_num') : 1; $page_num = $this->post('page_num') ? $this->post('page_num') : 1;
$page_size = $this->post('page_size') ? $this->post('page_size') : 20; $page_size = $this->post('page_size') ? $this->post('page_size') : 20;
$m_case = new mCase(); $mformula = new mFormulaNew();
$data = $m_case->getCaseList($uinfo['uid'], $content, $page_num, $page_size); $list = $mformula->getFormulaList($uinfo['uid'], $page_num, $page_size, $content);
$total = $m_case->getCaseByNameTotal($content); $total = $mformula->getFormulaTotal($uinfo['uid'], $content);
$rdata = array( $rdata = array(
'total' => $total, 'total' => $total,
'per_page' => $page_size, 'per_page' => $page_size,
'last_page' => ceil($total / $page_size), 'last_page' => ceil($total / $page_size),
'current_page' => $page_num, 'current_page' => $page_num,
'data' => $data 'list' => $list,
); );
$this->ajax_json(true, '获取成功', $rdata); $this->ajax_json(true, '获取成功', $rdata);
} }
public function ajax_case_detail() { public function ajax_formula_detail() {
$id = $this->get('id') + 0; $uinfo = $this->_check_login();
if (empty($id)) $this->ajax_json(false, '参数错误');
$m_case = new mCase(); $id = $this->post('id') + 0;
$data = $m_case->getCaseInfo($id); if (!$id) $this->ajax_json(false, '参数错误');
if (!$data) $this->ajax_json(false, $m_case->getError());
$mformula = new mFormulaNew();
$data = $mformula->getFormulaInfo($id);
if (!$data) $this->ajax_json(false, $mformula->getError());
$this->ajax_json(true, '获取成功', $data); $this->ajax_json(true, '获取成功', $data);
} }
@ -99,11 +102,9 @@ class index extends publicBase {
public function ajax_save_user_case() { public function ajax_save_user_case() {
$uinfo = $this->_check_login(); $uinfo = $this->_check_login();
$case_id = $this->post('case_id') + 0; $formula_id = $this->post('formula_id') + 0;
if (empty($case_id)) $this->ajax_json(false, '参数错误');
$data = array( $data = array(
'name' => trim($this->post('name')),
'patient_name' => trim($this->post('patient_name')), 'patient_name' => trim($this->post('patient_name')),
'patient_age' => $this->post('patient_age') + 0, 'patient_age' => $this->post('patient_age') + 0,
'patient_sex' => $this->post('patient_sex') + 0, 'patient_sex' => $this->post('patient_sex') + 0,
@ -117,11 +118,11 @@ class index extends publicBase {
$m_user_case = new mUserCase(); $m_user_case = new mUserCase();
//生成唯一id 防止重复请求 //生成唯一id 防止重复请求
$request_id = md5($uinfo['uid'] . $case_id . $data['name'] . $data['patient_name']); $request_id = md5($uinfo['uid'] . $formula_id . $data['name'] . $data['patient_name']);
$request_times = $m_user_case->requestLimit(sprintf(_QR_REQUEST_LIMIT, $request_id), 1, 60); $request_times = $m_user_case->requestLimit(sprintf(_QR_REQUEST_LIMIT, $request_id), 1, 60);
if (!$request_times) $this->ajax_json(false, $m_user_case->getError()); if (!$request_times) $this->ajax_json(false, $m_user_case->getError());
$id = $m_user_case->createUserCase($uinfo['uid'], $case_id, $data); $id = $m_user_case->createUserCase($uinfo['uid'], $formula_id, $data);
if (!$id) $this->ajax_json(false, $m_user_case->getError()); if (!$id) $this->ajax_json(false, $m_user_case->getError());
$this->ajax_json(true, '保存成功', array('id' => $id)); $this->ajax_json(true, '保存成功', array('id' => $id));
@ -185,9 +186,9 @@ class index extends publicBase {
$page_num = $this->post('page_num') ? $this->post('page_num') : 1; $page_num = $this->post('page_num') ? $this->post('page_num') : 1;
$page_size = $this->post('page_size') ? $this->post('page_size') : 100; $page_size = $this->post('page_size') ? $this->post('page_size') : 100;
$m_case = new mCase(); $mformula = new mFormulaNew();
$data = $m_case->getCollectLog($page_num, $page_size); $data = $mformula->getCollectLog($page_num, $page_size);
$total = $m_case->getCollectLogTotal(); $total = $mformula->getCollectLogTotal();
$rdata = array( $rdata = array(
'total' => $total, 'total' => $total,

21
data/dCase.php → data/dFormula.php

@ -7,26 +7,27 @@ include_once SERVER_ROOT . '/data/dBase.php';
* @package data * @package data
*/ */
class dCase extends dBase { class dFormula extends dBase {
protected $fieldlist = array( protected $fieldlist = array(
'tcm_case' => array( 'tcm_formula' => array(
'id', 'id',
'uid',
'name', 'name',
'source', 'source',
'original', 'original',
'method', 'method',
'use_num',
'sort', 'sort',
), ),
'tcm_case_herb' => array( 'tcm_formula_herb' => array(
'id', 'id',
'case_id', 'formula_id',
'herb_id', 'herb_id',
'num', 'num',
'sort', 'sort',
), ),
'tcm_herb' => array( 'tcm_herb' => array(
'id', 'id',
'uid',
'name', 'name',
'desc', 'desc',
), ),
@ -35,20 +36,20 @@ class dCase extends dBase {
'collect_msg', 'collect_msg',
'collect_time', 'collect_time',
), ),
'tcm_case_use_log' => array( 'tcm_formula_use_log' => array(
'id', 'id',
'uid', 'uid',
'case_id', 'formula_id',
'use_num', 'use_num',
), ),
); );
protected $primary_keys = array( protected $primary_keys = array(
'tcm_case' => 'id', 'tcm_formula' => 'id',
'tcm_case_herb' => 'id', 'tcm_formula_herb' => 'id',
'tcm_herb' => 'id', 'tcm_herb' => 'id',
'tcm_collect_log' => 'id', 'tcm_collect_log' => 'id',
'tcm_case_use_log' => 'id', 'tcm_formula_use_log' => 'id',
); );
} }

214
model/mCase.php → model/mFormula.php

@ -5,21 +5,21 @@
include_once(SERVER_ROOT . "/model/mBase.php"); include_once(SERVER_ROOT . "/model/mBase.php");
class mCase extends mBase { class mFormula extends mBase {
private $obj; private $obj;
private $tbl; private $tbl;
private $case_herb_tbl; private $formula_herb_tbl;
private $herb_tbl; private $herb_tbl;
private $collect_log_tbl; private $collect_log_tbl;
private $case_use_log_tbl; private $formula_use_log_tbl;
public function __construct() { public function __construct() {
$this->obj = new dCase(); $this->obj = new dFormula();
$this->tbl = 'tcm_case'; $this->tbl = 'tcm_formula';
$this->case_herb_tbl = 'tcm_case_herb'; $this->formula_herb_tbl = 'tcm_formula_herb';
$this->herb_tbl = 'tcm_herb'; $this->herb_tbl = 'tcm_herb';
$this->collect_log_tbl = 'tcm_collect_log'; $this->collect_log_tbl = 'tcm_collect_log';
$this->case_use_log_tbl = 'tcm_case_use_log'; $this->formula_use_log_tbl = 'tcm_formula_use_log';
} }
public function createCase($name, $source, $method, $herbs) { public function createCase($name, $source, $method, $herbs) {
@ -83,12 +83,12 @@ class mCase extends mBase {
return true; return true;
} }
public function formatCaseHerb($case_id, $herbs) { public function formatCaseHerb($formula_id, $herbs) {
$case_herb = array(); $case_herb = array();
foreach ($herbs as $key => $item) { foreach ($herbs as $key => $item) {
$temp = array(); $temp = array();
$temp['name'] = $item['name']; $temp['name'] = $item['name'];
$temp['case_id'] = $case_id; $temp['formula_id'] = $formula_id;
$temp['num'] = $this->convertToNum('汉', $item['num'], $item['name']); $temp['num'] = $this->convertToNum('汉', $item['num'], $item['name']);
$temp['sort'] = $key; $temp['sort'] = $key;
@ -151,7 +151,7 @@ class mCase extends mBase {
} }
public function createCaseHerb($info) { public function createCaseHerb($info) {
$res = $this->obj->mutiInsert($this->case_herb_tbl, $info); $res = $this->obj->mutiInsert($this->formula_herb_tbl, $info);
if (!$res) { if (!$res) {
$this->setError('添加药方药材失败'); $this->setError('添加药方药材失败');
return false; return false;
@ -161,7 +161,7 @@ class mCase extends mBase {
} }
public function compareCaseHerb($id, $new_data) { public function compareCaseHerb($id, $new_data) {
$old_data = $this->getCaseHerbByCaseId($id); $old_data = $this->getFormulaHerb($id);
$old_num = count($old_data); $old_num = count($old_data);
$new_num = count($new_data); $new_num = count($new_data);
@ -170,13 +170,13 @@ class mCase extends mBase {
//需要删除药方对应的药材 //需要删除药方对应的药材
foreach ($old_data as $key => $value) { foreach ($old_data as $key => $value) {
if (!isset($new_data[$key])) { if (!isset($new_data[$key])) {
$res = $this->obj->delete($this->case_herb_tbl, array('sql' => '`id`=?', 'vals' => array($value['id']))); $res = $this->obj->delete($this->formula_herb_tbl, array('sql' => '`id`=?', 'vals' => array($value['id'])));
if (!$res) { if (!$res) {
$this->setError('删除药方药材失败'); $this->setError('删除药方药材失败');
return false; return false;
} }
} }
$res = $this->obj->update($this->case_herb_tbl, $new_data[$key], array('sql' => '`id`=?', 'vals' => array($value['id']))); $res = $this->obj->update($this->formula_herb_tbl, $new_data[$key], array('sql' => '`id`=?', 'vals' => array($value['id'])));
if (!$res) { if (!$res) {
$this->setError('更新药方药材失败'); $this->setError('更新药方药材失败');
return false; return false;
@ -186,13 +186,13 @@ class mCase extends mBase {
//需要增加药方对应的药材 //需要增加药方对应的药材
foreach ($new_data as $key => $value) { foreach ($new_data as $key => $value) {
if (!isset($old_data[$key])) { if (!isset($old_data[$key])) {
$res = $this->obj->insert($this->case_herb_tbl, $value); $res = $this->obj->insert($this->formula_herb_tbl, $value);
if (!$res) { if (!$res) {
$this->setError('添加药方药材失败'); $this->setError('添加药方药材失败');
return false; return false;
} }
} }
$res = $this->obj->update($this->case_herb_tbl, $value, array('sql' => '`id`=?', 'vals' => array($old_data[$key]['id']))); $res = $this->obj->update($this->formula_herb_tbl, $value, array('sql' => '`id`=?', 'vals' => array($old_data[$key]['id'])));
if (!$res) { if (!$res) {
$this->setError('更新药方药材失败'); $this->setError('更新药方药材失败');
return false; return false;
@ -203,165 +203,143 @@ class mCase extends mBase {
return true; return true;
} }
public function getCaseHerbByCaseId($case_id) { public function getFormulaHerb($formula_id) {
return $this->obj->selectAll($this->case_herb_tbl, array('sql' => '`case_id`=?', 'vals' => array($case_id)), 'sort asc '); return $this->obj->selectAll($this->formula_herb_tbl, array('sql' => '`formula_id`=?', 'vals' => array($formula_id)), 'sort asc ');
} }
public function getCaseHerbByCaseIds($case_ids) { public function getFormulaHerbs($formula_ids) {
return $this->obj->selectIn($this->case_herb_tbl, array('case_id' => $case_ids)); $data = $this->obj->selectIn($this->formula_herb_tbl, array('formula_id' => $formula_ids));
if (empty($data)) return array();
return array_column($data, null, 'id');
} }
public function getCaseByName($uid, $name, $page_num, $page_size) { public function getFormulaByName($uid, $page_num, $page_size, $name) {
$offset = ($page_num - 1) * $page_size; $offset = ($page_num - 1) * $page_size;
$sql = "select c.id,c.name,c.source,c.original,c.method,u.use_num,c.sort from {$this->tbl} as c left join {$this->case_use_log_tbl} as u on c.id=u.case_id and u.uid={$uid} where c.`name` like '%{$name}%' order by u.use_num desc,c.sort desc limit {$offset},{$page_size}";
$where = "s.uid in (0,{$uid})";
if ($name) {
$where .= " and s.`name` like '%{$name}%'";
}
$sql = "select s.id,s.uid,s.name,s.source,s.original,s.method,u.use_num,s.sort from {$this->tbl} as s left join {$this->formula_use_log_tbl} as u on s.id=u.formula_id where {$where} order by u.use_num desc,s.sort desc limit {$offset},{$page_size}";
return $this->obj->execute($sql, true, true); return $this->obj->execute($sql, true, true);
} }
public function getCaseList($uid, $name, $page_num, $page_size) { public function getFormulaList($uid, $page_num, $page_size, $name) {
$case_data = $this->getCaseByName($uid, $name, $page_num, $page_size); $data = $this->getFormulaByName($uid, $page_num, $page_size, $name);
if (empty($case_data)) {
$this->setError('查询不到此药方'); $formula_ids = array_column($data, 'id');
return false;
$formula_arr = $this->getFormulaHerbData($formula_ids);
foreach ($data as &$da) {
if (isset($formula_arr[$da['id']])) {
$da['formula'] = $formula_arr[$da['id']];
} }
$case_ids = array_column($case_data, 'id'); if (!empty($da['original'])) {
//药方药材信息 $original = json_decode($da['original'], true);
$case_herbs = $this->getCaseHerbByCaseIds($case_ids); $original = array_column($original, null, 'name');
if (empty($case_herbs)) {
$this->setError('药方药材查询失败'); foreach ($da['formula'] as &$v) {
return false; if (isset($original[$v['name']])) {
$v['num'] = $original[$v['name']]['num'];
$v['desc'] = $original[$v['name']]['desc'];
}
}
} }
$herb_ids = array_column($case_herbs, 'herb_id');
//药材名称 unset($da['original']);
$herb = $this->getHerbByIds($herb_ids);
if (empty($herb)) {
$this->setError('药材名称查询失败');
return false;
} }
$herb_list = array_column($herb, null, 'id');
$case_list = array();
foreach ($case_data as $item) {
$case = array(
'id' => $item['id'],
'name' => $item['name'],
'source' => $item['source'],
'method' => $item['method'],
'use_num' => $item['use_num'],
'sort' => $item['sort'],
'case_herb' => array()
);
$original = json_decode($item['original'], true); return $data;
foreach ($case_herbs as $value) { }
if ($item['id'] != $value['case_id']) continue;
public function getFormulaHerbData($formula_ids) {
$formula_herbs = $this->getFormulaHerbs($formula_ids);
$herb_ids = array_column($formula_herbs, 'herb_id');
$herbs = $this->getHerbs($herb_ids);
$herb_arr = array_column($herbs, null, 'id');
$formula_arr = array();
foreach ($formula_herbs as $formula_herb) {
$temp = array( $temp = array(
'id' => $value['herb_id'], 'id' => $formula_herb['herb_id'],
'name' => $herb_list[$value['herb_id']]['name'], 'name' => '',
'num' => $value['num'], 'num' => $formula_herb['num'],
'org_num' => '', 'desc' => $formula_herb['desc'],
'desc' => $value['desc'],
'org_desc' => '',
); );
foreach ($original as $v) { if (isset($herb_arr[$formula_herb['herb_id']])) {
if ($temp['name'] == $v['name']) { $temp['name'] = $herb_arr[$formula_herb['herb_id']]['name'];
$temp['org_num'] = $v['num'];
$temp['org_desc'] = $v['desc'];
}
}
$case['case_herb'][] = $temp;
} }
$case_list[] = $case; $formula_arr[$formula_herb['formula_id']][] = $temp;
} }
return $formula_arr;
return $case_list;
} }
public function getCaseByNameTotal($name) { public function getFormulaTotal($uid, $name) {
$where = array(); $sql = "select count(*) as count from $this->tbl where uid in (0,{$uid})";
if (!empty($name)) { if ($name) {
$sql = " `name` like '%{$name}%'"; $sql .= " and `name` like '%{$name}%'";
$where = array('sql' => $sql, 'vals' => array());
} }
$res = $this->obj->execute($sql, true, true);
$num = $res[0]['count'];
return $this->obj->count($this->tbl, $where); return $num;
} }
public function getCaseInfo($id) { public function getFormulaInfo($id, $uid = 0) {
//药方信息 //药方信息
$case = $this->getCaseById($id); $formula = $this->getFormulaById($id);
if (empty($case)) { if (empty($formula)) {
$this->setError('查询不到此药方'); $this->setError('查询不到此药方');
return false; return false;
} }
//药方药材信息 if ($uid > 0 && $formula['uid'] != $uid) {
$case_herb_date = $this->getCaseHerbByCaseId($case['id']); $this->setError('这不是你的药方');
if (empty($case_herb_date)) {
$this->setError('药方药材查询失败');
return false; return false;
} }
//药材名称 $formula['formula'] = $this->getFormulaHerbData($formula['id'])[$formula['id']];
$herb_ids = array_column($case_herb_date, 'herb_id');
$herb = $this->getHerbByIds($herb_ids);
if (empty($herb)) {
$this->setError('药材名称查询失败');
return false;
}
$herb_list = array_column($herb, null, 'id');
$original = json_decode($case['original'], true); if (!empty($formula['original'])) {
unset($case['original']); $original = json_decode($formula['original'], true);
$original = array_column($original, null, 'name');
$case_herb = array(); foreach ($formula['formula'] as &$v) {
foreach ($case_herb_date as $item) { if (isset($original[$v['name']])) {
$temp = array( $v['num'] = (float)$original[$v['name']]['num'];
'id' => $item['herb_id'], $v['desc'] = $original[$v['name']]['desc'];
'name' => $herb_list[$item['herb_id']]['name'],
'num' => $item['num'],
'org_num' => '',
'desc' => $item['desc'],
'org_desc' => '',
);
foreach ($original as $v) {
if ($temp['name'] == $v['name']) {
$temp['org_num'] = $v['num'];
$temp['org_desc'] = $v['desc'];
} }
} }
$case_herb[] = $temp;
} }
$case['case_herb'] = $case_herb; unset($formula['original']);
return $case; return $formula;
} }
public function getCaseById($id) { public function getFormulaById($id) {
return $this->obj->select($this->tbl, array('sql' => '`id`=?', 'vals' => array($id))); return $this->obj->select($this->tbl, array('sql' => '`id`=?', 'vals' => array($id)));
} }
public function getHerbByIds($ids) { public function getHerbs($ids) {
return $this->obj->selectIn($this->herb_tbl, array('id' => $ids)); return $this->obj->selectIn($this->herb_tbl, array('id' => $ids));
} }
public function getCaseByIds($ids) { public function getFormulaByIds($ids) {
return $this->obj->selectIn($this->tbl, array('id' => $ids)); return $this->obj->selectIn($this->tbl, array('id' => $ids));
} }
public function updateCaseUseLog($uid, $case_id) { public function updateCaseUseLog($uid, $formula_id) {
$res = $this->obj->increase($this->case_use_log_tbl, array('sql' => '`uid`=? and `case_id`=?', 'vals' => array($uid, $case_id)), 'use_num'); $res = $this->obj->increase($this->formula_use_log_tbl, array('sql' => '`uid`=? and `formula_id`=?', 'vals' => array($uid, $formula_id)), 'use_num');
if (!$res) { if (!$res) {
$tool_obj = new qTool(); $tool_obj = new qTool();
$tool_obj->trackLog('tcm', $uid . "|" . $case_id, sprintf(LOG_TRACK_SAVE_PATH, date('Y-m-d'), 'tcm_case_use_num')); $tool_obj->trackLog('tcm', $uid . "|" . $formula_id, sprintf(LOG_TRACK_SAVE_PATH, date('Y-m-d'), 'tcm_formula_use_log'));
$this->setError('药方使用次数更新失败'); $this->setError('药方使用次数更新失败');
return false; return false;
Loading…
Cancel
Save