|
|
@@ -2,21 +2,17 @@ package cn.tr.module.smart.common.service.impl;
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
|
-import cn.hutool.core.map.MapUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
-import cn.hutool.core.util.StrUtil;
|
|
|
import cn.hutool.crypto.digest.DigestUtil;
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
import cn.tr.core.exception.ServiceException;
|
|
|
import cn.tr.core.exception.TRExcCode;
|
|
|
import cn.tr.core.strategy.LoginUserStrategy;
|
|
|
import cn.tr.core.tenant.TenantContextHolder;
|
|
|
-import cn.tr.module.smart.app.controller.vo.WxDoctorClinicRoomThumbnailVO;
|
|
|
import cn.tr.module.smart.common.dto.BizQuestionDTO;
|
|
|
import cn.tr.module.smart.common.dto.BizQuestionGroupAiDTO;
|
|
|
import cn.tr.module.smart.common.dto.BizQuestionGroupDTO;
|
|
|
import cn.tr.module.smart.common.dto.BizQuestionGroupQueryDTO;
|
|
|
-import cn.tr.module.smart.common.entity.BizWxAppletQuestionAnswerEntity;
|
|
|
import cn.tr.module.smart.common.enums.QuestionGroupTypeEnums;
|
|
|
import cn.tr.module.smart.common.mapper.*;
|
|
|
import cn.tr.module.smart.common.po.*;
|
|
|
@@ -28,21 +24,17 @@ import cn.tr.module.smart.common.repository.BizQuestionRepository;
|
|
|
import cn.tr.module.smart.common.service.IBizQuestionGroupService;
|
|
|
import cn.tr.module.smart.common.service.IBizQuestionGroupSquareService;
|
|
|
import cn.tr.module.smart.web.dto.BizDeptUnlinkQuestionQueryDTO;
|
|
|
-import cn.tr.module.smart.web.dto.BizWebQuestionAnswerDTO;
|
|
|
import cn.tr.module.smart.web.vo.BizDeptUnlinkQuestionVO;
|
|
|
-import cn.tr.module.smart.web.vo.BizWebQuestionAnswerVO;
|
|
|
import cn.tr.module.smart.wx.controller.vo.BizWebQuestionGroupVO;
|
|
|
-import cn.tr.module.smart.wx.controller.vo.BizWxDeptQuestionVO;
|
|
|
-import cn.tr.module.sys.storage.dto.SysStorageRecordDTO;
|
|
|
-import com.alibaba.dashscope.app.Application;
|
|
|
-import com.alibaba.dashscope.app.ApplicationParam;
|
|
|
-import com.alibaba.dashscope.app.ApplicationResult;
|
|
|
+import com.alibaba.dashscope.aigc.generation.Generation;
|
|
|
+import com.alibaba.dashscope.aigc.generation.GenerationParam;
|
|
|
+import com.alibaba.dashscope.aigc.generation.GenerationResult;
|
|
|
+import com.alibaba.dashscope.common.Message;
|
|
|
+import com.alibaba.dashscope.common.Role;
|
|
|
import com.alibaba.dashscope.exception.InputRequiredException;
|
|
|
import com.alibaba.dashscope.exception.NoApiKeyException;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
-import com.fasterxml.jackson.core.type.TypeReference;
|
|
|
-import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.core.io.ClassPathResource;
|
|
|
@@ -50,8 +42,6 @@ import org.springframework.core.io.Resource;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.util.FileCopyUtils;
|
|
|
-import org.springframework.web.multipart.MultipartFile;
|
|
|
-
|
|
|
import javax.annotation.PostConstruct;
|
|
|
import java.io.IOException;
|
|
|
import java.io.InputStream;
|
|
|
@@ -298,36 +288,33 @@ public class BizQuestionGroupServiceImpl implements IBizQuestionGroupService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public List<BizQuestionDTO> generateAi(BizQuestionGroupAiDTO source) {
|
|
|
+ public List<BizQuestionDTO> generateAi(BizQuestionGroupAiDTO source) throws NoApiKeyException, InputRequiredException {
|
|
|
+ Generation gen = new Generation();
|
|
|
+ Message systemMsg = Message.builder()
|
|
|
+ .role(Role.SYSTEM.getValue())
|
|
|
+ .content("你是一名专业的医疗问卷设计师,专注于手术患者管理。")
|
|
|
+ .build();
|
|
|
//使用缓存模版
|
|
|
String prompt = promptTemplate;
|
|
|
|
|
|
- prompt=String.format(prompt,source.getName(),
|
|
|
- QuestionGroupTypeEnums.AFTER.equals(source.getType())?"术前问卷":"术后问卷",
|
|
|
- source.getFrequency(),
|
|
|
- source.getInterval());
|
|
|
-
|
|
|
- String imageUrl;
|
|
|
- SysStorageRecordDTO uploadResult = null;
|
|
|
- try {
|
|
|
-
|
|
|
- ApplicationParam param = ApplicationParam.builder()
|
|
|
- .appId(aliyunProperties.getAppId())
|
|
|
- .apiKey(aliyunProperties.getApiKey())
|
|
|
- .prompt(prompt)
|
|
|
- .build();
|
|
|
+ prompt = promptTemplate.replace("${name}", source.getName())
|
|
|
+ .replace("${type}", QuestionGroupTypeEnums.AFTER.equals(source.getType()) ? "术前问卷" : "术后问卷")
|
|
|
+ .replace("${frequency}", String.valueOf(source.getFrequency()))
|
|
|
+ .replace("${interval}", String.valueOf(source.getInterval()));
|
|
|
+ ;
|
|
|
|
|
|
- Application app = new Application();
|
|
|
- ApplicationResult response = app.call(param);
|
|
|
- String jsonResponse = response.getOutput().getText();
|
|
|
+ GenerationParam param = GenerationParam.builder()
|
|
|
+ .apiKey(aliyunProperties.getLlmApiKey())
|
|
|
+ .model(aliyunProperties.getLlmModel())
|
|
|
+ .enableThinking(Boolean.FALSE)
|
|
|
+ .messages(Arrays.asList(systemMsg, Message.builder()
|
|
|
+ .role(Role.USER.getValue())
|
|
|
+ .content(prompt)
|
|
|
+ .build()))
|
|
|
+ .resultFormat(GenerationParam.ResultFormat.MESSAGE)
|
|
|
+ .build();
|
|
|
+ GenerationResult result = gen.call(param);
|
|
|
+ return JSONUtil.toList(result.getOutput().getChoices().get(0).getMessage().getContent(), BizQuestionDTO.class);
|
|
|
|
|
|
-
|
|
|
- } catch (NoApiKeyException e) {
|
|
|
- throw new RuntimeException(e);
|
|
|
- } catch (InputRequiredException e) {
|
|
|
- throw new RuntimeException(e);
|
|
|
- }
|
|
|
- return null;
|
|
|
}
|
|
|
-
|
|
|
}
|