admin
2022-01-12 4a7367a869ef12375ea6678ca44e102b8919c624
service-push/src/main/java/com/ks/push/manager/PushManager.java
@@ -89,62 +89,65 @@
        }
        logger.info("开始启动推送#taskId:{}", task.getId());
        updateState(taskId, BPushTask.STATE_PUSHING, null);
        boolean hasDevice = false;
        try {
            logger.info("开始启动推送#taskId:{}", task.getId());
            updateState(taskId, BPushTask.STATE_PUSHING, null);
            boolean hasDevice = false;
        // 查询可推送的平台
        List<BPushPlatformAppInfo> list = bPushPlatformAppInfoManager.listByAppCode(task.getAppCode());
            // 查询可推送的平台
            List<BPushPlatformAppInfo> list = bPushPlatformAppInfoManager.listByAppCode(task.getAppCode());
        //先初始化推送结果数据数据
        List<BPushTaskExcuteResult> resultList = new ArrayList<>();
        Map<String, Long> resultCountMap = new HashMap<>();
        for (BPushPlatformAppInfo appInfo : list) {
            long count = pushDeviceTokenManager.count(task.getAppCode(), appInfo.getPlatform(), task.getFilter());
            if (count > 0) {
                hasDevice = true;
                //初始化推送结果数据
                BPushTaskExcuteResult result = pushExcuteResultManager.initPushExcuteResult(taskId, appInfo.getPlatform(), count);
                resultCountMap.put(result.getId(), count);
                resultList.add(result);
            }
        }
        for (BPushTaskExcuteResult result : resultList) {
            long count = resultCountMap.get(result.getId());
            int pageSize = 500;
            int totalPage = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
            long totalValidCount = 0L;
            //初始化批量推送的计数
            for (int page = 0; page < totalPage; page++) {
                pushExcuteResultManager.startBatchPush(taskId, result.getPushPlatform(), page + "");
            }
            for (int page = 0; page < totalPage; page++) {
                List<BPushDeviceToken> deviceTokenList = pushDeviceTokenManager.list(task.getAppCode(), result.getPushPlatform(), task.getFilter(), page + 1, pageSize);
                List<String> tokenList = new ArrayList<>();
                for (BPushDeviceToken deviceToken : deviceTokenList) {
                    //TODO 时间判断
                    tokenList.add(deviceToken.getToken());
            //先初始化推送结果数据数据
            List<BPushTaskExcuteResult> resultList = new ArrayList<>();
            Map<String, Long> resultCountMap = new HashMap<>();
            for (BPushPlatformAppInfo appInfo : list) {
                long count = pushDeviceTokenManager.count(task.getAppCode(), appInfo.getPlatform(), task.getFilter());
                if (count > 0) {
                    hasDevice = true;
                    //初始化推送结果数据
                    BPushTaskExcuteResult result = pushExcuteResultManager.initPushExcuteResult(taskId, appInfo.getPlatform(), count);
                    resultCountMap.put(result.getId(), count);
                    resultList.add(result);
                }
                totalValidCount += tokenList.size();
                BPushDeviceDataSet dataSet = new BPushDeviceDataSet(tokenList, page + "", taskId);
                //最后一页
                if (page == totalPage - 1 && totalValidCount != count) {
                    //修改总数
                    pushExcuteResultManager.setDeviceCount(result.getId(), totalValidCount);
                }
                CMQManager.getInstance().addToPushQueue(result.getPushPlatform(), dataSet);
            }
            logger.info("加入推送队列#任务Id:{}#平台:{}#推送数量:{}", task.getId(), result.getPushPlatform().name(), count);
        }
        if (!hasDevice) {
            updateState(taskId, BPushTask.STATE_FINSIH, "没有满足条件的可推送设备");
            for (BPushTaskExcuteResult result : resultList) {
                long count = resultCountMap.get(result.getId());
                int pageSize = 500;
                int totalPage = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
                long totalValidCount = 0L;
                //初始化批量推送的计数
                for (int page = 0; page < totalPage; page++) {
                    pushExcuteResultManager.startBatchPush(taskId, result.getPushPlatform(), page + "");
                }
                for (int page = 0; page < totalPage; page++) {
                    List<BPushDeviceToken> deviceTokenList = pushDeviceTokenManager.list(task.getAppCode(), result.getPushPlatform(), task.getFilter(), page + 1, pageSize);
                    List<String> tokenList = new ArrayList<>();
                    for (BPushDeviceToken deviceToken : deviceTokenList) {
                        //TODO 时间判断
                        tokenList.add(deviceToken.getToken());
                    }
                    totalValidCount += tokenList.size();
                    BPushDeviceDataSet dataSet = new BPushDeviceDataSet(tokenList, page + "", taskId);
                    //最后一页
                    if (page == totalPage - 1 && totalValidCount != count) {
                        //修改总数
                        pushExcuteResultManager.setDeviceCount(result.getId(), totalValidCount);
                    }
                    CMQManager.getInstance().addToPushQueue(result.getPushPlatform(), dataSet);
                }
                logger.info("加入推送队列#任务Id:{}#平台:{}#推送数量:{}", task.getId(), result.getPushPlatform().name(), count);
            }
            if (!hasDevice) {
                updateState(taskId, BPushTask.STATE_FINSIH, "没有满足条件的可推送设备");
            }
        } finally {
            redisTemplate.delete(key);
        }
        //没有可推送的设备
        logger.info("启动推送结束#taskId:{}", task.getId());