Просмотр исходного кода

Merge remote-tracking branch 'origin/master'

wangzl 4 месяцев назад
Родитель
Сommit
6787b32d1b

+ 19 - 0
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/enums/ClinicSubscribeTypeEnums.java

@@ -0,0 +1,19 @@
+package cn.tr.module.smart.common.enums;
+
+public interface ClinicSubscribeTypeEnums {
+    /**
+     * 镇痛评价
+     */
+    String ASSESSMENT="assessment";
+
+    /**
+     * 术后问卷
+     */
+    String AFTER_QUESTION="questionGroup";
+
+
+    class SubscribeType {
+        public static final String ASSESSMENT_SUBSCRIBE_ID = "PRAINFUL_EVALUATION";
+        public static final String AFTER_QUESTION_SUBSCRIBE_ID = "POST_OPERATION_QUESTIONNAIRE";
+    }
+}

+ 10 - 0
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/enums/ClinicUndoType.java

@@ -1,7 +1,17 @@
 package cn.tr.module.smart.common.enums;
 
+/**
+ * 手术待办事项操作类型接口
+ * 定义了诊所中可以撤销的操作类型常量
+ */
 public interface ClinicUndoType {
+    /**
+     * 镇痛评价
+     */
     String assessment="assessment";
 
+    /**
+     * 术后问卷
+     */
     String questionGroup="questionGroup";
 }

+ 30 - 0
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/po/BizWxUserSubscribePO.java

@@ -0,0 +1,30 @@
+package cn.tr.module.smart.common.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * 小程序 订阅表
+ *
+ * @author lf
+ * @date  2025/05/23 14:17
+ **/
+@Data
+@TableName(value="biz_wx_user_subscribe",autoResultMap = true)
+@ToString
+public class BizWxUserSubscribePO {
+
+    @ApiModelProperty(value = "用户唯一标识", position = 1)
+    private String unionId;
+
+    @ApiModelProperty(value = "小程序ID", position = 0)
+    private String appId;
+
+    @ApiModelProperty(value = "模板ID", position = 2)
+    private String templateId;
+
+    @ApiModelProperty(value = "订阅次数", position = 3)
+    private Integer count;
+}

+ 19 - 0
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/repository/BizWxUserSubscribeRepository.java

@@ -0,0 +1,19 @@
+package cn.tr.module.smart.common.repository;
+
+
+import cn.tr.module.smart.common.po.BizWxUserSubscribePO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 小程序 订阅表Mapper接口
+ *
+ * @author wangzl
+ * @date  2025/07/18 16:55
+ **/
+@Repository
+@Mapper
+public interface BizWxUserSubscribeRepository extends BaseMapper<BizWxUserSubscribePO> {
+
+}

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

@@ -63,6 +63,5 @@ public interface IBizMpPublishTaskService{
      * @author wangzl
      * @date 2025/7/29
      */
-
     void createQuestionTask(String clinicId, Date clinicEndTime,String type) throws SchedulerException, TaskException;
 }

+ 23 - 5
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/task/QuartzTaskExecutor.java

@@ -1,15 +1,21 @@
 package cn.tr.module.smart.common.task;
 
+import cn.binarywang.wx.miniapp.api.WxMaOpenApiService;
 import cn.hutool.core.util.ObjectUtil;
 import cn.tr.core.exception.ServiceException;
 import cn.tr.core.exception.TRExcCode;
 import cn.tr.module.quartz.job.service.ISysJobService;
 import cn.tr.module.quartz.utils.ScheduleUtils;
 import cn.tr.module.smart.common.po.BizMpPublishTaskPO;
+import cn.tr.module.smart.common.po.BizWxUserSubscribePO;
+import cn.tr.module.smart.common.register.WxSendTemplateMsgRegister;
 import cn.tr.module.smart.common.repository.BizMpPublishTaskRepository;
