Parcourir la source

add
消息推送

lifang il y a 3 mois
Parent
commit
7148882a46
14 fichiers modifiés avec 213 ajouts et 27 suppressions
  1. 17 1
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/app/controller/AppClinicRoomController.java
  2. 15 6
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/app/controller/AppMessagePushController.java
  3. 6 4
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/dto/BizClinicRoomUndoDTO.java
  4. 10 4
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/register/WxSendTemplateMsgRegister.java
  5. 3 0
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/IBizClinicRoomService.java
  6. 3 0
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/IBizClinicRoomUndoService.java
  7. 8 0
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/IBizPainAssessmentService.java
  8. 8 0
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/IBizQuestionGroupService.java
  9. 6 0
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/impl/BizClinicRoomServiceImpl.java
  10. 15 1
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/impl/BizClinicRoomUndoServiceImpl.java
  11. 44 0
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/impl/BizPainAssessmentServiceImpl.java
  12. 46 10
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/impl/BizQuestionGroupServiceImpl.java
  13. 17 1
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/wx/config/WxTemplateSendHelper.java
  14. 15 0
      tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/wx/controller/vo/BizUndoMsgPushResultVO.java

+ 17 - 1
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/app/controller/AppClinicRoomController.java

@@ -1,5 +1,7 @@
 package cn.tr.module.smart.app.controller;
 
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.tr.core.pojo.CommonResult;
 import cn.tr.core.pojo.TableDataInfo;
 import cn.tr.core.validation.Insert;
@@ -11,6 +13,7 @@ import cn.tr.module.smart.app.controller.vo.WxDoctorClinicRoomThumbnailVO;
 import cn.tr.module.smart.app.controller.vo.DoctorClinicRoomVO;
 import cn.tr.module.smart.common.service.IBizClinicRoomService;
 import cn.tr.module.smart.common.dto.BizClinicAddOrEditDTO;
+import cn.tr.module.smart.wx.dto.BizMpPublishInfoDTO;
 import cn.tr.plugin.mybatis.base.BaseController;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
@@ -86,4 +89,17 @@ public class AppClinicRoomController extends BaseController {
         return CommonResult.success(clinicRoomService.queryPatientCode(source));
     }
 
-}
+    @ApiOperationSupport(author = "lf",order = 7)
+    @ApiOperation(value="判断当前手术是否可以推送消息至服务号   -1、不可推送 1、可推送至服务号和小程序 2、只可推送至小程序")
+    @GetMapping("/judgeConcernMp/{clinicId}")
+    public CommonResult<Integer> judgeConcernMp(@PathVariable("clinicId") String clinicId) {
+        BizMpPublishInfoDTO publishInfo= clinicRoomService.selectMpPushTaskInfoById(clinicId);
+        if(ObjectUtil.isNull(publishInfo)){
+            return CommonResult.success(-1);
+        }
+        if(StrUtil.isEmpty(publishInfo.getOpenId())){
+            return CommonResult.success(2);
+        }
+        return CommonResult.success(1);
+    }
+}

+ 15 - 6
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/app/controller/AppMessagePushController.java

@@ -4,12 +4,17 @@ package cn.tr.module.smart.app.controller;
 import cn.tr.core.pojo.CommonResult;
 import cn.tr.module.smart.app.controller.dto.AppMessageAssessmentPushDTO;
 import cn.tr.module.smart.app.controller.dto.AppMessageQuestionGroupPushDTO;
+import cn.tr.module.smart.common.service.IBizPainAssessmentService;
 import cn.tr.module.smart.common.service.IBizPatientService;
+import cn.tr.module.smart.common.service.IBizQuestionGroupService;
+import cn.tr.module.smart.wx.controller.vo.BizUndoMsgPushResultVO;
 import cn.tr.plugin.mybatis.base.BaseController;
 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 javax.annotation.Resource;
 
