diff --git a/virtual-patient-common/src/main/java/com/supervision/config/JwtInterceptor.java b/virtual-patient-common/src/main/java/com/supervision/config/JwtInterceptor.java index db788c39..1da7c785 100644 --- a/virtual-patient-common/src/main/java/com/supervision/config/JwtInterceptor.java +++ b/virtual-patient-common/src/main/java/com/supervision/config/JwtInterceptor.java @@ -16,28 +16,34 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; @Slf4j public class JwtInterceptor implements HandlerInterceptor { + private static final ConcurrentHashMap singleLoginTokenCacheMap = new ConcurrentHashMap<>(); @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { //请求消息头获取用户ID String token = request.getHeader("token"); - if (StrUtil.isBlank(token) ) { + if (StrUtil.isBlank(token)) { // 如果是swagger来的接口,说明这里是测试的,会伪造一个用户 - if (StrUtil.isNotBlank(request.getHeader("Knife4j-Gateway-Code"))){ - token = devActiveUser(); - }else { - throw new BusinessException("当前用户未登录",HttpStatus.UNAUTHORIZED.value()); + if (StrUtil.isNotBlank(request.getHeader("Knife4j-Gateway-Code"))) { + cacheAuth(JWTUtil.parseToken(devActiveUser())); + return true; + } else { + throw new BusinessException("当前用户未登录", HttpStatus.UNAUTHORIZED.value()); } } JWT jwt = JWTUtil.parseToken(token); // 校验token是否过期,如果过期了,需要提示过期重新登录 checkTokenExpire(jwt); + // 校验是否重复登录 + checkSingleLogin(jwt); cacheAuth(jwt); return true; } @@ -56,7 +62,27 @@ public class JwtInterceptor implements HandlerInterceptor { // 校验是否比当前时间大 long currentTimeMillis = System.currentTimeMillis(); if (currentTimeMillis > l) { - throw new BusinessException("用户登录已过期,请重新登录",HttpStatus.UNAUTHORIZED.value()); + throw new BusinessException("用户登录已过期,请重新登录", HttpStatus.UNAUTHORIZED.value()); + } + } + + private void checkSingleLogin(JWT currentJwt) { + Object id = currentJwt.getPayload("id"); + JWT singleLoginTokenCache = singleLoginTokenCacheMap.get(id); + // 然后将当前的expireTime和singleLoginTokenCache进行比较 + Object expireTime = singleLoginTokenCache.getPayload("expireTime"); + long singleLoginTokenCacheExpireTime = Long.parseLong(String.valueOf(expireTime)); + Object currentJwtExpireTimeObject = currentJwt.getPayload("expireTime"); + long currentJwtExpireTime = Long.parseLong(String.valueOf(currentJwtExpireTimeObject)); + if (singleLoginTokenCacheExpireTime == currentJwtExpireTime) { + // 如果相等,说明这个token就是最新的,直接放行 + return; + } else if (currentJwtExpireTime > singleLoginTokenCacheExpireTime) { + // 如果当前的超时时间要大于缓存的,说明重新登录了,这个时候要把最新的放到缓存中 + singleLoginTokenCacheMap.put(id, currentJwt); + } else { + // 走到这里,说明singleLoginTokenCache是最新的,说明当前请求的token就过期了 + throw new BusinessException("当前用户已在其他地方登录!"); } } @@ -69,11 +95,11 @@ public class JwtInterceptor implements HandlerInterceptor { } } - private String devActiveUser(){ + private String devActiveUser() { Map map = new HashMap<>(); - map.put("id","1"); - map.put("account","test"); - map.put("name","测试账户"); + map.put("id", "1"); + map.put("account", "test"); + map.put("name", "测试账户"); return TokenUtil.creatToken(JSONUtil.toJsonStr(map)); } diff --git a/virtual-patient-common/src/main/java/com/supervision/util/TokenUtil.java b/virtual-patient-common/src/main/java/com/supervision/util/TokenUtil.java index 762ceee6..b33841ca 100644 --- a/virtual-patient-common/src/main/java/com/supervision/util/TokenUtil.java +++ b/virtual-patient-common/src/main/java/com/supervision/util/TokenUtil.java @@ -11,7 +11,7 @@ public class TokenUtil { public static String creatToken(String userInfo){ final JWTSigner signer = JWTSignerUtil.hs256("123456".getBytes()); JSONObject info = JSONUtil.parseObj(userInfo); - // 过期时间一天 + // 过期时间一天,同时这个字段也作为单点登录使用 info.putOnce("expireTime",System.currentTimeMillis() + 1000 * 60 * 60 * 24); return JWTUtil.createToken(info, signer); } diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/MedicalRecInfoVO.java b/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/MedicalRecInfoVO.java index 34fab493..c59d875a 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/MedicalRecInfoVO.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/MedicalRecInfoVO.java @@ -1,14 +1,13 @@ package com.supervision.manage.pojo.vo; -import com.supervision.model.AskPatientAnswer; -import com.supervision.model.MedicalRec; -import com.supervision.model.Patient; +import com.supervision.vo.manage.DiseaseAncillaryResVo; +import com.supervision.vo.manage.DiseasePhysicalResVo; +import com.supervision.vo.manage.TreatmentPlanResVo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; -import javax.validation.constraints.NotBlank; import java.util.List; @EqualsAndHashCode(callSuper = true) @@ -17,12 +16,12 @@ import java.util.List; public class MedicalRecInfoVO extends MedicalRecManageVO { @ApiModelProperty("辅助检查") - private List ancillaryList; + private List ancillaryList; @ApiModelProperty("体格检查") - private List physicalList; + private List physicalList; @ApiModelProperty("处置计划列表") - private List treatmentPlanList; + private List treatmentPlanList; } diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/MedicalRecManageServiceImpl.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/MedicalRecManageServiceImpl.java index 2fec183e..ee49e9ed 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/MedicalRecManageServiceImpl.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/MedicalRecManageServiceImpl.java @@ -10,6 +10,9 @@ import com.supervision.exception.BusinessException; import com.supervision.manage.pojo.vo.MedicalRecInfoVO; import com.supervision.manage.pojo.vo.MedicalRecManageVO; import com.supervision.manage.pojo.vo.MedicalRecQaVO; +import com.supervision.manage.service.DiseaseAncillaryManageService; +import com.supervision.manage.service.DiseasePhysicalManageService; +import com.supervision.manage.service.DiseaseTreatmentPlanManageService; import com.supervision.model.*; import com.supervision.service.*; import com.supervision.vo.manage.MedicalRecPageResVO; @@ -42,6 +45,12 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService { private final DiseaseQuestionService diseaseQuestionService; + private final DiseaseAncillaryManageService diseaseAncillaryManageService; + + private final DiseasePhysicalManageService diseasePhysicalManageService; + + private final DiseaseTreatmentPlanManageService diseaseTreatmentPlanManageService; + public List queryDiseaseListByKeyWord(String keyword) { // 注意,这里不支持查询复杂疾病,如果需要支持复杂疾病,这里需要单独进行改造 return diseaseService.lambdaQuery().eq(Disease::getDiseaseType, 0).like(Disease::getDiseaseName, keyword).list(); @@ -86,7 +95,7 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService { public List queryQuestionListByCreat(String diseaseId) { // 去vp_disease_question获取 List list = diseaseQuestionService.lambdaQuery().eq(DiseaseQuestion::getDiseaseId, diseaseId).list(); - if (CollUtil.isEmpty(list)){ + if (CollUtil.isEmpty(list)) { return new ArrayList<>(); } // 获取问题 @@ -162,11 +171,11 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService { // 病人基本信息 medicalRecInfoVO.setPatient(patientService.getById(medicalRec.getPatientId())); // 辅助检查 -// medicalRecInfoVO.setAncillaryList(); + medicalRecInfoVO.setAncillaryList(diseaseAncillaryManageService.queryListByDiseaseId(medicalRec.getDiseaseId())); // 体格检查 -// medicalRecInfoVO.setPhysicalList(); + medicalRecInfoVO.setPhysicalList(diseasePhysicalManageService.queryListByDiseaseId(medicalRec.getDiseaseId())); // 处置计划 -// medicalRecInfoVO.setTreatmentPlanList(); + medicalRecInfoVO.setTreatmentPlanList(diseaseTreatmentPlanManageService.queryListByDiseaseId(medicalRec.getDiseaseId())); // 问答策略 medicalRecInfoVO.setQaList(queryMedicalRecQaInfo(id)); return medicalRecInfoVO; diff --git a/virtual-patient-model/src/main/java/com/supervision/vo/manage/MedicalRecPageResVO.java b/virtual-patient-model/src/main/java/com/supervision/vo/manage/MedicalRecPageResVO.java index 715d3940..ce1a20e1 100644 --- a/virtual-patient-model/src/main/java/com/supervision/vo/manage/MedicalRecPageResVO.java +++ b/virtual-patient-model/src/main/java/com/supervision/vo/manage/MedicalRecPageResVO.java @@ -14,6 +14,10 @@ public class MedicalRecPageResVO { private Integer age; private String gender; private LocalDateTime time; + /** + * 初步诊断-> 就是对应的疾病名称 + */ + private String diagnosisPrimaryStr; } diff --git a/virtual-patient-model/src/main/resources/mapper/MedicalRecMapper.xml b/virtual-patient-model/src/main/resources/mapper/MedicalRecMapper.xml index 95a1ba11..4e4c5abf 100644 --- a/virtual-patient-model/src/main/resources/mapper/MedicalRecMapper.xml +++ b/virtual-patient-model/src/main/resources/mapper/MedicalRecMapper.xml @@ -36,14 +36,15 @@ select t1.id as medicalId, t2.id as patientId, + t3.disease_name as diagnosisPrimaryStr, t1.no as no, t2.name as name, t2.age as age, t2.gender as gender, if(t1.update_time is null, t1.create_time, t1.update_time) as time from vp_medical_rec t1 - left join vp_patient t2 - on t1.patient_id = t2.id + left join vp_patient t2 on t1.patient_id = t2.id + left join vp_disease t3 on t1.disease_id = t3.id AND t1.patient_self_desc like concat("%",#{selfDescKeyword}, "%")