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