@@ -27,18 +32,22 @@ public class AppMessagePushController extends BaseController {
     @Resource
     private IBizPatientService bizPatientService;
 
+    @Autowired
+    private IBizPainAssessmentService assessmentService;
+
+    @Autowired
+    private IBizQuestionGroupService questionGroupService;
     @ApiOperationSupport(author = "lf", order = 1)
     @ApiOperation(value = "向手术患者推送镇痛评价请求", notes = "权限: 无")
     @PostMapping("/assessment")
-    public CommonResult<Boolean> assessment(@RequestBody AppMessageAssessmentPushDTO source) {
-        return CommonResult.success(Boolean.TRUE);
+    public CommonResult<BizUndoMsgPushResultVO> assessment(@RequestBody@Validated AppMessageAssessmentPushDTO source) {
+        return CommonResult.success(assessmentService.pushMpInfo(source.getClinicId()));
     }
 
     @ApiOperationSupport(author = "lf", order = 1)
     @ApiOperation(value = "向手术患者推送术后问卷请求", notes = "权限: 无")
     @PostMapping("/questionGroup")
-    public CommonResult<Boolean> questionGroup(@RequestBody AppMessageQuestionGroupPushDTO source) {
-        return CommonResult.success(Boolean.TRUE);
+    public CommonResult<BizUndoMsgPushResultVO> questionGroup(@RequestBody@Validated AppMessageQuestionGroupPushDTO source) {
+        return CommonResult.success(questionGroupService.pushMpInfo(source));
     }
-
-}
+}

+ 6 - 4
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/dto/BizClinicRoomUndoDTO.java

@@ -1,10 +1,10 @@
 package cn.tr.module.smart.common.dto;
 
-import lombok.ToString;
+import lombok.*;
 import cn.tr.core.validation.Update;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
+
 import javax.validation.constraints.*;
 import java.io.Serializable;
 import java.util.*;
@@ -17,6 +17,9 @@ import java.util.*;
 @Data
 @ApiModel("待办事项传输对象")
 @ToString
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
 public class BizClinicRoomUndoDTO implements Serializable {
     private static final long serialVersionUID = 1L;
     @ApiModelProperty(value = "id", position = 1)
@@ -39,6 +42,5 @@ public class BizClinicRoomUndoDTO implements Serializable {
     private Date publishTime;
 
     @ApiModelProperty("创建时间")
-    private String createTime;
-
+    private Date createTime;
 }

+ 10 - 4
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/register/WxSendTemplateMsgRegister.java

@@ -55,8 +55,8 @@ public class WxSendTemplateMsgRegister implements BeanPostProcessor {
     /**
      * 发送模板消
      */
-    public <T extends WxTemplateDTO> String sendMessage( String  pagePath, String unionId, T msg) throws WxErrorException {
-        return sendMessage(pagePath,unionId,null,msg);
+    public <T extends WxTemplateDTO> String sendMessage(String unionId, T msg,String tenantId,String clinicId) throws WxErrorException {
+        return sendMessage(unionId,null,msg,tenantId,clinicId);
     }
 
     @SuppressWarnings("unchecked")
@@ -64,7 +64,7 @@ public class WxSendTemplateMsgRegister implements BeanPostProcessor {
      * 发送模板消息
      * @param wxMpService
      */
-    public <T extends WxTemplateDTO> String sendMessage(String  pagePath, String unionId, String url, T msg) throws WxErrorException {
+    public <T extends WxTemplateDTO> String sendMessage( String unionId, String url, T msg,String tenantId,String clinicId) throws WxErrorException {
         if (msg == null) {
             throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001, "参数对象msg不能为空");
         }
@@ -81,7 +81,13 @@ public class WxSendTemplateMsgRegister implements BeanPostProcessor {
         if (handler.get() == null) {
             throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001, "没有找到对handler对象" + clazz);
         }
-        pagePath=StrUtil.isEmpty(pagePath)?"pages/login/login":pagePath;
+       String pagePath="pages/login/login";
+        if(StrUtil.isNotEmpty(tenantId)){
+            pagePath=pagePath+"&tenantId="+tenantId;
+            if(StrUtil.isNotEmpty(clinicId)){
+                pagePath=pagePath+"&clinicId="+clinicId;
+            }
+        }
         Boolean haveApplet=StrUtil.isNotBlank(pagePath);
         if(haveApplet&&wxMpService==null){
             return null;

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

@@ -9,6 +9,7 @@ import cn.tr.module.smart.common.dto.BizClinicRoomQueryDTO;
 import cn.tr.module.smart.wx.controller.vo.BizWxAppletClinicDetailVO;
 import cn.tr.module.smart.wx.controller.vo.BizWxDeptQuestionVO;
 import cn.tr.module.smart.common.dto.BizClinicAddOrEditDTO;
+import cn.tr.module.smart.wx.dto.BizMpPublishInfoDTO;
 import cn.tr.module.smart.wx.dto.BizWxAppletClinicQueryDTO;
 import cn.tr.module.smart.wx.dto.BizWxAppletFinishClinicDTO;
 import cn.tr.module.smart.wx.dto.BizWxUserCheckCardNoDTO;
@@ -125,4 +126,6 @@ public interface IBizClinicRoomService {
     List<WxDoctorClinicRoomThumbnailVO> queryPatientCode(AppDoctorClinicQueryByPatientCodeDTO source);
 
     AppDoctorInfusionHistoryVO selectByClinicRoomAndPatientByClinicId(String clinicId);
+
+    BizMpPublishInfoDTO selectMpPushTaskInfoById(String clinicId);
 }

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

@@ -18,4 +18,7 @@ public interface IBizClinicRoomUndoService{
      * @date      2025/07/28 11:27
      */
     List<BizClinicRoomUndoDTO> selectBizClinicRoomUndoList(String id);
+
+
+    Boolean insertBizClinicRoomUndo(BizClinicRoomUndoDTO source);
 }

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

@@ -5,7 +5,9 @@ import cn.tr.module.smart.common.dto.BizPainAssessmentQueryDTO;
 import cn.tr.module.smart.web.dto.BizPainAssessmentListDTO;
 import cn.tr.module.smart.web.dto.BizWebPainAssessmentQueryDTO;
 import cn.tr.module.smart.web.vo.BizWebPainAssessmentVO;
+import cn.tr.module.smart.wx.controller.vo.BizUndoMsgPushResultVO;
 
+import javax.validation.constraints.NotBlank;
 import java.util.Collection;
 import java.util.List;
 
@@ -87,4 +89,10 @@ public interface IBizPainAssessmentService {
     List<BizPainAssessmentListDTO> selectPainByClinicList(String clinicId);
 
     List<BizWebPainAssessmentVO> selectPainByClinicListByClinicId(String clinicId);
+
+    /**
+     * 推送镇痛评价
+     * @param clinicId
+     */
+    BizUndoMsgPushResultVO pushMpInfo(String clinicId);
 }

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

@@ -1,5 +1,6 @@
 package cn.tr.module.smart.common.service;
 
+import cn.tr.module.smart.app.controller.dto.AppMessageQuestionGroupPushDTO;
 import cn.tr.module.smart.common.dto.BizQuestionDTO;
 import cn.tr.module.smart.common.dto.BizQuestionGroupAiDTO;
 import cn.tr.module.smart.common.dto.BizQuestionGroupDTO;
@@ -7,6 +8,7 @@ import cn.tr.module.smart.common.dto.BizQuestionGroupQueryDTO;
 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.wx.controller.vo.BizUndoMsgPushResultVO;
 import cn.tr.module.smart.wx.controller.vo.BizWebQuestionGroupVO;
 import com.alibaba.dashscope.exception.InputRequiredException;
 import com.alibaba.dashscope.exception.NoApiKeyException;
@@ -84,4 +86,10 @@ public interface IBizQuestionGroupService{
     List<BizDeptUnlinkQuestionVO> queryAllUnlink(BizDeptUnlinkQuestionQueryDTO source);
 
     List<BizQuestionDTO> generateAi(BizQuestionGroupAiDTO source) throws NoApiKeyException, InputRequiredException;
+
+    /**
+     *
+     * @param source
+     */
+    BizUndoMsgPushResultVO pushMpInfo(AppMessageQuestionGroupPushDTO source);
 }

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

@@ -20,6 +20,7 @@ import cn.tr.module.smart.wx.controller.vo.BizWxAppletClinicDetailVO;
 import cn.tr.module.smart.wx.controller.vo.BizWxDeptQuestionVO;
 import cn.tr.module.smart.common.dto.BizClinicAddOrEditDTO;
 import cn.tr.module.smart.wx.controller.vo.IdCardInfoVO;
+import cn.tr.module.smart.wx.dto.BizMpPublishInfoDTO;
 import cn.tr.module.smart.wx.dto.BizWxAppletClinicQueryDTO;
 import cn.tr.module.smart.wx.dto.BizWxAppletFinishClinicDTO;
 import cn.tr.module.smart.wx.dto.BizWxUserCheckCardNoDTO;
@@ -462,6 +463,11 @@ public class BizClinicRoomServiceImpl implements IBizClinicRoomService {
         return  BizInfusionHistoryMapper.INSTANCE.convertAPPVO(infusionHistoryRepository.selectById(infusionClinic.getInfusionId()));
     }
 
+    @Override
+    public BizMpPublishInfoDTO selectMpPushTaskInfoById(String clinicId) {
+        return baseRepository.selectMpPushTaskInfoById(clinicId);
+    }
+
     /**
      * 微信小程序基于医生已填写的信息更新数据
      */

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

@@ -10,6 +10,8 @@ import cn.tr.module.smart.common.dto.BizClinicRoomUndoDTO;
 import java.util.*;
 import cn.tr.module.smart.common.service.IBizClinicRoomUndoService;
 import cn.tr.module.smart.common.mapper.BizClinicRoomUndoMapper;
+import org.springframework.transaction.annotation.Transactional;
+
 /**
  * 待办事项Service接口实现类
  *
@@ -34,5 +36,17 @@ public class BizClinicRoomUndoServiceImpl implements IBizClinicRoomUndoService {
                         .eq(BizClinicRoomUndoPO::getClinicRoomId,clinicId)
                 )
         );
-    };
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean insertBizClinicRoomUndo(BizClinicRoomUndoDTO source) {
+        baseRepository.delete(new LambdaQueryWrapper<BizClinicRoomUndoPO>()
+                .eq(BizClinicRoomUndoPO::getClinicRoomId,source.getClinicRoomId())
+                .eq(BizClinicRoomUndoPO::getType,source.getType()));
+        BizClinicRoomUndoPO po = BizClinicRoomUndoMapper.INSTANCE.convertPO(source);
+        return baseRepository.insert(po)!=0;
+    }
+
+    ;
 }

+ 44 - 0
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/impl/BizPainAssessmentServiceImpl.java

@@ -1,12 +1,22 @@
 package cn.tr.module.smart.common.service.impl;
 
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.tr.core.exception.TRExcCode;
+import cn.tr.core.strategy.LoginUserStrategy;
+import cn.tr.module.smart.common.dto.BizClinicRoomUndoDTO;
+import cn.tr.module.smart.common.enums.ClinicUndoType;
+import cn.tr.module.smart.common.enums.MpPublishTaskTypeEnums;
 import cn.tr.module.smart.common.po.BizClinicRoomPO;
 import cn.tr.module.smart.common.repository.BizClinicRoomRepository;
+import cn.tr.module.smart.common.service.IBizClinicRoomUndoService;
 import cn.tr.module.smart.web.dto.BizPainAssessmentListDTO;
 import cn.tr.module.smart.web.dto.BizWebPainAssessmentQueryDTO;
 import cn.tr.module.smart.web.vo.BizWebPainAssessmentVO;
+import cn.tr.module.smart.wx.config.WxTemplateSendHelper;
+import cn.tr.module.smart.wx.controller.vo.BizUndoMsgPushResultVO;
+import cn.tr.module.smart.wx.dto.BizMpPublishInfoDTO;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import cn.hutool.core.collection.CollectionUtil;
@@ -27,12 +37,19 @@ import cn.tr.module.smart.common.mapper.BizPainAssessmentMapper;
  * @date  2025/06/26 16:05
  **/
 @Service
+@Slf4j
 public class BizPainAssessmentServiceImpl implements IBizPainAssessmentService {
     @Autowired
     private BizPainAssessmentRepository baseRepository;
 
     @Autowired
     private BizClinicRoomRepository clinicRoomRepository;
+
+    @Autowired
+    private WxTemplateSendHelper wxTemplateSendHelper;
+
+    @Autowired
+    private IBizClinicRoomUndoService bizClinicRoomUndoService;
     /**
     * 根据条件查询患者疼痛评估
     * @param    query 查询参数
@@ -151,4 +168,31 @@ public class BizPainAssessmentServiceImpl implements IBizPainAssessmentService {
         return baseRepository.selectWebBizPainAssessmentListByClinic(clinicId);
     }
 
+    @Override
+    public BizUndoMsgPushResultVO pushMpInfo(String clinicId) {
+        BizUndoMsgPushResultVO result = new BizUndoMsgPushResultVO();
+        BizMpPublishInfoDTO publishInfo=clinicRoomRepository.selectMpPushTaskInfoById(clinicId);
+        bizClinicRoomUndoService.insertBizClinicRoomUndo(
+                BizClinicRoomUndoDTO.builder()
+                        .clinicRoomId(clinicId)
+                        .publishUserId(LoginUserStrategy.tr.getCurrentUserId())
+                        .type(ClinicUndoType.assessment)
+                        .publishTime(new Date())
+                        .build());
+        if(ObjectUtil.isNull(publishInfo)|| StrUtil.isEmpty(publishInfo.getOpenId())){
+            result.setMp(Boolean.FALSE);
+            result.setErrMsg("用户未关注公众号");
+            return result;
+        }
+        try{
+            wxTemplateSendHelper.sendMsg(publishInfo, MpPublishTaskTypeEnums.ASSESSMENT.getType());
+            result.setMp(Boolean.TRUE);
+        }catch (Exception e){
+            log.error("镇痛评价推送消息失败",e);
+            result.setMp(Boolean.FALSE);
+            result.setErrMsg("系统繁忙");
+        }
+        return result;
+    }
+
 }

+ 46 - 10
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/impl/BizQuestionGroupServiceImpl.java

@@ -3,29 +3,31 @@ package cn.tr.module.smart.common.service.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollectionUtil;
 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.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.app.controller.dto.AppMessageQuestionGroupPushDTO;
+import cn.tr.module.smart.common.dto.*;
+import cn.tr.module.smart.common.enums.ClinicUndoType;
+import cn.tr.module.smart.common.enums.MpPublishTaskTypeEnums;
 import cn.tr.module.smart.common.enums.QuestionGroupTypeEnums;
 import cn.tr.module.smart.common.mapper.*;
 import cn.tr.module.smart.common.po.*;
 import cn.tr.module.smart.common.properties.ALiYunProperties;
-import cn.tr.module.smart.common.repository.BizQuestionDeptRepository;
-import cn.tr.module.smart.common.repository.BizQuestionGroupRepository;
-import cn.tr.module.smart.common.repository.BizQuestionGroupSquareRepository;
-import cn.tr.module.smart.common.repository.BizQuestionRepository;
+import cn.tr.module.smart.common.repository.*;
+import cn.tr.module.smart.common.service.IBizClinicRoomUndoService;
 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.vo.BizDeptUnlinkQuestionVO;
+import cn.tr.module.smart.wx.config.WxTemplateSendHelper;
+import cn.tr.module.smart.wx.controller.vo.BizUndoMsgPushResultVO;
 import cn.tr.module.smart.wx.controller.vo.BizWebQuestionGroupVO;
+import cn.tr.module.smart.wx.dto.BizMpPublishInfoDTO;
 import com.alibaba.dashscope.aigc.generation.Generation;
 import com.alibaba.dashscope.aigc.generation.GenerationParam;
 import com.alibaba.dashscope.aigc.generation.GenerationResult;
@@ -35,6 +37,7 @@ 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 lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.Cacheable;
@@ -57,6 +60,7 @@ import java.util.stream.Collectors;
  * @date 2025/05/23 16:45
  **/
 @Service
+@Slf4j
 public class BizQuestionGroupServiceImpl implements IBizQuestionGroupService {
     @Autowired
     private BizQuestionGroupRepository baseRepository;
@@ -70,7 +74,12 @@ public class BizQuestionGroupServiceImpl implements IBizQuestionGroupService {
     private IBizQuestionGroupSquareService bizQuestionGroupSquareService;
     @Autowired
     private BizQuestionDeptRepository bizQuestionDeptRepository;
-
+    @Autowired
+    private WxTemplateSendHelper wxTemplateSendHelper;
+    @Autowired
+    private BizClinicRoomRepository clinicRoomRepository;
+    @Autowired
+    private IBizClinicRoomUndoService bizClinicRoomUndoService;
     @Autowired
     private ALiYunProperties aliyunProperties;
 
@@ -317,4 +326,31 @@ public class BizQuestionGroupServiceImpl implements IBizQuestionGroupService {
         return JSONUtil.toList(result.getOutput().getChoices().get(0).getMessage().getContent(), BizQuestionDTO.class);
 
     }
-}
+
+    @Override
+    public BizUndoMsgPushResultVO pushMpInfo(AppMessageQuestionGroupPushDTO source) {
+        BizUndoMsgPushResultVO result = new BizUndoMsgPushResultVO();
+        BizMpPublishInfoDTO publishInfo=clinicRoomRepository.selectMpPushTaskInfoById(source.getClinicId());
+        bizClinicRoomUndoService.insertBizClinicRoomUndo(
+                BizClinicRoomUndoDTO.builder()
+                        .clinicRoomId(source.getClinicId())
+                        .publishUserId(LoginUserStrategy.tr.getCurrentUserId())
+                        .type(ClinicUndoType.questionGroup)
+                        .publishTime(new Date())
+                        .linkId(source.getQuestionGroupId())
+                        .build());
+        if(ObjectUtil.isNull(publishInfo)|| StrUtil.isEmpty(publishInfo.getOpenId())){
+            result.setMp(Boolean.FALSE);
+            result.setErrMsg("用户未关注公众号");
+            return result;
+        }
+        try{
+            wxTemplateSendHelper.sendMsg(publishInfo, MpPublishTaskTypeEnums.AFTER_QUESTION.getType());
+        }catch (Exception e){
+            log.error("术后问卷推送消息失败",e);
+            result.setMp(Boolean.FALSE);
+            result.setErrMsg("系统繁忙");
+        }
+        return result;
+    }
+}

+ 17 - 1
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/wx/config/WxTemplateSendHelper.java

@@ -19,7 +19,17 @@ import org.springframework.context.annotation.Configuration;
 public class WxTemplateSendHelper {
     private final WxSendTemplateMsgRegister wxSendTemplateMsgRegister;
 
+    /**
+     *
+     * @param publishInfo
+     * @param type {@link MpPublishTaskTypeEnums}
+     * @throws WxErrorException
+     */
     public void sendMsg(BizMpPublishInfoDTO publishInfo, String type) throws WxErrorException {
+        this.sendMsg(publishInfo,type,publishInfo.getTenantId(),publishInfo.getClinicId());
+    }
+
+    public void sendMsg(BizMpPublishInfoDTO publishInfo, String type,String tenantId,String clinicId) throws WxErrorException {
         MpPublishTaskTypeEnums publishTaskType = EnumUtil.likeValueOf(MpPublishTaskTypeEnums.class, type);
         if(ObjectUtil.isNull(publishTaskType)){
             log.info("任务类型不支持,任务: {}", type);
@@ -35,9 +45,15 @@ public class WxTemplateSendHelper {
     }
 
     public  <T extends WxTemplateDTO> void  sendMsg(String openId,T source) throws WxErrorException {
+        sendMsg(openId,source,null,null);
+    }
+
+    public  <T extends WxTemplateDTO> void  sendMsg(String openId,T source,String tenantId,String clinicId) throws WxErrorException {
         wxSendTemplateMsgRegister.sendMessage(
                 null,
                 openId,
-                source);
+                source,
+                tenantId,
+                clinicId);
     }
 }

+ 15 - 0
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/wx/controller/vo/BizUndoMsgPushResultVO.java

@@ -0,0 +1,15 @@
+package cn.tr.module.smart.wx.controller.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("待办事项推送结果")
+public class BizUndoMsgPushResultVO {
+    @ApiModelProperty("是否推送到了微信公众号")
+    private Boolean mp;
+
+    @ApiModelProperty("微信公众号推送失败原因")
+    private String errMsg;
+}