|
@ -45,7 +45,7 @@ import com.yihu.wlyy.util.MessageType;
|
|
|
|
|
|
/**
|
|
|
* 網絡諮詢类.
|
|
|
*
|
|
|
*
|
|
|
* @author George
|
|
|
*/
|
|
|
// Spring Service Bean的标识.
|
|
@ -53,729 +53,774 @@ import com.yihu.wlyy.util.MessageType;
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public class ConsultTeamService extends ConsultService {
|
|
|
|
|
|
private Clock clock = Clock.DEFAULT;
|
|
|
|
|
|
// 咨询详细记录
|
|
|
@Autowired
|
|
|
private ConsultTeamLogDao consultTeamLogDao;
|
|
|
@Autowired
|
|
|
private ConsultTeamDoctorDao consultTeamDoctorDao;
|
|
|
@Autowired
|
|
|
private SignFamilyDao signFamilyDao;
|
|
|
@Autowired
|
|
|
private DoctorPatientDao doctorPatientDao;
|
|
|
@Autowired
|
|
|
private DoctorTeamDao doctorTeamDao;
|
|
|
@Autowired
|
|
|
private Clock clock = Clock.DEFAULT;
|
|
|
|
|
|
// 咨询详细记录
|
|
|
@Autowired
|
|
|
private ConsultTeamLogDao consultTeamLogDao;
|
|
|
@Autowired
|
|
|
private ConsultTeamDoctorDao consultTeamDoctorDao;
|
|
|
@Autowired
|
|
|
private SignFamilyDao signFamilyDao;
|
|
|
@Autowired
|
|
|
private DoctorPatientDao doctorPatientDao;
|
|
|
@Autowired
|
|
|
private DoctorTeamDao doctorTeamDao;
|
|
|
@Autowired
|
|
|
private ConsultTeamDao consultTeamDao;
|
|
|
@Autowired
|
|
|
private DoctorTeamMemberDao doctorTeamDoctor;
|
|
|
@Autowired
|
|
|
private JdbcTemplate jdbcTemplate;
|
|
|
/**
|
|
|
* 查询患者是否还有未结束的三师咨询
|
|
|
* @param patient
|
|
|
* @return
|
|
|
*/
|
|
|
public boolean exist(String patient,Integer type) {
|
|
|
int count = consultTeamDao.countByPatient(patient, type);
|
|
|
return count > 0;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查詢醫生網絡諮詢列表
|
|
|
* @param type 咨询类型:1、咨询我的,2、公共的, 3、参与过的,4、已结束的 5 名医咨询 全部 6 名医咨询 进行中 7 名医咨询 已结束
|
|
|
* @param id
|
|
|
* @param pagesize 每页显示数,默认为10
|
|
|
* @return
|
|
|
*/
|
|
|
public Page<ConsultTeam> findByDoctor(String uid, int type, long id, int pagesize,String title) {
|
|
|
if (id < 0) {
|
|
|
id = 0;
|
|
|
}
|
|
|
if (pagesize <= 0) {
|
|
|
pagesize = 10;
|
|
|
}
|
|
|
switch (type) {
|
|
|
case 0:
|
|
|
// 全部
|
|
|
return findByDoctorType0(uid, id, pagesize);
|
|
|
case 1:
|
|
|
// 咨询我的
|
|
|
return findByDoctorType1(uid, type, id, pagesize);
|
|
|
case 2:
|
|
|
// 我感兴趣的
|
|
|
return findByDoctorType2(uid, type, id, pagesize);
|
|
|
case 3:
|
|
|
// 我回复的
|
|
|
return findByDoctorType3(uid, id, pagesize);
|
|
|
case 4:
|
|
|
// 已完成的
|
|
|
return findByDoctorType4(uid, id, pagesize);
|
|
|
case 5:
|
|
|
// 5 名医咨询 全部
|
|
|
return findByDoctorType5(uid, id, pagesize,title);
|
|
|
case 6:
|
|
|
//6 名医咨询 进行中
|
|
|
return findByDoctorType6(uid, 0, id, pagesize,title);
|
|
|
case 7:
|
|
|
//7 名医咨询 已结束
|
|
|
return findByDoctorType6(uid, 1, id, pagesize,title);
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
private Page<ConsultTeam> findByDoctorType5(String uid, long id, int pagesize,String title) {
|
|
|
Sort sort = new Sort(Direction.DESC, "id");
|
|
|
// 分页信息
|
|
|
PageRequest pageRequest = new PageRequest(0, pagesize, sort);
|
|
|
if(StringUtils.isNoneEmpty(title)){
|
|
|
title="%"+title+"%";
|
|
|
if (id > 0) {
|
|
|
return consultTeamDao.findFamousDoctorAllList(uid, id,title, pageRequest);
|
|
|
} else {
|
|
|
return consultTeamDao.findFamousDoctorAllList(uid,title, pageRequest);
|
|
|
}
|
|
|
}else{
|
|
|
if (id > 0) {
|
|
|
return consultTeamDao.findFamousDoctorAllList(uid, id, pageRequest);
|
|
|
} else {
|
|
|
return consultTeamDao.findFamousDoctorAllList(uid, pageRequest);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
private Page<ConsultTeam> findByDoctorType6(String uid, int type, long id, int pagesize,String title) {
|
|
|
// 排序
|
|
|
Sort sort = new Sort(Direction.DESC, "id");
|
|
|
// 分页信息
|
|
|
PageRequest pageRequest = new PageRequest(0, pagesize, sort);
|
|
|
if(StringUtils.isNoneEmpty(title)){
|
|
|
title="%"+title+"%";
|
|
|
if (id > 0) {
|
|
|
return consultTeamDao.findFamousDoctorDoingList(uid, id,title,type, pageRequest);
|
|
|
} else {
|
|
|
return consultTeamDao.findFamousDoctorDoingList(uid, title,type,pageRequest);
|
|
|
}
|
|
|
}else{
|
|
|
if (id > 0) {
|
|
|
return consultTeamDao.findFamousDoctorDoingList(uid, id,type, pageRequest);
|
|
|
} else {
|
|
|
return consultTeamDao.findFamousDoctorDoingList(uid,type, pageRequest);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查询全部咨询记录
|
|
|
* @param uid
|
|
|
* @param id
|
|
|
* @param pagesize
|
|
|
* @return
|
|
|
*/
|
|
|
public Page<ConsultTeam> findByDoctorType0(String uid, long id, int pagesize) {
|
|
|
// 排序
|
|
|
Sort sort = new Sort(Direction.DESC, "id");
|
|
|
// 分页信息
|
|
|
PageRequest pageRequest = new PageRequest(0, pagesize, sort);
|
|
|
if (id > 0) {
|
|
|
return consultTeamDao.findDoctorList(uid, id, pageRequest);
|
|
|
} else {
|
|
|
return consultTeamDao.findDoctorList(uid, pageRequest);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 指定医生三师咨询列表查询
|
|
|
* @param uid 医生标识
|
|
|
* @param type 咨询类型:1、咨询我的,2、公共的, 3、参与过的,4、已结束的
|
|
|
* @param pagesize
|
|
|
* @return
|
|
|
*/
|
|
|
public Page<ConsultTeam> findByDoctorType1(String uid, int type, long id, int pagesize) {
|
|
|
// 排序
|
|
|
Sort sort = new Sort(Direction.DESC, "id");
|
|
|
// 分页信息
|
|
|
PageRequest pageRequest = new PageRequest(0, pagesize, sort);
|
|
|
if (id > 0) {
|
|
|
return consultTeamDao.findDoctorPointList(uid, id, pageRequest);
|
|
|
} else {
|
|
|
return consultTeamDao.findDoctorPointList(uid, pageRequest);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 公共三师咨询列表查询
|
|
|
* @param uid 医生标识
|
|
|
* @param type 咨询类型:1、咨询我的,2、公共的, 3、参与过的,4、已结束的
|
|
|
* @param pagesize
|
|
|
* @return
|
|
|
*/
|
|
|
public Page<ConsultTeam> findByDoctorType2(String uid, int type, long id, int pagesize) {
|
|
|
// 排序
|
|
|
Sort sort = new Sort(Direction.DESC, "id");
|
|
|
// 分页信息
|
|
|
PageRequest pageRequest = new PageRequest(0, pagesize, sort);
|
|
|
|
|
|
// 设置查询条件
|
|
|
Map<String, SearchFilter> filters = new HashMap<String, SearchFilter>();
|
|
|
// 未指定医生
|
|
|
filters.put("type", new SearchFilter("type", Operator.EQ, 0));
|
|
|
if (id > 0) {
|
|
|
filters.put("id", new SearchFilter("id", Operator.LT, id));
|
|
|
}
|
|
|
// 未回复
|
|
|
filters.put("status", new SearchFilter("status", Operator.EQ, 0));
|
|
|
// 未作废
|
|
|
filters.put("del", new SearchFilter("del", Operator.EQ, "1"));
|
|
|
Specification<ConsultTeam> spec = DynamicSpecifications.bySearchFilter(filters.values(), ConsultTeam.class);
|
|
|
|
|
|
return consultTeamDao.findAll(spec, pageRequest);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 医生参与过的未结束的三师咨询列表查询
|
|
|
* @param uid
|
|
|
* @param pagesize
|
|
|
* @return
|
|
|
*/
|
|
|
public Page<ConsultTeam> findByDoctorType3(String uid, long id, int pagesize) {
|
|
|
// 排序
|
|
|
Sort sort = new Sort(Direction.DESC, "id");
|
|
|
// 分页信息
|
|
|
PageRequest pageRequest = new PageRequest(0, pagesize, sort);
|
|
|
if (id > 0) {
|
|
|
return consultTeamDao.findDoctorJoinList(uid, id, pageRequest);
|
|
|
} else {
|
|
|
return consultTeamDao.findDoctorJoinList(uid, pageRequest);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 医生参与过的已结束的三师咨询列表查询
|
|
|
* @param uid
|
|
|
* @param pagesize
|
|
|
* @return
|
|
|
*/
|
|
|
public Page<ConsultTeam> findByDoctorType4(String uid, long id, int pagesize) {
|
|
|
// 排序
|
|
|
Sort sort = new Sort(Direction.DESC, "id");
|
|
|
// 分页信息
|
|
|
PageRequest pageRequest = new PageRequest(0, pagesize, sort);
|
|
|
if (id > 0) {
|
|
|
return consultTeamDao.findDoctorFinishList(uid, id, pageRequest);
|
|
|
} else {
|
|
|
return consultTeamDao.findDoctorFinishList(uid, pageRequest);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 网络咨询咨询日志查询
|
|
|
* @param consult 咨询标识
|
|
|
* @param pagesize 每页显示数,默认为10
|
|
|
* @return
|
|
|
*/
|
|
|
public Page<ConsultTeamLog> findLogByConsult(String consult, long id, int pagesize) {
|
|
|
if (id < 0) {
|
|
|
id = 0;
|
|
|
}
|
|
|
|
|
|
// 设置查询条件
|
|
|
Map<String, SearchFilter> filters = new HashMap<String, SearchFilter>();
|
|
|
filters.put("consult", new SearchFilter("consult", Operator.EQ, consult));
|
|
|
|
|
|
if (id > 0) {
|
|
|
if(pagesize>0)
|
|
|
filters.put("id", new SearchFilter("id", Operator.LT, id));
|
|
|
else
|
|
|
filters.put("id", new SearchFilter("id", Operator.GT, id));
|
|
|
}
|
|
|
filters.put("del", new SearchFilter("del", Operator.EQ, "1"));
|
|
|
Specification<ConsultTeamLog> spec = DynamicSpecifications.bySearchFilter(filters.values(), ConsultTeamLog.class);
|
|
|
|
|
|
if(pagesize <= 0){
|
|
|
Page<ConsultTeamLog> p = new PageImpl<>(consultTeamLogDao.findAll(spec));
|
|
|
return p;
|
|
|
}
|
|
|
// 排序
|
|
|
Sort sort = new Sort(Direction.DESC, "id");
|
|
|
// 分页信息
|
|
|
PageRequest pageRequest = new PageRequest(0, pagesize, sort);
|
|
|
return consultTeamLogDao.findAll(spec, pageRequest);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 批量回复
|
|
|
* @param logs
|
|
|
* @return
|
|
|
*/
|
|
|
public void reply(List<ConsultTeamLog> logs, String patient) {
|
|
|
for (ConsultTeamLog log : logs) {
|
|
|
reply(log, patient, null, log.getType());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 添加咨询记录
|
|
|
* @param log 日志对象
|
|
|
* @param type 类型,0问,1回复,2追问,3评价
|
|
|
* @return
|
|
|
*/
|
|
|
public ConsultTeamLog reply(ConsultTeamLog log, String patient, String teamOrDoctor, int type) {
|
|
|
log.setCzrq(clock.getCurrentDate());
|
|
|
// 保存咨询记录
|
|
|
ConsultTeamLog temp = consultTeamLogDao.save(log);
|
|
|
if (temp != null) {
|
|
|
// 发送消息
|
|
|
if (type == 1) {
|
|
|
// 医生回复,给患者发消息
|
|
|
// sendMessage(patient, teamOrDoctor, "三师咨询", log.getDoctorName() + "回复了您的咨询", log.getConsult(), 214, 1, 0, 0);
|
|
|
// 患者未读数量+1
|
|
|
consultTeamDao.increasePatientRead(log.getConsult());
|
|
|
// 医生有回复
|
|
|
consultTeamDoctorDao.updateReply(log.getConsult(), teamOrDoctor);
|
|
|
|
|
|
//shenzaixin v1.2.0 推送消息给患者
|
|
|
HttpUtil.sendWeixinWebsocketMsg(patient,"{busiType:'qianyuezixun',msgid:'"+log.getId()+"'}");
|
|
|
} else if (type == 0 || type == 2) {
|
|
|
// 查询相关联的医生
|
|
|
Iterable<ConsultTeamDoctor> iterable = consultTeamDoctorDao.findByConsult(log.getConsult());
|
|
|
if (iterable != null && iterable.iterator() != null && iterable.iterator().hasNext()) {
|
|
|
Iterator<ConsultTeamDoctor> iterator = iterable.iterator();
|
|
|
while (iterator.hasNext()) {
|
|
|
// 患者提问或追问,给医生发消息
|
|
|
ConsultTeamDoctor ctd = iterator.next();
|
|
|
if (ctd == null) {
|
|
|
continue;
|
|
|
}
|
|
|
// 推送消息给医生
|
|
|
PushMsgTask.getInstance().put(ctd.getTo(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_CONSULT_TEAM_REPLY.D_CT_02.name(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_CONSULT_TEAM_REPLY.指定咨询.name(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_CONSULT_TEAM_REPLY.您有新的消息.name(), temp.getConsult());
|
|
|
}
|
|
|
}
|
|
|
// 医生未读数量+1
|
|
|
consultTeamDao.increaseDoctorRead(log.getConsult());
|
|
|
}
|
|
|
}
|
|
|
return temp;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 添加三师咨询
|
|
|
* @param ct 三师咨询对象
|
|
|
* @param patient 患者标识
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public int addTeamConsult(ConsultTeam ct, String patient) throws Exception {
|
|
|
// 咨询三师
|
|
|
if (ct.getType() == 1) {
|
|
|
// 查询三师签约信息
|
|
|
SignFamily sc = signFamilyDao.findBySanshiPatientYes(patient);
|
|
|
if (sc == null) {
|
|
|
// 不存在三师签约
|
|
|
return -2;
|
|
|
}
|
|
|
ct.setTeam(sc.getTeamCode());
|
|
|
// 设置健康管理师,三师咨询默认给健康管理师处理
|
|
|
//查找病人所在的团队
|
|
|
DoctorTeam doctorTeam=doctorTeamDao.findBySanshiParientCode(patient);
|
|
|
//得到团队的健康管理师
|
|
|
DoctorTeamMember doctorTeamMember = doctorTeamDoctor.findDoctorSanshi2ByTeam(doctorTeam.getCode(),3);
|
|
|
// 设置家庭医生
|
|
|
ct.setDoctor( doctorTeamMember.getMemberCode());
|
|
|
} else if (ct.getType() == 2) {
|
|
|
// 咨询家庭医生
|
|
|
SignFamily sf = signFamilyDao.findByjiatingPatient(patient);
|
|
|
if (sf == null) {
|
|
|
// 不存在家庭签约
|
|
|
return -1;
|
|
|
}
|
|
|
// 设置健康管理师,家庭医生咨询默认给健康管理师处理
|
|
|
//查找病人所在的团队
|
|
|
DoctorTeam doctorTeam=doctorTeamDao.findByParientCode(patient);
|
|
|
//得到团队的健康管理师
|
|
|
DoctorTeamMember doctorTeamMember = doctorTeamDoctor.findDoctorJiating2ByTeam(doctorTeam.getCode(),3);
|
|
|
// 设置家庭医生
|
|
|
ct.setDoctor( doctorTeamMember.getMemberCode());
|
|
|
}
|
|
|
// 设置患者信息
|
|
|
ct.setPatient(patient);
|
|
|
// 查询患者信息
|
|
|
Patient tempPatient = patientDao.findByCode(patient);
|
|
|
// 设置患者姓名
|
|
|
ct.setName(tempPatient.getName());
|
|
|
// 设置患者生日
|
|
|
ct.setBirthday(tempPatient.getBirthday());
|
|
|
//新增性别
|
|
|
ct.setSex(tempPatient.getSex());
|
|
|
// 设置患者头像
|
|
|
ct.setPhoto(tempPatient.getPhoto());
|
|
|
// 设置操作日期
|
|
|
ct.setCzrq(new Date());
|
|
|
ct.setDel("1");
|
|
|
ct.setStatus(0);
|
|
|
// 医生未读数量为1
|
|
|
ct.setDoctorRead(1);
|
|
|
// 添加咨询记录
|
|
|
Consult consult = addConsult(ct.getPatient(), null, ct.getSymptoms(), ct.getImages(), ct.getType());
|
|
|
// 设置咨询标识
|
|
|
ct.setConsult(consult.getCode());
|
|
|
// 保存医生咨询信息
|
|
|
if (consultTeamDao.save(ct) == null) {
|
|
|
throw new Exception("保存失败!");
|
|
|
}
|
|
|
// 添加咨询转发记录
|
|
|
ConsultTeamDoctor cd = new ConsultTeamDoctor();
|
|
|
cd.setConsult(consult.getCode());
|
|
|
cd.setDel("1");
|
|
|
cd.setCzrq(new Date());
|
|
|
cd.setTo(ct.getDoctor());
|
|
|
consultTeamDoctorDao.save(cd);
|
|
|
// 添加医生咨询日志
|
|
|
addLogs(ct);
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 添加三师咨询日志
|
|
|
* @param ct
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
private void addLogs(ConsultTeam ct) throws Exception {
|
|
|
List<ConsultTeamLog> logs = new ArrayList<ConsultTeamLog>();
|
|
|
// 添加问题咨询日志
|
|
|
String content ="";
|
|
|
content = "咨询问题:" + (StringUtils.isEmpty(ct.getSymptoms()) ? "无" : ct.getSymptoms());
|
|
|
|
|
|
// 生成提问日志,并推送相关消息
|
|
|
ConsultTeamLog infoLog = new ConsultTeamLog();
|
|
|
infoLog.setConsult(ct.getConsult());
|
|
|
infoLog.setContent(content);
|
|
|
infoLog.setDel("1");
|
|
|
infoLog.setType(0);
|
|
|
infoLog.setChatType(1);
|
|
|
infoLog.setCzrq(new Date());
|
|
|
logs.add(infoLog);
|
|
|
// 图片日志
|
|
|
if (StringUtils.isNotEmpty(ct.getImages())) {
|
|
|
String[] images = ct.getImages().split(",");
|
|
|
for (String image : images) {
|
|
|
if (StringUtils.isNoneEmpty(image)) {
|
|
|
ConsultTeamLog imgLog = new ConsultTeamLog();
|
|
|
// 设置咨询标识
|
|
|
imgLog.setConsult(ct.getConsult());
|
|
|
// 设置图片URL
|
|
|
imgLog.setContent(image);
|
|
|
imgLog.setDel("1");
|
|
|
infoLog.setType(0);
|
|
|
imgLog.setCzrq(new Date());
|
|
|
// 图片类型
|
|
|
imgLog.setChatType(2);
|
|
|
// 添加到待保存队列
|
|
|
logs.add(imgLog);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
// 语音日志
|
|
|
if (StringUtils.isNotEmpty(ct.getVoice())) {
|
|
|
ConsultTeamLog voiceLog = new ConsultTeamLog();
|
|
|
// 设置咨询标识
|
|
|
voiceLog.setConsult(ct.getConsult());
|
|
|
// 设置语音URL
|
|
|
voiceLog.setContent(ct.getVoice());
|
|
|
voiceLog.setDel("1");
|
|
|
infoLog.setType(0);
|
|
|
// 语音类型
|
|
|
voiceLog.setChatType(3);
|
|
|
voiceLog.setCzrq(new Date());
|
|
|
// 添加到待保存队列
|
|
|
logs.add(voiceLog);
|
|
|
}
|
|
|
if (!logs.isEmpty()) {
|
|
|
Iterable<ConsultTeamLog> iterable = consultTeamLogDao.save(logs);
|
|
|
if (iterable == null || iterable.iterator() == null || !iterable.iterator().hasNext()) {
|
|
|
// 日志保存失败
|
|
|
throw new Exception("consult team log save failed!");
|
|
|
}
|
|
|
}
|
|
|
// 患者提问或追问,给医生发消息
|
|
|
// sendMessage(ct.getDoctor(), ct.getPatient(), "三师咨询", "您有新的三师咨询消息", ct.getConsult(), 116, 1, 0, 0);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查询咨询列表
|
|
|
* @param patientCode 患者标志
|
|
|
* @param status 咨询状态(0未结束,1已结束,-1 已取消)
|
|
|
* @param pageSize 页数
|
|
|
* @return
|
|
|
*/
|
|
|
public Page<ConsultTeam> findByPatient(String patientCode, int status, long id, int pageSize) {
|
|
|
if (id < 0) {
|
|
|
id = 0;
|
|
|
}
|
|
|
if (pageSize <= 0) {
|
|
|
pageSize = 10;
|
|
|
}
|
|
|
// 排序
|
|
|
Sort sort = new Sort(Direction.DESC, "id");
|
|
|
// 分页信息
|
|
|
PageRequest pageRequest = new PageRequest(0, pageSize, sort);
|
|
|
|
|
|
Page<ConsultTeam> list = null;
|
|
|
switch (status) {
|
|
|
case 0:
|
|
|
// 未结束
|
|
|
if (id > 0) {
|
|
|
list = consultTeamDao.findNotFinishedBypatient(patientCode, id, pageRequest);
|
|
|
} else {
|
|
|
list = consultTeamDao.findNotFinishedBypatient(patientCode, pageRequest);
|
|
|
}
|
|
|
break;
|
|
|
case 1:
|
|
|
// 已结束
|
|
|
if (id > 0) {
|
|
|
list = consultTeamDao.findFinishedBypatient(patientCode, id, pageRequest);
|
|
|
} else {
|
|
|
list = consultTeamDao.findFinishedBypatient(patientCode, pageRequest);
|
|
|
}
|
|
|
break;
|
|
|
case -1:
|
|
|
// 已取消
|
|
|
if (id > 0) {
|
|
|
list = consultTeamDao.findCancelBypatient(patientCode, id, pageRequest);
|
|
|
} else {
|
|
|
list = consultTeamDao.findCancelBypatient(patientCode, pageRequest);
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 医生关闭三师咨询
|
|
|
* @param consult 三师咨询标识
|
|
|
* @return
|
|
|
*/
|
|
|
public int finish(String consult) {
|
|
|
return consultTeamDao.updateStatusByConsult(consult);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 设置咨询已读
|
|
|
*
|
|
|
* @param consult
|
|
|
* @return
|
|
|
*/
|
|
|
public int readMessage(String consult){
|
|
|
@Autowired
|
|
|
private DoctorTeamMemberDao doctorTeamDoctor;
|
|
|
@Autowired
|
|
|
private JdbcTemplate jdbcTemplate;
|
|
|
|
|
|
/**
|
|
|
* 查询患者是否还有未结束的三师咨询
|
|
|
*
|
|
|
* @param patient
|
|
|
* @return
|
|
|
*/
|
|
|
public boolean exist(String patient, Integer type) {
|
|
|
int count = consultTeamDao.countByPatient(patient, type);
|
|
|
return count > 0;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查詢醫生網絡諮詢列表
|
|
|
*
|
|
|
* @param type 咨询类型:1、咨询我的,2、公共的, 3、参与过的,4、已结束的 5 名医咨询 全部 6 名医咨询 进行中 7 名医咨询 已结束
|
|
|
* @param id
|
|
|
* @param pagesize 每页显示数,默认为10
|
|
|
* @return
|
|
|
*/
|
|
|
public Page<ConsultTeam> findByDoctor(String uid, int type, long id, int pagesize, String title) {
|
|
|
if (id < 0) {
|
|
|
id = 0;
|
|
|
}
|
|
|
if (pagesize <= 0) {
|
|
|
pagesize = 10;
|
|
|
}
|
|
|
switch (type) {
|
|
|
case 0:
|
|
|
// 全部
|
|
|
return findByDoctorType0(uid, id, pagesize);
|
|
|
case 1:
|
|
|
// 咨询我的
|
|
|
return findByDoctorType1(uid, type, id, pagesize);
|
|
|
case 2:
|
|
|
// 我感兴趣的
|
|
|
return findByDoctorType2(uid, type, id, pagesize);
|
|
|
case 3:
|
|
|
// 我回复的
|
|
|
return findByDoctorType3(uid, id, pagesize);
|
|
|
case 4:
|
|
|
// 已完成的
|
|
|
return findByDoctorType4(uid, id, pagesize);
|
|
|
case 5:
|
|
|
// 5 名医咨询 全部
|
|
|
return findByDoctorType5(uid, id, pagesize, title);
|
|
|
case 6:
|
|
|
//6 名医咨询 进行中
|
|
|
return findByDoctorType6(uid, 0, id, pagesize, title);
|
|
|
case 7:
|
|
|
//7 名医咨询 已结束
|
|
|
return findByDoctorType6(uid, 1, id, pagesize, title);
|
|
|
case 8:
|
|
|
return findByDoctorType8(uid, id, pagesize, title);
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
private Page<ConsultTeam> findByDoctorType8(String uid,long id,int pagesize,String title){
|
|
|
Sort sort = new Sort(Direction.DESC, "id");
|
|
|
// 分页信息
|
|
|
PageRequest pageRequest = new PageRequest(0, pagesize, sort);
|
|
|
if (StringUtils.isNoneEmpty(title)) {
|
|
|
title = "%" + title + "%";
|
|
|
if (id > 0) {
|
|
|
return consultTeamDao.findFamousDoctorUnReplyReadList(uid, id, title, pageRequest);
|
|
|
} else {
|
|
|
return consultTeamDao.findFamousDoctorUnReplyReadList(uid, title, pageRequest);
|
|
|
}
|
|
|
} else {
|
|
|
if (id > 0) {
|
|
|
return consultTeamDao.findFamousDoctorUnReplyReadNoTitleList(uid, id, pageRequest);
|
|
|
} else {
|
|
|
return consultTeamDao.findFamousDoctorUnReplyReadNoTitleList(uid, pageRequest);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private Page<ConsultTeam> findByDoctorType5(String uid, long id, int pagesize, String title) {
|
|
|
Sort sort = new Sort(Direction.DESC, "id");
|
|
|
// 分页信息
|
|
|
PageRequest pageRequest = new PageRequest(0, pagesize, sort);
|
|
|
if (StringUtils.isNoneEmpty(title)) {
|
|
|
title = "%" + title + "%";
|
|
|
if (id > 0) {
|
|
|
return consultTeamDao.findFamousDoctorAllList(uid, id, title, pageRequest);
|
|
|
} else {
|
|
|
return consultTeamDao.findFamousDoctorAllList(uid, title, pageRequest);
|
|
|
}
|
|
|
} else {
|
|
|
if (id > 0) {
|
|
|
return consultTeamDao.findFamousDoctorAllList(uid, id, pageRequest);
|
|
|
} else {
|
|
|
return consultTeamDao.findFamousDoctorAllList(uid, pageRequest);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private Page<ConsultTeam> findByDoctorType6(String uid, int type, long id, int pagesize, String title) {
|
|
|
// 排序
|
|
|
Sort sort = new Sort(Direction.DESC, "id");
|
|
|
// 分页信息
|
|
|
PageRequest pageRequest = new PageRequest(0, pagesize, sort);
|
|
|
if (StringUtils.isNoneEmpty(title)) {
|
|
|
title = "%" + title + "%";
|
|
|
if (id > 0) {
|
|
|
return consultTeamDao.findFamousDoctorDoingList(uid, id, title, type, pageRequest);
|
|
|
} else {
|
|
|
return consultTeamDao.findFamousDoctorDoingList(uid, title, type, pageRequest);
|
|
|
}
|
|
|
} else {
|
|
|
if (id > 0) {
|
|
|
return consultTeamDao.findFamousDoctorDoingList(uid, id, type, pageRequest);
|
|
|
} else {
|
|
|
return consultTeamDao.findFamousDoctorDoingList(uid, type, pageRequest);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查询全部咨询记录
|
|
|
*
|
|
|
* @param uid
|
|
|
* @param id
|
|
|
* @param pagesize
|
|
|
* @return
|
|
|
*/
|
|
|
public Page<ConsultTeam> findByDoctorType0(String uid, long id, int pagesize) {
|
|
|
// 排序
|
|
|
Sort sort = new Sort(Direction.DESC, "id");
|
|
|
// 分页信息
|
|
|
PageRequest pageRequest = new PageRequest(0, pagesize, sort);
|
|
|
if (id > 0) {
|
|
|
return consultTeamDao.findDoctorList(uid, id, pageRequest);
|
|
|
} else {
|
|
|
return consultTeamDao.findDoctorList(uid, pageRequest);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 指定医生三师咨询列表查询
|
|
|
*
|
|
|
* @param uid 医生标识
|
|
|
* @param type 咨询类型:1、咨询我的,2、公共的, 3、参与过的,4、已结束的
|
|
|
* @param pagesize
|
|
|
* @return
|
|
|
*/
|
|
|
public Page<ConsultTeam> findByDoctorType1(String uid, int type, long id, int pagesize) {
|
|
|
// 排序
|
|
|
Sort sort = new Sort(Direction.DESC, "id");
|
|
|
// 分页信息
|
|
|
PageRequest pageRequest = new PageRequest(0, pagesize, sort);
|
|
|
if (id > 0) {
|
|
|
return consultTeamDao.findDoctorPointList(uid, id, pageRequest);
|
|
|
} else {
|
|
|
return consultTeamDao.findDoctorPointList(uid, pageRequest);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 公共三师咨询列表查询
|
|
|
*
|
|
|
* @param uid 医生标识
|
|
|
* @param type 咨询类型:1、咨询我的,2、公共的, 3、参与过的,4、已结束的
|
|
|
* @param pagesize
|
|
|
* @return
|
|
|
*/
|
|
|
public Page<ConsultTeam> findByDoctorType2(String uid, int type, long id, int pagesize) {
|
|
|
// 排序
|
|
|
Sort sort = new Sort(Direction.DESC, "id");
|
|
|
// 分页信息
|
|
|
PageRequest pageRequest = new PageRequest(0, pagesize, sort);
|
|
|
|
|
|
// 设置查询条件
|
|
|
Map<String, SearchFilter> filters = new HashMap<String, SearchFilter>();
|
|
|
// 未指定医生
|
|
|
filters.put("type", new SearchFilter("type", Operator.EQ, 0));
|
|
|
if (id > 0) {
|
|
|
filters.put("id", new SearchFilter("id", Operator.LT, id));
|
|
|
}
|
|
|
// 未回复
|
|
|
filters.put("status", new SearchFilter("status", Operator.EQ, 0));
|
|
|
// 未作废
|
|
|
filters.put("del", new SearchFilter("del", Operator.EQ, "1"));
|
|
|
Specification<ConsultTeam> spec = DynamicSpecifications.bySearchFilter(filters.values(), ConsultTeam.class);
|
|
|
|
|
|
return consultTeamDao.findAll(spec, pageRequest);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 医生参与过的未结束的三师咨询列表查询
|
|
|
*
|
|
|
* @param uid
|
|
|
* @param pagesize
|
|
|
* @return
|
|
|
*/
|
|
|
public Page<ConsultTeam> findByDoctorType3(String uid, long id, int pagesize) {
|
|
|
// 排序
|
|
|
Sort sort = new Sort(Direction.DESC, "id");
|
|
|
// 分页信息
|
|
|
PageRequest pageRequest = new PageRequest(0, pagesize, sort);
|
|
|
if (id > 0) {
|
|
|
return consultTeamDao.findDoctorJoinList(uid, id, pageRequest);
|
|
|
} else {
|
|
|
return consultTeamDao.findDoctorJoinList(uid, pageRequest);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 医生参与过的已结束的三师咨询列表查询
|
|
|
*
|
|
|
* @param uid
|
|
|
* @param pagesize
|
|
|
* @return
|
|
|
*/
|
|
|
public Page<ConsultTeam> findByDoctorType4(String uid, long id, int pagesize) {
|
|
|
// 排序
|
|
|
Sort sort = new Sort(Direction.DESC, "id");
|
|
|
// 分页信息
|
|
|
PageRequest pageRequest = new PageRequest(0, pagesize, sort);
|
|
|
if (id > 0) {
|
|
|
return consultTeamDao.findDoctorFinishList(uid, id, pageRequest);
|
|
|
} else {
|
|
|
return consultTeamDao.findDoctorFinishList(uid, pageRequest);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 网络咨询咨询日志查询
|
|
|
*
|
|
|
* @param consult 咨询标识
|
|
|
* @param pagesize 每页显示数,默认为10
|
|
|
* @return
|
|
|
*/
|
|
|
public Page<ConsultTeamLog> findLogByConsult(String consult, long id, int pagesize) {
|
|
|
if (id < 0) {
|
|
|
id = 0;
|
|
|
}
|
|
|
|
|
|
// 设置查询条件
|
|
|
Map<String, SearchFilter> filters = new HashMap<String, SearchFilter>();
|
|
|
filters.put("consult", new SearchFilter("consult", Operator.EQ, consult));
|
|
|
|
|
|
if (id > 0) {
|
|
|
if (pagesize > 0)
|
|
|
filters.put("id", new SearchFilter("id", Operator.LT, id));
|
|
|
else
|
|
|
filters.put("id", new SearchFilter("id", Operator.GT, id));
|
|
|
}
|
|
|
filters.put("del", new SearchFilter("del", Operator.EQ, "1"));
|
|
|
Specification<ConsultTeamLog> spec = DynamicSpecifications.bySearchFilter(filters.values(), ConsultTeamLog.class);
|
|
|
|
|
|
if (pagesize <= 0) {
|
|
|
Page<ConsultTeamLog> p = new PageImpl<>(consultTeamLogDao.findAll(spec));
|
|
|
return p;
|
|
|
}
|
|
|
// 排序
|
|
|
Sort sort = new Sort(Direction.DESC, "id");
|
|
|
// 分页信息
|
|
|
PageRequest pageRequest = new PageRequest(0, pagesize, sort);
|
|
|
return consultTeamLogDao.findAll(spec, pageRequest);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 批量回复
|
|
|
*
|
|
|
* @param logs
|
|
|
* @return
|
|
|
*/
|
|
|
public void reply(List<ConsultTeamLog> logs, String patient) {
|
|
|
for (ConsultTeamLog log : logs) {
|
|
|
reply(log, patient, null, log.getType());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 添加咨询记录
|
|
|
*
|
|
|
* @param log 日志对象
|
|
|
* @param type 类型,0问,1回复,2追问,3评价
|
|
|
* @return
|
|
|
*/
|
|
|
public ConsultTeamLog reply(ConsultTeamLog log, String patient, String teamOrDoctor, int type) {
|
|
|
log.setCzrq(clock.getCurrentDate());
|
|
|
// 保存咨询记录
|
|
|
ConsultTeamLog temp = consultTeamLogDao.save(log);
|
|
|
if (temp != null) {
|
|
|
// 发送消息
|
|
|
if (type == 1) {
|
|
|
// 医生回复,给患者发消息
|
|
|
// sendMessage(patient, teamOrDoctor, "三师咨询", log.getDoctorName() + "回复了您的咨询", log.getConsult(), 214, 1, 0, 0);
|
|
|
// 患者未读数量+1
|
|
|
consultTeamDao.increasePatientRead(log.getConsult());
|
|
|
// 医生有回复
|
|
|
consultTeamDoctorDao.updateReply(log.getConsult(), teamOrDoctor);
|
|
|
|
|
|
//shenzaixin v1.2.0 推送消息给患者
|
|
|
HttpUtil.sendWeixinWebsocketMsg(patient, "{busiType:'qianyuezixun',msgid:'" + log.getId() + "'}");
|
|
|
} else if (type == 0 || type == 2) {
|
|
|
// 查询相关联的医生
|
|
|
Iterable<ConsultTeamDoctor> iterable = consultTeamDoctorDao.findByConsult(log.getConsult());
|
|
|
if (iterable != null && iterable.iterator() != null && iterable.iterator().hasNext()) {
|
|
|
Iterator<ConsultTeamDoctor> iterator = iterable.iterator();
|
|
|
while (iterator.hasNext()) {
|
|
|
// 患者提问或追问,给医生发消息
|
|
|
ConsultTeamDoctor ctd = iterator.next();
|
|
|
if (ctd == null) {
|
|
|
continue;
|
|
|
}
|
|
|
// 推送消息给医生
|
|
|
PushMsgTask.getInstance().put(ctd.getTo(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_CONSULT_TEAM_REPLY.D_CT_02.name(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_CONSULT_TEAM_REPLY.指定咨询.name(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_CONSULT_TEAM_REPLY.您有新的消息.name(), temp.getConsult());
|
|
|
}
|
|
|
}
|
|
|
// 医生未读数量+1
|
|
|
consultTeamDao.increaseDoctorRead(log.getConsult());
|
|
|
}
|
|
|
}
|
|
|
return temp;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 添加三师咨询
|
|
|
*
|
|
|
* @param ct 三师咨询对象
|
|
|
* @param patient 患者标识
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public int addTeamConsult(ConsultTeam ct, String patient) throws Exception {
|
|
|
// 咨询三师
|
|
|
if (ct.getType() == 1) {
|
|
|
// 查询三师签约信息
|
|
|
SignFamily sc = signFamilyDao.findBySanshiPatientYes(patient);
|
|
|
if (sc == null) {
|
|
|
// 不存在三师签约
|
|
|
return -2;
|
|
|
}
|
|
|
ct.setTeam(sc.getTeamCode());
|
|
|
// 设置健康管理师,三师咨询默认给健康管理师处理
|
|
|
//查找病人所在的团队
|
|
|
DoctorTeam doctorTeam = doctorTeamDao.findBySanshiParientCode(patient);
|
|
|
//得到团队的健康管理师
|
|
|
DoctorTeamMember doctorTeamMember = doctorTeamDoctor.findDoctorSanshi2ByTeam(doctorTeam.getCode(), 3);
|
|
|
// 设置家庭医生
|
|
|
ct.setDoctor(doctorTeamMember.getMemberCode());
|
|
|
} else if (ct.getType() == 2) {
|
|
|
// 咨询家庭医生
|
|
|
SignFamily sf = signFamilyDao.findByjiatingPatient(patient);
|
|
|
if (sf == null) {
|
|
|
// 不存在家庭签约
|
|
|
return -1;
|
|
|
}
|
|
|
// 设置健康管理师,家庭医生咨询默认给健康管理师处理
|
|
|
//查找病人所在的团队
|
|
|
DoctorTeam doctorTeam = doctorTeamDao.findByParientCode(patient);
|
|
|
//得到团队的健康管理师
|
|
|
DoctorTeamMember doctorTeamMember = doctorTeamDoctor.findDoctorJiating2ByTeam(doctorTeam.getCode(), 3);
|
|
|
// 设置家庭医生
|
|
|
ct.setDoctor(doctorTeamMember.getMemberCode());
|
|
|
}
|
|
|
// 设置患者信息
|
|
|
ct.setPatient(patient);
|
|
|
// 查询患者信息
|
|
|
Patient tempPatient = patientDao.findByCode(patient);
|
|
|
// 设置患者姓名
|
|
|
ct.setName(tempPatient.getName());
|
|
|
// 设置患者生日
|
|
|
ct.setBirthday(tempPatient.getBirthday());
|
|
|
//新增性别
|
|
|
ct.setSex(tempPatient.getSex());
|
|
|
// 设置患者头像
|
|
|
ct.setPhoto(tempPatient.getPhoto());
|
|
|
// 设置操作日期
|
|
|
ct.setCzrq(new Date());
|
|
|
ct.setDel("1");
|
|
|
ct.setStatus(0);
|
|
|
// 医生未读数量为1
|
|
|
ct.setDoctorRead(1);
|
|
|
// 添加咨询记录
|
|
|
Consult consult = addConsult(ct.getPatient(), null, ct.getSymptoms(), ct.getImages(), ct.getType());
|
|
|
// 设置咨询标识
|
|
|
ct.setConsult(consult.getCode());
|
|
|
// 保存医生咨询信息
|
|
|
if (consultTeamDao.save(ct) == null) {
|
|
|
throw new Exception("保存失败!");
|
|
|
}
|
|
|
// 添加咨询转发记录
|
|
|
ConsultTeamDoctor cd = new ConsultTeamDoctor();
|
|
|
cd.setConsult(consult.getCode());
|
|
|
cd.setDel("1");
|
|
|
cd.setCzrq(new Date());
|
|
|
cd.setTo(ct.getDoctor());
|
|
|
consultTeamDoctorDao.save(cd);
|
|
|
// 添加医生咨询日志
|
|
|
addLogs(ct);
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 添加三师咨询日志
|
|
|
*
|
|
|
* @param ct
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
private void addLogs(ConsultTeam ct) throws Exception {
|
|
|
List<ConsultTeamLog> logs = new ArrayList<ConsultTeamLog>();
|
|
|
// 添加问题咨询日志
|
|
|
String content = "";
|
|
|
content = "咨询问题:" + (StringUtils.isEmpty(ct.getSymptoms()) ? "无" : ct.getSymptoms());
|
|
|
|
|
|
// 生成提问日志,并推送相关消息
|
|
|
ConsultTeamLog infoLog = new ConsultTeamLog();
|
|
|
infoLog.setConsult(ct.getConsult());
|
|
|
infoLog.setContent(content);
|
|
|
infoLog.setDel("1");
|
|
|
infoLog.setType(0);
|
|
|
infoLog.setChatType(1);
|
|
|
infoLog.setCzrq(new Date());
|
|
|
logs.add(infoLog);
|
|
|
// 图片日志
|
|
|
if (StringUtils.isNotEmpty(ct.getImages())) {
|
|
|
String[] images = ct.getImages().split(",");
|
|
|
for (String image : images) {
|
|
|
if (StringUtils.isNoneEmpty(image)) {
|
|
|
ConsultTeamLog imgLog = new ConsultTeamLog();
|
|
|
// 设置咨询标识
|
|
|
imgLog.setConsult(ct.getConsult());
|
|
|
// 设置图片URL
|
|
|
imgLog.setContent(image);
|
|
|
imgLog.setDel("1");
|
|
|
infoLog.setType(0);
|
|
|
imgLog.setCzrq(new Date());
|
|
|
// 图片类型
|
|
|
imgLog.setChatType(2);
|
|
|
// 添加到待保存队列
|
|
|
logs.add(imgLog);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
// 语音日志
|
|
|
if (StringUtils.isNotEmpty(ct.getVoice())) {
|
|
|
ConsultTeamLog voiceLog = new ConsultTeamLog();
|
|
|
// 设置咨询标识
|
|
|
voiceLog.setConsult(ct.getConsult());
|
|
|
// 设置语音URL
|
|
|
voiceLog.setContent(ct.getVoice());
|
|
|
voiceLog.setDel("1");
|
|
|
infoLog.setType(0);
|
|
|
// 语音类型
|
|
|
voiceLog.setChatType(3);
|
|
|
voiceLog.setCzrq(new Date());
|
|
|
// 添加到待保存队列
|
|
|
logs.add(voiceLog);
|
|
|
}
|
|
|
if (!logs.isEmpty()) {
|
|
|
Iterable<ConsultTeamLog> iterable = consultTeamLogDao.save(logs);
|
|
|
if (iterable == null || iterable.iterator() == null || !iterable.iterator().hasNext()) {
|
|
|
// 日志保存失败
|
|
|
throw new Exception("consult team log save failed!");
|
|
|
}
|
|
|
}
|
|
|
// 患者提问或追问,给医生发消息
|
|
|
// sendMessage(ct.getDoctor(), ct.getPatient(), "三师咨询", "您有新的三师咨询消息", ct.getConsult(), 116, 1, 0, 0);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查询咨询列表
|
|
|
*
|
|
|
* @param patientCode 患者标志
|
|
|
* @param status 咨询状态(0未结束,1已结束,-1 已取消)
|
|
|
* @param pageSize 页数
|
|
|
* @return
|
|
|
*/
|
|
|
public Page<ConsultTeam> findByPatient(String patientCode, int status, long id, int pageSize) {
|
|
|
if (id < 0) {
|
|
|
id = 0;
|
|
|
}
|
|
|
if (pageSize <= 0) {
|
|
|
pageSize = 10;
|
|
|
}
|
|
|
// 排序
|
|
|
Sort sort = new Sort(Direction.DESC, "id");
|
|
|
// 分页信息
|
|
|
PageRequest pageRequest = new PageRequest(0, pageSize, sort);
|
|
|
|
|
|
Page<ConsultTeam> list = null;
|
|
|
switch (status) {
|
|
|
case 0:
|
|
|
// 未结束
|
|
|
if (id > 0) {
|
|
|
list = consultTeamDao.findNotFinishedBypatient(patientCode, id, pageRequest);
|
|
|
} else {
|
|
|
list = consultTeamDao.findNotFinishedBypatient(patientCode, pageRequest);
|
|
|
}
|
|
|
break;
|
|
|
case 1:
|
|
|
// 已结束
|
|
|
if (id > 0) {
|
|
|
list = consultTeamDao.findFinishedBypatient(patientCode, id, pageRequest);
|
|
|
} else {
|
|
|
list = consultTeamDao.findFinishedBypatient(patientCode, pageRequest);
|
|
|
}
|
|
|
break;
|
|
|
case -1:
|
|
|
// 已取消
|
|
|
if (id > 0) {
|
|
|
list = consultTeamDao.findCancelBypatient(patientCode, id, pageRequest);
|
|
|
} else {
|
|
|
list = consultTeamDao.findCancelBypatient(patientCode, pageRequest);
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 医生关闭三师咨询
|
|
|
*
|
|
|
* @param consult 三师咨询标识
|
|
|
* @return
|
|
|
*/
|
|
|
public int finish(String consult) {
|
|
|
return consultTeamDao.updateStatusByConsult(consult);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 设置咨询已读
|
|
|
*
|
|
|
* @param consult
|
|
|
* @return
|
|
|
*/
|
|
|
public int readMessage(String consult) {
|
|
|
return consultTeamDao.updateReadedByConsult(consult);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 取消三师咨询
|
|
|
* @param consult
|
|
|
* @return
|
|
|
*/
|
|
|
public int cancel(String consult) {
|
|
|
return consultTeamDao.cancel(consult);
|
|
|
}
|
|
|
|
|
|
public ConsultTeam findByCode(String code) {
|
|
|
return consultTeamDao.findByConsult(code);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 三师咨询转接医生
|
|
|
* @param from 转出医生标识
|
|
|
* @param to 转入医生标识
|
|
|
* @param consult 三师咨询标识
|
|
|
* @return
|
|
|
*/
|
|
|
public void transfer(String from, String to, String consult) {
|
|
|
// 检查是否存在
|
|
|
if (consultTeamDoctorDao.isExist(consult, to) == 0) {
|
|
|
// 查询医生信息
|
|
|
Doctor d = doctorDao.findByCode(from);
|
|
|
// 再保存
|
|
|
ConsultTeamDoctor cd = new ConsultTeamDoctor();
|
|
|
cd.setConsult(consult);
|
|
|
cd.setDel("1");
|
|
|
cd.setCzrq(new Date());
|
|
|
cd.setFrom(d.getCode());
|
|
|
cd.setFromName(d.getName());
|
|
|
cd.setTo(to);
|
|
|
consultTeamDoctorDao.save(cd);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查询患者视频和三师咨询记录
|
|
|
* @param patient 患者标识
|
|
|
* @param id
|
|
|
* @param pagesize
|
|
|
* @return
|
|
|
*/
|
|
|
public Page<Consult> findConsultRecordByPatientType(String patient, long id, int pagesize) {
|
|
|
if (pagesize <= 0) {
|
|
|
pagesize = 10;
|
|
|
}
|
|
|
// 排序
|
|
|
Sort sort = new Sort(Direction.DESC, "id");
|
|
|
// 分页信息
|
|
|
PageRequest pageRequest = new PageRequest(0, pagesize, sort);
|
|
|
// 设置查询条件
|
|
|
Map<String, SearchFilter> filters = new HashMap<String, SearchFilter>();
|
|
|
filters.put("patient", new SearchFilter("patient", Operator.EQ, patient));
|
|
|
filters.put("type", new SearchFilter("type", Operator.LT, 3));
|
|
|
if (id > 0) {
|
|
|
filters.put("id", new SearchFilter("id", Operator.LT, id));
|
|
|
}
|
|
|
// 未作废
|
|
|
filters.put("del", new SearchFilter("del", Operator.EQ, "1"));
|
|
|
Specification<Consult> spec = DynamicSpecifications.bySearchFilter(filters.values(), Consult.class);
|
|
|
return consultDao.findAll(spec, pageRequest);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 清空医生未读数量
|
|
|
* @param consult
|
|
|
*/
|
|
|
public void clearDoctorRead(String consult) {
|
|
|
consultTeamDao.clearDoctorRead(consult);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 清空患者未读数量
|
|
|
* @param consult
|
|
|
*/
|
|
|
public void clearPatientRead(String consult) {
|
|
|
consultTeamDao.clearPatientRead(consult);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查询医生的咨询统计
|
|
|
*
|
|
|
* @param doctorCode
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String,Long> getAllCount(String doctorCode) {
|
|
|
Map<String,Long> result = new HashMap<>();
|
|
|
|
|
|
//根据医生code查询总咨询数
|
|
|
long allCount=consultTeamDoctorDao.getAllCountByDoctorCode(doctorCode);
|
|
|
|
|
|
//根据医生code查询今日咨询数
|
|
|
long todayCount=consultTeamDoctorDao.getTodayCountByDoctorCode(doctorCode);
|
|
|
|
|
|
result.put("all",allCount);
|
|
|
result.put("today",todayCount);
|
|
|
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查找未完成咨询
|
|
|
*
|
|
|
* @param patient
|
|
|
* @return
|
|
|
*/
|
|
|
public List<ConsultTeam> getUnfinishedConsult(String patient){
|
|
|
return consultTeamDao.findUnfinishedConsult(patient);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查询患者全部的咨询数目
|
|
|
* @param patientCode
|
|
|
* @return
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 取消三师咨询
|
|
|
*
|
|
|
* @param consult
|
|
|
* @return
|
|
|
*/
|
|
|
public int cancel(String consult) {
|
|
|
return consultTeamDao.cancel(consult);
|
|
|
}
|
|
|
|
|
|
public ConsultTeam findByCode(String code) {
|
|
|
return consultTeamDao.findByConsult(code);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 三师咨询转接医生
|
|
|
*
|
|
|
* @param from 转出医生标识
|
|
|
* @param to 转入医生标识
|
|
|
* @param consult 三师咨询标识
|
|
|
* @return
|
|
|
*/
|
|
|
public void transfer(String from, String to, String consult) {
|
|
|
// 检查是否存在
|
|
|
if (consultTeamDoctorDao.isExist(consult, to) == 0) {
|
|
|
// 查询医生信息
|
|
|
Doctor d = doctorDao.findByCode(from);
|
|
|
// 再保存
|
|
|
ConsultTeamDoctor cd = new ConsultTeamDoctor();
|
|
|
cd.setConsult(consult);
|
|
|
cd.setDel("1");
|
|
|
cd.setCzrq(new Date());
|
|
|
cd.setFrom(d.getCode());
|
|
|
cd.setFromName(d.getName());
|
|
|
cd.setTo(to);
|
|
|
consultTeamDoctorDao.save(cd);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查询患者视频和三师咨询记录
|
|
|
*
|
|
|
* @param patient 患者标识
|
|
|
* @param id
|
|
|
* @param pagesize
|
|
|
* @return
|
|
|
*/
|
|
|
public Page<Consult> findConsultRecordByPatientType(String patient, long id, int pagesize) {
|
|
|
if (pagesize <= 0) {
|
|
|
pagesize = 10;
|
|
|
}
|
|
|
// 排序
|
|
|
Sort sort = new Sort(Direction.DESC, "id");
|
|
|
// 分页信息
|
|
|
PageRequest pageRequest = new PageRequest(0, pagesize, sort);
|
|
|
// 设置查询条件
|
|
|
Map<String, SearchFilter> filters = new HashMap<String, SearchFilter>();
|
|
|
filters.put("patient", new SearchFilter("patient", Operator.EQ, patient));
|
|
|
filters.put("type", new SearchFilter("type", Operator.LT, 3));
|
|
|
if (id > 0) {
|
|
|
filters.put("id", new SearchFilter("id", Operator.LT, id));
|
|
|
}
|
|
|
// 未作废
|
|
|
filters.put("del", new SearchFilter("del", Operator.EQ, "1"));
|
|
|
Specification<Consult> spec = DynamicSpecifications.bySearchFilter(filters.values(), Consult.class);
|
|
|
return consultDao.findAll(spec, pageRequest);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 清空医生未读数量
|
|
|
*
|
|
|
* @param consult
|
|
|
*/
|
|
|
public void clearDoctorRead(String consult) {
|
|
|
consultTeamDao.clearDoctorRead(consult);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 清空患者未读数量
|
|
|
*
|
|
|
* @param consult
|
|
|
*/
|
|
|
public void clearPatientRead(String consult) {
|
|
|
consultTeamDao.clearPatientRead(consult);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查询医生的咨询统计
|
|
|
*
|
|
|
* @param doctorCode
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String, Long> getAllCount(String doctorCode) {
|
|
|
Map<String, Long> result = new HashMap<>();
|
|
|
|
|
|
//根据医生code查询总咨询数
|
|
|
long allCount = consultTeamDoctorDao.getAllCountByDoctorCode(doctorCode);
|
|
|
|
|
|
//根据医生code查询今日咨询数
|
|
|
long todayCount = consultTeamDoctorDao.getTodayCountByDoctorCode(doctorCode);
|
|
|
|
|
|
result.put("all", allCount);
|
|
|
result.put("today", todayCount);
|
|
|
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查找未完成咨询
|
|
|
*
|
|
|
* @param patient
|
|
|
* @return
|
|
|
*/
|
|
|
public List<ConsultTeam> getUnfinishedConsult(String patient) {
|
|
|
return consultTeamDao.findUnfinishedConsult(patient);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查询患者全部的咨询数目
|
|
|
*
|
|
|
* @param patientCode
|
|
|
* @return
|
|
|
*/
|
|
|
public Integer findByDoctorSize(String patientCode,String doctorCode) {
|
|
|
|
|
|
return consultDao.findByPatient(patientCode,doctorCode);
|
|
|
}
|
|
|
|
|
|
public List<Map<String,Object>> getConsultSign(String[] consults){
|
|
|
String params = "";
|
|
|
List<String> paramList = new ArrayList<>();
|
|
|
|
|
|
for(int i = 0; i < consults.length ; i++){
|
|
|
params += (i == 0?"?":",?");
|
|
|
}
|
|
|
paramList.addAll(Arrays.asList(consults));
|
|
|
paramList.addAll(Arrays.asList(consults));
|
|
|
|
|
|
String sqlgp = "select DISTINCT consult,to_doctor from wlyy_consult_team_doctor ctd,wlyy_doctor d where ctd.to_doctor = d.code and d.level = 2 and ctd.consult in (" + params + ") and ctd.del = '1'";
|
|
|
String sqlgpm = "select DISTINCT to_doctor from wlyy_consult_team_doctor ctd,wlyy_doctor d where ctd.to_doctor = d.code and d.level = 2 and ctd.consult in (" + params + ") and ctd.del = '1'";
|
|
|
String sqlQu = "select * from wlyy_quota_result where qkdoctor_code in (" + sqlgpm+ ") and quato_code = '1' and level1_type = '1'";
|
|
|
String sqlQuSum = "select a.consult,sum(ifnull(b.result,0)) sign from ("+ sqlgp +") a left join (" + sqlQu+ ") b on a.to_doctor = b.qkdoctor_code group by a.consult ";
|
|
|
|
|
|
return jdbcTemplate.queryForList(sqlQuSum,paramList.toArray());
|
|
|
}
|
|
|
|
|
|
public ConsultTeamLog oneLog(Long logId) {
|
|
|
return consultTeamLogDao.findOne(logId);
|
|
|
}
|
|
|
|
|
|
public boolean isExistFamousConsult(String uid) {
|
|
|
ConsultTeam consultTeam= consultTeamDao.findFamousConsultByPatient(uid);
|
|
|
if(consultTeam!=null){
|
|
|
return true;
|
|
|
}else{
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public void addFamousTeamConsult(ConsultTeam ct, String uid) throws Exception{
|
|
|
// 设置患者信息
|
|
|
ct.setPatient(uid);
|
|
|
// 查询患者信息
|
|
|
Patient tempPatient = patientDao.findByCode(uid);
|
|
|
// 设置患者姓名
|
|
|
ct.setName(tempPatient.getName());
|
|
|
// 设置患者生日
|
|
|
ct.setBirthday(tempPatient.getBirthday());
|
|
|
//新增性别
|
|
|
ct.setSex(tempPatient.getSex());
|
|
|
// 设置患者头像
|
|
|
ct.setPhoto(tempPatient.getPhoto());
|
|
|
// 设置操作日期
|
|
|
ct.setCzrq(new Date());
|
|
|
ct.setDel("1");
|
|
|
ct.setStatus(0);
|
|
|
// 医生未读数量为1
|
|
|
ct.setDoctorRead(1);
|
|
|
// 患者未读数量为0
|
|
|
ct.setPatientRead(0);
|
|
|
// 添加咨询记录
|
|
|
Consult consult = addConsult(ct.getPatient(), null, ct.getSymptoms(), ct.getImages(), ct.getType());
|
|
|
// 设置咨询标识
|
|
|
ct.setConsult(consult.getCode());
|
|
|
// 保存医生咨询信息
|
|
|
if (consultTeamDao.save(ct) == null) {
|
|
|
throw new Exception("保存失败!");
|
|
|
}
|
|
|
// 添加咨询转发记录
|
|
|
ConsultTeamDoctor cd = new ConsultTeamDoctor();
|
|
|
cd.setConsult(consult.getCode());
|
|
|
cd.setDel("1");
|
|
|
cd.setCzrq(new Date());
|
|
|
cd.setTo(ct.getDoctor());
|
|
|
consultTeamDoctorDao.save(cd);
|
|
|
// 添加医生咨询日志
|
|
|
addLogs(ct);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 根据健康管理师和患者 找到正在进行中的咨询
|
|
|
* @param patientCode
|
|
|
* @param doctor
|
|
|
public Integer findByDoctorSize(String patientCode, String doctorCode) {
|
|
|
|
|
|
return consultDao.findByPatient(patientCode, doctorCode);
|
|
|
}
|
|
|
|
|
|
public List<Map<String, Object>> getConsultSign(String[] consults) {
|
|
|
String params = "";
|
|
|
List<String> paramList = new ArrayList<>();
|
|
|
|
|
|
for (int i = 0; i < consults.length; i++) {
|
|
|
params += (i == 0 ? "?" : ",?");
|
|
|
}
|
|
|
paramList.addAll(Arrays.asList(consults));
|
|
|
paramList.addAll(Arrays.asList(consults));
|
|
|
|
|
|
String sqlgp = "select DISTINCT consult,to_doctor from wlyy_consult_team_doctor ctd,wlyy_doctor d where ctd.to_doctor = d.code and d.level = 2 and ctd.consult in (" + params + ") and ctd.del = '1'";
|
|
|
String sqlgpm = "select DISTINCT to_doctor from wlyy_consult_team_doctor ctd,wlyy_doctor d where ctd.to_doctor = d.code and d.level = 2 and ctd.consult in (" + params + ") and ctd.del = '1'";
|
|
|
String sqlQu = "select * from wlyy_quota_result where qkdoctor_code in (" + sqlgpm + ") and quato_code = '1' and level1_type = '1'";
|
|
|
String sqlQuSum = "select a.consult,sum(ifnull(b.result,0)) sign from (" + sqlgp + ") a left join (" + sqlQu + ") b on a.to_doctor = b.qkdoctor_code group by a.consult ";
|
|
|
|
|
|
return jdbcTemplate.queryForList(sqlQuSum, paramList.toArray());
|
|
|
}
|
|
|
|
|
|
public ConsultTeamLog oneLog(Long logId) {
|
|
|
return consultTeamLogDao.findOne(logId);
|
|
|
}
|
|
|
|
|
|
public boolean isExistFamousConsult(String uid) {
|
|
|
ConsultTeam consultTeam = consultTeamDao.findFamousConsultByPatient(uid);
|
|
|
if (consultTeam != null) {
|
|
|
return true;
|
|
|
} else {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public void addFamousTeamConsult(ConsultTeam ct, String uid) throws Exception {
|
|
|
// 设置患者信息
|
|
|
ct.setPatient(uid);
|
|
|
// 查询患者信息
|
|
|
Patient tempPatient = patientDao.findByCode(uid);
|
|
|
// 设置患者姓名
|
|
|
ct.setName(tempPatient.getName());
|
|
|
// 设置患者生日
|
|
|
ct.setBirthday(tempPatient.getBirthday());
|
|
|
//新增性别
|
|
|
ct.setSex(tempPatient.getSex());
|
|
|
// 设置患者头像
|
|
|
ct.setPhoto(tempPatient.getPhoto());
|
|
|
// 设置操作日期
|
|
|
ct.setCzrq(new Date());
|
|
|
ct.setDel("1");
|
|
|
ct.setStatus(0);
|
|
|
// 医生未读数量为1
|
|
|
ct.setDoctorRead(1);
|
|
|
// 患者未读数量为0
|
|
|
ct.setPatientRead(0);
|
|
|
// 添加咨询记录
|
|
|
Consult consult = addConsult(ct.getPatient(), null, ct.getSymptoms(), ct.getImages(), ct.getType());
|
|
|
// 设置咨询标识
|
|
|
ct.setConsult(consult.getCode());
|
|
|
// 保存医生咨询信息
|
|
|
if (consultTeamDao.save(ct) == null) {
|
|
|
throw new Exception("保存失败!");
|
|
|
}
|
|
|
// 添加咨询转发记录
|
|
|
ConsultTeamDoctor cd = new ConsultTeamDoctor();
|
|
|
cd.setConsult(consult.getCode());
|
|
|
cd.setDel("1");
|
|
|
cd.setCzrq(new Date());
|
|
|
cd.setTo(ct.getDoctor());
|
|
|
consultTeamDoctorDao.save(cd);
|
|
|
// 添加医生咨询日志
|
|
|
addLogs(ct);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 根据健康管理师和患者 找到正在进行中的咨询
|
|
|
*
|
|
|
* @param patientCode
|
|
|
* @param doctor
|
|
|
*/
|
|
|
public ConsultTeam getConsultByPatientAndDoctor(String patientCode, String doctor) {
|
|
|
ConsultTeam consultTeam= consultTeamDao.findByParientCodeAndSignTypeAndDoctor(patientCode,doctor,2);
|
|
|
return consultTeam;
|
|
|
}
|
|
|
|
|
|
public void transfers(String uid, String doctor, String consult) {
|
|
|
String[] doctors=doctor.split(",");
|
|
|
for(int i=0;i<doctors.length;i++){
|
|
|
transfer(uid,doctors[i],consult);
|
|
|
}
|
|
|
}
|
|
|
public ConsultTeam getConsultByPatientAndDoctor(String patientCode, String doctor) {
|
|
|
ConsultTeam consultTeam = consultTeamDao.findByParientCodeAndSignTypeAndDoctor(patientCode, doctor, 2);
|
|
|
return consultTeam;
|
|
|
}
|
|
|
|
|
|
public void transfers(String uid, String doctor, String consult) {
|
|
|
String[] doctors = doctor.split(",");
|
|
|
for (int i = 0; i < doctors.length; i++) {
|
|
|
transfer(uid, doctors[i], consult);
|
|
|
}
|
|
|
}
|
|
|
}
|