+import cn.tr.module.smart.common.repository.BizWxUserSubscribeRepository;
 import cn.tr.plugin.lock.annotation.DistributeLock;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.mp.api.WxMpService;
 import org.quartz.SchedulerException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -30,6 +36,12 @@ public class QuartzTaskExecutor {
     private BizMpPublishTaskRepository bizMpPublishTaskRepository;
     @Autowired
     private ISysJobService sysJobService;
+    @Autowired
+    private BizWxUserSubscribeRepository wxUserSubscribeRepository;
+    @Autowired
+    private WxSendTemplateMsgRegister wxSendTemplateMsgRegister;
+    @Autowired
+    private WxMpService wxMpService;
 
     /**
      * @description: 定时任务执行逻辑
@@ -40,25 +52,31 @@ public class QuartzTaskExecutor {
     @DistributeLock(name = "#taskId")
     @Transactional(rollbackFor = Exception.class)
     public void execute(String taskId) throws SchedulerException {
+        log.info("开始执行公众号发布任务,任务ID: {}", taskId);
         BizMpPublishTaskPO bizMpPublishTaskPO = bizMpPublishTaskRepository.selectById(taskId);
         if (ObjectUtil.isNull(bizMpPublishTaskPO)) {
-            log.info("任务不存在");
+            log.info("任务不存在,任务ID: {}", taskId);
             return;
         }
         if (!Objects.equals(bizMpPublishTaskPO.getPublishCount(), bizMpPublishTaskPO.getTotalCount())) {
-            log.info("满足标准发送推送公众号");
+            log.info("满足标准发送推送公众号,任务ID: {}", taskId);
             //更新执行次数
+            int newPublishCount = bizMpPublishTaskPO.getPublishCount() + 1;
             bizMpPublishTaskRepository.update(null,new LambdaUpdateWrapper<BizMpPublishTaskPO>()
-                    .set(BizMpPublishTaskPO::getPublishCount,bizMpPublishTaskPO.getPublishCount()+1)
+                    .set(BizMpPublishTaskPO::getPublishCount, newPublishCount)
                     .eq(BizMpPublishTaskPO::getId,taskId));
             //执行推送数据
-
+            log.debug("执行推送数据逻辑,任务ID: {}", taskId);
+//            wxUserSubscribeRepository.selectOne(new LambdaQueryWrapper<BizWxUserSubscribePO>()
+//                    .eq())
+//            wxSendTemplateMsgRegister.sendMessage(wxMpService,)
         } else {
-            log.info("任务执行次数已完成");
+            log.info("任务执行次数已完成,准备清理任务数据,任务ID: {}", taskId);
             //删除任务
             bizMpPublishTaskRepository.deleteById(taskId);
             //删除触发器
             sysJobService.removeSysJobByIds(new ArrayList<>());
         }
+        log.info("公众号发布任务执行结束,任务ID: {}", taskId);
     }
 }

+ 27 - 2
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/wx/handler/SubscribeMsgPopupEventHandler.java

@@ -1,8 +1,11 @@
 package cn.tr.module.smart.wx.handler;
 
 import cn.hutool.core.util.StrUtil;
+import cn.tr.module.smart.common.po.BizWxUserSubscribePO;
 import cn.tr.module.smart.common.repository.BizWxUserMpCareRepository;
+import cn.tr.module.smart.common.repository.BizWxUserSubscribeRepository;
 import cn.tr.module.smart.wx.constant.WxAppletSubscribeStatusStringType;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.common.error.WxErrorException;
 import me.chanjar.weixin.common.session.WxSessionManager;
@@ -13,26 +16,48 @@ import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
 import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Map;
 
 @Component
 @Slf4j
 public class SubscribeMsgPopupEventHandler implements WxMpMessageHandler {
-    @Autowired
-    private BizWxUserMpCareRepository wxUserMpCareRepository;
 
+    @Autowired
+    private BizWxUserSubscribeRepository wxUserSubscribeRepository;
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService, WxSessionManager sessionManager) throws WxErrorException {
         WxMpSubscribeMsgEvent.SubscribeMsgPopupEvent subscribeMsgPopupEvent = wxMessage.getSubscribeMsgPopupEvent();
+        String appId = wxMpService.getWxMpConfigStorage().getAppId();
         String unionId = wxMessage.getUnionId();
         for (WxMpSubscribeMsgEvent.PopupEvent popupEvent : subscribeMsgPopupEvent.getList()) {
             String subscribeStatusString = popupEvent.getSubscribeStatusString();
             String templateId = popupEvent.getTemplateId();
             if (StrUtil.equals(subscribeStatusString, WxAppletSubscribeStatusStringType.ACCEPT)) {
                 log.debug("[WxMpSubscribeMsgEvent] unionId:{},templateId:{},subscribeStatusString:{}", unionId, templateId, subscribeStatusString);
+                //开始订阅
+                BizWxUserSubscribePO subscribePO = wxUserSubscribeRepository.selectOne(new LambdaQueryWrapper<BizWxUserSubscribePO>()
+                        .eq(BizWxUserSubscribePO::getTemplateId, templateId)
+                        .eq(BizWxUserSubscribePO::getUnionId, unionId));
+                if(subscribePO==null){
+                    subscribePO = new BizWxUserSubscribePO();
+                    subscribePO.setTemplateId(templateId);
+                    subscribePO.setUnionId(unionId);
+                    subscribePO.setAppId(appId);
+                    subscribePO.setCount(1);
+                    wxUserSubscribeRepository.insert(subscribePO);
+                }else {
+                    subscribePO.setCount(subscribePO.getCount()+1);
+                    wxUserSubscribeRepository.updateById(subscribePO);
+                }
             }else if (StrUtil.equals(subscribeStatusString, WxAppletSubscribeStatusStringType.REJECT)) {
+                //取消订阅
                 log.debug("[WxMpSubscribeMsgEvent] unionId:{},templateId:{},subscribeStatusString:{}", unionId, templateId, subscribeStatusString);
+                wxUserSubscribeRepository.delete(new LambdaQueryWrapper<BizWxUserSubscribePO>()
+                        .eq(BizWxUserSubscribePO::getTemplateId, templateId)
+                        .eq(BizWxUserSubscribePO::getUnionId, unionId));
             }
         }
         return null;

+ 0 - 2
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/oauth2/service/CurrentUserService.java

@@ -54,10 +54,8 @@ public class CurrentUserService {
         if (Boolean.TRUE.equals(tenantEnable)) {
             //用户所在租户拥有的权限
             Set<String> tenantPermissions = tenantService.findTenantPermission();
-            ;
             //用户角色所拥有的权限
             Set<String> rolePermissions = menuService.findUserPermission(userId);
-
             return CollectionUtil.intersection(tenantPermissions,rolePermissions);
         }else {
             return menuService.findUserPermission(userId);

+ 0 - 1
tr-test/src/main/resources/application.yml

@@ -74,7 +74,6 @@ tr:
       - sys_tenant
       - sys_tenant_package
       - sys_tenant_package_menu
-      - sys_user_role
       - sys_portal_menu
       - sys_user_portal
 #      短信模块