From 6b2670dfa68af9ce2e36a5f9580125f4fc6da570 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期六, 26 六月 2021 18:06:10 +0800 Subject: [PATCH] 推送服务完善 --- service-push/src/main/java/com/ks/push/manager/PushExcuteResultManager.java | 127 ++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 126 insertions(+), 1 deletions(-) diff --git a/service-push/src/main/java/com/ks/push/manager/PushExcuteResultManager.java b/service-push/src/main/java/com/ks/push/manager/PushExcuteResultManager.java index 365b0fb..f4d9a1c 100644 --- a/service-push/src/main/java/com/ks/push/manager/PushExcuteResultManager.java +++ b/service-push/src/main/java/com/ks/push/manager/PushExcuteResultManager.java @@ -1,21 +1,32 @@ package com.ks.push.manager; +import com.ks.push.dao.BPushTaskDao; +import com.ks.push.dto.BPushDeviceDataSet; import com.ks.push.mapper.BPushTaskExcuteResultMapper; +import com.ks.push.pojo.DO.BPushTask; import com.ks.push.pojo.DO.BPushTaskExcuteResult; import com.ks.push.pojo.DO.PushPlatform; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.Date; +import java.util.List; @Component public class PushExcuteResultManager { @Resource private BPushTaskExcuteResultMapper bPushTaskExcuteResultMapper; + @Resource + private RedisTemplate<String, Object> redisTemplate; + + @Resource + private BPushTaskDao bPushTaskDao; + @Transactional(rollbackFor = Exception.class) - public void initPushExcuteResult(String taskId, PushPlatform pushPlatform, long deviceCount) { + public BPushTaskExcuteResult initPushExcuteResult(String taskId, PushPlatform pushPlatform, long deviceCount) { BPushTaskExcuteResult result = new BPushTaskExcuteResult(); result.setCreateTime(new Date()); result.setFinish(false); @@ -26,6 +37,120 @@ result.setId(BPushTaskExcuteResult.createId(taskId, pushPlatform)); //鍒濆鍖� bPushTaskExcuteResultMapper.insertSelective(result); + + String key = getRedisKey(taskId, pushPlatform); + redisTemplate.delete(key); + return result; + } + + /** + * 鎵归噺鎺ㄩ�佹垚鍔� + * + * @param dataSet + * @param pushPlatform + */ + @Transactional(rollbackFor = Exception.class) + public void batchPushSuccess(BPushDeviceDataSet dataSet, PushPlatform pushPlatform) { + String id = BPushTaskExcuteResult.createId(dataSet.getTaskId(), pushPlatform); + BPushTaskExcuteResult result = bPushTaskExcuteResultMapper.selectByPrimaryKeyForUpdate(id); + if (result != null) { + BPushTaskExcuteResult update = new BPushTaskExcuteResult(); + update.setId(result.getId()); + update.setPushSuccessDeviceCount(dataSet.getDeviceTokenList().size() + (result.getPushSuccessDeviceCount() == null ? 0 : result.getPushSuccessDeviceCount())); + update.setUpdateTime(new Date()); + bPushTaskExcuteResultMapper.updateByPrimaryKeySelective(update); + } + } + + /** + * 鎵归噺鎺ㄩ�佸畬鎴� + * + * @param dataSet + * @param pushPlatform + */ + public void batchPushFinish(BPushDeviceDataSet dataSet, PushPlatform pushPlatform) { + String key = getRedisKey(dataSet.getTaskId(), pushPlatform); + redisTemplate.opsForSet().remove(key, dataSet.getBatchId()); + Long size = redisTemplate.opsForSet().size(key); + //鍒ゆ柇鏄惁鎺ㄩ�佸畬鎴� + if (size == null || size == 0L) { + //宸茬粡鎺ㄩ�佸畬浜� + String id = BPushTaskExcuteResult.createId(dataSet.getTaskId(), pushPlatform); + BPushTaskExcuteResult update = new BPushTaskExcuteResult(); + update.setId(id); + update.setFinish(true); + update.setFinishTime(new Date()); + update.setUpdateTime(new Date()); + bPushTaskExcuteResultMapper.updateByPrimaryKeySelective(update); + redisTemplate.delete(key); + //鍒ゆ柇鏁翠釜鎺ㄩ�佷换鍔℃槸鍚﹀凡缁忓畬鎴愪簡 + if (pushTaskFinish(dataSet.getTaskId())) { + //瀹屾垚鎺ㄩ�佷簡 + BPushTask updateTask = new BPushTask(); + updateTask.setId(dataSet.getTaskId()); + updateTask.setState(BPushTask.STATE_FINSIH); + updateTask.setStateDesc("鎺ㄩ�佸畬鎴�"); + updateTask.setUpdateTime(new Date()); + bPushTaskDao.updateSelective(updateTask); + } + } + } + + + /** + * 鏁翠釜鎺ㄩ�佷换鍔℃槸鍚﹀凡缁忓畬鎴� + * + * @param taskId + * @return + */ + public boolean pushTaskFinish(String taskId) { + BPushTaskExcuteResultMapper.DaoQuery daoQuery = new BPushTaskExcuteResultMapper.DaoQuery(); + daoQuery.taskId = taskId; + long count = bPushTaskExcuteResultMapper.count(daoQuery); + daoQuery.count = (int) count; + List<BPushTaskExcuteResult> list = bPushTaskExcuteResultMapper.list(daoQuery); + int finishCount = 0; + for (BPushTaskExcuteResult result : list) { + if (result.getFinish() != null && result.getFinish()) { + finishCount++; + } + } + if (finishCount == list.size()) { + return true; + } + return false; + } + + + /** + * 寮�濮嬫壒閲忔帹閫� + * + * @param taskId + * @param pushPlatform + * @param batchId + */ + public void startBatchPush(String taskId, PushPlatform pushPlatform, String batchId) { + String key = getRedisKey(taskId, pushPlatform); + redisTemplate.opsForSet().add(key, batchId); + } + + private String getRedisKey(String taskId, PushPlatform pushPlatform) { + return String.format("push-task-batch-%s-%s", taskId, pushPlatform.name()); + } + + + /** + * 璁剧疆璁惧鏁伴噺 + * + * @param id + * @param count + */ + public void setDeviceCount(String id, Long count) { + BPushTaskExcuteResult update = new BPushTaskExcuteResult(); + update.setId(id); + update.setTotalDeviceCount(count); + update.setUpdateTime(new Date()); + bPushTaskExcuteResultMapper.updateByPrimaryKeySelective(update); } -- Gitblit v1.8.0