多线程多批次处理业务逻辑代码

多线程多批次处理业务逻辑代码

private static final ExecutorService threadPool = Executors.newFixedThreadPool(10);

public void sendNewsJob() throws Exception {

		// 查询需要推送的咨讯消息
		List<NewsInfoDto> newsInfoDtos = newsInfoService.findWaitPushNews();

		if (CollectionUtils.isEmpty(newsInfoDtos)) {
			HelpUtils.log_info(getClass(), "【咨讯推送】查询需要推送的咨讯为空");
			return;
		}

		List<List<NewsInfoDto>> lists = new ArrayList<List<NewsInfoDto>>();

		int pageNo = (int) Math.ceil(newsInfoDtos.size() / FscConstant.PUSH_COUNT);

		if (newsInfoDtos.size() < FscConstant.PUSH_COUNT) {
			lists.add(newsInfoDtos);
		} else {
			for (int i = 0; i < pageNo; i++) {
				if (i == pageNo - 1) {
					lists.add(newsInfoDtos.subList(FscConstant.PUSH_COUNT * i, newsInfoDtos.size() - 1));
				} else {
					lists.add(newsInfoDtos.subList(i * FscConstant.PUSH_COUNT, (i + 1) * FscConstant.PUSH_COUNT - 1));
				}
			}
		}

		final CountDownLatch countDownNum = new CountDownLatch(lists.size());

		for (int i = 0; i < lists.size(); i++) {

			final List<NewsInfoDto> newInfos = lists.get(i);

			//多线程处理资讯推送
			threadPool.execute(new Runnable() {

				@Override
				public void run() {
					try {
						for (NewsInfoDto news : newInfos) {

							// 查询推送设备
							PushMessage pushMessage = new PushMessage();
							pushMessage.setUserId(news.getUserId());
							List<PushMessage> pushMessages = appPushService.selectByPrimaryKey(pushMessage);

							if (!CollectionUtils.isEmpty(pushMessages)) {

								List<String> pushList = new ArrayList<String>();

								for (PushMessage message : pushMessages) {
									pushList.add(message.getRegistrationId());
								}

								String content = news.getContent();

								//处理推送的内容
								if (!StringUtils.isEmpty(content)) {
									//详情是一个富文本,去掉html标签和回车符制表符
									content = content.replaceAll("</?[^>]+>", "");
									content = content.replaceAll("\\s*|\t|\r|\n", "");
									content = content.length() > 20 ? content.substring(0, 20) : content;
								} else if (!StringUtils.isEmpty(news.getH5url())) {
									content = news.getH5url();
								}

								// 发送咨询推送消息给家长
								appPushService.sendAppPush(PushTypeEnum.NEWS.code, news.getId(), content, pushList);

								// 更新推送状态
								NewsInfo record = new NewsInfo();
								record.setId(news.getId());
								record.setIsPushed(1);
								newsInfoService.updateByPrimaryKeySelective(record);
							}

						}

					} catch (Exception e) {
						HelpUtils.log_error(getClass(), "【咨讯推送】推送咨讯消息异常", e);
					} finally {
						countDownNum.countDown();
					}

				}
			});

		}

		countDownNum.await();
	}

猜你喜欢

转载自blog.csdn.net/damoneric_guo/article/details/116269307