浏览代码

fix
手术未结束,不可推送数据

lifang 3 月之前
父节点
当前提交
c78019dfbe

+ 4 - 0
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/mapper/BizQuestionMapper.java

@@ -32,8 +32,12 @@ public interface BizQuestionMapper {
 
     List<BizQuestionEntity> convertEntityList(List<BizQuestionPO> source);
 
+    List<BizQuestionEntity> cwxDeptQuesiontCnvertEntityList(List<BizWxDeptQuestionVO> source);
+
     List<BizWxDeptQuestionVO> convertWxDeptQuestionVOList(List<BizQuestionPO> list);
 
+    List<BizWxDeptQuestionVO> dtoConvertWxDeptQuestionVOList(List<BizQuestionDTO> list);
+
     @Mappings({
             @Mapping(target = "groupId", ignore = true),
             @Mapping(target = "id",  ignore = true)

+ 6 - 0
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/IBizClinicRoomService.java

@@ -19,6 +19,9 @@ import cn.tr.module.smart.wx.controller.vo.BizAiAgentParamVO;
 import cn.tr.module.smart.wx.controller.vo.BizWxAppletClinicDetailVO;
 import cn.tr.module.smart.wx.controller.vo.BizWxDeptQuestionVO;
 import cn.tr.module.smart.wx.dto.*;
+import com.alibaba.dashscope.exception.InputRequiredException;
+import com.alibaba.dashscope.exception.NoApiKeyException;
+import org.springframework.cache.annotation.Cacheable;
 
 import java.io.IOException;
 import java.util.Collection;
@@ -197,4 +200,7 @@ public interface IBizClinicRoomService {
      */
     Boolean stdInsertDoctorApp(BizClinicAddOrEditDTO source);
 
+    List<BizWxDeptQuestionVO> generatePreSurgeryQuestionnaireAi(String clinicId) throws NoApiKeyException, InputRequiredException;
+
+    List<BizWxDeptQuestionVO> getPreSurgeryQuestionnaireAi(String clinicId);
 }

+ 30 - 3
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/impl/BizClinicRoomServiceImpl.java

@@ -13,9 +13,7 @@ import cn.tr.module.smart.app.controller.dto.AppDoctorClinicRoomDTO;
 import cn.tr.module.smart.app.controller.vo.AppDoctorInfusionHistoryVO;
 import cn.tr.module.smart.app.controller.vo.DoctorClinicRoomVO;
 import cn.tr.module.smart.app.controller.vo.WxDoctorClinicRoomThumbnailVO;
-import cn.tr.module.smart.common.dto.BizClinicAddOrEditDTO;
-import cn.tr.module.smart.common.dto.BizClinicRoomDTO;
-import cn.tr.module.smart.common.dto.BizClinicRoomQueryDTO;
+import cn.tr.module.smart.common.dto.*;
 import cn.tr.module.smart.common.entity.BizWxAppletQuestionAnswerEntity;
 import cn.tr.module.smart.common.enums.ClinicPhaseEnums;
 import cn.tr.module.smart.common.enums.InfusionBindType;
@@ -24,6 +22,7 @@ import cn.tr.module.smart.common.enums.UserTypeEnums;
 import cn.tr.module.smart.common.mapper.BizClinicRoomMapper;
 import cn.tr.module.smart.common.mapper.BizInfusionHistoryMapper;
 import cn.tr.module.smart.common.mapper.BizQuestionAnswerMapper;
+import cn.tr.module.smart.common.mapper.BizQuestionMapper;
 import cn.tr.module.smart.common.po.*;
 import cn.tr.module.smart.common.properties.ALiYunProperties;
 import cn.tr.module.smart.common.repository.*;
@@ -42,9 +41,12 @@ import cn.tr.module.smart.wx.dto.*;
 import cn.tr.module.smart.wx.utils.Id2Utils;
 import cn.tr.module.sys.user.po.SysUserPO;
 import cn.tr.module.sys.user.repository.SysUserRepository;
+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 org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -120,6 +122,10 @@ public class BizClinicRoomServiceImpl implements IBizClinicRoomService {
 
     @Autowired
     private SysUserRepository sysUserRepository;
+
+    @Autowired
+    @Lazy
+    private IBizQuestionGroupService questionGroupService;
     @Override
     public List<BizWxAppletClinicDetailVO> stdSelectWxAppletClinicList(BizWxAppletClinicQueryDTO query) {
         return baseRepository.stdSelectWxAppletClinicList(query);
@@ -739,6 +745,27 @@ public class BizClinicRoomServiceImpl implements IBizClinicRoomService {
         return Boolean.TRUE;
     }
 
+    @Override
+    @Cacheable(value = "ai::preSurgeryQuestionnaire#2592000",key = "'groupId:' + #clinicId")
+    public List<BizWxDeptQuestionVO> generatePreSurgeryQuestionnaireAi(String clinicId) throws NoApiKeyException, InputRequiredException {
+        //如果未设置的话,采用AI生成一组问卷
+        BizClinicRoomPO bizClinicRoomPO = baseRepository.selectById(clinicId);
+        BizQuestionGroupAiDTO query = new BizQuestionGroupAiDTO();
+        query.setName(bizClinicRoomPO.getClinicName()+"术前问卷");
+        query.setType(ClinicPhaseEnums.BEFORE);
+        List<BizQuestionDTO> bizQuestionDTOS = questionGroupService.generateAi(query);
+        return BizQuestionMapper.INSTANCE.dtoConvertWxDeptQuestionVOList(bizQuestionDTOS)
+                .stream()
+                .peek(t->t.setGroupId(clinicId))
+                .collect(Collectors.toList());
+    }
+
+    @Cacheable(value = "ai::preSurgeryQuestionnaire#2592000", key = "'groupId:' + #clinicId")
+    @Override
+    public List<BizWxDeptQuestionVO> getPreSurgeryQuestionnaireAi(String clinicId){
+        return null;
+    }
+
     /**
      * 微信小程序基于医生已填写的信息更新数据
      */

+ 11 - 1
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/impl/BizQuestionAnswerServiceImpl.java

@@ -21,6 +21,7 @@ import cn.tr.module.smart.common.repository.BizClinicRoomRepository;
 import cn.tr.module.smart.common.repository.BizQuestionAnswerRepository;
 import cn.tr.module.smart.common.repository.BizQuestionGroupRepository;
 import cn.tr.module.smart.common.repository.BizQuestionRepository;
+import cn.tr.module.smart.common.service.IBizClinicRoomService;
 import cn.tr.module.smart.common.service.IBizClinicRoomUndoService;
 import cn.tr.module.smart.common.service.IBizQuestionAnswerService;
 import cn.tr.module.smart.common.service.IBizQuestionService;
@@ -70,6 +71,10 @@ public class BizQuestionAnswerServiceImpl implements IBizQuestionAnswerService {
     @Autowired
     @Lazy
     private IBizClinicRoomUndoService clinicRoomUndoService;
+
+    @Autowired
+    @Lazy
+    private IBizClinicRoomService clinicRoomService;
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean stdWxAppletCommitPreSurgeryQuestionnaireAnswer(BizWxAppletCommitSurgeryQuestionDTO source) {
@@ -92,7 +97,12 @@ public class BizQuestionAnswerServiceImpl implements IBizQuestionAnswerService {
                 .eq(BizQuestionPO::getGroupId, source.getQuestionGroupId()))
         );
         if (CollectionUtil.isEmpty(questionList)) {
-            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001, "问卷问题为空,提交失败");
+            //如果不在库中,从缓存中查询
+            List<BizWxDeptQuestionVO> questionVOList = clinicRoomService.getPreSurgeryQuestionnaireAi(source.getClinicId());
+            if(CollectionUtil.isEmpty(questionVOList)){
+                throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001, "问卷问题为空,提交失败");
+            }
+            questionList=BizQuestionMapper.INSTANCE.cwxDeptQuesiontCnvertEntityList(questionVOList);
         }
         questionAnswer.setQuestion(questionList);
         baseRepository.insert(questionAnswer);

+ 11 - 3
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/wx/controller/BizWxAppletQuestionController.java

@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil;
 
 import cn.tr.core.pojo.CommonResult;
 import cn.tr.module.smart.common.enums.ClinicPhaseEnums;
+import cn.tr.module.smart.common.repository.BizClinicRoomRepository;
 import cn.tr.module.smart.common.service.IBizClinicRoomService;
 import cn.tr.module.smart.common.service.IBizQuestionAnswerService;
 import cn.tr.module.smart.common.service.IBizQuestionGroupService;
@@ -15,11 +16,12 @@ import cn.tr.module.smart.wx.controller.vo.BizWebQuestionGroupVO;
 import cn.tr.module.smart.wx.controller.vo.BizWxDeptQuestionVO;
 import cn.tr.module.smart.wx.dto.BizWxAppletCommitSurgeryQuestionDTO;
 import cn.tr.plugin.mybatis.base.BaseController;
+import com.alibaba.dashscope.exception.InputRequiredException;
+import com.alibaba.dashscope.exception.NoApiKeyException;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import java.util.*;
@@ -40,15 +42,21 @@ public class BizWxAppletQuestionController extends BaseController{
     private final IBizQuestionAnswerService questionAnswerService;
     private final IBizQuestionService bizQuestionService;
     private final IBizQuestionGroupService questionGroupService;
+    private final IBizQuestionGroupService bizQuestionGroupService;
+    private final BizClinicRoomRepository clinicRoomRepository;
     @ApiOperationSupport(author = "zzy",order = 1)
     @GetMapping("/preSurgery/query/{clinicId}")
     @ApiOperation(value = "查看术前问卷",notes = "权限: 无")
-    public CommonResult<List<BizWxDeptQuestionVO>> preSurgeryQuestionnaire(@PathVariable("clinicId") String clinicId){
+    public CommonResult<List<BizWxDeptQuestionVO>> preSurgeryQuestionnaire(@PathVariable("clinicId") String clinicId) throws NoApiKeyException, InputRequiredException {
         List<BizWxDeptQuestionVO> result=questionAnswerService.stdSelectWxAppletPreSurgeryQuestionnaire(clinicId);
         if(CollectionUtil.isNotEmpty(result)){
             return CommonResult.success(result);
         }
-        return CommonResult.success(clinicRoomService.selectPreSurgeryQuestionnaire(clinicId));
+        List<BizWxDeptQuestionVO> bizWxDeptQuestionVOS = clinicRoomService.selectPreSurgeryQuestionnaire(clinicId);
+        if(CollectionUtil.isNotEmpty(bizWxDeptQuestionVOS)){
+            return CommonResult.success(bizWxDeptQuestionVOS);
+        }
+        return CommonResult.success(clinicRoomService.generatePreSurgeryQuestionnaireAi(clinicId));
     }
 
     @ApiOperationSupport(author = "lf",order = 2)