Merge remote-tracking branch 'origin/dev_v1.0.1' into dev

release_1.0.0
liu 2 years ago
commit d8d02b889d

@ -7,26 +7,37 @@ import cn.hutool.jwt.JWT;
import cn.hutool.jwt.JWTUtil;
import com.supervision.domain.UserInfo;
import com.supervision.exception.BusinessException;
import com.supervision.util.SpringBeanUtil;
import com.supervision.util.TokenUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
@Slf4j
public class JwtInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
//请求消息头获取用户ID
String token = request.getHeader("token");
// 如果是开发环境,不获取token
if (StrUtil.isBlank(token) ) {
// 如果是swagger来的接口,说明这里是测试的,会伪造一个用户
if (StrUtil.isNotBlank(request.getHeader("Knife4j-Gateway-Code"))){
token = devActiveUser();
}else {
throw new BusinessException("当前用户未登录");
}
}
JWT jwt = JWTUtil.parseToken(token);
// 校验token是否过期,如果过期了,需要提示过期重新登录
checkTokenExpire(jwt);
@ -46,7 +57,6 @@ public class JwtInterceptor implements HandlerInterceptor {
Object expireTime = jwt.getPayload("expireTime");
long l = Long.parseLong(String.valueOf(expireTime));
// 校验是否比当前时间大
System.out.println(l);
long currentTimeMillis = System.currentTimeMillis();
if (currentTimeMillis > l) {
throw new BusinessException("用户登录已过期,请重新登录");
@ -62,6 +72,14 @@ public class JwtInterceptor implements HandlerInterceptor {
}
}
private String devActiveUser(){
Map<String, Object> map = new HashMap<>();
map.put("id","1");
map.put("account","test");
map.put("name","测试账户");
return TokenUtil.creatToken(JSONUtil.toJsonStr(map));
}
private void clearAuth() {
ThreadCache.USER.remove();
}

@ -10,8 +10,6 @@
*/
package com.supervision.config;
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import io.swagger.annotations.Api;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.RestController;

@ -30,7 +30,7 @@ public class WebConfig implements WebMvcConfigurer {
paths.add("/favicon.ico");
paths.add("/user/login");
// 开发环境,放开不校验token.每次修改这里需要重启(热部署不行)
paths.add("/**");
// paths.add("/**");
return paths;
}
}

@ -1,18 +0,0 @@
package com.supervision.mapper;
import com.supervision.model.AskDefaultQuestionAnswer;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author flevance
* @description vp_ask_default_question_answer()Mapper
* @createDate 2023-10-27 10:05:55
* @Entity com.supervision.model.AskDefaultQuestionAnswer
*/
public interface AskDefaultQuestionAnswerMapper extends BaseMapper<AskDefaultQuestionAnswer> {
}

@ -1,18 +0,0 @@
package com.supervision.mapper;
import com.supervision.model.AskDiseaseQuestionAnswer;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author flevance
* @description vp_ask_disease_question_answer(-)Mapper
* @createDate 2023-10-27 10:05:55
* @Entity com.supervision.model.AskDiseaseQuestionAnswer
*/
public interface AskDiseaseQuestionAnswerMapper extends BaseMapper<AskDiseaseQuestionAnswer> {
}

@ -0,0 +1,18 @@
package com.supervision.mapper;
import com.supervision.model.AskPatientAnswer;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author flevance
* @description vp_ask_patient_answer(-)Mapper
* @createDate 2023-11-03 11:13:26
* @Entity com.supervision.model.AskPatientAnswer
*/
public interface AskPatientAnswerMapper extends BaseMapper<AskPatientAnswer> {
}

@ -0,0 +1,18 @@
package com.supervision.mapper;
import com.supervision.model.AskTemplateQuestionLibrary;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author flevance
* @description vp_ask_template_question_library()Mapper
* @createDate 2023-11-03 11:13:26
* @Entity com.supervision.model.AskTemplateQuestionLibrary
*/
public interface AskTemplateQuestionLibraryMapper extends BaseMapper<AskTemplateQuestionLibrary> {
}

@ -1,18 +0,0 @@
package com.supervision.mapper;
import com.supervision.model.AskTemplateQuestion;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author flevance
* @description vp_ask_template_question()Mapper
* @createDate 2023-10-27 10:05:55
* @Entity com.supervision.model.AskTemplateQuestion
*/
public interface AskTemplateQuestionMapper extends BaseMapper<AskTemplateQuestion> {
}

@ -0,0 +1,18 @@
package com.supervision.mapper;
import com.supervision.model.MedicalRec;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author flevance
* @description vp_medical_rec()Mapper
* @createDate 2023-11-03 11:25:43
* @Entity com.supervision.model.MedicalRec
*/
public interface MedicalRecMapper extends BaseMapper<MedicalRec> {
}

@ -1,96 +0,0 @@
package com.supervision.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.supervision.handler.StringListTypeHandler;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* -
*
* @TableName vp_ask_disease_question_answer
*/
@TableName(value = "vp_ask_disease_question_answer", autoResultMap = true)
@Data
@ApiModel
public class AskDiseaseQuestionAnswer extends Model<AskDiseaseQuestionAnswer> implements Serializable {
/**
*
*/
@TableId
private String id;
/**
* ID
*/
@ApiModelProperty("病人ID")
private String patientId;
/**
* ID(not null,template_questioncode,desc,question)
*/
@ApiModelProperty("模板问题ID(如果not null,则从template_question表出code,desc,question)")
private String templateQuestionId;
/**
*
*/
@ApiModelProperty("编码")
private String code;
/**
*
*/
@ApiModelProperty("中文注释")
private String description;
/**
*
*/
@ApiModelProperty("问题列表")
@TableField(typeHandler = StringListTypeHandler.class)
private List<String> question;
/**
*
*/
@ApiModelProperty("回答列表")
@TableField(typeHandler = StringListTypeHandler.class)
private List<String> answer;
@ApiModelProperty("是否必查-初步诊断依据 0否1是")
private Integer requireCheck;
/**
* ID
*/
private String createUserId;
/**
*
*/
private LocalDateTime createTime;
/**
*
*/
private String updateUserId;
/**
*
*/
private LocalDateTime updateTime;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}

