obj = new dCase(); $this->tbl = 'tcm_case'; $this->case_herb_tbl = 'tcm_case_herb'; $this->herb_tbl = 'tcm_herb'; $this->collect_log_tbl = 'tcm_collect_log'; } public function createCase($name, $source, $original, $method, $herbs) { if (empty($name)) { $this->setError('药方名称不能为空'); return false; } if (empty($source)) { $this->setError('药方来源不能为空'); return false; } if (empty($original)) { $this->setError('药方原方不能为空'); return false; } if (empty($method)) { $this->setError('药方用法不能为空'); return false; } if (empty($herbs)) { $this->setError('药方药材不能为空'); return false; } $id = $this->obj->insert($this->tbl, array('name'=>$name, 'source'=>$source, 'original'=>$original, 'method'=>$method)); if (!$id) { $this->setError('添加失败'); return false; } //格式化药方对应的药材数据 $case_herb = $this->formatCaseHerb($id, $herbs); //创建药方对应的药材 $this->createCaseHerb($case_herb); return $id; } public function updateCase($id, $name, $source, $original, $method, $herbs) { if (empty($herbs)) { $this->setError('药方药材不能为空'); return false; } $data = array(); if (!empty($name)) { $data['name']=$name; } if (!empty($source)) { $data['source']=$source; } if (!empty($original)) { $data['original']=$original; } if (!empty($method)) { $data['method']=$method; } $res = $this->obj->update($this->tbl, $data, array('sql' => '`id`=?', 'vals' => array($id))); if (!$res) { $this->setError('更新失败'); return false; } //格式化药方对应的药材数据 $case_herb = $this->formatCaseHerb($id, $herbs); //更新药方对应的药材 $this->compareCaseHerb($id, $case_herb); return true; } public function formatCaseHerb($case_id,$herbs) { $case_herb = array(); foreach ($herbs as $key => $item) { $temp = array(); $temp['case_id'] = $case_id; $temp['num'] = $item['num']; $temp['sort'] = $key; $herb = $this->getHerbByName($item['name']); if ($herb) { $temp['herb_id'] = $herb['id']; }else{ $temp['herb_id'] = $this->createHerb(array('name' => $item['name'])); } $case_herb[] = $temp; } return $case_herb; } public function getHerbByName($name) { return $this->obj->select($this->herb_tbl, array('sql' => '`name`=?', 'vals' => array($name))); } public function createHerb($info) { $herb_id = $this->obj->insert($this->herb_tbl, $info); if (empty($herb_id)) { $this->setError('添加药材失败'); return false; } return $herb_id; } public function createCaseHerb($info) { $res = $this->obj->mutiInsert($this->case_herb_tbl, $info); if (!$res) { $this->setError('添加药方药材失败'); return false; } return true; } public function compareCaseHerb($id,$new_data) { $old_data = $this->getCaseHerbByCaseId($id); $old_num = count($old_data); $new_num = count($new_data); if ($old_num>=$new_num) { //需要删除药方对应的药材 foreach ($old_data as $key => $value) { if (!isset($new_data[$key])) { $res = $this->obj->delete($this->case_herb_tbl, array('sql' => '`id`=?', 'vals' => array($value['id']))); if (!$res) { $this->setError('删除药方药材失败'); return false; } } $res = $this->obj->update($this->case_herb_tbl, $new_data[$key], array('sql' => '`id`=?', 'vals' => array($value['id']))); if (!$res) { $this->setError('更新药方药材失败'); return false; } } }else{ //需要增加药方对应的药材 foreach ($new_data as $key => $value) { if (!isset($old_data[$key])) { $res = $this->obj->insert($this->case_herb_tbl, $value); if (!$res) { $this->setError('添加药方药材失败'); return false; } } $res = $this->obj->update($this->case_herb_tbl, $value, array('sql' => '`id`=?', 'vals' => array($old_data[$key]['id']))); if (!$res) { $this->setError('更新药方药材失败'); return false; } } } return true; } public function getCaseHerbByCaseId($case_id) { return $this->obj->selectAll($this->case_herb_tbl, array('sql' => '`case_id`=?','vals' => array($case_id)), 'sort asc '); } public function getCaseByName($name, $page_num, $page_size) { $sql = " `name` like '%{$name}%'"; $offset = ($page_num - 1) * $page_size; $res = $this->obj->selectAll($this->tbl, array('sql' => $sql, 'vals'=>array()), 'use_num desc,sort asc ', array($offset, $page_size)); if (empty($res)) return array(); return $res; } public function getCaseByNameTotal($name) { $sql = " `name` like '%{$name}%'"; return $this->obj->count($this->tbl, array('sql' => $sql, 'vals'=>array())); } public function getCaseInfo($id) { //药方信息 $case = $this->getCaseById($id); if (empty($case)) { $this->setError('查询不到此药方'); return false; } //药方药材信息 $case_herb = $this->getCaseHerbByCaseId($case['id']); if (empty($case_herb)) { $this->setError('药方药材查询失败'); return false; } //药材名称 $herb_ids = array_column($case_herb,'herb_id'); $herb = $this->getHerbByIds($herb_ids); if (empty($herb)) { $this->setError('药材名称查询失败'); return false; } return array( 'case' => $case, 'case_herb' => $case_herb, 'herb' => array_column($herb,null,'id'), ); } public function getCaseById($id) { return $this->obj->select($this->tbl, array('sql' => '`id`=?','vals' => array($id))); } public function getHerbByIds($ids) { return $this->obj->selectIn($this->herb_tbl, array('id' => $ids)); } public function getCaseByIds($ids) { return $this->obj->selectIn($this->tbl, array('id' => $ids)); } public function updateCaseSearchNum($id) { $res = $this->obj->increase($this->tbl, array('sql' => '`id`=?', 'vals' => array($id)),'use_num'); if (!$res) { $tool_obj = new qTool(); $tool_obj->trackLog('tcm', $id, sprintf(LOG_TRACK_SAVE_PATH, date('Y-m-d'), 'tcm_case_use_num')); $this->setError('药方使用次数更新失败'); return false; } return true; } 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)); } public function getCollectLogTotal() { return $this->obj->count($this->collect_log_tbl); } }