精准医疗基因、方剂
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
package com.peanut.modules.common.dao;
|
||||
|
||||
import com.github.yulichang.base.MPJBaseMapper;
|
||||
import com.peanut.modules.common.entity.PrecisionMedicineGene;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface PrecisionMedicineGeneDao extends MPJBaseMapper<PrecisionMedicineGene> {
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.peanut.modules.common.dao;
|
||||
|
||||
import com.github.yulichang.base.MPJBaseMapper;
|
||||
import com.peanut.modules.common.entity.PrecisionMedicinePrescription;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface PrecisionMedicinePrescriptionDao extends MPJBaseMapper<PrecisionMedicinePrescription> {
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package com.peanut.modules.common.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
@TableName("precision_medicine_gene")
|
||||
public class PrecisionMedicineGene {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId
|
||||
private Integer id;
|
||||
|
||||
//基因名称
|
||||
private String name;
|
||||
|
||||
//基因中文名
|
||||
private String namecn;
|
||||
|
||||
//别名
|
||||
private String alias;
|
||||
|
||||
//描述
|
||||
private String description;
|
||||
|
||||
//关联药材名
|
||||
private String tcmName;
|
||||
|
||||
private Date createTime;
|
||||
|
||||
@TableLogic
|
||||
private Integer delFlag;
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.peanut.modules.common.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
@TableName("precision_medicine_prescription")
|
||||
public class PrecisionMedicinePrescription {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId
|
||||
private Integer id;
|
||||
|
||||
//方剂名称
|
||||
private String name;
|
||||
|
||||
//别名
|
||||
private String alias;
|
||||
|
||||
//药物组成
|
||||
private String compose;
|
||||
|
||||
//功效
|
||||
private String effect;
|
||||
|
||||
//主治
|
||||
private String indications;
|
||||
|
||||
//来源
|
||||
private String source;
|
||||
|
||||
private Date createTime;
|
||||
|
||||
@TableLogic
|
||||
private Integer delFlag;
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.peanut.modules.common.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.peanut.modules.common.entity.PrecisionMedicineGene;
|
||||
import java.util.Map;
|
||||
|
||||
public interface PrecisionMedicineGeneService extends IService<PrecisionMedicineGene> {
|
||||
|
||||
Map<String,Object> getGeneInfo(String geneIds);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package com.peanut.modules.common.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.peanut.modules.common.entity.PrecisionMedicinePrescription;
|
||||
|
||||
public interface PrecisionMedicinePrescriptionService extends IService<PrecisionMedicinePrescription> {
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
package com.peanut.modules.common.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.peanut.modules.common.dao.PrecisionMedicineGeneDao;
|
||||
import com.peanut.modules.common.dao.PrecisionMedicinePrescriptionDao;
|
||||
import com.peanut.modules.common.entity.PrecisionMedicineGene;
|
||||
import com.peanut.modules.common.entity.PrecisionMedicinePrescription;
|
||||
import com.peanut.modules.common.service.PrecisionMedicineGeneService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Slf4j
|
||||
@Service("commonPrecisionMedicineGeneService")
|
||||
public class PrecisionMedicineGeneServiceImpl extends ServiceImpl<PrecisionMedicineGeneDao, PrecisionMedicineGene> implements PrecisionMedicineGeneService {
|
||||
|
||||
@Autowired
|
||||
private PrecisionMedicinePrescriptionDao prescriptionDao;
|
||||
|
||||
@Override
|
||||
public Map<String,Object> getGeneInfo(String geneIds) {
|
||||
Map<String,Object> res = new HashMap<>();
|
||||
String[] ids = geneIds.split(",");
|
||||
Set<String> tcmNames = new HashSet<>();
|
||||
//查出基因匹配的所有中药
|
||||
List<PrecisionMedicineGene> geneList = new ArrayList<>();
|
||||
for (String id : ids) {
|
||||
PrecisionMedicineGene gene = this.getById(id);
|
||||
geneList.add(gene);
|
||||
if (StringUtils.isNotEmpty(gene.getTcmName())){
|
||||
String[] names = gene.getTcmName().split(",");
|
||||
for (String str:names){
|
||||
tcmNames.add(str);
|
||||
}
|
||||
}
|
||||
}
|
||||
res.put("geneList",geneList);
|
||||
Map<String, Map<String,Object>> countPrescriptions = new HashMap<>();
|
||||
for (String tcmName : tcmNames){
|
||||
//方剂列表
|
||||
List<PrecisionMedicinePrescription> prescriptions = prescriptionDao.selectList(new LambdaQueryWrapper<PrecisionMedicinePrescription>()
|
||||
.like(PrecisionMedicinePrescription::getCompose,tcmName));
|
||||
for (PrecisionMedicinePrescription prescription:prescriptions){
|
||||
if (countPrescriptions.containsKey(prescription.getId()+"")){
|
||||
Map<String,Object> map = countPrescriptions.get(prescription.getId()+"");
|
||||
map.put("num",Integer.parseInt(map.get("num")+"")+1);
|
||||
map.put("tcmName",map.get("tcmName")+","+tcmName);
|
||||
}else {
|
||||
Map<String,Object> map = new HashMap<>();
|
||||
map.put("num",1);
|
||||
map.put("tcmName",tcmName);
|
||||
map.put("name",prescription.getName());
|
||||
map.put("compose",prescription.getCompose());
|
||||
map.put("total",prescription.getCompose().split(",").length);
|
||||
map.put("source",prescription.getSource());
|
||||
countPrescriptions.put(prescription.getId()+"",map);
|
||||
}
|
||||
}
|
||||
}
|
||||
//计算占比,并加入排序集合
|
||||
List<Map<String,Object>> list = new ArrayList<>();
|
||||
for (Map<String, Object> m : countPrescriptions.values()){
|
||||
m.put("percent",Double.parseDouble(m.get("num").toString())/Double.parseDouble(m.get("total").toString()));
|
||||
list.add(m);
|
||||
}
|
||||
//排序
|
||||
list = list.stream().sorted((map1,map2)->{
|
||||
int x = Integer.compare(Integer.parseInt(map2.get("num").toString()),Integer.parseInt(map1.get("num").toString()));
|
||||
if (x!=0){
|
||||
return x;
|
||||
}else {
|
||||
return Double.compare(Double.parseDouble(map2.get("percent").toString()),Double.parseDouble(map1.get("percent").toString()));
|
||||
}
|
||||
}).collect(Collectors.toList());
|
||||
//将匹配最高的加入结果集合
|
||||
List<Map<String,Object>> prescriptionList = new ArrayList<>();
|
||||
for (Map<String,Object> map:list){
|
||||
if (prescriptionList.size() > 0){
|
||||
if (Integer.parseInt(prescriptionList.get(0).get("num").toString())==Integer.parseInt(map.get("num").toString())){
|
||||
if (prescriptionList.size()<3){
|
||||
prescriptionList.add(map);
|
||||
}
|
||||
}
|
||||
}else {
|
||||
prescriptionList.add(map);
|
||||
}
|
||||
}
|
||||
res.put("prescriptionList",prescriptionList);
|
||||
return res;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.peanut.modules.common.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.peanut.modules.common.dao.PrecisionMedicinePrescriptionDao;
|
||||
import com.peanut.modules.common.entity.PrecisionMedicinePrescription;
|
||||
import com.peanut.modules.common.service.PrecisionMedicinePrescriptionService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Slf4j
|
||||
@Service("commonPrecisionMedicinePrescriptionService")
|
||||
public class PrecisionMedicinePrescriptionServiceImpl extends ServiceImpl<PrecisionMedicinePrescriptionDao, PrecisionMedicinePrescription> implements PrecisionMedicinePrescriptionService {
|
||||
}
|
||||
Reference in New Issue
Block a user