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 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($start,$pagesize) { return $this->obj->selectAll($this->collect_log_tbl, array(), 'collect_time desc ', array($start, $pagesize)); } }