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;
}
Ejemplo n.º 2
0
 /**
  * 根据部位获取症状
  * @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;
 }
Ejemplo n.º 3
0
 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);
 }
Ejemplo n.º 4
0
 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;
 }
Ejemplo n.º 5
0
 /**
 * 根据关键词查相关症状
 * @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);
 }
Ejemplo n.º 6
0
 public function getSymptomLimit($where = [], $offset = 0, $length = 10, $orderBy = 'id DESC')
 {
     return Symptom::find()->where($where)->orderBy($orderBy)->offset($offset)->limit($length)->asArray()->all();
 }
Ejemplo n.º 7
0
 /**
  * 症状缓存
  */
 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 . '条';
 }
Ejemplo n.º 8
0
 /**
  * 文章页
  * @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);
 }
Ejemplo n.º 9
0
 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 [];
 }
Ejemplo n.º 10
0
 /**
  * 删除症状
  * @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'));
 }
Ejemplo n.º 11
0
 /**
  * 根据疾病的拼音简写,得到疾病的信息
  * @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;
 }