function get_disease_symptom() { $console = Yii::getAlias("@console"); $file = $console . '/shell/disease_symptom.php'; $disease_symptom_arr = []; if (file_exists($file)) { $disease_symptom_str = file_get_contents($file); $disease_symptom_arr = unserialize($disease_symptom_str); } else { $diseases = \common\models\Disease::find()->asArray()->all(); foreach ($diseases as $disease) { $name = $disease['name']; $row = array('id' => $disease['id'], 'source_flag' => 1); $disease_symptom_arr[$name] = $row; } $symptoms = \common\models\Symptom::find()->asArray()->all(); foreach ($symptoms as $symptom) { $name = $symptom['name']; if (!isset($disease_symptom_arr[$name])) { $row = array('id' => $symptom['id'], 'source_flag' => 2); $disease_symptom_arr[$name] = $row; } } $disease_symptom_str = serialize($disease_symptom_arr); file_put_contents($file, $disease_symptom_str); } return $disease_symptom_arr; }
/** * 根据部位获取症状 * @author gaoqing * @date 2016-04-13 * @param int $columns 在页面中,显示的列数 * @return array 部位及症状集 */ private static function getPartSymptom($columns) { $partSymptom = []; $part = new Part(); $symptom = new Symptom(); $firstLevel = $part->getPartLevel1(1); if (self::isNotNull($firstLevel)) { foreach ($firstLevel as $level1) { $inner = array(); $inner['part'] = $level1; $size = count($firstLevel) * $columns; $inner['symptom'] = $symptom->getSymptomsByPartid($level1['id'], 'part_level1', 0, $size); $partSymptom[] = $inner; } } return $partSymptom; }
public static function getsymptom($params) { $symptomObj = new ModelSymptom(); $symptomContentObj = new ModelSymptomContent(); $pinyin_initial = $params['pinyin_initial']; $condition = ["{{%symptom}}.pinyin_initial" => $pinyin_initial]; $info = $symptomObj->getSymptomByCondition($condition, [], 1, 0); $res = $info[0]; if (empty($info)) { //如果不存在抛出404 return self::result(404, '找不到数据'); } //处理缩略图 $thumb = empty($res['thumbnail']) ? '/patients/styles/images/dise_02.jpg' : \librarys\helpers\utils\Url::getuploadfileUrl(2, $res['thumbnail']); $res['thumbnail'] = $thumb; //处理基本信息 if (isset($params['fileds'])) { if (strpos($params['fileds'], ',') === false) { $column = $params['fileds']; } else { $column = explode(',', $params['fileds']); } $tmpCont = $symptomContentObj->getSymptomContentById($column, $res['id']); if (is_array($column)) { //如果是多个字段 foreach ($column as $v) { $res[$v] = str_replace("\n", "<br>", $tmpCont[$v]); } } else { $res['content'] = str_replace("\n", "<br>", $tmpCont[$column]); } } //处理相关文章 if (isset($params['relarticles']) && $params['relarticles'] == 1) { $symptomid = $res['id']; $self = new self(); $arts = $self->getRightInfo($symptomid, ['disease', 'articles']); foreach ($arts as $k => $v) { $res[$k] = $v; } } return self::result(200, '获取数据成功', $res); }
public static function createAllDiseaseSymptomCache4Redis() { $redis = \Yii::$app->redis; $redis_expired = 24 * 60 * 60; //秒 $cache_all_disease_symptom_link_key = APP_CACHE_PREFIX . 'CACHE_ALL_DISEASE_SYMPTOM_LINK'; $cache_all_disease_symptom_link_data = array(); $all_disease = Disease::find()->select(['name', 'pinyin_initial'])->asArray()->all(); foreach ($all_disease as $k => $v) { $cache_all_disease_symptom_link_data[$v['name']] = \Yii::getAlias('@jb_domain') . '/' . $v['pinyin_initial'] . '/'; } $all_symptom = Symptom::find()->select(['name', 'pinyin_initial'])->asArray()->all(); foreach ($all_symptom as $k => $v) { $cache_all_disease_symptom_link_data[$v['name']] = \Yii::getAlias('@jb_domain') . '/zhengzhuang/' . $v['pinyin_initial'] . '/'; } $redis->hMset($cache_all_disease_symptom_link_key, $cache_all_disease_symptom_link_data, $redis_expired); return $cache_all_disease_symptom_link_data; }
/** * 根据关键词查相关症状 * @param type $wd * @param type $offset * @param type $size * @param type $explainflag 1:采用第三方分词 0:不采用第三方分词 * @param array $conditions * * $conditions = array( 'column_id' => array(1) ); * @return array */ public static function search_symptom_data($sphinx_data) { $total = 0; $ret_list = array(); if (!empty($sphinx_data['matches'])) { $arr_ids = array(); foreach ($sphinx_data['matches'] as $k => $v) { $arr_ids[] = $k; } $symptom_list = Symptom::List_ByIds($arr_ids); if ($symptom_list) { foreach ($symptom_list as $k => $v) { $v['tmp_source_id'] = 2; $v['source_flag'] = 2; $v['url'] = sprintf('%s/zhengzhuang/%s/', Yii::getAlias('@jb_domain'), $v['pinyin_initial']); $v['wap_url'] = sprintf('%s/zhengzhuang/%s/', Yii::getAlias('@mjb_domain'), $v['pinyin_initial']); $ret_list[] = $v; } } $total = $sphinx_data['total']; } $explain_words = $sphinx_data['explain_words']; return array('list' => $ret_list, 'total' => $total, 'explain_words' => $explain_words); }
public function getSymptomLimit($where = [], $offset = 0, $length = 10, $orderBy = 'id DESC') { return Symptom::find()->where($where)->orderBy($orderBy)->offset($offset)->limit($length)->asArray()->all(); }
/** * 症状缓存 */ public function symptomCache($param, $offset) { $symptom = new Symptom(); $length = self::$length; $offset = ($offset - 1) * $length; // $res = $symptom->getAllSymptom(); $res = $symptom->getSymptomLimit([], $offset, $length); $i = 0; foreach ($res as $k => $v) { $ret = CacheHelper::$param['function']($param['key_prefix'], $v, true); if ($ret) { $i++; } } return $i; //'生成' . $i . '条'; }
/** * 文章页 * @author gaoqing * @date 2016-03-25 * @return string 视图 */ public function actionDetail() { $view = "detail"; $aid = $this->helpGparam("aid", "-1"); //获取文章的信息 $condition = ['id' => $aid]; $article = Article::search($condition, 0, 1); $article = $article['list']; if (!isset($article) || empty($article)) { throw new NotFoundHttpException('当前访问的页面不存在!'); } if ($this->isNotNull($article)) { $article = $article[0]; $article['inputtime'] = date('Y-m-d H:i:s', $article['inputtime']); $article['keywords_init'] = $article['keywords']; $article['keywords'] = explode(' ', $article['keywords']); } //文章内容添加疾病、症状词的链接 //lc@2016-5-24 $cache_all = Article::getAllDiseaseSymptom2Redis(); $content = $article['content']; $link_num = 5; //每页内链个数 $single_link_num = 1; //单个词链接个数 $i = 1; $str = ''; $count = 0; foreach ($cache_all as $k => $v) { $searchArr = '(' . $k . ')'; $replaceArr = '<a href="' . $v . '" title="' . $k . '" target="_blank">' . $k . '</a>'; if ($i > $link_num) { break; } if (stripos($str, $k) === false) { $content = preg_replace($searchArr, $replaceArr, $content, $single_link_num, $count); if ($count > 0) { $str .= $k; $i++; } } } $article['content'] = $content; //获取当前文章对应的疾病信息 $isSymptom = 0; if ($article['diseaseid'] > 0) { $disease_obj = new Disease(); $res = $disease_obj->getDiseaseById($article['diseaseid']); $disease = $res['disease']; $disease['inspect'] = $res['diseaseContent']['inspect']; } elseif ($article['symptomid'] > 0) { $symptom = Symptom::getSymptomByid($article['symptomid'], true); $disease = $symptom; $disease['inspect'] = $symptom['examine']; $isSymptom = 1; } //上一篇 $preCondition = ['<', 'id', $aid]; $preArticle = Article::search($preCondition, 0, 1, 'id DESC'); $preArticle = $preArticle['list']; if ($this->isNotNull($preArticle)) { $preArticle = $preArticle[0]; } //下一篇 $nextCondition = ['>', 'id', $aid]; $nextArticle = Article::search($nextCondition, 0, 1, 'id ASC'); $nextArticle = $nextArticle['list']; if ($this->isNotNull($nextArticle)) { $nextArticle = $nextArticle[0]; } $relArtsAndAsks = CacheHelper::getCache('frontend_article_detail_xgwz', ['title' => $article['title'], 'id' => $aid, 'diseaseid' => $article['diseaseid'], 'symptomid' => $article['symptomid']]); $relArticles = $relArtsAndAsks['relArticles']; //相关问答 $asks = $relArtsAndAsks['relAsks']; //hot words part $letter_list = range('A', 'Z'); $randwords = $this->rand_words(); $hotWords = ['letter' => $letter_list, 'words' => $randwords]; //common diseases and hot departments part $commonDisDep = CacheHelper::getCache('frontend_article_detail_rmksbw', []); //大家还在找部分 $stillFind = $this->getStillFindDatas($disease['name']); //右侧:最新文章 $lastestArticles = $this->getLatestArticles(); $params = ['article' => $article, 'preArticle' => $preArticle, 'nextArticle' => $nextArticle, 'relArticles' => $relArticles, 'asks' => $asks, 'isSymptom' => $isSymptom, 'disease' => $disease, 'hotWords' => $hotWords, 'commonDisDep' => $commonDisDep, 'stillFind' => $stillFind, 'lastestArticles' => $lastestArticles]; return $this->render($view, $params); }
private function disSymColSitemap() { /** * <urlset> * <url> * <loc>http://jb.9939.com/gm/jianjie/</loc> * <lastmod>2009-03-27</lastmod> * <changefreq>always</changefreq> * <priority>0.6</priority> * </url> * </urlset> */ $this->_changefreq = 'always'; $this->_priority = '0.6'; $where = $this->_ownership; $flag = 1; //目录 if ($where == 'pc') { $frontend = \Yii::getAlias("@frontend"); $frontDomain = \Yii::getAlias("@frontdomain"); } elseif ($where == 'wap') { $frontend = \Yii::getAlias("@wapjb"); $frontDomain = \Yii::getAlias("@mjb_domain"); } $sitemapFolder = $this->_baidu ? 'sitemap/sitemapbaidudissymcolindex' : 'sitemap/sitemapdissymcolindex'; $fileFolder = $frontend . '/web/' . $sitemapFolder; if (!file_exists($fileFolder) || !is_dir($fileFolder)) { mkdir($fileFolder, 0755, true); } $type = ''; // 疾病 | 症状 $sitemap_site = $this->getSitemapCount($fileFolder, ['dis_offset' => 0, 'sym_offset' => 0, 'max_file_tail' => 0]); $dis_offset = $sitemap_site['dis_offset']; $dis_obj = new Disease(); $dis_count = $dis_obj->getCount(); if ($dis_offset < $dis_count) { $type = 'disease'; $data = $dis_obj->getDiseaseLimit(['status' => 2], $dis_offset, 1000); $sitemap_site['dis_offset'] = (int) $dis_offset + count($data); } else { $type = 'symptom'; $sym_offset = $sitemap_site['sym_offset']; $dis_obj = new Symptom(); $sym_count = $dis_obj->getCount(); if ($sym_offset < $sym_count) { $data = $dis_obj->getSymptomLimit(['status' => 3], $sym_offset, 2000); $sitemap_site['sym_offset'] = (int) $sym_offset + count($data); $flag = $sitemap_site['sym_offset'] == $sym_count ? 2 : 1; } else { //无需生成新的数据,返回索引的url $res = $this->generateSitemapIndex($fileFolder, $sitemapFolder, 'dissym'); return ['flag' => 2, 'siteindex' => $res['url']]; } } //xml $sitemap = '<?xml version="1.0" encoding="UTF-8"?>'; $sitemap .= $this->_baidu ? '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:mobile="http://www.baidu.com/schemas/sitemap-mobile/1/">' : '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'; $sitemap .= $this->setDiseaseSymptomSubURL($data, $type); $sitemap .= '</urlset>'; $sitemap_site['max_file_tail']++; $name_tail = $sitemap_site['max_file_tail']; //写入计数文件 $this->setSitemapCount($sitemap_site, $fileFolder); $fileName = 'sitemap' . $name_tail . '.xml'; if (file_put_contents($fileFolder . '/' . $fileName, $sitemap)) { $res = $this->generateSitemapIndex($fileFolder, $sitemapFolder, 'dissym'); return ['flag' => $flag, 'url' => $frontDomain . '/' . $sitemapFolder . '/' . $fileName, 'name' => $fileName, 'siteindex' => $res['url']]; } return []; }
/** * 删除症状 * @param type $id * @return type */ public function actionDelete($id) { $flag[] = Symptom::deleteAll('id = :id', ['id' => $id]); $flag[] = SymptomContent::deleteAll('id = :id', ['id' => $id]); $flag[] = $this->relate->deleteRelateDisease($id); $flag[] = $this->relate->deleteRelateSymptom($id); $flag[] = $this->relate->deleteRelatePart($id); $flag[] = $this->relate->delImage($id); $num = count($flag); //当前删除记录操作的总个数 $n = 0; foreach ($flag as $v) { //循环出所有的值,值分为0 1 ,成功是1,失败是0 $n = $v + $n; } if ($n < $num) { //如果结果小于总个数,说明有失败 if (!$flag) { Yii::$app->getSession()->setFlash('error', 'ID:' . $id . ' 删除失败!'); return $this->redirect(Url::toRoute('symptom/index')); } } Yii::$app->getSession()->setFlash('success', 'ID:' . $id . ' 成功删除!'); return $this->redirect(Url::toRoute('symptom/index')); }
/** * 根据疾病的拼音简写,得到疾病的信息 * @author gaoqing * @date 2016-09-08 * @param String $pyInitial 疾病的拼音简写 * @param boolean $isRelDis 是否获取其 相关疾病 * @param boolean $isRelSym 是否获取其 典型症状 * @param boolean $isRelPart 是否获取其相关 部位 * @param boolean $isRelDep 是否获取其 就诊科室 * @return array 疾病的信息集 */ public static function getDiseasesByPinyin($pyInitial, $isRelDis = false, $isRelSym = false, $isRelPart = false, $isRelDep = false) { $disease = []; //1、得到疾病的疾病信息 $odisease = new Disease(); $disease = $odisease->getDiseasesByPinyin($pyInitial); if (self::isNotNull($disease)) { $disease['treat_method'] = self::explodeStr($disease['treatment']); $disease = self::replace($disease, '<br/>'); $disease['chuanranxing'] = '无'; if ($disease['chuanranflag'] == 1) { $disease['chuanranxing'] = '有'; } //2、获取科室信息 if ($isRelDep) { $treatDepNames = self::explodeStr($disease['treat_department']); $odepartment = new Department(); $disease['department'] = $odepartment->getDepsByName($treatDepNames); $disease['medicine'] = self::explodeStr($disease['medicine']); } //3、获取典型症状信息 if ($isRelSym) { $typicalSymptomNames = self::explodeStr($disease['typical_symptom']); $osymptom = new Symptom(); $disease['tsymptom'] = $osymptom->getSymptomsByName($typicalSymptomNames); } //4、得到疾病对应的所有部位 if ($isRelPart) { $disease['part'] = Relate::getPartsByDisid($disease['id']); } //5、得到相关疾病 if ($isRelDis) { $relDiseaseNames = self::explodeStr($disease['rel_disease']); $values = Disease::search(['name' => $relDiseaseNames]); if (self::isNotNull($values)) { $disease['reldis'] = $values['list']; } } } return $disease; }