| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- package com.dataeasy.server.task;
- import java.sql.Timestamp;
- import java.util.Arrays;
- import java.util.List;
- import java.util.Objects;
- import java.util.Set;
- import java.util.stream.Collectors;
- import com.binarywang.spring.starter.wxjava.miniapp.properties.WxMaProperties;
- import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.cache.CacheManager;
- import org.springframework.util.CollectionUtils;
- import org.springframework.util.StringUtils;
- import com.dataeasy.server.atomic.entity.SubscriptionTaskConfig;
- import com.dataeasy.server.atomic.entity.SubscriptionUserConfig;
- import com.dataeasy.server.atomic.entity.User;
- import com.dataeasy.server.atomic.service.ISubscriptionTaskConfigService;
- import com.dataeasy.server.atomic.service.ISubscriptionUserConfigService;
- import com.dataeasy.server.atomic.service.ISysScheduleTaskLogService;
- import com.dataeasy.server.atomic.service.IUserService;
- import com.dataeasy.server.constant.PushOptionEnum;
- import com.dataeasy.server.constant.ScheduleTaskEnum;
- import com.dataeasy.server.core.aop.ScheduleTaskLogAspect;
- import com.dataeasy.server.pojo.subscription.SubscriptionUserConfigQuery;
- import com.dataeasy.server.pojo.task.ScheduleTaskContext;
- import com.dataeasy.server.service.manager.IWxManager;
- import lombok.extern.slf4j.Slf4j;
- import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
- /**
- * @author tyuio
- * @version 1.0.0
- * @description 数据定时任务 抽象类
- * @date 2025/3/7 10:44
- */
- @Slf4j
- public abstract class AbstractDataTask {
- @Autowired
- protected ISysScheduleTaskLogService taskLogService;
- @Autowired
- protected ISubscriptionTaskConfigService taskConfigService;
- @Autowired
- protected ISubscriptionUserConfigService userConfigService;
- @Autowired
- protected IUserService userService;
- @Autowired
- protected IWxManager wxMpManager;
- @Autowired
- protected CacheManager cacheManager;
- @Autowired
- private WxMaProperties wxMaProperties;
- /**
- * 定时任务执行逻辑
- */
- public void execute() {
- // 获取定时任务上下文
- ScheduleTaskContext scheduleTaskContext = ScheduleTaskLogAspect.scheduleTaskContextThreadLocal.get();
- ScheduleTaskEnum task = scheduleTaskContext.getTask();
- SubscriptionTaskConfig subscriptionTaskConfig = scheduleTaskContext.getSubscriptionTaskConfig();
- // 拉取数据并入库
- boolean fetchResult = fetchData();
- if (!fetchResult) {
- log.warn("任务:{},任务编码:{},拉取数据失败,结束执行", task.getName(), task);
- return;
- }
- // 寻找要推送数据的用户
- SubscriptionUserConfigQuery userConfigQuery = new SubscriptionUserConfigQuery();
- userConfigQuery.setSubscriptionSourceIds(Arrays.asList(subscriptionTaskConfig.getId()));
- userConfigQuery.setPushOption(PushOptionEnum.ENABLED);
- userConfigQuery.setCurrentTime(new Timestamp(System.currentTimeMillis()));
- List<SubscriptionUserConfig> userConfigList = userConfigService.getByCondition(userConfigQuery);
- if (CollectionUtils.isEmpty(userConfigList)) {
- log.warn("任务:{},任务编码:{},没有找到推送状态为启用的用户配置,结束执行", task.getName(), task);
- return;
- }
- Set<Long> userIds = userConfigList.stream().filter(v -> Objects.nonNull(v.getUserId()))
- .map(SubscriptionUserConfig::getUserId)
- .collect(Collectors.toSet());
- if (CollectionUtils.isEmpty(userIds)) {
- log.warn("任务:{},任务编码:{},没有找到推送状态为启用的用户,结束执行", task.getName(), task);
- return;
- }
- List<User> userList = userService.getByIds(userIds);
- if (CollectionUtils.isEmpty(userList)) {
- log.warn("任务:{},任务编码:{},没有找到待推送的用户列表,结束执行", task.getName(), task);
- return;
- }
- Set<String> mpOpenIds = userList.stream().filter(v -> StringUtils.hasText(v.getMpOpenId()))
- .map(User::getMpOpenId)
- .collect(Collectors.toSet());
- if (CollectionUtils.isEmpty(mpOpenIds)) {
- log.warn("任务:{},任务编码:{},待推送的用户列表中没有找到服务号openid,结束执行", task.getName(), task);
- return;
- }
- // 获取消息模板所需数据
- List<WxMpTemplateData> templateDataList = getTemplateMessage();
- // 设置小程序
- WxMpTemplateMessage.MiniProgram miniProgram = new WxMpTemplateMessage.MiniProgram();
- miniProgram.setAppid(wxMaProperties.getAppid());
- miniProgram.setPagePath(subscriptionTaskConfig.getPagePath());
- // 推送
- for (String mpOpenId : mpOpenIds) {
- // 生成模板信息
- WxMpTemplateMessage mpTemplateMessage = WxMpTemplateMessage.builder()
- .toUser(mpOpenId)
- .templateId(subscriptionTaskConfig.getTemplateId())
- .miniProgram(miniProgram)
- .data(templateDataList)
- .build();
- wxMpManager.sendTemplateMessage(mpTemplateMessage);
- }
- }
- /**
- * 拉取所需数据并入库
- * @return false-拉取数据入库失败 true-拉取数据入库成功
- */
- public abstract boolean fetchData();
- /**
- * 获取消息模板所需数据
- * @return
- */
- public abstract List<WxMpTemplateData> getTemplateMessage();
- }
|