diff --git a/virtual-patient-common/src/main/java/com/supervision/util/RedisSequenceUtil.java b/virtual-patient-common/src/main/java/com/supervision/util/RedisSequenceUtil.java index ab0f3fe4..f85210dd 100644 --- a/virtual-patient-common/src/main/java/com/supervision/util/RedisSequenceUtil.java +++ b/virtual-patient-common/src/main/java/com/supervision/util/RedisSequenceUtil.java @@ -10,10 +10,15 @@ import org.springframework.data.redis.core.ValueOperations; import java.util.Date; import java.util.Map; +import java.util.Objects; +import java.util.function.Supplier; @Slf4j public class RedisSequenceUtil { + /** + * redisTemplate:不要直接使用redisTemplate属性,强烈建议通过getRedisTemplate()方法获取对象 + */ private volatile static RedisTemplate redisTemplate = null; @@ -40,6 +45,46 @@ public class RedisSequenceUtil { return nowDay + String.format("%03d", getIncrement("complex_disease_no_seq_"+nowDay)); } + /** + * Q0000001 + * @param supplier 初始值 + * @return Q0000001 + */ + public static String getQuestionLibraryCode(Supplier supplier){ + + RedisTemplate redisTemplate = getRedisTemplate(); + if (Objects.nonNull(supplier) && + Boolean.FALSE.equals(redisTemplate.hasKey("question_library_code_seq"))){ + Long code = supplier.get(); + if (Objects.nonNull(code)){ + redisTemplate.opsForValue().set("question_library_code_seq",code.toString()); + } + } + Long increment = getIncrement("question_library_code_seq"); + + return "Q" + String.format("%07d", increment); + } + + /** + * A0000029 + * @param supplier 初始值 + * @return A0000029 + */ + public static String getQuestionLibraryDefaultAnswerCode(Supplier supplier){ + + RedisTemplate redisTemplate = getRedisTemplate(); + if (Objects.nonNull(supplier) && + Boolean.FALSE.equals(redisTemplate.hasKey("question_library_default_answer_code_seq"))){ + Long code = supplier.get(); + if (Objects.nonNull(code)){ + redisTemplate.opsForValue().set("question_library_default_answer_code_seq",code.toString()); + } + } + Long increment = getIncrement("question_library_default_answer_code_seq"); + + return "A" + String.format("%07d", increment); + } + /** * 获取自增长值,增长步伐为1 * @param key redis key @@ -54,7 +99,7 @@ public class RedisSequenceUtil { * 获取redisTemplate * @return redisTemplate */ - public static RedisTemplate getRedisTemplate() { + public static RedisTemplate getRedisTemplate() { if (redisTemplate == null) { synchronized (RedisSequenceUtil.class){ if (null == redisTemplate){ diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/controller/config/AskQuestionLibraryManageController.java b/virtual-patient-manage/src/main/java/com/supervision/manage/controller/config/AskQuestionLibraryManageController.java index ff49e6df..4b38bb7d 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/controller/config/AskQuestionLibraryManageController.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/controller/config/AskQuestionLibraryManageController.java @@ -9,7 +9,6 @@ import com.supervision.vo.manage.AskQuestionLibraryReqVo; import com.supervision.vo.manage.AskQuestionLibraryResVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import io.swagger.v3.oas.annotations.parameters.RequestBody; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -17,7 +16,7 @@ import java.util.List; @Api(tags = "问题库管理") @RestController -@RequestMapping("aqLibrary") +@RequestMapping("/aqLibrary") @RequiredArgsConstructor public class AskQuestionLibraryManageController { @@ -51,7 +50,7 @@ public class AskQuestionLibraryManageController { @ApiOperation("更新问题库信息") - @PostMapping("/updateQuestionLibrary") + @PutMapping("/updateQuestionLibrary") public boolean updateQuestionLibrary(@RequestBody AskTemplateQuestionLibrary askTemplateQuestionLibrary) { return askQuestionLibraryManageService.updateQuestionLibrary(askTemplateQuestionLibrary); diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/AskQuestionLibraryManageServiceImpl.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/AskQuestionLibraryManageServiceImpl.java index 162550bb..82a23882 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/AskQuestionLibraryManageServiceImpl.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/AskQuestionLibraryManageServiceImpl.java @@ -1,12 +1,14 @@ package com.supervision.manage.service.impl; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.supervision.manage.service.AskQuestionLibraryManageService; import com.supervision.model.AskTemplateQuestionLibrary; import com.supervision.model.CommonDic; import com.supervision.service.AskTemplateQuestionLibraryService; import com.supervision.service.CommonDicService; +import com.supervision.util.RedisSequenceUtil; import com.supervision.vo.manage.AskQuestionLibraryReqVo; import com.supervision.vo.manage.AskQuestionLibraryResVo; import lombok.RequiredArgsConstructor; @@ -44,6 +46,24 @@ public class AskQuestionLibraryManageServiceImpl implements AskQuestionLibraryMa public String saveQuestionLibrary(AskTemplateQuestionLibrary askTemplateQuestionLibrary) { assertSave(askTemplateQuestionLibrary); + String nextCode = RedisSequenceUtil.getQuestionLibraryCode(() -> { + String maxCode = askTemplateQuestionLibraryService.getMaxCode(); + if (StrUtil.isNotEmpty(maxCode)) { + return Long.parseLong(StrUtil.removePrefix(maxCode, "Q")); + } + return null; + }); + + String nextDefaultCode = RedisSequenceUtil.getQuestionLibraryDefaultAnswerCode(() -> { + String code = askTemplateQuestionLibraryService.getMaxDefaultAnswerCode(); + if (StrUtil.isNotEmpty(code)) { + return Long.parseLong(StrUtil.removePrefix(code, "A")); + } + return null; + }); + + askTemplateQuestionLibrary.setCode(nextCode); + askTemplateQuestionLibrary.setDefaultAnswerCode(nextDefaultCode); askTemplateQuestionLibraryService.save(askTemplateQuestionLibrary); return askTemplateQuestionLibrary.getId(); } @@ -64,8 +84,8 @@ public class AskQuestionLibraryManageServiceImpl implements AskQuestionLibraryMa } private void assertSave(AskTemplateQuestionLibrary askTemplateQuestionLibrary){ - Assert.notEmpty(askTemplateQuestionLibrary.getCode(),"编码不能为空"); - Assert.notEmpty(askTemplateQuestionLibrary.getQuestion(),"问题不能为空"); + Assert.notNull(askTemplateQuestionLibrary.getDictId(),"问题类目不能为空"); + Assert.notEmpty(askTemplateQuestionLibrary.getDescription(),"问题不能为空"); Assert.notEmpty(askTemplateQuestionLibrary.getDefaultAnswer(),"默认回答不能为空"); } } diff --git a/virtual-patient-model/src/main/java/com/supervision/service/AskTemplateQuestionLibraryService.java b/virtual-patient-model/src/main/java/com/supervision/service/AskTemplateQuestionLibraryService.java index 9d8e4b51..b73177bc 100644 --- a/virtual-patient-model/src/main/java/com/supervision/service/AskTemplateQuestionLibraryService.java +++ b/virtual-patient-model/src/main/java/com/supervision/service/AskTemplateQuestionLibraryService.java @@ -19,4 +19,8 @@ public interface AskTemplateQuestionLibraryService extends IService queryPageList(Integer pageNum, Integer pageSize, AskQuestionLibraryReqVo askQuestionLibraryReqVo); + + String getMaxCode(); + + String getMaxDefaultAnswerCode(); } diff --git a/virtual-patient-model/src/main/java/com/supervision/service/impl/AskTemplateQuestionLibraryServiceImpl.java b/virtual-patient-model/src/main/java/com/supervision/service/impl/AskTemplateQuestionLibraryServiceImpl.java index 11dc6a63..ac6e0fb3 100644 --- a/virtual-patient-model/src/main/java/com/supervision/service/impl/AskTemplateQuestionLibraryServiceImpl.java +++ b/virtual-patient-model/src/main/java/com/supervision/service/impl/AskTemplateQuestionLibraryServiceImpl.java @@ -1,5 +1,6 @@ package com.supervision.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.supervision.model.AskTemplateQuestionLibrary; @@ -10,6 +11,7 @@ import com.supervision.vo.manage.AskQuestionLibraryResVo; import org.springframework.stereotype.Service; import java.util.List; +import java.util.Objects; /** * @author flevance @@ -32,6 +34,26 @@ public class AskTemplateQuestionLibraryServiceImpl extends ServiceImpl(pageNum,pageSize),askQuestionLibraryReqVo); } + + @Override + public String getMaxCode() { + AskTemplateQuestionLibrary askTemplateQuestionLibrary = super.getBaseMapper() + .selectOne(new QueryWrapper().select("max(code) as code")); + if (Objects.isNull(askTemplateQuestionLibrary)){ + return null; + } + return askTemplateQuestionLibrary.getCode(); + } + @Override + public String getMaxDefaultAnswerCode() { + AskTemplateQuestionLibrary askTemplateQuestionLibrary = super.getBaseMapper() + .selectOne(new QueryWrapper() + .select("max(default_answer_code) as default_answer_code")); + if (Objects.isNull(askTemplateQuestionLibrary)){ + return null; + } + return askTemplateQuestionLibrary.getDefaultAnswerCode(); + } } diff --git a/virtual-patient-model/src/main/java/com/supervision/vo/manage/AskQuestionLibraryReqVo.java b/virtual-patient-model/src/main/java/com/supervision/vo/manage/AskQuestionLibraryReqVo.java index 61d7bd59..753e3a29 100644 --- a/virtual-patient-model/src/main/java/com/supervision/vo/manage/AskQuestionLibraryReqVo.java +++ b/virtual-patient-model/src/main/java/com/supervision/vo/manage/AskQuestionLibraryReqVo.java @@ -12,7 +12,15 @@ public class AskQuestionLibraryReqVo { @ApiModelProperty("疾病id") private String diseaseId; - @ApiModelProperty("问题") + /** + *Deprecated @since 2.1.0 question:是由description生成的一组具有相同含义的语句, + * 主要用于rasa语料识别,不直接被用户使用 + */ + @Deprecated + @ApiModelProperty(name = "问题",hidden = true) private String question; + @ApiModelProperty("问题") + private String description; + } diff --git a/virtual-patient-model/src/main/java/com/supervision/vo/manage/AskQuestionLibraryResVo.java b/virtual-patient-model/src/main/java/com/supervision/vo/manage/AskQuestionLibraryResVo.java index 0edf74d1..46d0c9e1 100644 --- a/virtual-patient-model/src/main/java/com/supervision/vo/manage/AskQuestionLibraryResVo.java +++ b/virtual-patient-model/src/main/java/com/supervision/vo/manage/AskQuestionLibraryResVo.java @@ -20,9 +20,12 @@ public class AskQuestionLibraryResVo { @ApiModelProperty("问题类目id") private String dictId; - @ApiModelProperty("问题") + @ApiModelProperty("由用户传入的问题生成的问题列表") private List question; + @ApiModelProperty("用户设置的问题") + private String description; + @ApiModelProperty("默认回答") private String defaultAnswer; diff --git a/virtual-patient-model/src/main/resources/mapper/AskTemplateQuestionLibraryMapper.xml b/virtual-patient-model/src/main/resources/mapper/AskTemplateQuestionLibraryMapper.xml index 1f62d3e7..17448c71 100644 --- a/virtual-patient-model/src/main/resources/mapper/AskTemplateQuestionLibraryMapper.xml +++ b/virtual-patient-model/src/main/resources/mapper/AskTemplateQuestionLibraryMapper.xml @@ -38,6 +38,7 @@ + select atql.id as id, @@ -45,18 +46,22 @@ atql.id as libraryQuestionId, cd.code as code, atql.dict_id as dictId, + atql.description as description, atql.question as question, cd.name_zh_path as nameZhPath, cd.name_zh as nameZh from vp_ask_template_question_library atql left join vp_common_dic cd on atql.dict_id = cd.id + + atql.id != '1739875168974536705' - cd.code = #{askQuestionLibrary.code} + and cd.code = #{askQuestionLibrary.code} - - JSON_EXTRACT(question, '$[*]') like CONCAT('%', #{askQuestionLibrary.question}, '%') + + and atql.question like CONCAT('%', #{askQuestionLibrary.description}, '%') + order by atql.create_time desc