@ -8,20 +8,16 @@ import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.supervision.handler.StringListTypeHandler;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
*
* @TableName vp_ask_template_question
* -
* @TableName vp_ask_patient_answer
*/
@TableName(value ="vp_ask_template_question",autoResultMap = true)
@TableName(value ="vp_ask_patient_answer",autoResultMap = true)
@Data
@ApiModel
public class AskTemplateQuestion extends Model<AskTemplateQuestion> implements Serializable {
public class AskPatientAnswer implements Serializable {
/**
*
*/
@ -29,23 +25,25 @@ public class AskTemplateQuestion extends Model<AskTemplateQuestion> implements S
private String id;
/**
*
* ID
*/
@ApiModelProperty("编码")
private String code;
private String patientId;
/**
*
* ID
*/
@ApiModelProperty("中文注释")
private String description;
private String libraryQuestionId;
/**
*
*
*/
@ApiModelProperty("问题列表")
@TableField(typeHandler = StringListTypeHandler.class)
private List<String> question;
private List<String> answer;
/**
* - 01
*/
private Integer requireCheck;
/**
* ID

@ -4,25 +4,20 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
import com.supervision.handler.StringListTypeHandler;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
*
*
* @TableName vp_ask_default_question_answer
*
* @TableName vp_ask_template_question_library
*/
@TableName(value = "vp_ask_default_question_answer", autoResultMap = true)
@TableName(value ="vp_ask_template_question_library", autoResultMap = true)
@Data
@ApiModel
public class AskDefaultQuestionAnswer implements Serializable {
public class AskTemplateQuestionLibrary implements Serializable {
/**
*
*/
@ -32,28 +27,24 @@ public class AskDefaultQuestionAnswer implements Serializable {
/**
*
*/
@ApiModelProperty("编码")
private String code;
/**
*
*/
@ApiModelProperty("中文注释")
private String description;
/**
*
*/
@ApiModelProperty("问题列表")
@TableField(typeHandler = StringListTypeHandler.class)
private List<String> question;
/**
*
*
*/
@ApiModelProperty("回答列表")
@TableField(typeHandler = StringListTypeHandler.class)
private List<String> answer;
private List<String> defaultAnswer;
/**
* ID

@ -32,14 +32,14 @@ public class DiagnosisQaRecord extends Model<DiagnosisQaRecord> implements Seria
@ApiModelProperty("诊断进程ID")
private String processId;
@ApiModelProperty("问答类型:default,disease")
private String questionAnswerType;
@ApiModelProperty("问答类型:default,patient")
private String answerType;
/**
* ID
*/
@ApiModelProperty("问题答案表ID")
private String questionAnswerId;
@ApiModelProperty("问题答案表ID,default:vp_ask_template_question_library的主键,patient:vp_ask_patient_answer主键")
private String answerId;
/**
*

@ -6,7 +6,9 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
import com.supervision.handler.StringListTypeHandler;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -15,7 +17,7 @@ import lombok.Data;
*
* @TableName vp_disease
*/
@TableName(value ="vp_disease")
@TableName(value ="vp_disease", autoResultMap = true)
@Data
@ApiModel
public class Disease implements Serializable {
@ -42,7 +44,12 @@ public class Disease implements Serializable {
@ApiModelProperty("状态 0未训练 1已训练")
private Integer status;
@ApiModelProperty("疾病类型 0单一疾病 1符合疾病")
private Integer diseaseType;
@ApiModelProperty("来源的单一疾病ID-用于初步诊断判定使用")
@TableField(typeHandler = StringListTypeHandler.class)
private List<String> containsDiseaseId;
/**
*
*/
@ -68,6 +75,9 @@ public class Disease implements Serializable {
@ApiModelProperty("其他")
private String other;
@TableField(typeHandler = StringListTypeHandler.class)
private List<String> standardQuestionLibrary;
/**
* ID

@ -26,10 +26,10 @@ public class DiseaseAncillary implements Serializable {
private String id;
/**
* ID
* ID
*/
@ApiModelProperty("病ID")
private String patientId;
@ApiModelProperty("病ID")
private String medicalRecId;
/**
* ID

@ -26,11 +26,10 @@ public class DiseasePhysical implements Serializable {
private String id;
/**
* ID
* ID
*/
@ApiModelProperty("病人ID")
private String patientId;
@ApiModelProperty("病历ID")
private String medicalRecId;
/**
* ID
*/

@ -0,0 +1,91 @@
package com.supervision.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.List;
import com.supervision.handler.StringListTypeHandler;
import lombok.Data;
/**
*
*
* @TableName vp_medical_rec
*/
@TableName(value = "vp_medical_rec", autoResultMap = true)
@Data
public class MedicalRec implements Serializable {
/**
*
*/
@TableId
private String id;
/**
*
*/
private String no;
/**
* ID
*/
private String patientId;
/**
*
*/
@TableField(typeHandler = StringListTypeHandler.class)
private List<String> diseaseList;
/**
*
*/
private String patientSelfDesc;
/**
*
*/
private String symptoms;
/**
*
*/
private String expectDiagnosisResult;
/**
*
*/
private String expectDiseaseTreatmentPlan;
/**
*
*/
private Object primaryDiagnosis;
/**
*
*/
private String allergyHistory;
/**
*
*/
private String previousHistory;
/**
*
*/
private String familyHistory;
/**
*
*/
private String marriageChildHistory;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}

@ -18,7 +18,7 @@ import java.util.List;
*
* @TableName vp_patient
*/
@TableName(value = "vp_patient", autoResultMap = true)
@TableName(value = "vp_patient")
@Data
@ApiModel
public class Patient implements Serializable {
@ -35,10 +35,10 @@ public class Patient implements Serializable {
private String name;
/**
* 0 1
*
*/
@ApiModelProperty("性别 0男 1女")
private Integer gender;
@ApiModelProperty("性别")
private String gender;
/**
*
@ -64,24 +64,14 @@ public class Patient implements Serializable {
@ApiModelProperty("体重")
private BigDecimal weight;
/**
*
*/
@ApiModelProperty("疾病列表")
@TableField(typeHandler = StringListTypeHandler.class)
private List<String> diseaseList;
@ApiModelProperty("婚姻")
private String marriage;
/**
*
*/
@ApiModelProperty("预期诊断结果")
private String expectedDiagnosisResult;
@ApiModelProperty("职业")
private String profession;
/**
*
*/
@ApiModelProperty("治疗计划")
private String diseaseTreatmentPlan;
@ApiModelProperty("地址")
private String address;
/**
* ID

@ -32,6 +32,9 @@ public class Process implements Serializable {
@ApiModelProperty("病人ID")
private String patientId;
@ApiModelProperty("病历ID")
private String medicalRecId;
/**
* ID
*/
@ -41,7 +44,7 @@ public class Process implements Serializable {
/**
* 0 1
*/
@ApiModelProperty("任务状态 0进行中 1已完成")
@ApiModelProperty("任务状态 -1未开始 0进行中 1已完成")
private Integer status;
/**

@ -1,13 +0,0 @@
package com.supervision.service;
import com.supervision.model.AskDefaultQuestionAnswer;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author flevance
* @description vp_ask_default_question_answer()Service
* @createDate 2023-10-27 10:05:55
*/
public interface AskDefaultQuestionAnswerService extends IService<AskDefaultQuestionAnswer> {
}

@ -1,13 +0,0 @@
package com.supervision.service;
import com.supervision.model.AskDiseaseQuestionAnswer;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author flevance
* @description vp_ask_disease_question_answer(-)Service
* @createDate 2023-10-27 10:05:55
*/
public interface AskDiseaseQuestionAnswerService extends IService<AskDiseaseQuestionAnswer> {
}

@ -0,0 +1,13 @@
package com.supervision.service;
import com.supervision.model.AskPatientAnswer;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author flevance
* @description vp_ask_patient_answer(-)Service
* @createDate 2023-11-03 11:13:26
*/
public interface AskPatientAnswerService extends IService<AskPatientAnswer> {
}

@ -0,0 +1,13 @@
package com.supervision.service;
import com.supervision.model.AskTemplateQuestionLibrary;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author flevance
* @description vp_ask_template_question_library()Service
* @createDate 2023-11-03 11:13:26
*/
public interface AskTemplateQuestionLibraryService extends IService<AskTemplateQuestionLibrary> {
}

@ -1,13 +0,0 @@
package com.supervision.service;
import com.supervision.model.AskTemplateQuestion;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author flevance
* @description vp_ask_template_question()Service
* @createDate 2023-10-27 10:05:55
*/
public interface AskTemplateQuestionService extends IService<AskTemplateQuestion> {
}

@ -0,0 +1,13 @@
package com.supervision.service;
import com.supervision.model.MedicalRec;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author flevance
* @description vp_medical_rec()Service
* @createDate 2023-11-03 11:25:43
*/
public interface MedicalRecService extends IService<MedicalRec> {
}

@ -1,22 +0,0 @@
package com.supervision.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.supervision.model.AskDefaultQuestionAnswer;
import com.supervision.service.AskDefaultQuestionAnswerService;
import com.supervision.mapper.AskDefaultQuestionAnswerMapper;
import org.springframework.stereotype.Service;
/**
* @author flevance
* @description vp_ask_default_question_answer()Service
* @createDate 2023-10-27 10:05:55
*/
@Service
public class AskDefaultQuestionAnswerServiceImpl extends ServiceImpl<AskDefaultQuestionAnswerMapper, AskDefaultQuestionAnswer>
implements AskDefaultQuestionAnswerService{
}

@ -1,22 +0,0 @@
package com.supervision.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.supervision.model.AskDiseaseQuestionAnswer;
import com.supervision.service.AskDiseaseQuestionAnswerService;
import com.supervision.mapper.AskDiseaseQuestionAnswerMapper;
import org.springframework.stereotype.Service;
/**
* @author flevance
* @description vp_ask_disease_question_answer(-)Service
* @createDate 2023-10-27 10:05:55
*/
@Service
public class AskDiseaseQuestionAnswerServiceImpl extends ServiceImpl<AskDiseaseQuestionAnswerMapper, AskDiseaseQuestionAnswer>
implements AskDiseaseQuestionAnswerService{
}

@ -0,0 +1,22 @@
package com.supervision.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.supervision.model.AskPatientAnswer;
import com.supervision.service.AskPatientAnswerService;
import com.supervision.mapper.AskPatientAnswerMapper;
import org.springframework.stereotype.Service;
/**
* @author flevance
* @description vp_ask_patient_answer(-)Service
* @createDate 2023-11-03 11:13:26
*/
@Service
public class AskPatientAnswerServiceImpl extends ServiceImpl<AskPatientAnswerMapper, AskPatientAnswer>
implements AskPatientAnswerService{
}

@ -0,0 +1,22 @@
package com.supervision.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.supervision.model.AskTemplateQuestionLibrary;
import com.supervision.service.AskTemplateQuestionLibraryService;
import com.supervision.mapper.AskTemplateQuestionLibraryMapper;
import org.springframework.stereotype.Service;
/**
* @author flevance
* @description vp_ask_template_question_library()Service
* @createDate 2023-11-03 11:13:26
*/
@Service
public class AskTemplateQuestionLibraryServiceImpl extends ServiceImpl<AskTemplateQuestionLibraryMapper, AskTemplateQuestionLibrary>
implements AskTemplateQuestionLibraryService{
}

@ -1,22 +0,0 @@
package com.supervision.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.supervision.model.AskTemplateQuestion;
import com.supervision.service.AskTemplateQuestionService;
import com.supervision.mapper.AskTemplateQuestionMapper;
import org.springframework.stereotype.Service;
/**
* @author flevance
* @description vp_ask_template_question()Service
* @createDate 2023-10-27 10:05:55
*/
@Service
public class AskTemplateQuestionServiceImpl extends ServiceImpl<AskTemplateQuestionMapper, AskTemplateQuestion>
implements AskTemplateQuestionService{
}

@ -0,0 +1,22 @@
package com.supervision.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.supervision.model.MedicalRec;
import com.supervision.service.MedicalRecService;
import com.supervision.mapper.MedicalRecMapper;
import org.springframework.stereotype.Service;
/**
* @author flevance
* @description vp_medical_rec()Service
* @createDate 2023-11-03 11:25:43
*/
@Service
public class MedicalRecServiceImpl extends ServiceImpl<MedicalRecMapper, MedicalRec>
implements MedicalRecService{
}

@ -1,27 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.supervision.mapper.AskDiseaseQuestionAnswerMapper">
<resultMap id="BaseResultMap" type="com.supervision.model.AskDiseaseQuestionAnswer">
<id property="id" column="id" jdbcType="VARCHAR"/>
<result property="patientId" column="patient_id" jdbcType="VARCHAR"/>
<result property="templateQuestionId" column="template_question_id" jdbcType="VARCHAR"/>
<result property="code" column="code" jdbcType="VARCHAR"/>
<result property="description" column="description" jdbcType="VARCHAR"/>
<result property="question" column="question" jdbcType="ARRAY" typeHandler="com.supervision.handler.StringListTypeHandler"/>
<result property="answer" column="answer" jdbcType="ARRAY" typeHandler="com.supervision.handler.StringListTypeHandler"/>
<result property="createUserId" column="create_user_id" jdbcType="VARCHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updateUserId" column="update_user_id" jdbcType="VARCHAR"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
</resultMap>
<sql id="Base_Column_List">
id,patient_id,template_question_id,
code,description,question,
answer,create_user_id,create_time,
update_user_id,update_time
</sql>
</mapper>

@ -2,14 +2,15 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.supervision.mapper.AskDefaultQuestionAnswerMapper">
<mapper namespace="com.supervision.mapper.AskPatientAnswerMapper">
<resultMap id="BaseResultMap" type="com.supervision.model.AskDefaultQuestionAnswer">
<resultMap id="BaseResultMap" type="com.supervision.model.AskPatientAnswer">
<id property="id" column="id" jdbcType="VARCHAR"/>
<result property="code" column="code" jdbcType="VARCHAR"/>
<result property="description" column="description" jdbcType="VARCHAR"/>
<result property="question" column="question" jdbcType="ARRAY" typeHandler="com.supervision.handler.StringListTypeHandler"/>
<result property="answer" column="answer" jdbcType="ARRAY" typeHandler="com.supervision.handler.StringListTypeHandler"/>
<result property="patientId" column="patient_id" jdbcType="VARCHAR"/>
<result property="libraryQuestionId" column="library_question_id" jdbcType="VARCHAR"/>
<result property="answer" column="answer" jdbcType="ARRAY"
typeHandler="com.supervision.handler.StringListTypeHandler"/>
<result property="requireCheck" column="require_check" jdbcType="INTEGER"/>
<result property="createUserId" column="create_user_id" jdbcType="VARCHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updateUserId" column="update_user_id" jdbcType="VARCHAR"/>
@ -17,8 +18,8 @@
</resultMap>
<sql id="Base_Column_List">
id,code,description,
question,answer,create_user_id,
id,patient_id,library_question_id,
answer,require_check,create_user_id,
create_time,update_user_id,update_time
</sql>
</mapper>

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.supervision.mapper.AskTemplateQuestionLibraryMapper">
<resultMap id="BaseResultMap" type="com.supervision.model.AskTemplateQuestionLibrary">
<id property="id" column="id" jdbcType="VARCHAR"/>
<result property="code" column="code" jdbcType="VARCHAR"/>
<result property="description" column="description" jdbcType="VARCHAR"/>
<result property="question" column="question" jdbcType="ARRAY"
typeHandler="com.supervision.handler.StringListTypeHandler"/>
<result property="defaultAnswer" column="default_answer" jdbcType="ARRAY"
typeHandler="com.supervision.handler.StringListTypeHandler"/>
<result property="createUserId" column="create_user_id" jdbcType="VARCHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updateUserId" column="update_user_id" jdbcType="VARCHAR"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
</resultMap>
<sql id="Base_Column_List">
id
,code,description,
question,default_answer,create_user_id,
create_time,update_user_id,update_time
</sql>
</mapper>

@ -1,23 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.supervision.mapper.AskTemplateQuestionMapper">
<resultMap id="BaseResultMap" type="com.supervision.model.AskTemplateQuestion">
<id property="id" column="id" jdbcType="VARCHAR"/>
<result property="code" column="code" jdbcType="VARCHAR"/>
<result property="description" column="description" jdbcType="VARCHAR"/>
<result property="question" column="question" jdbcType="ARRAY" typeHandler="com.supervision.handler.StringListTypeHandler"/>
<result property="createUserId" column="create_user_id" jdbcType="VARCHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updateUserId" column="update_user_id" jdbcType="VARCHAR"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
</resultMap>
<sql id="Base_Column_List">
id,code,description,
question,create_user_id,create_time,
update_user_id,update_time
</sql>
</mapper>

@ -11,7 +11,7 @@
<result property="toolName" column="tool_name" jdbcType="VARCHAR"/>
<result property="iconBase64" column="icon_base64" jdbcType="VARCHAR"/>
<result property="requireLocation" column="require_location" jdbcType="INTEGER"/>
<result column="call_out_question" jdbcType="ARRAY" property="callOutQuestion"
<result column="call_out_question" property="callOutQuestion" jdbcType="ARRAY"
typeHandler="com.supervision.handler.StringListTypeHandler"/>
<result property="createUserId" column="create_user_id" jdbcType="VARCHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>

@ -7,8 +7,8 @@
<resultMap id="BaseResultMap" type="com.supervision.model.DiagnosisQaRecord">
<id property="id" column="id" jdbcType="VARCHAR"/>
<result property="processId" column="process_id" jdbcType="VARCHAR"/>
<result property="questionAnswerType" column="question_answer_type" jdbcType="VARCHAR"/>
<result property="questionAnswerId" column="question_answer_id" jdbcType="VARCHAR"/>
<result property="answerId" column="answer_id" jdbcType="VARCHAR"/>
<result property="answerType" column="answer_type" jdbcType="VARCHAR"/>
<result property="question" column="question" jdbcType="VARCHAR"/>
<result property="questionWavId" column="question_wav_id" jdbcType="VARCHAR"/>
<result property="answer" column="answer" jdbcType="VARCHAR"/>

@ -6,7 +6,7 @@
<resultMap id="BaseResultMap" type="com.supervision.model.DiseaseAncillary">
<id property="id" column="id" jdbcType="VARCHAR"/>
<result property="patientId" column="patient_id" jdbcType="VARCHAR"/>
<result property="medicalRecId" column="medical_rec_id" jdbcType="VARCHAR"/>
<result property="itemId" column="item_id" jdbcType="VARCHAR"/>
<result property="requireCheck" column="require_check" jdbcType="INTEGER"/>
<result property="basisConfirm" column="basis_confirm" jdbcType="INTEGER"/>

@ -9,6 +9,11 @@
<result property="code" column="code" jdbcType="VARCHAR"/>
<result property="diseaseName" column="disease_name" jdbcType="VARCHAR"/>
<result property="status" column="status" jdbcType="INTEGER"/>
<result property="diseaseType" column="disease_type" jdbcType="INTEGER"/>
<result property="containsDiseaseId" column="contains_disease_id" jdbcType="ARRAY"
typeHandler="com.supervision.handler.StringListTypeHandler"/>
<result property="standardQuestionLibrary" column="standard_question_library" jdbcType="VARCHAR"
typeHandler="com.supervision.handler.StringListTypeHandler"/>
<result property="preliminaryDiagnosis" column="preliminary_diagnosis" jdbcType="VARCHAR"/>
<result property="confirmingDiagnosis" column="confirming_diagnosis" jdbcType="VARCHAR"/>
<result property="basisIdentification" column="basis_identification" jdbcType="VARCHAR"/>
@ -20,8 +25,9 @@
</resultMap>
<sql id="Base_Column_List">
id,disease_name
,code,status,
id
,disease_name
,code,status,diseaseType,containsDiseaseId,standardQuestionLibrary,
expected_diagnosis_result,preliminary_diagnosis,confirming_diagnosis,
basis_identification,disease_treatment_plan,other,create_user_id,
create_time,update_user_id,update_time

@ -6,7 +6,7 @@
<resultMap id="BaseResultMap" type="com.supervision.model.DiseasePhysical">
<id property="id" column="id" jdbcType="VARCHAR"/>
<result property="patientId" column="patient_id" jdbcType="VARCHAR"/>
<result property="medicalRecId" column="medical_rec_id" jdbcType="VARCHAR"/>
<result property="toolId" column="tool_id" jdbcType="VARCHAR"/>
<result property="locationId" column="location_id" jdbcType="VARCHAR"/>
<result property="requireCheck" column="require_check" jdbcType="INTEGER"/>

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.supervision.mapper.MedicalRecMapper">
<resultMap id="BaseResultMap" type="com.supervision.model.MedicalRec">
<id property="id" column="id" jdbcType="VARCHAR"/>
<result property="no" column="no" jdbcType="VARCHAR"/>
<result property="patientId" column="patient_id" jdbcType="VARCHAR"/>
<result property="patientSelfDesc" column="patient_self_desc" jdbcType="VARCHAR"/>
<result property="symptoms" column="symptoms" jdbcType="VARCHAR"/>
<result property="expectDiagnosisResult" column="expect_diagnosis_result" jdbcType="VARCHAR"/>
<result property="expectDiseaseTreatmentPlan" column="expect_disease_treatment_plan" jdbcType="VARCHAR"/>
<result property="primaryDiagnosis" column="primary_diagnosis" jdbcType="OTHER"/>
<result property="allergyHistory" column="allergy_history" jdbcType="VARCHAR"/>
<result property="previousHistory" column="previous_history" jdbcType="VARCHAR"/>
<result property="familyHistory" column="family_history" jdbcType="VARCHAR"/>
<result property="marriageChildHistory" column="marriage_child_history" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
id,no,patient_id,
patient_self_desc,symptoms,expect_diagnosis_result,
expect_disease_treatment_plan,primary_diagnosis,allergy_history,
previous_history,family_history,marriage_child_history
</sql>
</mapper>

@ -12,10 +12,9 @@
<result property="symptoms" column="symptoms" jdbcType="VARCHAR"/>
<result property="height" column="height" jdbcType="DECIMAL"/>
<result property="weight" column="weight" jdbcType="DECIMAL"/>
<result property="diseaseList" jdbcType="ARRAY" column="disease_list"
typeHandler="com.supervision.handler.StringListTypeHandler"/>
<result property="expectedDiagnosisResult" column="expected_diagnosis_result" jdbcType="VARCHAR"/>
<result property="diseaseTreatmentPlan" column="disease_treatment_plan" jdbcType="VARCHAR"/>
<result property="marriage" column="marriage" jdbcType="VARCHAR"/>
<result property="profession" column="profession" jdbcType="VARCHAR"/>
<result property="address" column="address" jdbcType="VARCHAR"/>
<result property="createUserId" column="create_user_id" jdbcType="VARCHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updateUserId" column="update_user_id" jdbcType="VARCHAR"/>
@ -25,7 +24,7 @@
<sql id="Base_Column_List">
id
,name,gender,
age,symptoms,height,
age,symptoms,height,address,marriage,profession,
weight,disease_list,create_user_id,
create_time,update_user_id,update_time
</sql>

@ -7,6 +7,7 @@
<resultMap id="BaseResultMap" type="com.supervision.model.Process">
<id property="id" column="id" jdbcType="VARCHAR"/>
<result property="patientId" column="patient_id" jdbcType="VARCHAR"/>
<result property="medicalRecId" column="medical_rec_id" jdbcType="VARCHAR"/>
<result property="userId" column="user_id" jdbcType="VARCHAR"/>
<result property="status" column="status" jdbcType="INTEGER"/>
<result property="createUserId" column="create_user_id" jdbcType="VARCHAR"/>
@ -16,7 +17,8 @@
</resultMap>
<sql id="Base_Column_List">
id,patient_id,user_id,
id
,patient_id,user_id,
status,create_user_id,create_time,
update_user_id,update_time
</sql>

@ -24,9 +24,9 @@ public class AskProcessController {
@ApiOperation("生成诊断流程任务")
@GetMapping("creatDiagnosisProcess")
public Process creatDiagnosisProcess(@ApiParam("病人ID") String patientId) {
public Process creatDiagnosisProcess(@ApiParam("病人ID") String patientId,@ApiParam("病历ID") String medicalId) {
User user = UserUtil.getUser();
return askProcessService.creatDiagnosisProcess(patientId, user);
return askProcessService.creatDiagnosisProcess(patientId, medicalId, user);
}
@ApiOperation("查询用户正在诊断中的诊断记录")

@ -1,23 +1,13 @@
package com.supervision.controller;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.lang.hash.Hash;
import cn.hutool.crypto.digest.MD5;
import cn.hutool.extra.pinyin.PinyinUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import com.supervision.exception.BusinessException;
import com.supervision.model.AskDiseaseQuestionAnswer;
import com.supervision.model.AskTemplateQuestion;
import com.supervision.model.ConfigPhysicalTool;
import com.supervision.service.AskDiseaseQuestionAnswerService;
import com.supervision.service.AskTemplateQuestionService;
import com.supervision.service.ConfigPhysicalToolService;
import lombok.RequiredArgsConstructor;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.util.*;
@ -96,38 +86,6 @@ public class TestController {
return signServer;
}
@PostMapping("saveQuestion")
@Transactional(rollbackFor = Exception.class)
public void saveQuestion() {
ExcelReader reader = ExcelUtil.getReader("/Users/flevance/Desktop/template.xlsx");
List<List<Object>> read = reader.read();
for (List<Object> readLine : read) {
String desc = (String) readLine.get(0);
String pinyin = PinyinUtil.getPinyin((String) readLine.get(0), "_");
String question = (String) readLine.get(1);
String answer = (String) readLine.get(2);
String otherQuestionStr = (String) readLine.get(3);
AskTemplateQuestion templateQuestion = new AskTemplateQuestion();
templateQuestion.setCode("ask_" + pinyin);
templateQuestion.setDescription(desc);
List<String> questionList = JSONUtil.toList(otherQuestionStr, String.class);
questionList.add(0, question);
templateQuestion.setQuestion(questionList);
templateQuestion.insert();
AskDiseaseQuestionAnswer askDiseaseQuestionAnswer = new AskDiseaseQuestionAnswer();
askDiseaseQuestionAnswer.setPatientId("1");
askDiseaseQuestionAnswer.setTemplateQuestionId(templateQuestion.getId());
askDiseaseQuestionAnswer.setAnswer(ListUtil.of(answer));
askDiseaseQuestionAnswer.insert();
}
}
}

@ -5,14 +5,13 @@ import cn.hutool.json.JSONUtil;
import com.supervision.domain.UserInfo;
import com.supervision.exception.BusinessException;
import com.supervision.model.User;
import com.supervision.pojo.vo.LoginReqVO;
import com.supervision.service.UserService;
import com.supervision.util.TokenUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.Optional;
@ -25,16 +24,16 @@ public class UserController {
private final UserService userService;
@ApiOperation("登录")
@GetMapping("login")
public String login(String userAccount, String password) {
if (!StrUtil.isAllNotBlank(userAccount, password)) {
@PostMapping("login")
public String login(@RequestBody LoginReqVO reqVO) {
if (!StrUtil.isAllNotBlank(reqVO.getUserAccount(), reqVO.getPassword())) {
throw new BusinessException("用户名不能为空");
}
Optional<User> user = userService.lambdaQuery().eq(User::getAccount, userAccount).last("limit 1").oneOpt();
Optional<User> user = userService.lambdaQuery().eq(User::getAccount, reqVO.getUserAccount()).last("limit 1").oneOpt();
if (!user.isPresent()) {
throw new BusinessException("未找到用户");
}
if (!user.get().getPassword().equals(password)) {
if (!user.get().getPassword().equals(reqVO.getPassword())) {
throw new BusinessException("密码错误");
}
return TokenUtil.creatToken(JSONUtil.toJsonStr(user.get()));

@ -0,0 +1,10 @@
package com.supervision.pojo.vo;
import lombok.Data;
@Data
public class LoginReqVO {
private String userAccount;
private String password;
}

@ -7,7 +7,7 @@ import java.util.List;
public interface AskProcessService {
Process creatDiagnosisProcess(String patientId, User user);
Process creatDiagnosisProcess(String patientId,String medicalId, User user);
List<Process> queryUserProcess(String userId);

@ -26,6 +26,8 @@ public class AskAncillaryServiceImpl implements AskAncillaryService {
private final DiagnosisAncillaryRecordService diagnosisAncillaryRecordService;
private final MedicalRecService medicalRecService;
@Override
public List<ConfigAncillaryItemResVO> queryAncillaryItemList() {
List<ConfigAncillaryItem> list = ancillaryItemService.lambdaQuery().list();
@ -42,7 +44,7 @@ public class AskAncillaryServiceImpl implements AskAncillaryService {
// 首先根据process_id查新到流程ID
Process process = Optional.ofNullable(processService.getById(reqVO.getProcessId())).orElseThrow(() -> new BusinessException("未找到流程ID"));
// 找到对应的项目的检查结果
DiseaseAncillary diseaseAncillary = diseaseAncillaryService.lambdaQuery().eq(DiseaseAncillary::getPatientId, process.getPatientId()).eq(DiseaseAncillary::getItemId, reqVO.getItemId())
DiseaseAncillary diseaseAncillary = diseaseAncillaryService.lambdaQuery().eq(DiseaseAncillary::getMedicalRecId, process.getMedicalRecId()).eq(DiseaseAncillary::getItemId, reqVO.getItemId())
.oneOpt().orElseGet(() -> {
DiseaseAncillary get = new DiseaseAncillary();
get.setResult("无相关资讯");

@ -28,7 +28,9 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService
private final DiagnosisPrimaryService diagnosisPrimaryService;
private final AskDiseaseQuestionAnswerService askDiseaseQuestionAnswerService;
private final AskPatientAnswerService askPatientAnswerService;
private final MedicalRecService medicalRecService;
private final DiagnosisQaRecordService diagnosisQaRecordService;
@ -68,11 +70,12 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService
diagnosisResultResVO.setId(processId);
Process process = processService.getById(processId);
Patient patient = patientService.getById(process.getPatientId());
List<Disease> diseasesList = diseaseService.listByIds(patient.getDiseaseList());
MedicalRec medicalRec = medicalRecService.getById(process.getMedicalRecId());
List<Disease> diseasesList = diseaseService.listByIds(medicalRec.getDiseaseList());
// 1.生成预期诊断结果
diagnosisResultResVO.setExpertDiagnosisResult(creatExpertDiagnosisResult(diagnosisResult, patient, diseasesList));
diagnosisResultResVO.setExpertDiagnosisResult(creatExpertDiagnosisResult(medicalRec, diagnosisResult, diseasesList));
// 2.生成初步诊断依据
diagnosisResultResVO.setBasisPrimaryResultResVO(createBasisPrimaryResult(processId, diseasesList));
diagnosisResultResVO.setBasisPrimaryResultResVO(createBasisPrimaryResult(patient, processId, diseasesList));
// 3.生成证实诊断依据
diagnosisResultResVO.setBasisConfirmResultResVO(createBasisConfirmResult(processId, diseasesList));
// 4.生成鉴别诊断依据
@ -80,15 +83,15 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService
// 5.全面检查-(暂无相关数据) 后面再看
diagnosisResultResVO.setFullCheck(null);
// 6.处置方案
diagnosisResultResVO.setDealPlan(createDealPlan(diagnosisResult, patient));
diagnosisResultResVO.setDealPlan(createDealPlan(medicalRec, diagnosisResult, patient));
return diagnosisResultResVO;
}
private DealPlanResVO createDealPlan(DiagnosisResult diagnosisResult, Patient patient) {
private DealPlanResVO createDealPlan(MedicalRec medicalRec, DiagnosisResult diagnosisResult, Patient patient) {
DealPlanResVO dealPlanResVO = new DealPlanResVO();
dealPlanResVO.setUserTreatmentPlanType(diagnosisResult.getTreatmentPlanType());
dealPlanResVO.setUserTreatmentPlan(diagnosisResult.getTreatmentPlan());
dealPlanResVO.setRealTreatmentPlan(patient.getDiseaseTreatmentPlan());
dealPlanResVO.setRealTreatmentPlan(medicalRec.getExpectDiseaseTreatmentPlan());
return dealPlanResVO;
}
@ -153,7 +156,7 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService
return basisConfirmResultResVO;
}
private BasisPrimaryResultResVO createBasisPrimaryResult(String processId, List<Disease> diseasesList) {
private BasisPrimaryResultResVO createBasisPrimaryResult(Patient patient, String processId, List<Disease> diseasesList) {
BasisPrimaryResultResVO basisPrimaryResultResVO = new BasisPrimaryResultResVO();
basisPrimaryResultResVO.setPreliminaryDiagnosis(diseasesList.stream().map(Disease::getPreliminaryDiagnosis).collect(Collectors.toList()));
// 根据record记录寻找符合初步诊断依据的项目
@ -161,19 +164,17 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService
List<BasisDiagnosisNodeResVO> basisDiagnosisNodeResVOS = new ArrayList<>();
List<DiagnosisQaRecord> qaRecordList = diagnosisQaRecordService.lambdaQuery().eq(DiagnosisQaRecord::getProcessId, processId).list();
if (CollectionUtil.isNotEmpty(qaRecordList)) {
Set<String> questionAnswerIdSet = qaRecordList.stream().map(DiagnosisQaRecord::getQuestionAnswerId).collect(Collectors.toSet());
List<AskDiseaseQuestionAnswer> list = askDiseaseQuestionAnswerService.lambdaQuery()
.in(AskDiseaseQuestionAnswer::getId, questionAnswerIdSet)
.eq(AskDiseaseQuestionAnswer::getRequireCheck, 1)
.select(AskDiseaseQuestionAnswer::getId).list();
List<AskPatientAnswer> list = askPatientAnswerService.lambdaQuery()
.eq(AskPatientAnswer::getPatientId, patient.getId())
.eq(AskPatientAnswer::getRequireCheck, 1).list();
// 获取必问的项目
Set<String> requireCheckIdSet = list.stream().map(AskDiseaseQuestionAnswer::getId).collect(Collectors.toSet());
Set<String> requireCheckIdSet = list.stream().map(AskPatientAnswer::getId).collect(Collectors.toSet());
List<BasisDiagnosisNodeResVO> qaList = qaRecordList.stream().map(e -> {
BasisDiagnosisNodeResVO node = new BasisDiagnosisNodeResVO();
node.setType(0);
node.setRecordName(e.getQuestion());
node.setRecordId(e.getId());
node.setCorrect(requireCheckIdSet.contains(e.getQuestionAnswerId()) ? 1 : 0);
node.setCorrect(requireCheckIdSet.contains(e.getAnswerId()) ? 1 : 0);
return node;
}).collect(Collectors.toList());
@ -208,9 +209,12 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService
}
private ExpertDiagnosisResultResVO creatExpertDiagnosisResult(DiagnosisResult diagnosisResult, Patient patient, List<Disease> diseasesList) {
/**
*
*/
private ExpertDiagnosisResultResVO creatExpertDiagnosisResult(MedicalRec medicalRec, DiagnosisResult diagnosisResult, List<Disease> diseasesList) {
ExpertDiagnosisResultResVO expertDiagnosisResultResVO = new ExpertDiagnosisResultResVO();
expertDiagnosisResultResVO.setDiagnosis(patient.getExpectedDiagnosisResult());
expertDiagnosisResultResVO.setDiagnosis(medicalRec.getExpectDiagnosisResult());
Set<String> expertDiseaseIdSet = diseasesList.stream().map(Disease::getId).collect(Collectors.toSet());
List<Disease> userDiagnosisDiseaseList = diseaseService.listByIds(diagnosisResult.getFinalDiagnosis());
// 用户的诊断

@ -59,7 +59,7 @@ public class AskPhysicalServiceImpl implements AskPhysicalService {
.oneOpt().orElseThrow(() -> new BusinessException("未找到对应部位"));
locationId = location.getId();
}
DiseasePhysical result = diseasePhysicalService.lambdaQuery().eq(DiseasePhysical::getPatientId, process.getPatientId())
DiseasePhysical result = diseasePhysicalService.lambdaQuery().eq(DiseasePhysical::getMedicalRecId, process.getMedicalRecId())
.eq(DiseasePhysical::getToolId, tool.getId()).eq(StrUtil.isNotBlank(locationId), DiseasePhysical::getLocationId, locationId).last("limit 1")
.oneOpt()
.orElseGet(() -> {

@ -16,9 +16,10 @@ public class AskProcessServiceImpl implements AskProcessService {
private final ProcessService processService;
@Override
public Process creatDiagnosisProcess(String patientId, User user) {
public Process creatDiagnosisProcess(String patientId,String medicalId, User user) {
Process process = new Process();
process.setPatientId(patientId);
process.setMedicalRecId(medicalId);
process.setUserId(user.getId());
process.setStatus(0);
process.setCreateUserId(user.getId());

@ -1,14 +1,18 @@
package com.supervision.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import com.supervision.exception.BusinessException;
import com.supervision.model.AskPatientAnswer;
import com.supervision.model.AskTemplateQuestionLibrary;
import com.supervision.model.DiagnosisQaRecord;
import com.supervision.model.Process;
import com.supervision.pojo.vo.TalkReqVO;
import com.supervision.pojo.vo.TalkResultResVO;
import com.supervision.service.AskDefaultQuestionAnswerService;
import com.supervision.service.AskDiseaseQuestionAnswerService;
import com.supervision.service.AskPatientAnswerService;
import com.supervision.service.AskTemplateQuestionLibraryService;
import com.supervision.service.ProcessService;
import com.supervision.util.*;
import com.supervision.service.AskService;
@ -31,9 +35,9 @@ public class AskServiceImpl implements AskService {
private final ProcessService processService;
private final AskDiseaseQuestionAnswerService askDiseaseQuestionAnswerService;
private final AskTemplateQuestionLibraryService askTemplateQuestionLibraryService;
private final AskDefaultQuestionAnswerService askDefaultQuestionAnswerService;
private final AskPatientAnswerService askPatientAnswerService;
@Override
@ -56,16 +60,23 @@ public class AskServiceImpl implements AskService {
@Override
@Transactional(rollbackFor = Exception.class)
public TalkResultResVO talk(TalkReqVO talkReqVO) throws IOException {
public TalkResultResVO talk(TalkReqVO talkReqVO) {
// 根据processId找到对应的病人
Process process = Optional.ofNullable(processService.getById(talkReqVO.getProcessId())).orElseThrow(() -> new BusinessException("未找到诊疗进程"));
// 调用rasa获取文字内容
String rasaResult = RasaUtil.talkRasa(talkReqVO.getText(), UserUtil.getUser().getId(), process.getPatientId());
// 如果rasa没有识别出来,则返回默认值
if (StrUtil.isBlank(rasaResult)) {
// 这里调用京东数字人接口首先根据token获取房间号
String roomId = HumanUtil.queryRoomId(talkReqVO.getRoomKey(), talkReqVO.getRoomToken());
HumanUtil.textDriven("您好,我没有听懂您说什么", roomId);
}
TalkResultResVO talkResultResVO = new TalkResultResVO();
// 这里校验,rasa回复的结果是不是action
// 这里设置的模板,对于action的动作全部是用ancillary_ | tool_进行标记,详情看生成rasa的yml的代码:RasaServiceImpl.generateDomain
// ancillary_ | tool_
if (rasaResult.startsWith("ancillary_") || rasaResult.startsWith("tool_")) {
log.info("呼出语句:{}", rasaResult);
List<String> actionList = StrUtil.split(rasaResult, '_');
if (actionList.size() > 1) {
ActionDTO actionDTO = new ActionDTO();
@ -77,43 +88,76 @@ public class AskServiceImpl implements AskService {
return talkResultResVO;
}
} else {
// 语音消息,这时调用京东的接口进行播放操作
// 这里调用京东数字人接口首先根据token获取房间号
String roomId = HumanUtil.queryRoomId(talkReqVO.getRoomKey(), talkReqVO.getRoomToken());
// 区分
List<String> answerIdList = StrUtil.split(rasaResult, '_');
String qaId = null;
String qaType = "miss";
String answer = "您好,我没有听懂您说什么";
if (answerIdList.size() > 1) {
if (rasaResult.startsWith("default_")) {
qaType = "default";
List<String> answerList = Optional.ofNullable(askDefaultQuestionAnswerService.getById(answerIdList.get(1)).getAnswer())
.orElse(CollUtil.newArrayList("您好,我没有听懂您说什么"));
answer = answerList.get(new Random().nextInt(answerList.size()));
qaId = answerIdList.get(1);
} else if (rasaResult.startsWith("disease_")) {
qaType = "disease";
List<String> answerList = Optional.ofNullable(askDiseaseQuestionAnswerService.getById(answerIdList.get(1)).getAnswer())
.orElse(CollUtil.newArrayList("您好,我没有听懂您说什么"));
answer = answerList.get(new Random().nextInt(answerList.size()));
qaId = answerIdList.get(1);
AskTemplateQuestionLibrary library = askTemplateQuestionLibraryService.getById(rasaResult);
if (ObjectUtil.isEmpty(library)) {
log.info("{}:未从问题库中找到,回答未识别语句", rasaResult);
HumanUtil.textDriven("您好,我没有听懂您说什么", roomId);
} else {
AskPatientAnswer askPatientAnswer = askPatientAnswerService.lambdaQuery().eq(AskPatientAnswer::getPatientId, process.getPatientId())
.eq(AskPatientAnswer::getLibraryQuestionId, library.getId()).last("limit 1").one();
// 如果没有找到回答,去默认回答里面看看有没有
if (ObjectUtil.isEmpty(askPatientAnswer)) {
log.info("{}:病历配置的回答:{}:为空,尝试回答默认答案", rasaResult, askPatientAnswer.getId());
// 首先看看default里面是不是存在,如果存在,就从default里面去找
if (CollUtil.isNotEmpty(library.getDefaultAnswer())) {
String resText = library.getDefaultAnswer().get(RandomUtil.randomInt(0, library.getDefaultAnswer().size()));
HumanUtil.textDriven(resText, roomId);
// 保存记录
DiagnosisQaRecord record = new DiagnosisQaRecord();
record.setProcessId(talkReqVO.getProcessId());
record.setAnswerType("default");
// 注意,这里如果有默认回答,回答的结果是默认结果ID
record.setAnswerId(library.getId());
record.setQuestion(talkReqVO.getText());
record.setAnswer(resText);
record.setCreateUserId(UserUtil.getUser().getId());
record.insert();
log.info("{}:找到了默认答案:{}", rasaResult, talkReqVO.getText());
} else {
log.info("{}:没有从默认答案中找到找到默认内容,回复未识别语句", rasaResult);
HumanUtil.textDriven("您好,我没有听懂您说什么", roomId);
}
} else {
if (CollUtil.isEmpty(askPatientAnswer.getAnswer())) {
log.info("{}:病历配置的回答:{}:为空不为空,但在获取的时候,答案为空,尝试回复默认语句", rasaResult, askPatientAnswer.getId());
if (CollUtil.isNotEmpty(library.getDefaultAnswer())) {
String resText = library.getDefaultAnswer().get(RandomUtil.randomInt(0, library.getDefaultAnswer().size()));
log.info("{}:病历配置的回答:{}:为空不为空不为空,但在获取的时候,答案为空,开始回复默认语句,默认语句内容:{}", rasaResult, askPatientAnswer.getId(), resText);
HumanUtil.textDriven(resText, roomId);
// 保存记录
DiagnosisQaRecord record = new DiagnosisQaRecord();
record.setProcessId(talkReqVO.getProcessId());
record.setAnswerType("default");
// 注意,这里如果有默认回答,回答的结果是默认结果ID
record.setAnswerId(library.getId());
record.setQuestion(talkReqVO.getText());
record.setAnswer(resText);
record.setCreateUserId(UserUtil.getUser().getId());
record.insert();
} else {
log.info("{}:病历配置的回答:{}:为空不为空,但在获取的时候,答案为空,但是获取默认语句也为空,那么回复未识别语句", rasaResult, askPatientAnswer.getId());
HumanUtil.textDriven("您好,我没有听懂您说什么", roomId);
}
// 然后这里进行播放
// 这里应该从对话中取结果
HumanUtil.textDriven(rasaResult, roomId);
} else {
String resText = askPatientAnswer.getAnswer().get(RandomUtil.randomInt(0, askPatientAnswer.getAnswer().size()));
log.info("{}:找到了病历配置的回答语句:{},回答内容:{}", rasaResult, askPatientAnswer.getId(), resText);
HumanUtil.textDriven(resText, roomId);
// 保存记录
DiagnosisQaRecord record = new DiagnosisQaRecord();
record.setProcessId(talkReqVO.getProcessId());
record.setQuestionAnswerType(qaType);
record.setQuestionAnswerId(qaId);
record.setAnswerType("patient");
record.setAnswerId(askPatientAnswer.getId());
record.setQuestion(talkReqVO.getText());
record.setAnswer(answer);
record.setAnswer(resText);
record.setCreateUserId(UserUtil.getUser().getId());
record.insert();
}
}
}
}
talkResultResVO.setType(1);
return talkResultResVO;
}

@ -7,15 +7,12 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.supervision.domain.GlobalResult;
import com.supervision.exception.BusinessException;
import com.supervision.model.*;
import com.supervision.pojo.paddlespeech.res.PaddleSpeechResDTO;
import com.supervision.pojo.paddlespeech.res.TtsResultDTO;
import com.supervision.pojo.rasa.train.DomainYmlTemplate;
import com.supervision.pojo.rasa.train.NluYmlTemplate;
import com.supervision.pojo.rasa.train.QuestionAnswerDTO;
@ -43,16 +40,13 @@ import java.util.zip.ZipOutputStream;
@RequiredArgsConstructor
public class RasaServiceImpl implements RasaService {
private final AskDefaultQuestionAnswerService askDefaultQuestionAnswerService;
private final AskDiseaseQuestionAnswerService askDiseaseQuestionAnswerService;
private final AskTemplateQuestionService askTemplateQuestionService;
private final ConfigPhysicalToolService configPhysicalToolService;
private final ConfigAncillaryItemService configAncillaryItemService;
private final AskTemplateQuestionLibraryService askTemplateQuestionLibraryService;
private static final ObjectMapper objectMapper = new ObjectMapper();
@Value("${rasa.base-url}${rasa.saveRasaFile}")
@ -114,53 +108,20 @@ public class RasaServiceImpl implements RasaService {
Map<String, File> ymalFileMap) {
// 首先生成根据意图查找到nlu文件
List<NluYmlTemplate.Nlu> nluList = new ArrayList<>();
// 默认意图
List<AskDefaultQuestionAnswer> defaultQuestionAnswerList = askDefaultQuestionAnswerService.lambdaQuery().isNotNull(AskDefaultQuestionAnswer::getAnswer).list();
List<AskTemplateQuestionLibrary> askTemplateQuestionLibraryList = askTemplateQuestionLibraryService.lambdaQuery().list();
// 生成默认意图的nlu
for (AskDefaultQuestionAnswer defaultQA : defaultQuestionAnswerList) {
if (CollUtil.isNotEmpty(defaultQA.getQuestion()) && CollUtil.isNotEmpty(defaultQA.getAnswer())) {
for (AskTemplateQuestionLibrary questionLibrary : askTemplateQuestionLibraryList) {
// 开始生成
NluYmlTemplate.Nlu nlu = new NluYmlTemplate.Nlu();
// 拼接格式:code_id(防止重复)
String intentCode = defaultQA.getCode() + "_" + defaultQA.getId();
String intentCode = questionLibrary.getCode() + "_" + questionLibrary.getId();
nlu.setIntent(intentCode);
nlu.setExamples(defaultQA.getQuestion());
nlu.setExamples(questionLibrary.getQuestion());
nluList.add(nlu);
// 添加到map中,key为意图编码,value为意图ID
intentCodeAndIdMap.put(intentCode, new QuestionAnswerDTO(defaultQA.getQuestion(), CollUtil.newArrayList("default_" + defaultQA.getId()), defaultQA.getDescription()));
}
}
// 然后处理该疾病对应的意图
List<AskDiseaseQuestionAnswer> diseaseQuestionAnswerList = askDiseaseQuestionAnswerService.lambdaQuery()
.eq(AskDiseaseQuestionAnswer::getPatientId, patientId).list();
// 使用通用模板的
Map<String, AskTemplateQuestion> templateQuestionMap = new HashMap<>();
// 根据默认意图找到所有的问题
if (CollUtil.isNotEmpty(diseaseQuestionAnswerList)) {
// 首先找到使用通用模板的问题
List<AskDiseaseQuestionAnswer> templateQuestionList = diseaseQuestionAnswerList.stream()
.filter(e -> StrUtil.isNotBlank(e.getTemplateQuestionId())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(templateQuestionList)) {
Set<String> templateQuestionIdList = templateQuestionList.stream().map(AskDiseaseQuestionAnswer::getTemplateQuestionId).collect(Collectors.toSet());
List<AskTemplateQuestion> list = askTemplateQuestionService.lambdaQuery().in(AskTemplateQuestion::getId, templateQuestionIdList).list();
templateQuestionMap = list.stream().collect(Collectors.toMap(AskTemplateQuestion::getId, Function.identity()));
}
}
// 这里开始遍历
for (AskDiseaseQuestionAnswer askDiseaseQuestionAnswer : diseaseQuestionAnswerList) {
// 如果走模板的问题
if (StrUtil.isNotBlank(askDiseaseQuestionAnswer.getTemplateQuestionId()) && templateQuestionMap.containsKey(askDiseaseQuestionAnswer.getTemplateQuestionId())) {
AskTemplateQuestion askTemplateQuestion = templateQuestionMap.get(askDiseaseQuestionAnswer.getTemplateQuestionId());
// 开始生成
NluYmlTemplate.Nlu nlu = new NluYmlTemplate.Nlu();
// 拼接格式:code_answerId(防止重复)
String intentCode = askTemplateQuestion.getCode() + "_" + askDiseaseQuestionAnswer.getId();
nlu.setIntent(intentCode);
nlu.setExamples(askTemplateQuestion.getQuestion());
nluList.add(nlu);
intentCodeAndIdMap.put(intentCode, new QuestionAnswerDTO(askTemplateQuestion.getQuestion(), CollUtil.newArrayList("disease_" + askDiseaseQuestionAnswer.getId()), askTemplateQuestion.getDescription()));
}
intentCodeAndIdMap.put(intentCode, new QuestionAnswerDTO(questionLibrary.getQuestion(), CollUtil.newArrayList( questionLibrary.getId()), questionLibrary.getDescription()));
}
// 这里处理呼出的问题(code和问题不能为空)

Loading…
Cancel
Save