From b6853bf0a1411e39360f184b3bee5836010dbd22 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期二, 27 十月 2020 17:35:18 +0800
Subject: [PATCH] CMQ接口优化
---
fanli/src/main/java/com/yeshi/fanli/service/impl/push/HWPushServiceImpl.java | 397 +++++++++++++++++++++++++++++---------------------------
1 files changed, 204 insertions(+), 193 deletions(-)
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/push/HWPushServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/push/HWPushServiceImpl.java
index 596840d..e8c4849 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/push/HWPushServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/push/HWPushServiceImpl.java
@@ -1,230 +1,241 @@
package com.yeshi.fanli.service.impl.push;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import javax.annotation.Resource;
-
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.stereotype.Service;
-
+import com.yeshi.fanli.dto.push.PushBaseContent;
+import com.yeshi.fanli.dto.push.PushContentDetailDTO;
import com.yeshi.fanli.dto.push.PushTypeEnum;
import com.yeshi.fanli.entity.AppVersionInfo;
+import com.yeshi.fanli.entity.SystemEnum;
import com.yeshi.fanli.entity.bus.user.UserCustomSettings;
import com.yeshi.fanli.entity.bus.user.UserCustomSettings.UserSettingTypeEnum;
import com.yeshi.fanli.entity.push.DeviceTokenHW;
-import com.yeshi.fanli.exception.PushException;
+import com.yeshi.fanli.exception.push.PushException;
+import com.yeshi.fanli.log.LogHelper;
+import com.yeshi.fanli.log.LogManager;
import com.yeshi.fanli.log.PushLogHelper;
import com.yeshi.fanli.service.inter.config.AppVersionService;
import com.yeshi.fanli.service.inter.push.DeviceTokenHWService;
import com.yeshi.fanli.service.inter.push.HWPushService;
import com.yeshi.fanli.service.inter.user.UserCustomSettingsService;
+import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.StringUtil;
+import com.yeshi.fanli.util.mq.cmq.PushCMQManager;
import com.yeshi.fanli.util.push.HWPushUtil;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.*;
@Service
public class HWPushServiceImpl implements HWPushService {
- @Resource
- private DeviceTokenHWService deviceTokenHWService;
+ @Resource
+ private DeviceTokenHWService deviceTokenHWService;
- @Resource
- private AppVersionService appVersionService;
+ @Resource
+ private AppVersionService appVersionService;
- @Resource
- private UserCustomSettingsService userCustomSettingsService;
+ @Resource
+ private UserCustomSettingsService userCustomSettingsService;
- private List<Integer> getVersionCodeList(List<Integer> versionCodeList) {
- List<Integer> versionList = new ArrayList<>();
- if (versionCodeList == null) {// 鍏ㄦ帹
- List<AppVersionInfo> appInfoList = appVersionService.listByPlatformAndMinVersionCode("android", 46);
- if (appInfoList != null)
- for (AppVersionInfo version : appInfoList) {
- versionList.add(version.getVersionCode());
- }
+ private List<Integer> getVersionCodeList(List<Integer> versionCodeList, SystemEnum system) {
+ List<Integer> versionList = new ArrayList<>();
+ if (versionCodeList == null) {// 鍏ㄦ帹
+ List<AppVersionInfo> appInfoList = appVersionService.listByPlatformAndMinVersionCode("android", 46, system);
+ if (appInfoList != null)
+ for (AppVersionInfo version : appInfoList) {
+ versionList.add(version.getVersionCode());
+ }
- } else {// 鎸夌増鏈帹閫�
- for (Integer versionCode : versionCodeList) {
- if (versionCode.intValue() >= 46) {
- versionList.add(versionCode);
- }
- }
- }
- return versionList;
- }
+ } else {// 鎸夌増鏈帹閫�
+ for (Integer versionCode : versionCodeList) {
+ if (versionCode.intValue() >= 46) {
+ versionList.add(versionCode);
+ }
+ }
+ }
+ return versionList;
+ }
- @Async("pushExecutor")
- @Override
- public void pushGoods(Long uid, Long auctionId, String title, String content, List<Integer> versionCodeList)
- throws PushException {
- push(PushTypeEnum.goodsdetail, uid, title, content, null, null, auctionId, versionCodeList);
- }
+ @Override
+ public void pushGoods(Long uid, Long auctionId, PushBaseContent baseContent)
+ throws PushException {
+ addPushQueue(PushTypeEnum.goodsdetail, uid, null, null, auctionId, baseContent);
+ }
- @Async("pushExecutor")
- @Override
- public void pushUrl(Long uid, String url, String title, String content, List<Integer> versionCodeList)
- throws PushException {
- push(PushTypeEnum.url, uid, title, content, null, url, null, versionCodeList);
- }
+ @Override
+ public void pushUrl(Long uid, String url, PushBaseContent baseContent)
+ throws PushException {
+ addPushQueue(PushTypeEnum.url, uid, null, url, null, baseContent);
+ }
- @Async("pushExecutor")
- @Override
- public void pushZNX(Long uid, String title, String content, List<Integer> versionCodeList) throws PushException {
- push(PushTypeEnum.ZNX, uid, title, content, null, null, null, versionCodeList);
- }
+ @Override
+ public void pushZNX(Long uid, PushBaseContent baseContent) throws PushException {
+ addPushQueue(PushTypeEnum.ZNX, uid, null, null, null, baseContent);
+ }
- @Async("pushExecutor")
- @Override
- public void pushWEEX(Long uid, String title, String content, String weexUrl, List<Integer> versionCodeList)
- throws PushException {
- push(PushTypeEnum.weex, uid, title, content, weexUrl, null, null, versionCodeList);
- }
+ @Override
+ public void pushWEEX(Long uid, String weexUrl, PushBaseContent baseContent)
+ throws PushException {
+ addPushQueue(PushTypeEnum.weex, uid, weexUrl, null, null, baseContent);
+ }
- @Async("pushExecutor")
- @Override
- public void pushBaiChuanUrl(Long uid, String title, String content, String url, List<Integer> versionCodeList)
- throws PushException {
+ @Override
+ public void pushBaiChuanUrl(Long uid, String url, PushBaseContent baseContent)
+ throws PushException {
- push(PushTypeEnum.baichuan, uid, title, content, null, url, null, versionCodeList);
- }
+ addPushQueue(PushTypeEnum.baichuan, uid, null, url, null, baseContent);
+ }
- @Async("pushExecutor")
- @Override
- public void pushWelfareCenter(Long uid, String title, String content, List<Integer> versionCodeList)
- throws PushException {
- push(PushTypeEnum.welfare, uid, title, content, null, null, null, versionCodeList);
- }
+ @Override
+ public void pushWelfareCenter(Long uid, PushBaseContent baseContent)
+ throws PushException {
+ addPushQueue(PushTypeEnum.welfare, uid, null, null, null, baseContent);
+ }
- @Override
- public void pushUserSignInNotification(Long uid, String title, String content, List<Integer> versionCodeList)
- throws PushException {
- push(PushTypeEnum.signin, uid, title, content, null, null, null, versionCodeList);
- }
+ @Override
+ public void pushUserSignInNotification(Long uid, PushBaseContent baseContent)
+ throws PushException {
+ addPushQueue(PushTypeEnum.signin, uid, null, null, null, baseContent);
+ }
- private List<DeviceTokenHW> filterDeviceToken(List<DeviceTokenHW> hwDeviceList, int hour) {
- // 澶勭悊娑堟伅鍏嶆墦鎵�
- if (hour >= 20 || hour < 8) {
- Set<Long> uidSets = new HashSet<>();
- for (DeviceTokenHW dt : hwDeviceList)
- if (dt.getUser() != null)
- uidSets.add(dt.getUser().getId());
- List<Long> uidList = new ArrayList<>();
- uidList.addAll(uidSets);
- List<UserCustomSettings> settingList = userCustomSettingsService.listByUidListAndTypeAndState(uidList,
- UserSettingTypeEnum.cancelNotice.name(), UserCustomSettings.STATE_VALID);
- uidSets.clear();
- if (settingList != null) {
- for (UserCustomSettings seeting : settingList)
- uidSets.add(seeting.getUserInfo().getId());
- }
- if (uidSets.size() > 0)
- for (int i = 0; i < hwDeviceList.size(); i++) {
- if (hwDeviceList.get(i).getUser() != null
- && uidSets.contains(hwDeviceList.get(i).getUser().getId())) {
- hwDeviceList.remove(i--);
- }
- }
- }
- return hwDeviceList;
- }
+ private List<DeviceTokenHW> filterDeviceToken(List<DeviceTokenHW> hwDeviceList, int hour) {
+ // TODO 鏆傛椂涓嶅鐞嗘秷鎭厤鎵撴壈
+ if (1 > 0)
+ return hwDeviceList;
+ // 澶勭悊娑堟伅鍏嶆墦鎵�
+ if (hour >= 20 || hour < 8) {
+ Set<Long> uidSets = new HashSet<>();
+ for (DeviceTokenHW dt : hwDeviceList)
+ if (dt.getUser() != null)
+ uidSets.add(dt.getUser().getId());
+ List<Long> uidList = new ArrayList<>();
+ uidList.addAll(uidSets);
+ List<UserCustomSettings> settingList = userCustomSettingsService.listByUidListAndTypeAndState(uidList,
+ UserSettingTypeEnum.cancelNotice.name(), UserCustomSettings.STATE_VALID);
+ uidSets.clear();
+ if (settingList != null) {
+ for (UserCustomSettings seeting : settingList)
+ uidSets.add(seeting.getUserInfo().getId());
+ }
+ if (uidSets.size() > 0)
+ for (int i = 0; i < hwDeviceList.size(); i++) {
+ if (hwDeviceList.get(i).getUser() != null
+ && uidSets.contains(hwDeviceList.get(i).getUser().getId())) {
+ hwDeviceList.remove(i--);
+ }
+ }
+ }
+ return hwDeviceList;
+ }
- /**
- * 鎺ㄩ��
- *
- * @param type
- * @param uid
- * @param title
- * @param content
- * @param url
- * @param webUrl
- * @param versionCodeList
- */
- private void push(PushTypeEnum type, Long uid, String title, String content, String url, String webUrl, Long goodsId,
- List<Integer> versionCodeList) throws PushException {
- int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
- List<Integer> newVersionList = getVersionCodeList(versionCodeList);
- if (uid == null || uid == 0) {
- long deviceCount = deviceTokenHWService.countDeviceToken(newVersionList);
- int page = (int) (deviceCount % 100 == 0 ? deviceCount / 100 : deviceCount / 100 + 1);
- for (int p = 1; p <= page; p++) {
- List<DeviceTokenHW> hwDeviceList = deviceTokenHWService.getDeviceTokenList(p, 100, newVersionList);
- hwDeviceList = filterDeviceToken(hwDeviceList, hour);
+ //娣诲姞鍒版帹閫侀槦鍒�
+ private void addPushQueue(PushTypeEnum type, Long uid, String url, String webUrl,
+ Long goodsId, PushBaseContent content) {
+ //娣诲姞鍒版帹閫侀槦鍒�
+ PushContentDetailDTO dto = new PushContentDetailDTO(type, uid, url, webUrl, goodsId, content);
+ PushCMQManager.getInstance().addHWPush(dto);
+ }
- List<String> tokenList = new ArrayList<>();
- for (DeviceTokenHW token : hwDeviceList)
- tokenList.add(token.getDeviceToken());
- try {
- if (type==PushTypeEnum.goodsdetail) {// 鍟嗗搧璇︽儏
- if (goodsId == null)
- throw new PushException(2, "鍙傛暟涓嶅畬鏁�");
- HWPushUtil.pushGoods(tokenList, title, content, 1, goodsId);
- } else if (type==PushTypeEnum.url) {// 閾炬帴
- if (StringUtil.isNullOrEmpty(webUrl))
- throw new PushException(2, "鍙傛暟涓嶅畬鏁�");
- HWPushUtil.pushUrl(tokenList, title, content, webUrl);
- } else if (type==PushTypeEnum.ZNX) {// 绔欏唴淇�
- HWPushUtil.pushZNX(tokenList, title, content);
- } else if (type==PushTypeEnum.weex) {// weex
- if (StringUtil.isNullOrEmpty(url))
- throw new PushException(2, "鍙傛暟涓嶅畬鏁�");
- HWPushUtil.pushWEEX(tokenList, title, content, url);
- } else if (type==PushTypeEnum.baichuan) {// 鐧惧窛閾炬帴
- if (StringUtil.isNullOrEmpty(webUrl))
- throw new PushException(2, "鍙傛暟涓嶅畬鏁�");
- HWPushUtil.pushBaiChuanUrl(tokenList, title, content, webUrl);
- } else if (type==PushTypeEnum.welfare) {// 绂忓埄涓績
- HWPushUtil.pushWelfareCenter(tokenList, title, content);
- }else if (type==PushTypeEnum.signin) {// 绛惧埌
- HWPushUtil.pushUserSignInNotification(tokenList, title, content);
- }
- } catch (Exception e) {
- PushLogHelper.hwError(e);
- }
+ /**
+ * @param dto
+ * @throws PushException
+ */
+ public void push(PushContentDetailDTO dto) throws PushException {
+ LogHelper.pushHW("寮�濮嬫帹閫�");
+ int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
+ List<Integer> newVersionList = getVersionCodeList(dto.getContent().getVersionCodeList(), dto.getContent().getSystem());
+ // 1.6.5鍚庡紑濮嬫帹閫�
+ for (int i = 0; i < newVersionList.size(); i++) {
+ if (newVersionList.get(i) < 47)
+ newVersionList.remove(i--);
+ }
- }
- } else {
- // 鍗庝负鍗曟帹
- List<DeviceTokenHW> hwDeviceList = deviceTokenHWService.getDeviceTokenByUid(uid, newVersionList);
- List<String> tokenList = new ArrayList<>();
- if (hwDeviceList != null) {
- hwDeviceList = filterDeviceToken(hwDeviceList, hour);
- for (DeviceTokenHW token : hwDeviceList)
- tokenList.add(token.getDeviceToken());
- }
- if (tokenList.size() == 0)
- return;
+ if (dto.getUid() == null || dto.getUid() == 0) {
+ LogHelper.pushHW("鍏ㄦ帹");
+ //鍙帹閫佽繎30澶╃殑娲昏穬
+ Date minUpdateTime = new Date(System.currentTimeMillis() - Constant.PUSH_MIN_TIME);
+ long deviceCount = deviceTokenHWService.countDeviceToken(newVersionList, minUpdateTime);
+ int page = (int) (deviceCount % 100 == 0 ? deviceCount / 100 : deviceCount / 100 + 1);
+ for (int p = 1; p <= page; p++) {
+ List<DeviceTokenHW> hwDeviceList = deviceTokenHWService.getDeviceTokenList(p, 100, newVersionList, minUpdateTime);
+ hwDeviceList = filterDeviceToken(hwDeviceList, hour);
+ LogHelper.pushHW(String.format("鍏ㄦ帹:璁惧鏁�%s",hwDeviceList.size()));
+ List<String> tokenList = new ArrayList<>();
+ for (DeviceTokenHW token : hwDeviceList)
+ tokenList.add(token.getDeviceToken());
+ try {
+ if (dto.getType() == PushTypeEnum.goodsdetail) {// 鍟嗗搧璇︽儏
+ if (dto.getGoodsId() == null)
+ throw new PushException(2, "鍙傛暟涓嶅畬鏁�");
+ HWPushUtil.pushGoods(tokenList, dto.getContent().getTitle(), dto.getContent().getContent(), 1, dto.getGoodsId());
+ } else if (dto.getType() == PushTypeEnum.url) {// 閾炬帴
+ if (StringUtil.isNullOrEmpty(dto.getWebUrl()))
+ throw new PushException(2, "鍙傛暟涓嶅畬鏁�");
+ HWPushUtil.pushUrl(tokenList, dto.getContent().getTitle(), dto.getContent().getContent(), dto.getWebUrl());
+ } else if (dto.getType() == PushTypeEnum.ZNX) {// 绔欏唴淇�
+ HWPushUtil.pushZNX(tokenList, dto.getContent().getTitle(), dto.getContent().getContent());
+ } else if (dto.getType() == PushTypeEnum.weex) {// weex
+ if (StringUtil.isNullOrEmpty(dto.getUrl()))
+ throw new PushException(2, "鍙傛暟涓嶅畬鏁�");
+ HWPushUtil.pushWEEX(tokenList, dto.getContent().getTitle(), dto.getContent().getContent(), dto.getUrl());
+ } else if (dto.getType() == PushTypeEnum.baichuan) {// 鐧惧窛閾炬帴
+ if (StringUtil.isNullOrEmpty(dto.getWebUrl()))
+ throw new PushException(2, "鍙傛暟涓嶅畬鏁�");
+ HWPushUtil.pushBaiChuanUrl(tokenList, dto.getContent().getTitle(), dto.getContent().getContent(), dto.getWebUrl());
+ } else if (dto.getType() == PushTypeEnum.welfare) {// 绂忓埄涓績
+ HWPushUtil.pushWelfareCenter(tokenList, dto.getContent().getTitle(), dto.getContent().getContent());
+ } else if (dto.getType() == PushTypeEnum.signin) {// 绛惧埌
+ HWPushUtil.pushUserSignInNotification(tokenList, dto.getContent().getTitle(), dto.getContent().getContent());
+ }
+ } catch (Exception e) {
+ PushLogHelper.hwError(e);
+ }
- try {
- if (type==PushTypeEnum.goodsdetail) {// 鍟嗗搧璇︽儏
- if (goodsId == null)
- throw new PushException(2, "鍙傛暟涓嶅畬鏁�");
- HWPushUtil.pushGoods(tokenList, title, content, 1, goodsId);
- } else if (type==PushTypeEnum.url) {// 閾炬帴
- if (StringUtil.isNullOrEmpty(webUrl))
- throw new PushException(2, "鍙傛暟涓嶅畬鏁�");
- HWPushUtil.pushUrl(tokenList, title, content, webUrl);
- } else if (type==PushTypeEnum.ZNX) {// 绔欏唴淇�
- HWPushUtil.pushZNX(tokenList, title, content);
- } else if (type==PushTypeEnum.weex) {// weex
- if (StringUtil.isNullOrEmpty(url))
- throw new PushException(2, "鍙傛暟涓嶅畬鏁�");
- HWPushUtil.pushWEEX(tokenList, title, content, url);
- } else if (type==PushTypeEnum.baichuan) {// 鐧惧窛閾炬帴
- if (StringUtil.isNullOrEmpty(webUrl))
- throw new PushException(2, "鍙傛暟涓嶅畬鏁�");
- HWPushUtil.pushBaiChuanUrl(tokenList, title, content, webUrl);
- } else if (type==PushTypeEnum.welfare) {// 绂忓埄涓績
- HWPushUtil.pushWelfareCenter(tokenList, title, content);
- } else if (type==PushTypeEnum.signin) {// 绛惧埌
- HWPushUtil.pushUserSignInNotification(tokenList, title, content);
- }
- } catch (Exception e) {
- PushLogHelper.hwError(e);
- }
+ }
+ } else {
+ LogHelper.pushHW("鍗曟帹");
+ // 鍗庝负鍗曟帹
+ List<DeviceTokenHW> hwDeviceList = deviceTokenHWService.getDeviceTokenByUid(dto.getUid(), newVersionList);
+ List<String> tokenList = new ArrayList<>();
+ if (hwDeviceList != null) {
+ hwDeviceList = filterDeviceToken(hwDeviceList, hour);
+ for (DeviceTokenHW token : hwDeviceList)
+ tokenList.add(token.getDeviceToken());
+ }
- }
- }
+ LogHelper.pushHW(String.format("鍗曟帹:璁惧鏁�%s 鐢ㄦ埛:%s",hwDeviceList.size(),dto.getUid()+""));
+
+ if (tokenList.size() == 0)
+ return;
+
+ try {
+ if (dto.getType() == PushTypeEnum.goodsdetail) {// 鍟嗗搧璇︽儏
+ if (dto.getGoodsId() == null)
+ throw new PushException(2, "鍙傛暟涓嶅畬鏁�");
+ HWPushUtil.pushGoods(tokenList, dto.getContent().getTitle(), dto.getContent().getContent(), 1, dto.getGoodsId());
+ } else if (dto.getType() == PushTypeEnum.url) {// 閾炬帴
+ if (StringUtil.isNullOrEmpty(dto.getWebUrl()))
+ throw new PushException(2, "鍙傛暟涓嶅畬鏁�");
+ HWPushUtil.pushUrl(tokenList, dto.getContent().getTitle(), dto.getContent().getContent(), dto.getWebUrl());
+ } else if (dto.getType() == PushTypeEnum.ZNX) {// 绔欏唴淇�
+ HWPushUtil.pushZNX(tokenList, dto.getContent().getTitle(), dto.getContent().getContent());
+ } else if (dto.getType() == PushTypeEnum.weex) {// weex
+ if (StringUtil.isNullOrEmpty(dto.getUrl()))
+ throw new PushException(2, "鍙傛暟涓嶅畬鏁�");
+ HWPushUtil.pushWEEX(tokenList, dto.getContent().getTitle(), dto.getContent().getContent(), dto.getUrl());
+ } else if (dto.getType() == PushTypeEnum.baichuan) {// 鐧惧窛閾炬帴
+ if (StringUtil.isNullOrEmpty(dto.getWebUrl()))
+ throw new PushException(2, "鍙傛暟涓嶅畬鏁�");
+ HWPushUtil.pushBaiChuanUrl(tokenList, dto.getContent().getTitle(), dto.getContent().getContent(), dto.getWebUrl());
+ } else if (dto.getType() == PushTypeEnum.welfare) {// 绂忓埄涓績
+ HWPushUtil.pushWelfareCenter(tokenList, dto.getContent().getTitle(), dto.getContent().getContent());
+ } else if (dto.getType() == PushTypeEnum.signin) {// 绛惧埌
+ HWPushUtil.pushUserSignInNotification(tokenList, dto.getContent().getTitle(), dto.getContent().getContent());
+ }
+ } catch (Exception e) {
+ PushLogHelper.hwError(e);
+ }
+
+ }
+ }
}
--
Gitblit v1.8.0