'uahpet/database/犬/JSON/', //猫 2=>'uahpet/database/猫/JSON/', ]; /** * __construct function. * * @access public * @return void */ public function __construct() { parent::__construct(); //$this->load->database(); } //报告路径 public function report_file_path($deviceID,$petSpecies=1){ $path = $petSpecies == 1?self::DIR_REPORT_DATA:self::DIR_REPORT_DATA_CAT; return APPPATH.$path.($deviceID).'.json'; } //报告路径 public function get_report_json($deviceID,$petSpecies=1){ //报告文件 $file = $this->report_file_path($deviceID,$petSpecies); if(!file_exists($file)){ return []; } $reportJson = file_get_contents($file); return json_decode($reportJson,true); } //报告是否生成 public function is_report_ready($deviceID){ return file_exists( $this->report_file_path($deviceID) ); } //获取家族树 public function family_tree_img($deviceID){ $file = Report_model::DIR_REPORT_FAMILY_TREE.strtoupper($deviceID).'.jpg'; if(file_exists(APPPATH.$file)){ return base_url('views/'.$file); } $file = Report_model::DIR_REPORT_DATA.strtoupper($deviceID).'.jpg'; if(file_exists(APPPATH.$file)){ return base_url('views/'.$file); } return false; } //报告统计 public function get_report_count() { $files = scandir(APPPATH.self::DIR_REPORT_DATA); $count = 0; foreach($files as $file){ if($file === '.' || $file === '..'){ continue; } if(substr($file,-5) === '.json'){ $count++; } } return $count; } //素材 public function get_material($petSpecies=1,$isBreeding=false){ if(!is_null($this->_material)){ return $this->_material; } //区分繁育版 $diseaseSingleGene = [ //狗 1=>'犬类单基因疾病', //猫 2=>$isBreeding?'猫类单基因遗传病繁育版':'猫类单基因遗传病', ]; //根据报告内容,解析建议文字 $materialFileName = [ //狗 1=>[ //'交互式报告素材', //'猫类单基因疾病', $diseaseSingleGene[1]=>'单基因疾病', '犬类单基因疾病医护建议'=>'单基因疾病医护建议', '犬类复杂疾病'=>'多基因疾病', '犬类品系'=>'品系', ], //猫 2=>[ //'交互式报告素材', //'猫类单基因疾病', $diseaseSingleGene[2]=>'单基因疾病', '猫类单基因疾病医护建议'=>'单基因疾病医护建议', '猫类复杂疾病'=>'多基因疾病', '猫品系'=>'品系', '猫血型'=>'血型', ], ]; //报告素材 $material = []; foreach ($materialFileName[$petSpecies] as $name=>$uni_name) { if(PHP_OS == 'WINNT'){ $name = iconv('UTF-8','GB2312',$name); } //猫没有多基因疾病与医护建议 if(in_array($name,['猫类单基因疾病医护建议','猫类复杂疾病'])){ $material[$uni_name] = []; continue; } $_content = file_get_contents(APPPATH.self::DIR_MATERIAL[$petSpecies].$name.'.json'); $material[$uni_name] = json_decode($_content,true); } //猫的品系资料转换 if($petSpecies == 2){ foreach ($material['品系'] as $key=>$val) { $material['品系'][$key]['犬种特点'] = $val['猫种特点']; } } $this->_material = $material; return $material; } //获取疾病解锁信息 public function get_disease_unlock($sample=[],$package=[]){ if(!is_null($this->_disease_unlock)){ return $this->_disease_unlock; } //解锁疾病 $unlockDisease = []; if(!empty($package['disease'])){ $package['disease'] = explode(',',$package['disease']); $this->load->model('disease_model'); $unlockDisease = $this->disease_model->get($package['disease'],'base.id',true,'base.name'); $unlockDisease = array_column($unlockDisease,'name'); foreach ($unlockDisease as &$item) { $item = trim($item); } } //如果样品选择了某个套餐,就直接解锁 $custom = $this->get_disease_custom($sample); if(!empty($custom['disease_name'])){ $unlockDisease = array_merge($unlockDisease,$custom['disease_name']); } $this->_disease_unlock = $unlockDisease; return $unlockDisease; } //获取疾病自选信息 public function get_disease_custom($sample=[]){ if(!is_null($this->_disease_custom)){ return $this->_disease_custom; } $unlockDisease = []; if(!empty($sample['package_custom'])){ $unlockDisease = json_decode($sample['package_custom'],true); } $this->_disease_custom = $unlockDisease; return $this->_disease_custom; } /** * 获取疾病列表带锁定信息 * @param $gene_type int 基因类型 1单基因 2多基因 * @param $sample array 样品资料,需要用它获取选择的疾病 * @param $report_json array 报告数据文件,用它获取是否已得病 * @param $package array 套餐数据,获取锁定套餐 * @param $need_category int 是否需要分类 * @param $need_detail int 是否需要明细 * @param $hidden_locked bool 锁定时,是否隐藏明细 * @return mixed */ public function get_disease_list($gene_type=0,$sample=[],$report_json=[],$package=[],$need_category=0,$need_detail=0,$hidden_locked=true){ $material = $this->get_material($sample['pet_species'],$package['is_breed']); //区分单基因/多基因 1单基因 2多基因,便于检测不出来时区分显示风险描述 foreach ($material['单基因疾病'] as $key=>$val) { $material['单基因疾病'][$key]['gene_type'] = 1; } foreach ($material['多基因疾病'] as $key=>$val) { $material['多基因疾病'][$key]['gene_type'] = 1; } if(empty($gene_type)){ $list = array_merge($material['单基因疾病'],$material['多基因疾病']); }elseif($gene_type=='1'){ $list = array_merge($material['单基因疾病']); }else{ $list = array_merge($material['多基因疾病']); } //分类对应 $map = [ '代谢类疾病'=>'代谢免疫', '代谢类遗传病'=>'代谢免疫', '代谢类遗传疾病'=>'代谢免疫', '代谢性遗传病'=>'代谢免疫', '耳科疾病'=>'五官皮肤', '关节类疾病'=>'内科', '泌尿生殖系统遗传疾病'=>'内科', '泌尿系统疾病'=>'内科', '泌尿系统类遗传疾病'=>'内科', '泌尿系统遗传病'=>'内科', '免疫缺陷遗传病'=>'代谢免疫', '免疫系统遗传病'=>'代谢免疫', '内分泌系统遗传病'=>'内科', '皮肤类疾病'=>'五官皮肤', '皮肤类遗传病'=>'五官皮肤', '皮肤类肿瘤疾病'=>'五官皮肤', '皮肤肿瘤疾病'=>'五官皮肤', '其他遗传疾病'=>'内科', '神经类遗传病'=>'神经系统', '神经系统疾病'=>'神经系统', '神经系统遗传病'=>'神经系统', '神经系统遗传疾病'=>'神经系统', '睡眠病'=>'神经系统', '糖类代谢类遗传疾病'=>'代谢免疫', '消化系统疾病'=>'内科', '消化系统遗传病'=>'内科', '心血管系统疾病'=>'血液心脏', '心血管系统遗传病'=>'血液心脏', '血液类遗传病'=>'血液心脏', '血液类遗传疾病'=>'血液心脏', '血液淋巴系统疾病'=>'血液心脏', '血液系统遗传病'=>'血液心脏', '血液遗传病'=>'血液心脏', '血液遗传疾病'=>'血液心脏', '眼科遗传病'=>'五官皮肤', '药物代谢类遗传疾病'=>'代谢免疫', '代谢免疫类疾病'=>'代谢免疫', '遗传性眼病'=>'五官皮肤', '骨科遗传病'=>'内科', '骨骼肌肉类疾病'=>'内科', '骨骼肌肉系统遗传病'=>'内科', '骨骼肌肉遗传病'=>'内科', '骨骼类遗传病'=>'内科', '骨骼类肿瘤疾病'=>'内科', '骨骼系统遗传病'=>'内科', '骨骼肌肉类遗传病'=>'内科', '肌肉骨骼系统遗传病'=>'内科', '肌肉骨骼类遗传病'=>'内科', '肌肉类遗传病'=>'内科', '肌肉系统类遗传病'=>'内科', '肌肉系统遗传病'=>'内科', '肌肉遗传病'=>'内科', ]; //猫品系额外处理 $map_cat = [ '泌尿生殖系统遗传病'=>'泌尿生殖', '骨科遗传病'=>'肌肉骨骼', '骨骼肌肉类疾病'=>'肌肉骨骼', '骨骼肌肉系统遗传病'=>'肌肉骨骼', '骨骼肌肉遗传病'=>'肌肉骨骼', '骨骼类遗传病'=>'肌肉骨骼', '骨骼类肿瘤疾病'=>'肌肉骨骼', '骨骼系统遗传病'=>'肌肉骨骼', '骨骼肌肉类遗传病'=>'肌肉骨骼', '肌肉骨骼系统遗传病'=>'肌肉骨骼', '肌肉骨骼类遗传病'=>'肌肉骨骼', '肌肉类遗传病'=>'肌肉骨骼', '肌肉系统类遗传病'=>'肌肉骨骼', '肌肉系统遗传病'=>'肌肉骨骼', '肌肉遗传病'=>'肌肉骨骼', ]; if($sample['pet_species'] == 2){ $map = array_merge($map,$map_cat); } //锁定疾病,里面已经考虑了套餐选择项 $unlockDisease = $this->get_disease_unlock($sample,$package); // var_dump(array_keys($list)); // var_dump($unlockDisease);die; //是否存在风险 $riskDisease = $report_json['遗传疾病']['body']['单基因疾病']['body']; if(isset($report_json['健康风险']['body']['复杂疾病性状']['body'])){ $riskDisease = array_merge($riskDisease,$report_json['健康风险']['body']['复杂疾病性状']['body']); } $out = []; foreach ($list as $name=>$val) { $name = trim($name); $tmp = [ //是否锁定 'lock'=>!in_array($name,$unlockDisease), 'name'=>$name, 'gene_type'=>$val['gene_type'], 'risk'=>false, 'risk_detail'=>false, ]; //详情 if($need_detail){ $tmp['detail'] = $val; } //风险项,没有锁定时才展示 if((!$hidden_locked || !$tmp['lock']) && isset($riskDisease[$name])){ $tmp['risk'] = true; //区分猫狗,猫没有放body if($sample['pet_species'] == 2) { $tmp['risk_detail'] = $riskDisease[$name]; if($tmp['risk_detail']["检测结果"] == "纯合突变" OR $tmp['risk_detail']["遗传模式"] == "显性遗传"){ $tmp['risk_level'] = 2; }else{ $tmp['risk_level'] = 1; } //为“折耳和软骨发育不良”单独判定 if($name == '折耳和软骨发育不良'){ if($tmp['risk_detail']["检测结果"] == "纯合突变"){ $tmp['risk_level'] = 2; }else{ $tmp['risk_level'] = 1; } } }else{ $tmp['risk_detail'] = $riskDisease[$name]['body']; //风险等级 switch ($tmp['risk_detail']['检测结果']) { case '患病': case '中等风险': case '高风险': case '有极高的发病风险'://风险解读 $tmp['risk_level'] = 2; break; case '携带致病突变': case '普通风险': case '低风险': case '低发病风险'://风险解读 $tmp['risk_level'] = 1; break; } } } //是否分类 if(!empty($need_category)){ //部分素材不是疾病,是禁用药物罗列 if(empty($val['所属类别'])){ continue; } if(empty($map[$val['所属类别']])){ continue; } $out[$map[$val['所属类别']]][] = $tmp; }else{ $out[] = $tmp; } } return $out; } //拼装报告结构 public function get_result($deviceID,$ignoreStep=false){ //样品及套餐信息 $this->load->model('sample_model'); $this->load->model('package_model'); $sample = $this->sample_model->get($deviceID,'device_id'); if(!$sample){ return []; } //样品未完成是否返回 if(!$ignoreStep && $sample['step']!=Sample_model::STEP_COMPLETE){ return []; } //资料来源:json $json = $this->get_report_json($deviceID,$sample['pet_species']); if(empty($json)){ return []; } //补充图片,物种 if(empty($sample['pet_img'])){ $sample['pet_img'] = base_url().'uploads/default/common.jpg'; } //套餐设置成1,上线后删除 //$sample['package_id'] = 1; $package = $this->package_model->get($sample['package_id']); if(!$package){ return []; } $package['structure'] = explode(',',$package['structure']); $package['structure_hide'] = explode(',',$package['structure_hide']); $package['cert'] = array_filter(explode(',',$package['cert'])); //素材对应 $material = $this->get_material($sample['pet_species'],$package['is_breed']); //模块对应 /* $main = [ '爱宠大揭秘'=>[], '健康大调查'=>[], '养育大宝典'=>[], '基因全解锁'=>[], ]; */ $block_list = [ '品系鉴定', '智力评估', '性格行为', '遗传疾病', '健康风险', '用药指导', '繁育建议', '饮食建议', '毛发美护', '可训练性', '血型筛查', ]; $blocks = []; foreach ($block_list as $val) { $blocks[$val] = $this->get_block($val,$json,$sample,$package,$material,$json['header']['宠物名']); } //营养结果固化 if(empty($sample['diet_nutrition']) && !empty($blocks['饮食建议']['营养代谢'])){ $this->sample_model->update([ 'diet_nutrition'=>json_encode($blocks['饮食建议']['营养代谢'],JSON_UNESCAPED_UNICODE) ],[ 'id'=>$sample['id'] ]); } //绑定套餐信息:版块、证书;疾病、升级目标不处理 $ret = [ '信息'=>[ '编号'=>$deviceID, '宠物照片'=>$sample['pet_img'], //'昵称'=>$json['header']['宠物名'], '昵称'=>$sample['pet_name'], '养育人'=>$sample['name'], '测试日期'=>date('Y-m-d',$sample['create_time']), '物种'=>$package['species'],//1狗2猫 '个性标签'=>$this->get_speciality($sample,$json,$package), '证书'=>$package['cert'], '是繁育版'=>!empty($package['is_breed']), //'证书'=>'健康证书', //防止疾病被过滤之后 '遗传疾病'=>$this->get_focus_disease($blocks['遗传疾病'],1), '健康风险'=>$this->get_focus_disease($blocks['健康风险'],2), '可升级'=>!empty($package['package_up']) && $package['package_up'] != $package['id'], ], ]; //套餐不允许展示的版块不展示 //$blocks = array_intersect(array_merge($package['structure'],'信息'),$blocks); $package['structure'][] = '信息'; //开放版块排序在前 $blocks_open = []; $blocks_lock = []; foreach ($blocks as $key=>$val) { if(in_array($key,$package['structure'])){ $val['lock'] = false; $val['view'] = true; $blocks_open[$key] = $val; continue; } $val = [ 'lock'=>true, 'view'=>!in_array($key,$package['structure_hide']) ]; $blocks_lock[$key] = $val; } $ret = array_merge($blocks_open,$blocks_lock,$ret); return $ret; } /** * @param $block 版块名称 * @param $reportJson 报告json * @param $material 素材 * @param $name 宠物名称 * @param $sample 样品数据 * @param $package 套餐数据 * @return array */ public function get_block($block,$reportJson,$sample,$package,$material,$name){ switch ($block){ case '品系鉴定': //血统分析-家族树 //品系素材文字提取 $temp = []; if(!empty($reportJson['血统分析']['body']['品系纯度'])){ $list = $reportJson['血统分析']['body']['品系纯度']; array_multisort($list,SORT_DESC, SORT_NUMERIC ,$list); foreach ($list as $key => $val){ $temp[] = [ '名称'=>$key, '占比'=>$val, '介绍'=>!empty($material['品系'][$key])?$material['品系'][$key]:'', ]; } } /* $temp = [ '品系鉴定'=>'', '血统分析'=>'', '品种分析'=>'', '遗传特征'=>[ '遗传特征'=>'', '基因毛色'=>'', '基因毛型'=>'' ] ];*/ $temp = ['列表'=>$temp]; break; case '智力评估': //print_r($reportJson);die; $rate = $reportJson['遗传特征']['body']['智商指数']['body']['智商指数']; $rate = round($rate); //狗狗智商评分内容 $map[1] = [ 3=>[ '检测结果'=>'优秀汪', '结论'=>"{$name}是只聪明的狗狗,新指令重复15-25次后根据个体差异,会有不同程度的掌握。它对第一次指令作出的回应几率是70%,表现的优劣取决于练习时间的多寡。整体来说,有时反应慢半拍,但依然不妨碍它学习的很好。但如果训练者缺乏经验,或过于严厉或没耐心,狗狗的表现也会受到影响。", '描述'=>"对于新的指令,在重复15-25次后可以理解新的指令,70%以上的时间服从主人的第一个命令", ], 4=>[ '检测结果'=>'学霸汪', '结论'=>"{$name}是一只智力上等的狗狗,简单指令学习5-15次便能学会。它遵守第一次指令的机率是85%,对于稍微复杂的指令只要多练习就能掌握。当主人离它们较远时,它也会有反应。即使训练人员经验稍微不足,还是有办法将这些狗调教得很优秀。", '描述'=>"对于新的指令,在重复5-15次后可以理解新的指令,85%以上的时间服从主人的第一个命令", ], 5=>[ '检测结果'=>'天才汪', '结论'=>"恭喜您,{$name}是一只智力超群的天才狗,一般情况下听到新指令5次以内,就会理解需要完成的动作并牢牢记住。主人下达命令时,它的完成度高达95%以上,并且能够在3秒内做出反应。即使训练它们的人经验不足,它也可以学习得很好。", '描述'=>"对于新的指令,不用下达超过5次,就能理解是什么意思,并且95%以上的时间对主人的第一个命令是服从的。", ] ]; // 猫智力 $map[2] = [ 5=>[ "检测结果"=>"天才喵", "描述"=>"{$name}是猫中天才,只要稍加训练,甚至能像狗那样听话,比如把东西叼回对它们来说就是小菜一碟。" ], 4=> [ "检测结果"=>"学霸喵", "描述"=> "{$name}不仅有超高的智商,还有超强的服从性,可以和人很好的互动,稍加训练甚至可以带出门遛弯,可以通过看你做事情而去学习,比如开门,比如自己偷翻吃的。" ], 3=> [ "检测结果"=>"优秀喵", "描述"=> "{$name}聪明,性格好,拥有很强的观察力和学习能力,会粘人,但又总保持着自己的本性。" ] ]; $map = $map[$sample['pet_species']]; $temp = [ '智力指数'=>$rate, '智力描述'=>$map[$rate], ]; break; case '遗传疾病': /* $temp = [ '关键数据结果'=>'', '检测类目'=>'', ]; */ $list = $reportJson['遗传疾病']['body']['单基因疾病']['body']; //获取疾病列表检测是否被锁定,如被锁定,隐藏关键信息 $diseaseList = $this->get_disease_list(1,$sample,$reportJson,$package,false,true,false); $temp = $this->get_disease_block($sample,$list,$diseaseList,true); break; case '健康风险': $list = isset($reportJson['健康风险']['body']['复杂疾病性状']['body'])?$reportJson['健康风险']['body']['复杂疾病性状']['body']:[]; //健康风险,按照风险值排序 $temp = []; foreach ($list as $key => $val) { $val['body']['风险解读'] = explode(',',$val['body']['风险解读']); $temp[] = (int)str_replace('高于','',$val['body']['风险解读'][1]); } array_multisort($temp,SORT_DESC, SORT_NUMERIC ,$list); rsort($temp); /* $temp = [ '风险系数'=>'', '风险介绍'=>[ '致病机理'=>'', '临床症状'=>'', '所属类别'=>'', ], '养育建议'=>'', ];*/ //获取疾病列表检测是否被锁定,如被锁定,隐藏关键信息 $diseaseList = $this->get_disease_list(2,$sample,$reportJson,$package,false,true,false); $temp = $this->get_disease_block($sample,$list,$diseaseList,false); break; case '用药指导': $riskDisease = $reportJson['遗传疾病']['body']['单基因疾病']['body']; $temp = $this->drug( isset($riskDisease['恶性高热']), isset($riskDisease['多重药物敏感风险']) || isset($riskDisease['多重药物敏感']) ); $temp = ['列表'=>$temp]; break; case '饮食建议': $result = [ '蛋白质'=>'正常', '钠'=>'正常', '牛磺酸'=>'正常', 'omega-3'=>'正常', 'EPA和DHA'=>'正常', '抗氧化剂'=>'正常', 'L-肉碱'=>'正常', '叶酸'=>'正常', '维生素B'=>'正常', '维生素C'=>'正常', '维生素E'=>'正常', '铁'=>'正常', '氨基葡萄糖和硫酸软骨素'=>'正常', '碳水化合物'=>'正常', '水'=>'正常', '辅酶Q10'=>'正常', '磷'=>'正常' ]; //饮食指导 //区分单基因/多基因 1单基因 2多基因 $map = $material['单基因疾病医护建议']; //依赖遗传病 $diseaseList = $this->get_disease_list(1,$sample,$reportJson,$package,false,false,false); $suggestion = []; foreach ($diseaseList as $disease) { if($disease['risk'] && !$disease['lock'] && isset($map[$disease['name']]["喂养建议 "])){ $suggestion[] = $map[$disease['name']]["喂养建议 "]; break; } } $suggestion = implode('',$suggestion); //营养代谢结果,增加随机性,并保存到sample里 if(!empty($sample['diet_nutrition'])){ $result = json_decode($sample['diet_nutrition']); }else{ $nutrition = isset($reportJson['营养代谢']['body']['营养代谢综合结果'])?$reportJson['营养代谢']['body']['营养代谢综合结果']:[]; if(!is_null($nutrition)){ $result = array_merge($result,$nutrition); } foreach ($result as $key=>$val) { $v = 0; switch ($val){ case '微量': $v = 1; break; case '少量': $v = rand(2,3); break; case '正常': $v = rand(4,7); break; case '稍高': $v = rand(8,9); break; case '稍多': $v = rand(8,9); break; case '多量': $v = 10; break; } $result[$key] = [ '结果'=>$val, '值'=>$v, ]; } } $temp = [ '饮食结构'=>isset($reportJson['营养代谢']['body']['饮食结构'])?$reportJson['营养代谢']['body']['饮食结构']:'', '饮食指导'=>$suggestion, '营养代谢'=>$result, ]; //猫 if($sample['pet_species'] == 2){ unset($temp['营养代谢']); } break; case '繁育建议': //毛色 $color = $reportJson['进阶项目研究']['body']['毛色分析']['body']['成年毛色预测']; $type = $reportJson['进阶项目研究']['body']['毛型分析']['body']['成年毛型预测']; //echo $color;die; //$color = '白色或者黑色'; $colors = str_replace([',','或者','或'],',',$color); $colors = explode(',',$colors); $color_out = []; foreach ($colors as $key=>$val) { //括号内的描述去掉 $val = str_replace(['(','('],',',$val); $val = explode(',',$val); $val = $val[0]; //还剩一种情况,用/分隔 $val = explode('/',$val); foreach ($val as $v) { $color_out[] = trim($v); } } $color_out = array_values(array_filter($color_out)); //遗传病 $material = $this->get_material($sample['pet_species'],$package['is_breed']); //区分单基因/多基因 1单基因 2多基因 $map = [ //狗 1=>$material['单基因疾病医护建议'], //猫 2=>$material['单基因疾病'], ]; $map = $map[$sample['pet_species']]; //建议中的节点 $map_key = [ //狗 1=>'育种建议', //猫 2=>'繁育建议', ]; $map_key = $map_key[$sample['pet_species']]; //依赖遗传病 $resultNotice = '可繁育'; $diseaseList = $this->get_disease_list(1,$sample,$reportJson,$package,false,false,false); $suggestion = []; foreach ($diseaseList as $disease) { if($disease['risk'] && !$disease['lock'] && isset($map[$disease['name']][$map_key])){ $resultNotice = '不建议繁育'; $suggestion[] = $map[$disease['name']][$map_key]; break; } } if(empty($suggestion)){ //对于狗,还要检查健康风险 if($sample['pet_species'] == 1){ //重新获取健康风险,这里需要考虑解锁情况 $diseaseList = $this->get_disease_list(2,$sample,$reportJson,$package,false,false,false); //print_r($diseaseList);die; foreach ($diseaseList as $disease) { if($disease['risk'] && !$disease['lock']){ //分析相对风险值,例如:相对风险值73.93, 高于99.9%犬只 $temp = explode('高于',$disease['risk_detail']['风险解读']); $temp = (int)$temp[1]; if($temp>=90){ $resultNotice = '不建议繁育'; $suggestion[] = $disease['name'].':'.$disease['risk_detail']['检测结果'].','.$disease['risk_detail']['风险解读']; break; } } } } if(empty($suggestion)){ $suggestion[] = '您的爱宠没有检测出遗传隐患,可放心繁育下一代,生出健康漂亮的宝宝。'; } } $suggestion = implode('',$suggestion); $temp = [ '结果'=>$resultNotice, '建议'=>$suggestion, '毛色'=>$color_out, '毛型'=>$type, '毛型类别'=>strpos($type,'直') === false?'卷':'直',//1直2卷 ]; //猫 /* if($sample['pet_species'] == 2){ unset($temp['毛色'],$temp['毛型'],$temp['毛型类别']); }*/ break; case '毛发美护': $rate = round($reportJson['洗护建议']['body']['梳毛护理星级']); $map = [ //狗 1=>[ "梳毛护理相关知识点"=>"星星表明你的爱犬需要梳理的频度,以保持它被毛的最佳状态。", 1=>"每周1次:{$name}的被毛几乎不用特别梳理就可以有型,但不能保证地毯沙发上没有狗毛,定期梳理可大程度减少狗因褪毛而到处飞扬的狗毛。", 2=>"每周2-3次:{$name}的被毛不会太难打理,定期梳理可大程度减少狗毛乱飞,同时也有助于你们的感情培养哦。", 3=>"每天1次:{$name}的被毛褪毛较多,频繁的梳理可以尽量去除掉落的被毛并防止里层被毛缠结,另外每天梳理有助于你与它感情的培养哦。", ], 2=>[ "梳毛护理相关知识点"=> "指猫咪被毛需要梳理的频率,得分越高,需要梳理的次数越多。", "1"=> "每周1次:{$name}的被毛几乎不用特别梳理就可以有型,但不能保证地毯沙发上没有猫毛,定期梳理可大程度减少猫因褪毛而到处飞扬的猫毛。", "2"=> "每周2-3次:{$name}的被毛不会太难打理,定期梳理可大程度减少猫毛乱飞,同时也是预防毛球症很好的方式之一。", "3"=> "每天1次:{$name}的被毛褪毛较多,频繁的梳理可以尽量去除掉落的被毛并防止里层被毛缠结,同时也是预防毛球症很好的方式之一。另外每天梳理有助于你与它感情的培养哦。", ] ]; $map = $map[$sample['pet_species']]; //疾病 $diseaseList = $this->get_disease_list(0,$sample,$reportJson,$package,false,false,false); $washMap = [ "GM2神经节苷脂沉着症"=> "{$name}需要舒适的床上用品,如空气床垫、水床、休闲椅垫、人用床垫、羊毛、睡袋、毯子、稻草或其他柔软舒适的东西。你需要经常更换床上用品的外层,并且需要定期帮它洗澡,以防它由于大小便失禁引起褥疮、尿烧伤、皮肤溃疡等其他疾病。在尾巴和肛门周围的毛发应该经常修剪。", "多发性神经病"=> "{$name}需要舒适的床上用品,如空气床垫、水床、休闲椅垫、人用床垫、羊毛、睡袋、毯子、稻草或其他柔软舒适的东西。你需要经常更换床上用品的外层,并且需要定期帮它洗澡,以防它由于大小便失禁引起褥疮、尿烧伤、皮肤溃疡等其他疾病。在尾巴和肛门周围的毛发应该经常修剪。", "感觉神经失调性神经病"=> "{$name}长期缺乏运动,需要给它提供足够柔软的睡垫并注意清洁,避免褥疮及皮肤疾病。", "皮肤脆性综合征"=> "{$name}需要限制运动,生活环境以柔软为主,玩耍时注意力度,避免撕裂皮肤。增加剪指甲频率,防止它抓挠身体,避免受外伤。由于它的皮肤免疫力较低,应注意生活环境清洁,不要与有皮肤病的宠物接触,避免继发或加重皮肤疾病。当发现它的皮肤出现撕裂,发红,瘙痒,脱毛,化脓等异常时及时送诊。", "球形细胞脑白质营养不良"=> "{$name}需要舒适的床上用品,如空气床垫、水床、休闲椅垫、人用床垫、羊毛、睡袋、毯子、稻草或其他柔软舒适的东西。你需要经常更换床上用品的外层,并且需要定期帮它洗澡,以防它由于大小便失禁引起褥疮、尿烧伤、皮肤溃疡等其他疾病。在尾巴和肛门周围的毛发应该经常修剪。", "神经节苷脂病-1型"=> "{$name}需要舒适的床上用品,如空气床垫、水床、休闲椅垫、人用床垫、羊毛、睡袋、毯子、稻草或其他柔软舒适的东西。你需要经常更换床上用品的外层,并且需要定期帮它洗澡,以防它由于大小便失禁引起褥疮、尿烧伤、皮肤溃疡等其他疾病。在尾巴和肛门周围的毛发应该经常修剪。", "退行性脊髓病"=> "{$name}需要舒适的床上用品,如空气床垫、水床、休闲椅垫、人用床垫、羊毛、睡袋、毯子、稻草或其他柔软舒适的东西。你需要经常更换床上用品的外层,并且需要定期帮它洗澡,以防它由于大小便失禁引起褥疮、尿烧伤、皮肤溃疡等其他疾病。在尾巴和肛门周围的毛发应该经常修剪。", "岩藻糖苷贮积症"=> "{$name}需要舒适的床上用品,如空气床垫、水床、休闲椅垫、人用床垫、羊毛、睡袋、毯子、稻草或其他柔软舒适的东西。你需要经常更换床上用品的外层,并且需要定期帮它洗澡,以防它由于大小便失禁引起褥疮、尿烧伤、皮肤溃疡等其他疾病。在尾巴和肛门周围的毛发应该经常修剪。", "鱼鳞病"=> "可使用香波冲洗皮肤,刷牙和毛发梳理等物理手段进行症状的缓解。皮肤可使用温和的抗脂溢性香波和保湿霜可用来在宠物皮肤上创造一个保护层,减少水分流失。" ]; //var_dump($diseaseList);die; $washNotice = '无特别洗护要求'; foreach ($diseaseList as $disease) { if($disease['risk'] && !$disease['lock'] && isset($washMap[$disease['name']])){ $washNotice = $washMap[$disease['name']]; break; } } $temp = [ '梳毛护理星级'=>$rate, '梳毛建议'=>$map[$rate], '梳毛说明'=>$map["梳毛护理相关知识点"], '洗护要求'=>$washNotice, ]; break; case '性格行为': /* $temp = [ '活力值'=>'', '胆量值'=>'', '暴躁值'=>'', '吠叫值'=>'', '独处值'=>'', '排尿值'=>'', ];*/ //狗 $map[1] = [ "胆量值"=>[ "描述"=>"指犬只对陌生事物的恐惧感及焦虑情绪,分数越高,越容易有恐惧或焦虑的情绪。", "1"=>"{$name}是只胆大包天的狗狗,这个世界上似乎没有它害怕的事物。", "2"=>"{$name}是只勇敢的狗狗,内心平静,是很稳重的孩子。", "3"=>"{$name}是只勇敢的狗狗,内心平静,是很稳重的孩子。", "4"=>"{$name}稍微有点胆小,容易焦虑,希望世界对它温柔以待。", "5"=>"{$name}稍微有点胆小,容易焦虑,希望世界对它温柔以待。", ], "暴躁值"=>[ "描述"=>"指犬只的攻击性,得分越高,越容易产生攻击行为,与战斗力无关。", "1"=>"{$name}是只人畜无害的狗子,狗中铁憨憨。", "2"=>"{$name}是典型的人不犯我我不犯人的狗子,不去惹毛它就不会炸毛。", "3"=>"{$name}是典型的人不犯我我不犯人的狗子,不去惹毛它就不会炸毛。", "4"=>"{$name}性子比较急,不要尝试去挑战它的底线,别老虎不发威就把它当HelloKitty。", "5"=>"{$name}性子比较急,不要尝试去挑战它的底线,别老虎不发威就把它当HelloKitty。", ], "吠叫值"=>[ "描述"=>"指犬只的持续吠叫程度,分数越高,表示当犬只兴奋或受到刺激时,持续吠叫的情况越严重。", "1"=>"{$name}可以说是最不爱说话的一类狗子了,这种不吵闹的狗子是多少人的理想型。", "2"=>"{$name}兴奋或受到刺激的时候喜欢叫,注意观察它在说什么,它可不是随便说说而已哦。", "3"=>"{$name}兴奋或受到刺激的时候喜欢叫,注意观察它在说什么,它可不是随便说说而已哦。", "4"=>"{$name}天生是个话痨,有事没事就爱瞎哔哔,如果它并没有这么做,那么恭喜你,它为了融入你的生活改变了天性。", "5"=>"{$name}天生是个话痨,有事没事就爱瞎哔哔,如果它并没有这么做,那么恭喜你,它为了融入你的生活改变了天性。", ], "独处值"=>[ "描述"=>"指犬只对孤独的感知度,是否容易产生分离焦虑,分数越高,孤独的感知能力越强,独处能力越低。", "1"=>"{$name}是只学会享受孤独的狗子,独处能力很强,但并不代表它不想和你在一起,要知道,和你在一起的时光才是它最开心的。", "2"=>"{$name}是懂事的狗子,能够自己独处上一段时间,但是它同时也很想你,不要让它等太久。", "3"=>"{$name}是懂事的狗子,能够自己独处上一段时间,但是它同时也很想你,不要让它等太久。", "4"=>"{$name}觉得与你分离是世界上最难过的事,尽量多陪陪它吧,你不在的时候,它可能偷偷伤心了很久。", "5"=>"{$name}觉得与你分离是世界上最难过的事,尽量多陪陪它吧,你不在的时候,它可能偷偷伤心了很久。", ], "排尿值"=>[ "描述"=>"指犬只独自在家时乱排尿的情况,得分越高,乱排尿的可能性越大。", "1"=>"{$name}是只讲规则的狗子,只要你事先与它确定了规则,它是不会随地尿尿的。", "2"=>"{$name}通常不会随意尿尿,除非它忍不住或者它想通过尿尿告诉你什么。", "3"=>"{$name}通常不会随意尿尿,除非它忍不住或者它想通过尿尿告诉你什么。", "4"=>"{$name}在你看不到的情况下,可能会随意尿一尿,它知道这样做不太好,但是它就是想试一试。", "5"=>"{$name}在你看不到的情况下,可能会随意尿一尿,它知道这样做不太好,但是它就是想试一试。", ], "活力值"=>[ "描述"=>"指犬只的活跃度,得分越高越活泼,精力越充沛,性格更有趣喧闹,需要的运动量越大。", "1"=>"{$name}是只喜欢安静的肥宅,请让它一只汪静静。", "2"=>"{$name}是只动静皆宜的狗子,静如处子,动如脱兔说的就是它。", "3"=>"{$name}是只动静皆宜的狗子,静如处子,动如脱兔说的就是它。", "4"=>"{$name}是只喜欢蹦D的狗子,内心住着野狼DISCO本狼,请尽情陪它玩耍,释放你们的天性。", "5"=>"{$name}是只喜欢蹦D的狗子,内心住着野狼DISCO本狼,请尽情陪它玩耍,释放你们的天性。", ], ]; //猫 $map[2] = [ "外出频率"=> [ "描述"=> "指猫咪的外出频率,得分越高,携带外出的可能性越高,出门受刺激的反应越低。", "1"=> "{$name}是只害羞的猫咪,携带外出受刺激的可能性大,若没有进行专业的训练,不建议强制外出。", "2"=> "{$name}是只可宅可外出的猫咪,值得注意的是,需要进行足够多的社会化,循序渐进的携带外出,如果外出反应大,应立即带回。", "3"=> "{$name}是只可宅可外出的猫咪,值得注意的是,需要进行足够多的社会化,循序渐进的携带外出,如果外出反应大,应立即带回。", "4"=> "{$name}是猫咪里的汪,是可以像狗一样外出溜达的猫咪,前期做好循序渐进的外出训练,直到在外毫无压力时便可携带外出。", "5"=> "{$name}是猫咪里的汪,是可以像狗一样外出溜达的猫咪,前期做好循序渐进的外出训练,直到在外毫无压力时便可携带外出。" ], "活力值"=> [ "描述"=> "指猫咪的活跃度,得分越高越活泼,精力越充沛,性格更有趣喧闹,需要的运动量越大。", "1"=> "{$name}是只喜欢安静的肥宅,请让它一只喵静静。", "2"=> "{$name}是只动静皆宜的猫咪,静如处子,动如脱兔说的就是它。", "3"=> "{$name}是只动静皆宜的猫咪,静如处子,动如脱兔说的就是它。", "4"=> "{$name}是只喜欢蹦D的猫咪,内心住着野狼DISCO本狼,请尽情陪它玩耍,释放你们的天性。", "5"=> "{$name}是只喜欢蹦D的猫咪,内心住着野狼DISCO本狼,请尽情陪它玩耍,释放你们的天性。" ], "与人亲近值"=> [ "描述"=> "指猫咪与人类的友好度,得分越高,与人的相处越轻松,越自然友爱。", "1"=> "{$name}只喜欢它自己,内心OS:愚蠢的人类请离本喵远一点。", "2"=> "{$name}与人类可以和谐相处,自然友爱,前提是没有受过人类的伤害。", "3"=> "{$name}与人类可以和谐相处,自然友爱,前提是没有受过人类的伤害。", "4"=> "{$name}是人类的好朋友,是所有猫咪中最愿意与人亲近的物种,请好好珍惜。", "5"=> "{$name}是人类的好朋友,是所有猫咪中最愿意与人亲近的物种,请好好珍惜。" ], "对陌生人的敌意"=> [ "描述"=> "指猫咪的对陌生人的敌意,得分越高,受刺激的反应越大,越容易产生攻击行为。", "1"=> "{$name}对陌生人很友好,如果人类没有主动攻击,基本上相安无事。", "2"=> "{$name}对陌生人友善但警惕,受到刺激的话会产生攻击行为。", "3"=> "{$name}对陌生人友善但警惕,受到刺激的话会产生攻击行为。", "4"=> "{$name}对陌生人戒心很重,不要轻易让它接触陌生人,受刺激的可能性大,容易产生攻击行为。", "5"=> "{$name}对陌生人戒心很重,不要轻易让它接触陌生人,受刺激的可能性大,容易产生攻击行为。" ], "对主人的敌意"=> [ "描述"=> "指猫咪的对主人的敌意,得分越高,服从性越低,不愿意遵守命令。", "1"=> "{$name}很爱主人,出生自带服从性高的属性,甚至比较黏人。", "2"=> "{$name}眼里的主人是与它平等的物种,大家相敬如宾平安无事,如果你可爱的话,它甚至有点爱你。", "3"=> "{$name}眼里的主人是与它平等的物种,大家相敬如宾平安无事,如果你可爱的话,它甚至有点爱你。", "4"=> "{$name}的内心住着哈士奇,自我且叛逆,可能听话的可能性很低,但也不能说它不爱你。", "5"=> "{$name}的内心住着哈士奇,自我且叛逆,可能听话的可能性很低,但也不能说它不爱你。" ], "对其它猫的敌意"=> [ "描述"=> "指猫咪的对其它猫的敌意,得分越高,越容易产生攻击行为,与战斗力无关。", "1"=> "{$name}对其它小伙伴很友好,是猫咪中的铁憨憨 。", "2"=> "{$name}对其它猫友善但警惕,不会轻易接受同类,一旦接受了便会友好相处,如果被欺负也会回击。", "3"=> "{$name}对其它猫友善但警惕,不会轻易接受同类,一旦接受了便会友好相处,如果被欺负也会回击。", "4"=> "{$name}对同类不是很友好,如非必要,不要轻易让它们接触,相处不当会经常打架。", "5"=> "{$name}对同类不是很友好,如非必要,不要轻易让它们接触,相处不当会经常打架。" ], "对新事物的害羞程度"=> [ "描述"=> "指猫咪对陌生事物的恐惧感及焦虑情绪,分数越高,越容易有恐惧或焦虑的情绪,害羞程度就越高。", "1"=> "{$name}是只神经大条的猫咪,任何新事物在它眼里都很有趣。", "2"=> "{$name}对新事物比较警惕,但只要适应一段时间便能很好的接受。", "3"=> "{$name}对新事物比较警惕,但只要适应一段时间便能很好的接受。", "4"=> "{$name}是只爱守旧的猫咪,比较难接受新事物,需要更多的时间和耐心让它放下戒心。", "5"=> "{$name}是只爱守旧的猫咪,比较难接受新事物,需要更多的时间和耐心让它放下戒心。" ], "对陌生人的害羞程度"=> [ "描述"=> "指猫咪对陌生人的恐惧感及焦虑情绪,分数越高,越容易有恐惧或焦虑的情绪,害羞程度就越高。", "1"=> "{$name}是只没皮没脸的猫咪,毫不认生,人见人爱。", "2"=> "{$name}不排斥见陌生人但也没有那么喜欢,如果非得相处的话,请给它缓一缓的时间和空间。", "3"=> "{$name}不排斥见陌生人但也没有那么喜欢,如果非得相处的话,请给它缓一缓的时间和空间。", "4"=> "{$name}是只娇羞的猫咪,比较害怕见到陌生人,若非必要,不要让它们单独与陌生人相处,产生应激的机率很高。", "5"=> "{$name}是只娇羞的猫咪,比较害怕见到陌生人,若非必要,不要让它们单独与陌生人相处,产生应激的机率很高。" ], "舔毛倾向"=> [ "描述"=> "指猫咪除自身清洁需要外,利用舔毛行为缓解压力的倾向,得分越高,感受压力越大,释放压力需求越高。", "1"=> "{$name}除了给自己梳洗以外,偶尔也会舔舔毛来舒缓压力,是一只心理健康的猫咪。", "2"=> "{$name}除了给自己梳洗以外,时不时用舔毛来舒缓压力,可以给它置放一些释放压力的猫抓板,防止过度舔毛引起毛球症。", "3"=> "{$name}除了给自己梳洗以外,时不时用舔毛来舒缓压力,可以给它置放一些释放压力的猫抓板,防止过度舔毛引起毛球症。", "4"=> "{$name}除了给自己梳洗以外,经常用舔毛来舒缓压力,主人可以多陪它玩,并放置一些释放压力的猫抓板或玩具,不要给孩子那么大的压力。", "5"=> "{$name}除了给自己梳洗以外,经常用舔毛来舒缓压力,主人可以多陪它玩,并放置一些释放压力的猫抓板或玩具,不要给孩子那么大的压力。" ], ]; $map = $map[$sample['pet_species']]; //排序,宠物在后 $body = $reportJson['秉性行为']['body']; $pet_rate = $body[$name]; $body_sorted = []; foreach ($body as $key=>$val) { if($key != $name){ $body_sorted[$key] = $val; //对于猫,直接指定数值,转换程序修改后改回来 /* if($sample['pet_species'] == 2){ $body_sorted[$key] = [ "外出指数"=> 2.44, "活力值"=> 3.04, "与人亲近值"=> 3.32, "对陌生人的敌意"=> 1.36, "对主人的敌意"=> 1.44, "对其它猫的敌意"=> 3.12, "对新事物害羞程度"=> 2.76, "对陌生人害羞程度"=> 2.24, "舔毛倾向"=> 1.76 ]; }*/ } } $body_sorted[$name] = $pet_rate; $temp = [ '数值'=> $body_sorted, '描述'=>[] ]; foreach ($temp['数值'] as $key=>$val) { unset($temp['数值'][$key]['兴奋值']); } foreach ($map as $key=>$val) { $_rate = round($pet_rate[$key]); $_rate = $_rate == 0?1:$_rate; $_rate = $_rate > 5?5:$_rate; $temp['描述'][$key]['描述'] = $val['描述']; $temp['描述'][$key]['检测结果'] = $val[$_rate]; } break; case '可训练性': /* $temp = [ '专注度'=>'', '游戏欲'=>'', '兴奋值'=>'', '服从性'=>'', '聪明值'=>'', '逃逸值'=>'', ];*/ $map = [ "专注度"=>[ "描述"=>"指犬只在集中注意力时受外界刺激的影响程度,例如被柏油马路上的一片树叶、许多断续而短促的声音中的一个长声、被风吹起的塑料袋所吸引,或追逐飞过的小鸟及其它小动物,得分越低,表面受到外界刺激的影响程度越高,专注度越低。", "1"=>"{$name}是只敏感的狗子,一点风吹草动都会影响它的专注度。", "2"=>"{$name}也会集中注意力,但有时会被其它事物打断,如果训练的话,建议先从无干扰物开始。", "3"=>"{$name}也会集中注意力,但有时会被其它事物打断,如果训练的话,建议先从无干扰物开始。", "4"=>"{$name}天生专注度极高,它把注意力放在你身上时,其它事物很难打断它。", "5"=>"{$name}天生专注度极高,它把注意力放在你身上时,其它事物很难打断它。", ], "游戏欲"=>[ "描述"=>"指犬只的活跃度,玩游戏的欲望,得分越高越活跃,精力越充沛,游戏欲望越强。", "1"=>"{$name}可能觉得玩游戏太幼稚了,它只想安静的睡一会儿。", "2"=>"{$name}是喜欢玩游戏的狗子,你陪它玩儿的时间越多,它就越活泼。", "3"=>"{$name}是喜欢玩游戏的狗子,你陪它玩儿的时间越多,它就越活泼。", "4"=>"{$name}是个不折不扣的活力狗,爱玩更爱你陪它玩,你有多少精力它都会奉陪到底。", "5"=>"{$name}是个不折不扣的活力狗,爱玩更爱你陪它玩,你有多少精力它都会奉陪到底。", ], "兴奋值"=>[ "描述"=>"指犬只受到刺激后的反应,分数越高,表明受到刺激或引起兴奋的反应越强烈,例如散步,开车,门铃响,客人到访,主人在一段时间后回家,犬只的兴奋情况。", "1"=>"{$name}是只佛系汪,似乎很少事情能让它感兴趣。", "2"=>"{$name}受到刺激的时候会兴奋起来,它的兴奋程度取决于刺激它的点有多大。", "3"=>"{$name}受到刺激的时候会兴奋起来,它的兴奋程度取决于刺激它的点有多大。", "4"=>"{$name}是个人来疯,兴奋点太低,随随便便就激动起来。", "5"=>"{$name}是个人来疯,兴奋点太低,随随便便就激动起来。", ], "服从性"=>[ "描述"=>"得分高的犬只,表示对主人更关心,愿意遵守命令,反应积极,快速学习,服从性高。", "1"=>"{$name}有自己的想法,不要指望它顺着你,它的行动指南就是它的心情。", "2"=>"{$name}是孺子可教型,只要你方法得当,好好跟它说,它还是很愿意和你一起学习的。", "3"=>"{$name}是孺子可教型,只要你方法得当,好好跟它说,它还是很愿意和你一起学习的。", "4"=>"{$name}的心里只有你,“百依百顺”可以说是它给主人最高规格的诚意了。", "5"=>"{$name}的心里只有你,“百依百顺”可以说是它给主人最高规格的诚意了。", ], "聪明值"=>[ "描述"=>"指犬只的智商指数,得分越高,越聪明。", "3"=>"{$name}对于新的指令,在重复15-25次后可以理解新的指令,70%以上的时间服从主人的第一个命令。", "4"=>"{$name}对于新的指令,在重复5-15次后可以理解新的指令,85%以上的时间服从主人的第一个命令。", "5"=>"{$name}对于新的指令,不用下达超过5次,就能理解是什么意思,并且95%以上的时间对主人的第一个命令是服从的。", ], "逃逸值"=>[ "描述"=>"指犬只一有机会就逃跑,或逃离家里或主人的可能性,分数越高,可能性越大。", "1"=>"{$name}只想和你在一起,只要你不逃走。", "2"=>"{$name}不会轻易逃走,但经常也会因为看见更感兴趣的事物而逃离你身边,大多数情况下能唤回,这取决于你们之间的关系,出门记得栓绳哦。", "3"=>"{$name}不会轻易逃走,但经常也会因为看见更感兴趣的事物而逃离你身边,大多数情况下能唤回,这取决于你们之间的关系,出门记得栓绳哦。", "4"=>"{$name}它可能更向往远方,一有机会就想逃走,恭喜你,喜提一只撒手没。", "5"=>"{$name}它可能更向往远方,一有机会就想逃走,恭喜你,喜提一只撒手没。", ], ]; $temp = [ '数值'=> isset($reportJson['可训练性']['body'])?array_reverse($reportJson['可训练性']['body'],true):[], '描述'=>[] ]; //数值的第一项是当前宠物的值 $pet_rate = $temp['数值'][$name]; foreach ($map as $key=>$val) { $_rate = round($pet_rate[$key]); $_rate = $_rate == 0?1:$_rate; $_rate = $_rate > 5?5:$_rate; $temp['描述'][$key]['描述'] = $val['描述']; $temp['描述'][$key]['检测结果'] = $val[$_rate]; } break; case '血型筛查': $temp = $reportJson['B型血筛查']; $temp['检测结果说明'] = $material['血型'][$reportJson['B型血筛查']['检测结果']]; break; default: $temp=[]; } return $temp; } // 疾病部分,对锁定的信息做隐藏及特殊处理 protected function get_disease_block($sample,$riskDisease,$diseaseList,$addVirtualByLevel=false){ //按照风险内容输出,没锁定的风险项放前面 $unlock_risk = []; //所有解锁项目,包括非风险项 $unlock_all = []; //所有低风险项目 $risk_low_all = []; //所有高风险项目 $risk_high_all = []; //转化为名字对应内容 $temp = []; foreach ($diseaseList as $item) { $temp[$item['name']] = $item; if(!$item['lock']){ $unlock_all[] = $item; } if($item['risk']){ if($item['risk_level'] == 1){ $risk_low_all[] = $item; }else{ $risk_high_all[] = $item; } } } $diseaseList = $temp; //不同风险等级对应的锁定内容 $lock = [ 1=>[], 2=>[], ]; foreach ($riskDisease as $key=>$val) { if(empty($diseaseList[$key])){ //疾病列表里没有这一项,直接去除,否则无法做后续处理,这会造成检测结果的数量减少 continue; } //锁定项目隐藏,后面会给锁定项目增加虚拟项目 if(!$diseaseList[$key]['lock']){ $unlock_risk[] = $diseaseList[$key]; } } //判断样品是否需要锁定一些疾病 $is_lock = !empty($lock[1]) || !empty($lock[2]); if(!$is_lock){ foreach ($diseaseList as $val) { if($val['lock']){ $is_lock = true; break; } } } //如果列表中有疾病锁定了,但风险项中没有,则虚拟一些风险项,便于统一展示逻辑 //(不考虑套餐自选疾病解锁了所有的锁定疾病的情况) if($is_lock){ $virtual = [ 'lock'=>true, 'risk'=>true, 'risk_level'=>1, 'name'=>'解锁后可查看细节', ]; //是否需要根据风险等级添加虚拟疾病 $lock[1][] = $virtual; $lock[1][] = $virtual; if($addVirtualByLevel){ $virtual['risk_level'] = 2; $lock[2][] = $virtual; $lock[2][] = $virtual; } } //总列表 $list = array_merge($unlock_risk,$lock[1],$lock[2]); //强调列表:解锁疾病数量少于10个则显示 $list_notice = []; if(count($unlock_all)<10){ $custom = $this->get_disease_custom($sample); if(!empty($custom)){ //对于自选,展示自选,不必做解锁项目的过滤 $list_notice = [ 'name'=>$custom['name'], 'list'=>$unlock_all ]; }else{ $list_notice = [ 'name'=>'遗传疾病'.count($unlock_all).'项', 'list'=>$unlock_all ]; } } //输出结果 $temp = [ '总计'=>$is_lock?'?':count($list), '总计低风险'=>$is_lock?'?':count($risk_low_all), '总计高风险'=>$is_lock?'?':count($risk_high_all), '疾病总数'=>count($diseaseList), '列表'=>$list, '强调列表'=>$list_notice, ]; return $temp; } // 突出特质 protected function get_speciality($sample,$reportJson,$package){ $map = [ //狗 '1'=>[ '健康宝宝'=>['遗传病'=>[0]], '爱因斯坦·汪'=>['智力评估'=>[5]], '智商担当'=>['智力评估'=>[4]], '胆大包天'=>['胆量值'=>[1]], '铁憨憨'=>['暴躁值'=>[1]], '安静的美狗子'=>['吠叫值'=>[1]], '当代独立汪'=>['独处值'=>[1]], '分离焦虑本汪'=>['独处值'=>[4,5]], '轻度洁癖'=>['排尿值'=>[1]], '乱尿之汪'=>['排尿值'=>[4,5]], '蹦迪汪'=>['活力值'=>[4,5]], '资深肥宅'=>['活力值'=>[1]], '学习委员'=>['专注度'=>[4,5]], '天生爱玩'=>['游戏欲'=>[4,5]], '佛系汪'=>['兴奋值'=>[1]], '天使宝宝'=>['服从性'=>[4,5]], '撒手没'=>['逃逸值'=>[4,5]], ], //猫 '2'=>[ '健康宝宝'=>['遗传病'=>[0]], '爱因斯坦·喵'=>['智力评估'=>[5]], '智商担当'=>['智力评估'=>[4]], '蹦迪喵'=>['活力值'=>[4,5]], '佛系喵'=>['活力值'=>[1]], '喵中汪'=>['外出频率'=>[4,5]], '喵中汪 '=>['外出数值'=>[4,5]], '黏人小妖精'=>['与人亲近值'=>[4,5]], '满眼都是你'=>['对主人的敌意'=>[1]], '目中无主人'=>['对主人的敌意'=>[4,5]], '毫无畏惧'=>['对新事物的害羞程度'=>[1]], '毫无畏惧 '=>['对新事物害羞程度'=>[1]], ] ]; $pet_name = $reportJson['header']['宠物名']; if($sample['pet_species'] == 1){ //狗 $value = [ '遗传病'=>0, '智力评估'=>$reportJson['遗传特征']['body']['智商指数']['body']['智商指数'], '胆量值'=>$reportJson['秉性行为']['body'][$pet_name]['胆量值'], '暴躁值'=>$reportJson['秉性行为']['body'][$pet_name]['暴躁值'], '吠叫值'=>$reportJson['秉性行为']['body'][$pet_name]['吠叫值'], '独处值'=>$reportJson['秉性行为']['body'][$pet_name]['独处值'], '排尿值'=>$reportJson['秉性行为']['body'][$pet_name]['排尿值'], '活力值'=>$reportJson['秉性行为']['body'][$pet_name]['活力值'], '专注度'=>$reportJson['可训练性']['body'][$pet_name]['专注度'], '游戏欲'=>$reportJson['可训练性']['body'][$pet_name]['游戏欲'], '兴奋值'=>$reportJson['可训练性']['body'][$pet_name]['兴奋值'], '服从性'=>$reportJson['可训练性']['body'][$pet_name]['服从性'], '逃逸值'=>$reportJson['可训练性']['body'][$pet_name]['逃逸值'], ]; }else{ //猫 $value = [ '遗传病'=>0, '智力评估'=>$reportJson['遗传特征']['body']['智商指数']['body']['智商指数'], '外出频率'=>$reportJson['秉性行为']['body'][$pet_name]['外出频率'], //'外出数值'=>$reportJson['秉性行为']['body'][$pet_name]['外出数值'], '与人亲近值'=>$reportJson['秉性行为']['body'][$pet_name]['与人亲近值'], '对主人的敌意'=>$reportJson['秉性行为']['body'][$pet_name]['对主人的敌意'], '对新事物的害羞程度'=>$reportJson['秉性行为']['body'][$pet_name]['对新事物的害羞程度'], //'对新事物害羞程度'=>$reportJson['秉性行为']['body'][$pet_name]['对新事物害羞程度'], //'胆量值'=>$reportJson['秉性行为']['body'][$pet_name]['胆量值'], //'暴躁值'=>$reportJson['秉性行为']['body'][$pet_name]['暴躁值'], //'吠叫值'=>$reportJson['秉性行为']['body'][$pet_name]['吠叫值'], //'独处值'=>$reportJson['秉性行为']['body'][$pet_name]['独处值'], //'排尿值'=>$reportJson['秉性行为']['body'][$pet_name]['排尿值'], '活力值'=>$reportJson['秉性行为']['body'][$pet_name]['活力值'], '专注度'=>$reportJson['可训练性']['body'][$pet_name]['专注度'], '游戏欲'=>$reportJson['可训练性']['body'][$pet_name]['游戏欲'], '兴奋值'=>$reportJson['可训练性']['body'][$pet_name]['兴奋值'], '服从性'=>$reportJson['可训练性']['body'][$pet_name]['服从性'], '逃逸值'=>$reportJson['可训练性']['body'][$pet_name]['逃逸值'], ]; } //是否全部疾病解锁且没有遗传病 $diseaseList = $this->get_disease_list(0,$sample,$reportJson,$package,false,false,true); foreach ($diseaseList as $item) { if($item['lock'] || $item['risk']){ $value['遗传病'] = 1; break; } } //提取特质 $ret = []; foreach ($map[$sample['pet_species']] as $name => $cond) { //数据名称 $value_key = array_keys($cond)[0]; if(!isset($value[$value_key])){ continue; } $value_rate = round($value[$value_key]); if(in_array($value_rate,$cond[$value_key])){ $ret[] = $name; } } //特质少于3个,做补充 $more = ['可爱多','独一无二','美食家']; for($i=count($ret);$i<3;$i++){ $ret[] = array_shift($more); } return $ret; } //重点关注的疾病,$gene_type = 1 遗传风险,2健康疾病 protected function get_focus_disease($block_disease,$gene_type){ //不必做以上过滤 if($gene_type==2){ //重点关注里只展示中高风险的疾病,注意锁定了不要过滤 foreach ($block_disease['列表'] as $key=>&$val) { if($val['risk_level'] < 2 && !$val['lock']){ unset($block_disease['列表'][$key]); } /*由前端修改 if($gene_type == 2){ $tmp = explode(', ',$val['risk_detail']['风险解读']); $val['risk_detail']['风险解读'] = $tmp[0]; }*/ } //解锁状态,重新统计数量 if($block_disease['总计']!='?'){ $block_disease['总计'] = count($block_disease['列表']); } } //信息里面的遗传疾病,锁定不超过2个,因这部分根据不同风险等级添加了2个虚拟疾病 $disease_lock_count = 0; foreach ($block_disease['列表'] as $key=>$val) { if($val['lock']){ $disease_lock_count++; } if($disease_lock_count>2){ unset($block_disease['列表'][$key]); } } return $block_disease; } // 用药指导-内容太多,独立出来 protected function drug($has_mh,$has_mdr1){ return [ [ 'name'=>'恶性高热', '携带'=>$has_mh?'是':'否', 'get'=>$has_mh, 'tag'=>'MH', 'limit'=>$has_mh?'1项限制':'以下药物可遵医嘱使用', 'data'=>[ [ 'name'=>'所有', 'tag'=>'ALL', 'data'=>[ [ 'name'=>'禁用药物', 'tag'=>'jinyongyaowu', 'data'=>[ [ 'name'=>'氟烷', 'tag'=>'', ], [ 'name'=>'七氟醚', 'tag'=>'', ], [ 'name'=>'地氟醚', 'tag'=>'', ], [ 'name'=>'异氟醚', 'tag'=>'', ], [ 'name'=>'安氟醚', 'tag'=>'', ], [ 'name'=>'琥珀胆碱', 'tag'=>'', ], [ 'name'=>'十烃季铵', 'tag'=>'', ], ] ] ] ] ] ], [ 'name'=>'MDR1', '携带'=>$has_mdr1?'是':'否', 'get'=>$has_mdr1, 'limit'=>$has_mdr1?'4项限制':'以下药物可遵医嘱使用', 'tag'=>'MDR1', 'data'=>[ [ 'name'=>'抗寄生虫药', 'tag'=>'ANTIPARASITIC', 'data'=>[ [ 'name'=>'禁用药物', 'tag'=>'jinyongyaowu', 'data'=>[ [ 'name'=>'Alstomec', 'tag'=>'伊维菌素', ], [ 'name'=>'Animec', 'tag'=>'伊维菌素', ], [ 'name'=>'Bimectin', 'tag'=>'伊维菌素', ], [ 'name'=>'Ivomec', 'tag'=>'伊维菌素', ], [ 'name'=>'Panomec', 'tag'=>'伊维菌素', ], [ 'name'=>'Qualimintic', 'tag'=>'伊维菌素', ], [ 'name'=>'Vibamec', 'tag'=>'伊维菌素', ], [ 'name'=>'Xeno 450', 'tag'=>'伊维菌素', ], [ 'name'=>'Xeno 450/Xeno 450-mini', 'tag'=>'伊维菌素', ], [ 'name'=>'Dectomax', 'tag'=>'伊维菌素', ], [ 'name'=>'Miteguard', 'tag'=>'伊维菌素', ], [ 'name'=>'Abamectin', 'tag'=>'伊维菌素', ], [ 'name'=>'Profender', 'tag'=>'伊维菌素', ] ], ], [ 'name'=>'有潜在高风险药物', 'tag'=>'qianzaifengxian', 'data'=>[ [ 'name'=>'Milbemax', 'tag'=>'米尔倍霉素', ], [ 'name'=>'Program plus', 'tag'=>'米尔倍霉素', ], [ 'name'=>'Advocate', 'tag'=>'莫昔克丁', ], [ 'name'=>'Stronghold', 'tag'=>'塞拉菌素', ] ], ], [ 'name'=>'密切关注副作用的药物', 'tag'=>'miqieguanzhu', 'data'=>[ [ 'name'=>'Metronidazole', 'tag'=>'甲硝唑', ], [ 'name'=>'Stomorgyl', 'tag'=>'甲硝唑', ], [ 'name'=>'Flagyl', 'tag'=>'甲硝唑', ], [ 'name'=>'Metrolyl', 'tag'=>'甲硝唑', ] ], ], [ 'name'=>'部分犬只存在副作用的药物', 'tag'=>'xianliangshiyong', 'data'=>[ [ 'name'=>'Bob Martin Dog Wormer', 'tag'=>'硝硫氰醚', ], [ 'name'=>'Lopatol', 'tag'=>'硝硫氰醚', ], [ 'name'=>'Troscan', 'tag'=>'硝硫氰醚', ] ], ], ] ], [ 'name'=>'止泻药', 'tag'=>'ANTIDIARRHEAL', 'data'=>[ [ 'name'=>'禁用药物', 'tag'=>'jinyongyaowu', 'data'=>[ [ 'name'=>'Diareze', 'tag'=>'洛哌丁胺', ], [ 'name'=>'Imodium', 'tag'=>'洛哌丁胺', ], [ 'name'=>'Norimode', 'tag'=>'洛哌丁胺', ] ], ], ], ], [ 'name'=>'止吐药', 'tag'=>'ANTIEMETIC', 'data'=>[ [ 'name'=>'禁用药物', 'tag'=>'jinyongyaowu', 'data'=>[ [ 'name'=>'Imodium', 'tag'=>'甲氧氯普安', ], [ 'name'=>'Maxolon', 'tag'=>'甲氧氯普安', ], [ 'name'=>'Metoclopramide', 'tag'=>'甲氧氯普安', ] ], ], ], ], [ 'name'=>'镇静/镇痛药', 'tag'=>'PRE-ANESTHETIC/ANELGESIC', 'data'=>[ [ 'name'=>'密切关注副作用的药物', 'tag'=>'miqieguanzhu', 'data'=>[ [ 'name'=>'ACP', 'tag'=>'乙酰丙嗪', ], [ 'name'=>'Alvegesic', 'tag'=>'布托啡诺', ], [ 'name'=>'Dolorex', 'tag'=>'布托啡诺', ], [ 'name'=>'Torbugesic', 'tag'=>'布托啡诺', ], [ 'name'=>'Torbutrol', 'tag'=>'布托啡诺', ], [ 'name'=>'Torphasol', 'tag'=>'布托啡诺', ], [ 'name'=>'吗啡', 'tag'=>'吗啡', ], [ 'name'=>'Duramorph', 'tag'=>'吗啡', ], [ 'name'=>'Oramorph', 'tag'=>'吗啡', ], [ 'name'=>'Subutex', 'tag'=>'丁丙诺啡', ], [ 'name'=>'芬太尼', 'tag'=>'芬太尼', ], [ 'name'=>'Durogesic', 'tag'=>'芬太尼', ], [ 'name'=>'Fentora', 'tag'=>'芬太尼', ], [ 'name'=>'Sublimaze', 'tag'=>'芬太尼', ] ], ], ], ], [ 'name'=>'抗癫痫药', 'tag'=>'ANTIEPILEPTIC', 'data'=>[ [ 'name'=>'密切关注副作用的药物', 'tag'=>'miqieguanzhu', 'data'=>[ [ 'name'=>'Diphenylhydantoin', 'tag'=>'苯妥英钠', ], [ 'name'=>'Epanutin', 'tag'=>'苯妥英钠', ], [ 'name'=>'Pentran', 'tag'=>'苯妥英钠', ] ], ], ], ], [ 'name'=>'溃疡愈合药', 'tag'=>'ANTIULCER', 'data'=>[ [ 'name'=>'有潜在高风险药物的药物', 'tag'=>'qianzaifengxian', 'data'=>[ [ 'name'=>'多潘立酮', 'tag'=>'多潘立酮', ], [ 'name'=>'多潘立酮', 'tag'=>'多潘立酮', ] ] ], [ 'name'=>'密切关注副作用的药物', 'tag'=>'miqieguanzhu', 'data'=>[ [ 'name'=>'西咪替丁', 'tag'=>'西咪替丁', ], [ 'name'=>'Zitac', 'tag'=>'西咪替丁', ], [ 'name'=>'Dyspamet', 'tag'=>'西咪替丁', ], [ 'name'=>'Tagamet', 'tag'=>'西咪替丁', ], [ 'name'=>'雷尼替丁', 'tag'=>'雷尼替丁', ], [ 'name'=>'Zantac', 'tag'=>'雷尼替丁', ], [ 'name'=>'Zofran', 'tag'=>'恩丹西酮', ] ] ], ], ], [ 'name'=>'类固醇药', 'tag'=>'STEROID', 'data'=>[ [ 'name'=>'密切关注副作用的药物', 'tag'=>'miqieguanzhu', 'data'=>[ [ 'name'=>'Oestradiol benzoate', 'tag'=>'雌二醇', ], [ 'name'=>'Mesalin', 'tag'=>'雌二醇', ] ], ], ], ], [ 'name'=>'抗原虫药', 'tag'=>'ANTIPROTOZOAL', 'data'=>[ [ 'name'=>'部分犬只存在副作用的药物', 'tag'=>'xianliangshiyong', 'data'=>[ [ 'name'=>'Milteforan', 'tag'=>'米替福新', ] ], ], ], ], [ 'name'=>'免疫调节剂', 'tag'=>'IMMUNOMODULATOR', 'data'=>[ [ 'name'=>'部分犬只存在副作用的药物', 'tag'=>'xianliangshiyong', 'data'=>[ [ 'name'=>'Ergamisol', 'tag'=>'左旋咪唑', ] ], ], ], ], [ 'name'=>'免疫抑制剂', 'tag'=>'IMMUNOSUPPRESSIVE', 'data'=>[ [ 'name'=>'密切关注副作用的药物', 'tag'=>'miqieguanzhu', 'data'=>[ [ 'name'=>'Atopica', 'tag'=>'环孢素', ], [ 'name'=>'Optimmune', 'tag'=>'环孢素', ], [ 'name'=>'Neoral', 'tag'=>'环孢素', ], [ 'name'=>'Sandimmun', 'tag'=>'环孢素', ], [ 'name'=>'Aurizon', 'tag'=>'地塞米松', ], [ 'name'=>'Dexadreson', 'tag'=>'地塞米松', ], [ 'name'=>'Dexafort', 'tag'=>'地塞米松', ], [ 'name'=>'Rapidexon', 'tag'=>'地塞米松', ], [ 'name'=>'Voren', 'tag'=>'地塞米松', ], [ 'name'=>'Maxidex', 'tag'=>'地塞米松', ], [ 'name'=>'Maxitrol', 'tag'=>'地塞米松', ] ], ], ], ], [ 'name'=>'心血管药', 'tag'=>'CARDIAC', 'data'=>[ [ 'name'=>'密切关注副作用的药物', 'tag'=>'miqieguanzhu', 'data'=>[ [ 'name'=>'地高辛', 'tag'=>'地高辛', ], [ 'name'=>'Lanoxin', 'tag'=>'地高辛', ], [ 'name'=>'LanoxinPG', 'tag'=>'地高辛', ], [ 'name'=>'Digitoxin', 'tag'=>'洋地黄毒苷', ], [ 'name'=>'Kinidin Durules', 'tag'=>'奎尼丁', ], [ 'name'=>'硫酸奎尼丁', 'tag'=>'奎尼丁', ], [ 'name'=>'Hypercard', 'tag'=>'地尔硫䓬', ], [ 'name'=>'Dilcardia SR', 'tag'=>'地尔硫䓬', ], [ 'name'=>'维拉帕米', 'tag'=>'维拉帕米', ], [ 'name'=>'Cordilox', 'tag'=>'维拉帕米', ], [ 'name'=>'Securon', 'tag'=>'维拉帕米', ] ], ], ], ], [ 'name'=>'抗生素', 'tag'=>'ANTIBACTERIAL', 'data'=>[ [ 'name'=>'有潜在高风险药物', 'tag'=>'qianzaifengxian', 'data'=>[ [ 'name'=>'红霉素', 'tag'=>'红霉素', ], [ 'name'=>'Eyrthrocin', 'tag'=>'红霉素', ], [ 'name'=>'Erythroped', 'tag'=>'红霉素', ], [ 'name'=>'Stomorgyl', 'tag'=>'螺旋霉素', ], [ 'name'=>'拜有利', 'tag'=>'恩诺沙星', ], [ 'name'=>'Enrocare', 'tag'=>'恩诺沙星', ], [ 'name'=>'Enrotab', 'tag'=>'恩诺沙星', ], [ 'name'=>'Enrox', 'tag'=>'恩诺沙星', ], [ 'name'=>'Enroxil', 'tag'=>'恩诺沙星', ], [ 'name'=>'Floxabactin', 'tag'=>'恩诺沙星', ], [ 'name'=>'Floxibac', 'tag'=>'恩诺沙星', ], [ 'name'=>'Powerflox', 'tag'=>'恩诺沙星', ], [ 'name'=>'Xeden', 'tag'=>'恩诺沙星', ] ], ], [ 'name'=>'密切关注副作用的药物', 'tag'=>'miqieguanzhu', 'data'=>[ [ 'name'=>'Doxyseptin 300', 'tag'=>'多西环素', ], [ 'name'=>'Ornicure', 'tag'=>'多西环素', ], [ 'name'=>'Pulmodox', 'tag'=>'多西环素', ], [ 'name'=>'Ronaxan', 'tag'=>'多西环素', ], [ 'name'=>'Vibramycin', 'tag'=>'多西环素', ], [ 'name'=>'Vibravenos', 'tag'=>'多西环素', ], [ 'name'=>'Raxar', 'tag'=>'格帕沙星', ], [ 'name'=>'Zagam', 'tag'=>'司氟沙星', ], [ 'name'=>'利福平', 'tag'=>'利福平', ], [ 'name'=>'Rifadin', 'tag'=>'利福平', ], [ 'name'=>'Rimactane', 'tag'=>'利福平', ], ], ], ], ], [ 'name'=>'抗真菌药', 'tag'=>'ANTIFUNGAL', 'data'=>[ [ 'name'=>'密切关注副作用的药物', 'tag'=>'miqieguanzhu', 'data'=>[ [ 'name'=>'Nizoral', 'tag'=>'酮康唑', ], [ 'name'=>'Itrafungol', 'tag'=>'伊曲康唑', ], [ 'name'=>'Sporanox', 'tag'=>'伊曲康唑', ], ], ], ], ], [ 'name'=>'抗肿瘤药', 'tag'=>'ANTINEOPLASTIC', 'data'=>[ [ 'name'=>'密切关注副作用的药物', 'tag'=>'miqieguanzhu', 'data'=>[ [ 'name'=>'长春碱', 'tag'=>'长春碱', ], [ 'name'=>'Velbe', 'tag'=>'长春碱', ], [ 'name'=>'长春新碱', 'tag'=>'长春新碱', ], [ 'name'=>'Oncovin', 'tag'=>'长春新碱', ], [ 'name'=>'多柔比星', 'tag'=>'多柔比星', ], [ 'name'=>'Taxol', 'tag'=>'紫杉醇', ], [ 'name'=>'放线菌素', 'tag'=>'放线菌素', ], [ 'name'=>'Cosmegen', 'tag'=>'放线菌素', ], [ 'name'=>'Lyovac', 'tag'=>'放线菌素', ], [ 'name'=>'Novantrone', 'tag'=>'米托蒽醌', ], [ 'name'=>'Etopophos ', 'tag'=>'依托泊甙', ], [ 'name'=>'Toposar', 'tag'=>'依托泊甙', ] ], ], ], ], ] ], ]; } }