/** * 根据 疾病文章 id, 获取所属疾病的信息 * @author gaoqing * @date 2016-04-01 * @param int $articleid 疾病文章id * @return array 疾病文章所属疾病的信息 */ public function getDiseaseByArtid($articleid) { $disease = []; if ($this->isNotNull($articleid)) { //查询当前文章在 9939_article_disease_rel 中对应的 疾病id,$diseaseid $artDisRel = Relate::getArtDisRel($articleid); $diseaseid = 0; if (!empty($artDisRel)) { $diseaseid = $artDisRel[0]['diseaseid']; } else { return array(); } $redisKey = 'disease_' . $diseaseid; $redis = \Yii::$app->redis; $disease = $redis->get($redisKey); if (isset($disease) && !empty($disease)) { return $disease; } else { //根据 $diseaseid 获取疾病的信息 $disease = Disease::find()->where(['id' => $diseaseid])->asArray(true)->one(); if (isset($disease) && !empty($disease)) { $diseaseContent = DiseaseContent::find()->select('inspect')->where(['id' => $disease['id']])->asArray(true)->one(); if (isset($diseaseContent) && !empty($diseaseContent)) { $disease = array_merge($disease, $diseaseContent); } $redis->set($redisKey, $disease, 15 * 24 * 60 * 60); } return $disease; } } return $disease; }
/** * 根据疾病的拼音简写,得到疾病的信息 * @author gaoqing * @date 2016-03-23 * @param String $pyInitial 疾病的拼音简写 * @param boolean $isRelDis 是否获取其 相关疾病 * @param boolean $isRelSym 是否获取其 典型症状 * @param boolean $isRelPart 是否获取其相关 部位 * @param boolean $isRelDep 是否获取其 就诊科室 * @return array 疾病的信息集 */ public function getDiseasesByPinyin($pyInitial, $isRelDis = false, $isRelSym = false, $isRelPart = false, $isRelDep = false) { $disease = []; //1、得到疾病的疾病信息 $disease = $this->disease->getDiseasesByPinyin($pyInitial); if ($this->isNotNull($disease)) { $disease['chuanranxing'] = '无'; if ($disease['chuanranflag'] == 1) { $disease['chuanranxing'] = '有'; } //2、获取科室信息 if ($isRelDep) { $treatDepNames = $this->explodeStr($disease['treat_department']); $disease['department'] = $this->department->getDepsByName($treatDepNames); $disease['medicine'] = $this->explodeStr($disease['medicine']); } //3、获取典型症状信息 if ($isRelSym) { $typicalSymptomNames = $this->explodeStr($disease['typical_symptom']); $disease['tsymptom'] = $this->symptom->getSymptomsByName($typicalSymptomNames); } //4、得到疾病对应的所有部位 if ($isRelPart) { $disease['part'] = Relate::getPartsByDisid($disease['id']); } //5、得到相关疾病 if ($isRelDis) { $relDiseaseNames = $this->explodeStr($disease['rel_disease']); $values = Disease::search(['name' => $relDiseaseNames]); if ($this->isNotNull($values)) { $disease['reldis'] = $values['list']; } } } return $disease; }
/** * 症状首页可能疾病缓存数据 * lc 2016-4-15 * @param type $cacheKey 缓存的唯一标识 * @param type $parms 单条症状所有字段内容数组 * @param type $forceCache 是否强制缓存,默认不强制缓存 * @return type */ public static function cacheSymptomRelateDisease($cacheKey, $parms, $forceCache = false) { $symptomid = $parms['id']; $cache = \Yii::$app->cache_data_file; $key = $cacheKey . '_' . $symptomid; $data = $cache->get($key); if ($forceCache) { $data = false; } if (!isset($data) || empty($data)) { $relate = new Relate(); $disease = new Disease(); $department = new Department(); $diseaseList = $relate->getRelateDiseases($symptomid); //根据关联表查询出疾病id,该症状对应的疾病下的所有疾病信息 // print_r($diseaseList);exit; if (!empty($diseaseList)) { $diseaseId = []; foreach ($diseaseList as $k => $v) { $diseaseId[] = $v['diseaseid']; } $diseaseMap = $disease->batchGetDiseaseById($diseaseId); //该症状对应的疾病下的所有疾病信息 $symptomMap = $relate->batchGetSymptomsByDisid($diseaseId); //该症状对应的疾病下对应的所有相关症状 $diseaseIdStr = implode(',', $diseaseId); $departmentMap = $department->batchGetDepartmentsByDisid($diseaseIdStr); //该症状对应的疾病对应的所有科室 // print_r($departmentMap);exit; foreach ($symptomMap as $k => $v) { $disId = $v['diseaseid']; $symId = $v['symptomid']; foreach ($diseaseMap as $kk => $vv) { $pinyin = $vv['pinyin_initial']; if ($vv['id'] == $disId) { $tmp[$pinyin][] = $v; } } } $diseaseTmp['relDisease'] = $diseaseMap; $diseaseTmp['relSymptom'] = $tmp; $disTmp = ['diseaseMap' => $diseaseMap, 'symptomMap' => $symptomMap, 'departmentMap' => $departmentMap, 'diseaseTmp' => $diseaseTmp, 'diseaseId' => $diseaseId]; $cache->set($key, $disTmp); return $disTmp; } return array(); } else { return $data; } }
/** * 缓存首页根据疾病查找的最新疾病资讯模块 * lc@2016-7-8 * @param type $cacheKey * @param type $parms * @return array */ public static function cacheIndexTopNews($cacheKey, $parms) { $result = array(); $newWords = $parms['newWords']; $rel_obj = new \common\models\Relate(); /*方法2*/ /** * 经测试方法2运行效率是方法1的5倍+ */ foreach ($newWords as $kk => $vv) { $diseaseid[] = $vv['id']; } $diseaseids = implode(',', $diseaseid); $ret = $rel_obj->getArticlesGroupBy($diseaseids); foreach ($ret as $k => $v) { $res[$v['tmp_diseaseid']] = $v; } foreach ($newWords as $kk => $vv) { if (isset($res[$vv['id']])) { $result[$kk] = $res[$vv['id']]; } } return $result; }
/** * 根据疾病文章id, 得到疾病文章和疾病的相关信息 * @author gaoqing * @date 2016-04-01 * @param int $articleid 疾病文章id * @return array 疾病文章和疾病的相关信息 */ public static function getArtDisRel($articleid) { $artDisRel = []; $condition = ['articleid' => $articleid]; Relate::$_sftablename = '9939_article_disease_rel'; $artDisRels = Relate::search($condition, 0, 1); if (!empty($artDisRels['list'])) { $artDisRel = $artDisRels['list']; } return $artDisRel; }
/** * 右侧公共信息,跟疾病有关的 * lc 2016-4-6 * @param type $symptomid * @param array $filter ['disease','relSymptom'] 筛选需要的数据 * @return type */ public function getRightInfo($symptomid, $filter = []) { $cacheHelper = new CacheHelper(); $filter = !empty($filter) ? $filter : ['disease', 'articles', 'doctorInfos', 'leftDoctor', 'medicalDepartment', 'relSymptom']; $model = []; $diseaseList = []; $parms = ['id' => $symptomid]; $diseaseCache = $cacheHelper->getCache('frontend_symptom_index_knjb', $parms); if (in_array('medicalDepartment', $filter) || in_array('disease', $filter)) { if (!empty($diseaseCache)) { $model['disid'] = $diseaseCache['diseaseId']; //症状首页左侧可能疾病及伴随症状 $model['disease'] = $diseaseCache['diseaseTmp']; } } //右侧就诊科室 // if (in_array('medicalDepartment', $filter)) { // if (!empty($diseaseCache)) { // //在取到的所有科室数据合并去重 // $medicalDepartment = []; // foreach ($diseaseCache['departmentMap'] as $vv) { // $Tmp['medicalDepartmentTmp'][] = $vv['id']; // $Tmp['medicalDepartmentTmpName'][] = $vv['name']; // $Tmp['medicalDepartmentTmpPinyin'][] = $vv['pinyin']; // } // $medicalDepartment['id'] = array_unique($Tmp['medicalDepartmentTmp']); // $medicalDepartment['name'] = array_unique($Tmp['medicalDepartmentTmpName']); // $medicalDepartment['pinyin'] = array_unique($Tmp['medicalDepartmentTmpPinyin']); //// print_r($medicalDepartment);exit; // $model['medicalDepartment'] = $medicalDepartment; // //科室拼音 // $model['departPinyin'] = $this->department->getDepartmentPinyin(); // } // } //右侧相关症状 if (in_array('relSymptom', $filter)) { $relateObj = new Relate(); $model['relSymptom'] = $relateObj->getRelateSymptoms($symptomid); } //症状相关文章 if (in_array('articles', $filter)) { $articleObj = new Article(); $model['articles'] = []; $articles = $articleObj->listByCondition([['status' => '99'], ['symptomid' => $symptomid]], 7, 0, 'id DESC'); if (!empty($articles)) { $model['articles'] = $articles; } else { if (!empty($diseaseCache)) { $diseaseId = $diseaseCache['diseaseId']; $disease_ids = implode(',', $diseaseId); $articles = $articleObj->listBySqlCondition($disease_ids, 7, 0); $arts = []; foreach ($articles as $k => $v) { $date_path = date('Y/md', $v['inputtime']); $article_path = sprintf("%s/%s/%d.shtml", 'article', $date_path, $v['id']); $articleUrl = sprintf('%s/%s', Yii::getAlias('@jb_domain'), $article_path); foreach ($v as $kk => $vv) { $arts[$k][$kk] = $vv; $arts[$k]['url'] = $articleUrl; } } $model['articles'] = $arts; } } } //专家(左侧) if (in_array('doctorInfos', $filter)) { if (!empty($diseaseCache)) { //取所有相关疾病里第一个疾病id来查专家 $diseaserandid = $diseaseCache['diseaseId']['0']; $doctors = $this->getDoctor($diseaserandid, 0, 6); //专家(右侧) $rightDoctor = array_slice($doctors, 3, 3); $model['doctorInfos'] = $rightDoctor; //在线咨询 左侧 $leftDoctor = [['uid' => 1440561, 'nickname' => '陶丽萍', 'zhicheng' => '', 'best_dis' => '保健综合', 'pic' => '201601/1440561_avatar_middle.jpg'], ['uid' => 221102, 'nickname' => '王庆松', 'zhicheng' => '', 'best_dis' => '上呼吸道综合', 'pic' => '201601/221102_avatar_middle.jpg'], ['uid' => 831181, 'nickname' => '刘业生', 'zhicheng' => '', 'best_dis' => '常见病综合,呼吸道系统诊疗', 'pic' => '201604/831181_avatar_middle.jpg']]; $model['leftDoctor'] = $leftDoctor; } } return $model; }