【流程自动化】

1.优化数字人流程
2.增加默认问题异常问题等回复
3.修改前台未生成成数字人时提示
jinan_dev_by_release_3.0.0
longbao 6 months ago
parent e393c89816
commit 5d3d3106b7

@ -9,6 +9,8 @@ public class HumanGenerateDTO {
private String message;
private String status;
private String uid;
private String video;

@ -35,10 +35,6 @@ import java.util.Objects;
public class AskTemplateQuestionLibraryManageServiceImpl extends ServiceImpl<AskTemplateQuestionLibraryMapper, AskTemplateQuestionLibrary>
implements AskTemplateQuestionLibraryManageService {
private final ConfigPhysicalToolService configPhysicalToolService;
private final ConfigAncillaryItemService configAncillaryItemService;
private final AskTemplateQuestionSimilarityService askTemplateQuestionSimilarityService;
@Autowired
@ -47,6 +43,8 @@ public class AskTemplateQuestionLibraryManageServiceImpl extends ServiceImpl<Ask
private QaKnowledgeManageService qaKnowledgeService;
@Autowired
private MedicalRecService medicalRecService;
@Autowired
private AskTemplateQuestionLibraryMapper askTemplateQuestionLibraryMapper;
@Override
@ -96,7 +94,7 @@ public class AskTemplateQuestionLibraryManageServiceImpl extends ServiceImpl<Ask
MedicalRecQaVO medicalRecQaVO = new MedicalRecQaVO();
if (StringUtils.isNotEmpty(questionIntentRecognition)) {
String libraryId = queryByName(questionIntentRecognition);
String libraryId = queryByName(consultationII);
// 病历问题
medicalRecQaVO.setMedicalRecAnswer(patientResponseRequired);
// 标准问题是否存在
@ -105,7 +103,7 @@ public class AskTemplateQuestionLibraryManageServiceImpl extends ServiceImpl<Ask
List<String> askTemplateQuestionSimilarities = askTemplateQuestionSimilarityService.queryAskTemplateQuestionSimilarityByLibraryId(libraryId);
medicalRecQaVO.setQuestionList(askTemplateQuestionSimilarities);
AskTemplateQuestionSimilarity askTemplateQuestionSimilarity = askTemplateQuestionSimilarityService.querySimilarityQuestionByNameZhAndSimilarityQuestion(consultationII, questionIntentRecognition);
AskTemplateQuestionSimilarity askTemplateQuestionSimilarity = askTemplateQuestionSimilarityService.querySimilarityQuestion(libraryId, questionIntentRecognition);
if (null == askTemplateQuestionSimilarity) {
AskTemplateQuestionSimilarity similarity = new AskTemplateQuestionSimilarity();
similarity.setSimilarityQuestion(questionIntentRecognition);
@ -126,11 +124,10 @@ public class AskTemplateQuestionLibraryManageServiceImpl extends ServiceImpl<Ask
askTemplateQuestionLibrary.setStandardQuestion(questionIntentRecognition);
save(askTemplateQuestionLibrary);
qaKnowledgeService.saveOrUpdateQuestionLibrary(CollUtil.newArrayList(askTemplateQuestionLibrary.getId()));
medicalRecQaVO.setLibraryQuestionId(askTemplateQuestionLibrary.getId());
}
medicalRecQaVOList.add(medicalRecQaVO);
}
medicalRecQaVOList.add(medicalRecQaVO);
}
// 3.保存闻讯问题和系统默认问题

@ -14,6 +14,7 @@ import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
@ -108,7 +109,7 @@ public class FileManageServiceImpl implements FileManageService {
Assert.notEmpty(fileId, "fileId不能为空");
FileResource fileResource = fileResourceService.getById(fileId);
Assert.notNull(fileResource, "文件不存在");
Assert.notNull(fileResource, "请在后台生成数字人后再进行问答");
String prefix = null;
String suffix = null;
if (StrUtil.isNotEmpty(fileResource.getFileName())) {
@ -155,7 +156,7 @@ public class FileManageServiceImpl implements FileManageService {
@Override
public String loadFileBase64(String fileId) throws Exception {
Assert.isTrue(StrUtil.isEmpty(fileId),"请在后台生成数字人后再进行问答");
Assert.isTrue(StringUtils.isNotEmpty(fileId), "请在后台生成数字人后再进行问答");
File file = downloadFile(fileId);
return Base64.encode(new FileInputStream(file));

@ -19,6 +19,7 @@ import com.supervision.model.MedicalRec;
import com.supervision.service.AskPatientAnswerService;
import com.supervision.service.HumanService;
import com.supervision.service.MedicalRecService;
import com.supervision.util.OkHttpUtils;
import com.supervision.util.UserUtil;
import com.supervision.vo.manage.HumanReqVo;
import lombok.RequiredArgsConstructor;
@ -30,6 +31,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.LinkedBlockingQueue;
@ -62,6 +64,8 @@ public class HumanManageServiceImpl implements HumanManageService {
private String silent;
@Value("${humanGenerate.dynamic}")
private String dynamic;
@Value("${humanGenerate.status}")
private String status;
@Override
@Transactional(rollbackFor = Exception.class)
@ -162,24 +166,40 @@ public class HumanManageServiceImpl implements HumanManageService {
}
// 保存静态视频
if (silentDTO.getCode() == 200) {
if (StrUtil.isNotBlank(silentDTO.getVideo())) {
// 如果已经生成了视频,那么直接拿到这个视频
FileResource fileResource = convertBase64ToFile("silent", FileUtil.getName(imageFile), silentDTO.getVideo());
human.setSilentVideoFileId(fileResource.getId());
human.setImageName(fileResource.getFileName());
// 诊断闻讯绑定静态视频
AskPatientAnswer askPatientAnswer = askPatientAnswerService.queryAnswerIdByMedicalId(medicalId, "静态视频");
AskPatientAnswer patientAnswer = new AskPatientAnswer();
patientAnswer.setId(askPatientAnswer.getId());
patientAnswer.setAnswerResourceId(fileResource.getId());
askPatientAnswerService.updateById(patientAnswer);
// 完成
MedicalRec medicalRec1 = new MedicalRec();
medicalRec1.setMedicalStatus(EnumMedicalRec.ESTABLISHED_RECORD.getCode());
medicalRec1.setId(medicalId);
medicalRecService.updateById(medicalRec1);
}
HumanGenerateDTO silentDTOGet;
String silentDTOGetStatus = "";
do {
String post = HttpUtil.get(humanBaseUrl + status + "/" + silentDTO.getUid());
silentDTOGet = JSONUtil.toBean(post, HumanGenerateDTO.class);
silentDTOGetStatus = silentDTOGet.getStatus();
} while (!silentDTOGetStatus.equals("completed"));
FileResource fileResource = convertBase64ToFile("silent", FileUtil.getName(imageFile), silentDTOGet.getVideo());
human.setSilentVideoFileId(fileResource.getId());
human.setImageName(fileResource.getFileName());
List<AskPatientAnswer> askPatientAnswerList = new ArrayList<>();
// 诊断闻讯绑定静态视频
AskPatientAnswer askPatientAnswer = askPatientAnswerService.queryAnswerIdByMedicalId(medicalId, "\"静默视频\"");
AskPatientAnswer patientAnswer = new AskPatientAnswer();
patientAnswer.setId(askPatientAnswer.getId());
patientAnswer.setAnswerResourceId(fileResource.getId());
askPatientAnswerList.add(patientAnswer);
// 默认回复
AskPatientAnswer askPatientAnswerMoRen = askPatientAnswerService.queryAnswerIdByMedicalId(medicalId, "\"默认回复\"");
AskPatientAnswer patientAnswerMoRen = new AskPatientAnswer();
patientAnswerMoRen.setId(askPatientAnswerMoRen.getId());
patientAnswerMoRen.setAnswer("默认回复");
askPatientAnswerList.add(patientAnswerMoRen);
askPatientAnswerService.updateBatchById(askPatientAnswerList);
// 完成
MedicalRec medicalRec1 = new MedicalRec();
medicalRec1.setMedicalStatus(EnumMedicalRec.ESTABLISHED_RECORD.getCode());
medicalRec1.setId(medicalId);
medicalRecService.updateById(medicalRec1);
human.setSilentTaskUid(silentDTO.getUid());
}
@ -200,25 +220,48 @@ public class HumanManageServiceImpl implements HumanManageService {
if (dynamicDTO.getCode() == 200) {
if (StrUtil.isNotBlank(dynamicDTO.getVideo())) {
// 如果已经生成了视频,那么直接拿到这个视频
FileResource fileResource = convertBase64ToFile("dynamic", FileUtil.getName(imageFile), dynamicDTO.getVideo());
human.setDynamicVideoFileId(fileResource.getId());
human.setImageName(fileResource.getFileName());
// 诊断闻讯绑定动态视频
AskPatientAnswer askPatientAnswer = askPatientAnswerService.queryAnswerIdByMedicalId(medicalId, "动态视频");
AskPatientAnswer patientAnswer = new AskPatientAnswer();
patientAnswer.setId(askPatientAnswer.getId());
patientAnswer.setAnswerResourceId(fileResource.getId());
askPatientAnswerService.updateById(patientAnswer);
// 完成
MedicalRec medicalRec1 = new MedicalRec();
medicalRec1.setMedicalStatus(EnumMedicalRec.COMPLETE.getCode());
medicalRec1.setId(medicalId);
medicalRecService.updateById(medicalRec1);
}
HumanGenerateDTO dynamicDTOGet;
String dynamicDTOGetStatus = "";
do {
String post = HttpUtil.get(humanBaseUrl + status + "/" + dynamicDTO.getUid());
dynamicDTOGet = JSONUtil.toBean(post, HumanGenerateDTO.class);
dynamicDTOGetStatus = dynamicDTOGet.getStatus();
} while (!dynamicDTOGetStatus.equals("completed"));
// 如果已经生成了视频,那么直接拿到这个视频
FileResource fileResource = convertBase64ToFile("dynamic", FileUtil.getName(imageFile), dynamicDTOGet.getVideo());
human.setDynamicVideoFileId(fileResource.getId());
human.setImageName(fileResource.getFileName());
// 诊断闻讯绑定动态视频
List<AskPatientAnswer> askPatientAnswerList = new ArrayList<>();
AskPatientAnswer askPatientAnswerDynamic = askPatientAnswerService.queryAnswerIdByMedicalId(medicalId, "\"动态视频\"");
AskPatientAnswer patientAnswerDynamic = new AskPatientAnswer();
patientAnswerDynamic.setId(askPatientAnswerDynamic.getId());
patientAnswerDynamic.setAnswerResourceId(fileResource.getId());
askPatientAnswerList.add(patientAnswerDynamic);
// 你好
AskPatientAnswer askPatientAnswerHallo = askPatientAnswerService.queryAnswerIdByMedicalId(medicalId, "\"你好\"");
AskPatientAnswer patientAnswerHallo = new AskPatientAnswer();
patientAnswerHallo.setId(askPatientAnswerHallo.getId());
patientAnswerHallo.setAnswer("你好");
askPatientAnswerList.add(patientAnswerHallo);
// 异常
AskPatientAnswer askPatientAnswerError = askPatientAnswerService.queryAnswerIdByMedicalId(medicalId, "\"错误\"");
AskPatientAnswer patientAnswerError = new AskPatientAnswer();
patientAnswerError.setId(askPatientAnswerError.getId());
patientAnswerError.setAnswer("异常");
askPatientAnswerList.add(patientAnswerError);
askPatientAnswerService.updateBatchById(askPatientAnswerList);
// 完成
MedicalRec medicalRec1 = new MedicalRec();
medicalRec1.setMedicalStatus(EnumMedicalRec.COMPLETE.getCode());
medicalRec1.setId(medicalId);
medicalRecService.updateById(medicalRec1);
human.setDynamicTaskUid(dynamicDTO.getUid());
}
}
@ -238,14 +281,13 @@ public class HumanManageServiceImpl implements HumanManageService {
@SneakyThrows
@Override
@Transactional
public boolean createHuman(MultipartFile imageFile, String medicalId) {
// 查询病例状态
MedicalRec medicalRec = medicalRecService.lambdaQuery()
.eq(MedicalRec::getMedicalStatus, EnumMedicalRec.DIGITAL_HUMAN_CREATED.getCode())
.eq(MedicalRec::getId, medicalId)
.one();
Assert.isTrue(null == medicalRec, "请先导入病例后再操作");
Assert.isTrue(null != medicalRec, "请先导入病例后再操作");
// 上传图片
FileResource fileResource = fileManageService.uploadFile(imageFile, imageFile.getContentType());
@ -258,22 +300,24 @@ public class HumanManageServiceImpl implements HumanManageService {
human.setUpdateUserId(UserUtil.getUser().getId());
humanService.save(human);
// 绑定病例
MedicalRec medicalRec1 = new MedicalRec();
medicalRec1.setMedicalStatus(EnumMedicalRec.ESTABLISHED_RECORD.getCode());
medicalRec1.setHumanId(human.getId());
medicalRec1.setId(medicalId);
medicalRecService.updateById(medicalRec1);
Human one = humanService.lambdaQuery().eq(Human::getId, human.getId()).one();
// 异步调用生成数字人
humanExecutor.submit(() -> {
try {
generateHuman(human.getId(), medicalId);
generateHuman(one.getId(), medicalId);
} catch (Exception e) {
log.error("createHuman:生成数字人异常", e);
throw new BusinessException("生成数字人异常");
}
});
// 绑定病例
MedicalRec medicalRec1 = new MedicalRec();
medicalRec1.setMedicalStatus(EnumMedicalRec.ESTABLISHED_RECORD.getCode());
medicalRec1.setHumanId(human.getId());
medicalRec1.setId(medicalId);
medicalRecService.updateById(medicalRec1);
return true;
}
}

@ -24,10 +24,10 @@ public class ClinicalInterviewDTO {
@Alias(value = "问诊Ⅱ")
private String ConsultationII;
@Alias(value = "问题")
@Alias(value = "*问题(可不选择具体问题,根据问诊类目系统识别问诊意图)")
private String QuestionIntentRecognition;
@Alias(value = "患者回复")
@Alias(value = "患者回复(必填-模拟专业度较高问诊场景需要 获取有效的问诊回复)")
private String PatientResponseRequired;
}

@ -25,7 +25,7 @@ public interface AskTemplateQuestionLibraryMapper extends BaseMapper<AskTemplate
@Param("askQuestionLibrary") AskQuestionLibraryReqVo askQuestionLibrary);
String queryByName(@Param("askQuestionLibrary") String nameZh);
String queryByName(String nameZh);
}

@ -16,11 +16,11 @@ public interface AskTemplateQuestionSimilarityMapper extends BaseMapper<AskTempl
/**
*
* @param nameZh
* @param similarityQuestion
* @param libraryId
* @param questionIntentRecognitionon
* @return
*/
public AskTemplateQuestionSimilarity querySimilarityQuestionByNameZhAndSimilarityQuestion(String nameZh, String similarityQuestion);
public AskTemplateQuestionSimilarity querySimilarityQuestion(String libraryId, String questionIntentRecognitionon);
/**
*

@ -4,6 +4,7 @@ import com.supervision.dto.ClinicalInterviewDTO;
import com.supervision.model.AskTemplateQuestionLibrary;
import com.supervision.model.AskTemplateQuestionSimilarity;
import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
@ -34,11 +35,11 @@ public interface AskTemplateQuestionSimilarityService extends IService<AskTempla
/**
*
* @param nameZh
* @param similarityQuestion
* @param libraryId
* @param questionIntentRecognition
* @return
*/
AskTemplateQuestionSimilarity querySimilarityQuestionByNameZhAndSimilarityQuestion(String nameZh, String similarityQuestion);
AskTemplateQuestionSimilarity querySimilarityQuestion(@Param("libraryId") String libraryId, @Param("questionIntentRecognition") String questionIntentRecognition);
/**

@ -54,13 +54,13 @@ public class AskTemplateQuestionSimilarityServiceImpl extends ServiceImpl<AskTem
/**
*
*
* @param nameZh
* @param similarityQuestion
* @param libraryId
* @param questionIntentRecognition
* @return
*/
@Override
public AskTemplateQuestionSimilarity querySimilarityQuestionByNameZhAndSimilarityQuestion(String nameZh, String similarityQuestion) {
return this.baseMapper.querySimilarityQuestionByNameZhAndSimilarityQuestion(nameZh, similarityQuestion);
public AskTemplateQuestionSimilarity querySimilarityQuestion(String libraryId, String questionIntentRecognition) {
return this.baseMapper.querySimilarityQuestion(libraryId, questionIntentRecognition);
}

@ -36,10 +36,10 @@
where dict_id in
(select id
from vp_common_dic
where code in ('system_silent', 'system_dynamic'))) ql
where code in ('system_error','system_hello','system_default','system_silent', 'system_dynamic'))) ql
on apa.library_question_id = ql.id
where medical_id = #{medicalId}
and ql.question = '["' + #{vidioType} + '"]'
where medical_id = #{arg0}
and JSON_CONTAINS(ql.question, #{arg1})
order by apa.medical_id
</select>
</mapper>

@ -23,12 +23,12 @@
<resultMap id="askQuestionLibraryResultMap" type="com.supervision.vo.manage.AskQuestionLibraryResVo">
<id property="id" column="id" />
<result property="code" column="code" />
<result property="code" column="code" />
<result property="dictId" column="dictId" />
<result property="libraryQuestionId" column="libraryQuestionId" />
<result property="nameZhPath" column="nameZhPath" />
<id property="id" column="id"/>
<result property="code" column="code"/>
<result property="code" column="code"/>
<result property="dictId" column="dictId"/>
<result property="libraryQuestionId" column="libraryQuestionId"/>
<result property="nameZhPath" column="nameZhPath"/>
</resultMap>
@ -51,7 +51,7 @@
and cd.code = #{askQuestionLibrary.code}
</if>
<if test="askQuestionLibrary.description != null and askQuestionLibrary.description != '' ">
and atql.standard_question like CONCAT('%', #{askQuestionLibrary.description}, '%')
and atql.standard_question like CONCAT('%', #{askQuestionLibrary.description}, '%')
</if>
<if test="askQuestionLibrary.dictId != null and askQuestionLibrary.dictId != '' ">
and atql.dict_id = #{askQuestionLibrary.dictId}
@ -66,11 +66,13 @@
order by cd.id asc ,atql.create_time desc
</sql>
<select id="queryList" resultMap="askQuestionLibraryResultMap" parameterType="com.supervision.vo.manage.AskQuestionLibraryReqVo">
<select id="queryList" resultMap="askQuestionLibraryResultMap"
parameterType="com.supervision.vo.manage.AskQuestionLibraryReqVo">
<include refid="queryListsql"></include>
</select>
<select id="queryPageList" resultMap="askQuestionLibraryResultMap" resultType="com.supervision.vo.manage.AskQuestionLibraryResVo">
<select id="queryPageList" resultMap="askQuestionLibraryResultMap"
resultType="com.supervision.vo.manage.AskQuestionLibraryResVo">
<include refid="queryListsql"></include>
</select>

@ -22,23 +22,6 @@
</sql>
<select id="querySimilarityQuestionByNameZhAndSimilarityQuestion" resultMap="BaseResultMap"
resultType="java.lang.String">
select *
from vp_ask_template_question_similarity s
where s.library_id = (select l.id
from vp_ask_template_question_library l
where l.dict_id = (select id
from vp_common_dic d
where d.parent_id IS NOT NULL
and d.group_code = 'AQT'
and d.parent_id != '179'
and d.name_zh = (#{nameZh})))
and similarity_question = #{similarityQuestion};
</select>
<select id="queryAskTemplateQuestionSimilarityByLibraryId" resultType="java.lang.String"
parameterType="java.lang.String">
select s.similarity_question as similarityQuestion
@ -49,4 +32,14 @@
</select>
<select id="querySimilarityQuestion"
parameterType="java.lang.String"
resultType="com.supervision.model.AskTemplateQuestionSimilarity">
select *
from vp_ask_template_question_similarity s
where s.library_id = #{arg0}
and similarity_question = #{arg1}
</select>
</mapper>

Loading…
Cancel
Save