|
@ -1,10 +1,11 @@
|
|
|
package com.yihu.jw.service;
|
|
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.yihu.jw.dao.*;
|
|
|
import com.yihu.jw.entity.specialist.*;
|
|
|
import com.yihu.jw.restmodel.web.MixEnvelop;
|
|
|
import com.yihu.jw.dao.PatientHospitalRecordDao;
|
|
|
import com.yihu.jw.dao.SpecialistPatientRelationDao;
|
|
|
import com.yihu.jw.entity.specialist.SpecialistPatientRelationDO;
|
|
|
import com.yihu.jw.restmodel.specialist.*;
|
|
|
import com.yihu.jw.restmodel.web.MixEnvelop;
|
|
|
import com.yihu.jw.restmodel.web.ObjEnvelop;
|
|
|
import com.yihu.jw.rm.specialist.SpecialistMapping;
|
|
|
import com.yihu.jw.util.common.IdCardUtil;
|
|
@ -12,12 +13,12 @@ import com.yihu.jw.util.date.DateUtil;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
|
|
import org.springframework.jdbc.core.BeanPropertyRowMapper;
|
|
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import java.text.ParseException;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
@ -43,6 +44,8 @@ public class SpecialistService{
|
|
|
private JdbcTemplate jdbcTemplate;
|
|
|
@Value("${basedb.name}")
|
|
|
private String basedb;
|
|
|
@Autowired
|
|
|
private StringRedisTemplate redisTemplate;
|
|
|
|
|
|
public MixEnvelop<Boolean, Boolean> createSpecialistsPatientRelation(SpecialistPatientRelationDO specialistPatientRelationDO){
|
|
|
specialistPatientRelationDao.save(specialistPatientRelationDO);
|
|
@ -200,8 +203,8 @@ public class SpecialistService{
|
|
|
" lb.labelType, " +
|
|
|
" lb.label, " +
|
|
|
" p.photo, " +
|
|
|
" h.label_name as health, " +
|
|
|
" h.label AS healthcode ," +
|
|
|
" lb.labelName as health, " +
|
|
|
" lb.label AS healthcode ," +
|
|
|
" s.health_assistant AS healthAssistant," +
|
|
|
" s.health_assistant_name AS healthAssistantName" +
|
|
|
" FROM " +
|
|
@ -220,20 +223,9 @@ public class SpecialistService{
|
|
|
" ) lb " +
|
|
|
" JOIN "+basedb+".wlyy_patient p ON p. CODE = lb.patient " +
|
|
|
" JOIN wlyy_specialist_patient_relation s ON s.patient = lb.patient " +
|
|
|
" LEFT JOIN ( " +
|
|
|
" SELECT " +
|
|
|
" t.label, " +
|
|
|
" t.label_name, " +
|
|
|
" t.patient " +
|
|
|
" FROM " +
|
|
|
" "+basedb+".wlyy_sign_patient_label_info t " +
|
|
|
" WHERE " +
|
|
|
" t.label_type = '8' " +
|
|
|
" AND t.`status` = '1' " +
|
|
|
" ) h ON h.patient = lb.patient " +
|
|
|
" WHERE s.doctor ='"+doctor+"' AND s.status >=0 AND s.sign_status >0"+
|
|
|
" WHERE ( s.doctor ='"+doctor+"' OR s.health_doctor='"+doctor+"' OR s.health_assistant='"+doctor+ "') AND s.status >=0 AND s.sign_status >0"+
|
|
|
" LIMIT "+(page-1)*size+","+size;
|
|
|
|
|
|
System.out.print("日志:"+sql);
|
|
|
if("7".equals(labelType)){
|
|
|
sql = "SELECT " +
|
|
|
"c.CODE," +
|
|
@ -250,8 +242,8 @@ public class SpecialistService{
|
|
|
"JOIN "+basedb+".wlyy_patient_disease_server b ON a.id=b.specialist_relation_code AND b.disease=" +labelCode+" and b.del=1 "+
|
|
|
"JOIN "+basedb+".wlyy_patient c ON a.patient=c.CODE " +
|
|
|
"LEFT JOIN "+basedb+".wlyy_sign_patient_label_info d ON a.patient=d.patient AND d.label_type=8 AND d.`status`=1" +
|
|
|
" WHERE a.sign_status> 0 AND a.`status`>=0 AND a.doctor='"+doctor+"'"+
|
|
|
" LIMIT "+(page-1)*size+","+size;
|
|
|
" WHERE a.sign_status> 0 AND a.`status`>=0 AND a.doctor='"+doctor+"' OR a.health_assistant= '"+doctor+
|
|
|
"' LIMIT "+(page-1)*size+","+size;
|
|
|
}
|
|
|
|
|
|
|
|
@ -260,26 +252,27 @@ public class SpecialistService{
|
|
|
return MixEnvelop.getSuccess(SpecialistMapping.api_success,PatientLabelVOs);
|
|
|
}
|
|
|
|
|
|
public MixEnvelop<Long, Long> getLabelpatientCount(String doctor, String label, String labelType){
|
|
|
public MixEnvelop<Long, Long> getLabelpatientCount(String doctor, String labelType, String label){
|
|
|
String sql = "SELECT " +
|
|
|
" COUNT(1) as total " +
|
|
|
" FROM " +
|
|
|
" ( " +
|
|
|
" SELECT " +
|
|
|
" i.label_type AS labelType, " +
|
|
|
" i.label, " +
|
|
|
" i.label_name AS labelName, " +
|
|
|
" i.patient " +
|
|
|
" FROM " +
|
|
|
// " ( " +
|
|
|
// " SELECT " +
|
|
|
// " i.label_type AS labelType, " +
|
|
|
// " i.label, " +
|
|
|
// " i.label_name AS labelName, " +
|
|
|
// " i.patient " +
|
|
|
// " FROM " +
|
|
|
" "+basedb+".wlyy_sign_patient_label_info i " +
|
|
|
" WHERE " +
|
|
|
" i.label = '"+label+"' "+
|
|
|
" AND i.label_type = '"+labelType+"' " +
|
|
|
" AND i.`status` = '1' " +
|
|
|
" ) lb " +
|
|
|
" JOIN wlyy_specialist_patient_relation s ON s.patient = lb.patient " +
|
|
|
" WHERE " +
|
|
|
" s.doctor = '"+doctor+"' AND s.status >=0 AND s.sign_status >0";
|
|
|
" AND i.patient in ( " +
|
|
|
" select patient from wlyy_specialist_patient_relation WHERE " +
|
|
|
"( doctor = '"+doctor+"' OR health_doctor = '"+doctor+"' OR health_assistant='"+doctor+ "' ) AND STATUS >= 0 AND sign_status > 0 )";
|
|
|
// +" ) lb ";
|
|
|
System.out.print("日志:"+sql);
|
|
|
List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(sql);
|
|
|
Long count = 0L;
|
|
|
if(rstotal!=null&&rstotal.size()>0){
|
|
@ -504,6 +497,9 @@ public class SpecialistService{
|
|
|
relation.setHealthAssistantName(health_assistant_name);
|
|
|
relation.setSignDate(new Date());
|
|
|
specialistPatientRelationDao.save(relation);
|
|
|
//签约成功之后,将签约关系保存在redis中
|
|
|
String key = "specialist_patient_relation:" + relation.getPatient() +"_"+ ":text";
|
|
|
redisTemplate.opsForValue().set(key,"true");
|
|
|
}
|
|
|
return MixEnvelop.getSuccess(SpecialistMapping.api_success,relation);
|
|
|
}
|
|
@ -576,6 +572,7 @@ public class SpecialistService{
|
|
|
|
|
|
public MixEnvelop findPatientSignSpecialist(String patient){
|
|
|
String sql = "SELECT " +
|
|
|
" r.id AS relationCode, " +
|
|
|
" r.patient, " +
|
|
|
" r.team_code AS teamCode," +
|
|
|
" r.patient_name AS patientName, " +
|
|
@ -774,23 +771,32 @@ public class SpecialistService{
|
|
|
// }
|
|
|
|
|
|
/**
|
|
|
* 专科-模糊搜索注册居民
|
|
|
* 专科-模糊搜索注册居民(未与该医生所在团队医生签约的居民)
|
|
|
* @param doctorCode
|
|
|
* @param keywords
|
|
|
*/
|
|
|
public MixEnvelop searchPatientInSpecialist(String doctorCode,String keywords,Integer page,Integer pageSize) throws Exception{
|
|
|
String sql1 = " select count(1) as num ";
|
|
|
String sql2 = " select p.name as name,p.idcard,p.code,p.photo,CASE WHEN wsf.status ='-4' THEN '已到期' WHEN wsf.status ='0' THEN '待签约' WHEN wsf.status ='1' THEN '已签约' WHEN wsf.status ='2' THEN '已签约' WHEN wsf.status ='3' THEN '已签约' ELSE '待签约' END status ";
|
|
|
String sql2 = " select p.name as name,p.idcard,p.code,p.photo ";
|
|
|
String whereSql ="";
|
|
|
if(!StringUtils.isEmpty(keywords)){
|
|
|
whereSql+=" and (p.name like '%"+keywords+"%' or p.idcard like '%"+keywords+"%' or p.mobile like '%"+keywords+"%') ";
|
|
|
// whereSql+=" and (p.name like '%"+keywords+"%' or p.idcard like '%"+keywords+"%' or p.mobile like '%"+keywords+"%') ";
|
|
|
whereSql+=" and p.mobile ='"+keywords+"'";
|
|
|
}
|
|
|
String centerSql =" from "+basedb+".wlyy_patient p LEFT JOIN "+basedb+".wlyy_sign_family wsf ON p.code=wsf.patient AND wsf.type='1'" +
|
|
|
" WHERE p.code not in (SELECT r.patient FROM wlyy_specialist.wlyy_specialist_patient_relation r WHERE r.sign_status = '1' and doctor='"+doctorCode+"')"+" AND p.openid IS NOT NULL "+
|
|
|
String centerSql =" from "+basedb+".wlyy_patient p " +
|
|
|
" WHERE p.code not in (SELECT r.patient FROM wlyy_specialist.wlyy_specialist_patient_relation r WHERE r.sign_status = '1' " +
|
|
|
" AND doctor in (SELECT m.doctor_code FROM "+basedb+".wlyy_admin_team_member m where m.team_id in " +
|
|
|
" (SELECT dt.id FROM "+basedb+".wlyy_admin_team dt LEFT JOIN "+basedb+".wlyy_admin_team_member watm ON dt.id=watm.team_id " +
|
|
|
" WHERE dt.available='1' AND watm.available='1' AND watm.doctor_code='"+doctorCode+"') AND m.available='1'))"
|
|
|
+" AND p.openid IS NOT NULL "+
|
|
|
whereSql;
|
|
|
|
|
|
String countCenterSql =" from "+basedb+".wlyy_patient p " +
|
|
|
" WHERE p.code not in (SELECT r.patient FROM wlyy_specialist.wlyy_specialist_patient_relation r WHERE r.sign_status = '1' and doctor='"+doctorCode+"')"+" AND p.openid IS NOT NULL "+
|
|
|
" WHERE p.code not in (SELECT r.patient FROM wlyy_specialist.wlyy_specialist_patient_relation r WHERE r.sign_status = '1'" +
|
|
|
" AND doctor in (SELECT m.doctor_code FROM "+basedb+".wlyy_admin_team_member m where m.team_id in " +
|
|
|
" (SELECT dt.id FROM "+basedb+".wlyy_admin_team dt LEFT JOIN "+basedb+".wlyy_admin_team_member watm ON dt.id=watm.team_id " +
|
|
|
" WHERE dt.available='1' AND watm.available='1' AND watm.doctor_code='"+doctorCode+"') AND m.available='1'))"
|
|
|
+" AND p.openid IS NOT NULL "+
|
|
|
whereSql;
|
|
|
String sqlCount=sql1+countCenterSql;
|
|
|
String sql=sql2+centerSql+" LIMIT "+(page-1)*pageSize+","+pageSize;
|
|
@ -802,13 +808,16 @@ public class SpecialistService{
|
|
|
String sex = null;
|
|
|
String sexName="";
|
|
|
for(Map<String,Object> one:map){
|
|
|
StringBuffer statusSql =new StringBuffer( " select CASE WHEN wsf.status ='-4' THEN '已到期' WHEN wsf.status ='0' THEN '待签约' WHEN wsf.status ='1' THEN '已签约' WHEN wsf.status ='2' THEN '已签约' WHEN wsf.status ='3' THEN '已签约' ELSE '待签约' END status ");
|
|
|
statusSql.append("FROM wlyy.wlyy_sign_family wsf, (SELECT patient,Max(apply_date) applyDate FROM wlyy.wlyy_sign_family WHERE type = '2' AND patient='"+one.get("code")+"' GROUP BY patient) temp WHERE wsf.patient=temp.patient AND wsf.apply_date=temp.applyDate");
|
|
|
List<Map<String,Object>> strMap= jdbcTemplate.queryForList(statusSql.toString());
|
|
|
m = new HashMap();
|
|
|
age = IdCardUtil.getAgeForIdcard(one.get("idcard")+"");
|
|
|
sex = IdCardUtil.getSexForIdcard_new(one.get("idcard")+"");
|
|
|
m.put("name",one.get("name"));
|
|
|
m.put("age",age);
|
|
|
m.put("sex",sex);
|
|
|
m.put("status",one.get("status"));
|
|
|
m.put("status", !(null != strMap && strMap.size() > 0) ? "待签约" : strMap.get(0).get("status"));
|
|
|
if("1".equals(sex)){
|
|
|
sexName="男";
|
|
|
}else if("2".equals(sex)){
|
|
@ -834,14 +843,24 @@ public class SpecialistService{
|
|
|
public JSONObject doctorForSpecialistInfo(String doctorCode, String patientCode) throws Exception{
|
|
|
JSONObject jsonObject = new JSONObject();
|
|
|
//1、获取居民基础信息
|
|
|
String preSql = "SELECT p.name as name,CASE p.sex WHEN 1 THEN '男' WHEN 2 THEN '女' ELSE '未知' END as sex,IFNULL(year( from_days( datediff( now(), p.birthday))),'未知') as age," +
|
|
|
" p.photo as photo,p.idcard as idcard,p.mobile as mobile,p.medicare_number as medicareNumber,p.ssc as ssc," +
|
|
|
" CASE WHEN wsf.doctor_name is null THEN '无' ELSE wsf.doctor_name END as doctorName,CASE WHEN wsf.hospital_name is NULL THEN '无' ELSE wsf.hospital_name END as hospitalName,CASE WHEN wsf.mobile is NULL THEN '无' ELSE wsf.mobile END as doctorMobole ";
|
|
|
String preSql = "SELECT p.name as name, p.photo as photo,p.idcard as idcard,p.mobile as mobile,p.medicare_number as medicareNumber,p.ssc as ssc," +
|
|
|
" CASE WHEN wd.name is null THEN '无' ELSE wd.name END as doctorName,CASE WHEN wd.hospital_name is NULL THEN '无' ELSE wd.hospital_name END as hospitalName,CASE WHEN wd.mobile is NULL THEN '无' ELSE wd.mobile END as doctorMobole ";
|
|
|
String patientSql = " from " + basedb + ".wlyy_patient p LEFT JOIN " + basedb + ".wlyy_sign_family wsf " +
|
|
|
" ON p.code=wsf.patient AND wsf.type='2' AND wsf.status='1' " +
|
|
|
" LEFT JOIN " + basedb + ".wlyy_doctor wd ON wsf.doctor =wd.code WHERE p.code='" + patientCode + "'";
|
|
|
//一个居民 生效的家签信息只会有一条
|
|
|
Map<String, Object> map = jdbcTemplate.queryForMap(preSql + patientSql);
|
|
|
map.put("age",IdCardUtil.getAgeForIdcard(map.get("idcard")+""));
|
|
|
String sexCode=IdCardUtil.getSexForIdcard_new(map.get("idcard")+"");
|
|
|
String sexName="";
|
|
|
if("1".equals(sexCode)){
|
|
|
sexName="男";
|
|
|
}else if("2".equals(sexCode)){
|
|
|
sexName="女";
|
|
|
}else{
|
|
|
sexName="未知";
|
|
|
}
|
|
|
map.put("sex",sexName);
|
|
|
jsonObject.put("patientInfo", map);
|
|
|
|
|
|
//2、获取医生信息(所属医院、科室、姓名)
|
|
@ -859,17 +878,26 @@ public class SpecialistService{
|
|
|
objectMap.put("teamId", i);
|
|
|
objectMap.put("teamName", m.get(i).get(0).get("teamName"));
|
|
|
objectMap.put("teamDoctors", m.get(i));
|
|
|
//获取专科团队疾病标签
|
|
|
String disSql = "SELECT wtdr.disease_code, wtdr.disease_name from wlyy.wlyy_team_disease_relation wtdr WHERE wtdr.team_code ='" + i + "'" +" AND wtdr.del='1'";
|
|
|
//new BeanPropertyRowMapper(
|
|
|
List<Map<String, Object>> stringList = jdbcTemplate.queryForList(disSql);
|
|
|
String areaSql = "SELECT wpds.disease FROM wlyy.wlyy_patient_disease_server wpds WHERE wpds.patient='" + patientCode + "'" + " AND wpds.del='1'";
|
|
|
List<String> signDiseaseList = jdbcTemplate.queryForList(areaSql,String.class);
|
|
|
Set<String> stringSet =new HashSet<>(signDiseaseList);
|
|
|
// stringSet.addAll(new HashSet<>(signDiseaseList));
|
|
|
//已签约的疾病状态改成1
|
|
|
stringList.stream().forEach(item->{
|
|
|
item.put("status",stringSet.contains( item.get("disease_code"))?1:0) ;
|
|
|
});
|
|
|
objectMap.put("teamDisease", stringList);
|
|
|
mapList.add(objectMap);
|
|
|
}
|
|
|
jsonObject.put("teamAndDoctors", mapList);
|
|
|
//获取专科团队疾病标签
|
|
|
teamSql = "SELECT wtdr.disease_name from wlyy.wlyy_team_disease_relation wtdr WHERE wtdr.team_code IN ( SELECT watm.team_id teamId FROM " + basedb + ".wlyy_admin_team_member watm WHERE watm.doctor_code ='" + doctorCode + "'" + " AND watm.available = '1' ) AND wtdr.del='1'";
|
|
|
//new BeanPropertyRowMapper(
|
|
|
List<String> stringList = jdbcTemplate.queryForList(teamSql, String.class);
|
|
|
jsonObject.put("teamDisease", stringList.stream().collect(Collectors.joining(" ")));
|
|
|
//疾病标签
|
|
|
teamSql = "SELECT wspl.label_code,wspl.label_name from wlyy.wlyy_sign_patient_label wspl WHERE wspl.label_type='8' AND status='1'";
|
|
|
List<Map<String, Object>> signPatientLabelList = jdbcTemplate.queryForList(teamSql);
|
|
|
|
|
|
//康复情况标签
|
|
|
String labelSql = "SELECT wspl.label_code,wspl.label_name from wlyy.wlyy_sign_patient_label wspl WHERE wspl.label_type='8' AND status='1'";
|
|
|
List<Map<String, Object>> signPatientLabelList = jdbcTemplate.queryForList(labelSql);
|
|
|
jsonObject.put("signPatientLabels", signPatientLabelList);
|
|
|
return jsonObject;
|
|
|
}
|
|
@ -883,13 +911,45 @@ public class SpecialistService{
|
|
|
public ObjEnvelop<SpecialistPatientRelationDO> createPatientInSpeciaRelation(SpecialistPatientRelationDO specialistPatientRelationDO) throws Exception {
|
|
|
specialistPatientRelationDO.setSignStatus("1");
|
|
|
specialistPatientRelationDO.setSignDate(new Date());
|
|
|
specialistPatientRelationDO.setCreateTime(new Date());
|
|
|
specialistPatientRelationDO.setCreateUser(specialistPatientRelationDO.getDoctor());
|
|
|
specialistPatientRelationDO.setCreateUserName(specialistPatientRelationDO.getDoctorName());
|
|
|
specialistPatientRelationDO.setStatus("1");//计管师分配状态
|
|
|
specialistPatientRelationDO.setSignYear(String.valueOf(DateUtil.getNowYear()));
|
|
|
specialistPatientRelationDO.setSignDate(new Date());
|
|
|
specialistPatientRelationDO = specialistPatientRelationDao.save(specialistPatientRelationDO);
|
|
|
//签约成功之后,将签约关系保存在redis中
|
|
|
String key = "specialist_patient_relation:" + specialistPatientRelationDO.getPatient() +"_"+ ":text";
|
|
|
redisTemplate.opsForValue().set(key,"true");
|
|
|
|
|
|
return ObjEnvelop.getSuccess("success", specialistPatientRelationDO);
|
|
|
}
|
|
|
|
|
|
public Integer updateRedisFindPatientTeamList(){
|
|
|
List<SpecialistPatientRelationDO> specialistPatientRelationDOList=specialistPatientRelationDao.findAllBySignStatus("1");
|
|
|
List<SpecialistPatientRelationDO> unique = specialistPatientRelationDOList.stream().collect(
|
|
|
Collectors.collectingAndThen(
|
|
|
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(SpecialistPatientRelationDO::getPatient))), ArrayList::new)
|
|
|
);
|
|
|
unique.stream().forEach(item->{
|
|
|
//签约成功之后,将签约关系保存在redis中
|
|
|
String key = "specialist_patient_relation:" + item.getPatient() +"_"+ ":text";
|
|
|
redisTemplate.opsForValue().set(key,"true");
|
|
|
});
|
|
|
return null==unique?0:unique.size();
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 根据共管医生和居民code查询专科签约信息
|
|
|
*
|
|
|
* @param patient
|
|
|
* @param doctor
|
|
|
* @return
|
|
|
*/
|
|
|
public List<SpecialistPatientRelationDO> selectByAssistant(String patient,String doctor){
|
|
|
String sql = "select * from wlyy_specialist_patient_relation r where r.health_assistant = '"+doctor+"' and r.patient = '"+patient+"' ";
|
|
|
List<SpecialistPatientRelationDO> relationDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SpecialistPatientRelationDO.class));
|
|
|
return relationDOS;
|
|
|
}
|
|
|
}
|