From dc5be7d38446f70e6ff86df311119c32b41fe7f8 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期六, 28 十一月 2020 16:37:05 +0800 Subject: [PATCH] 大淘客搜索接口升级 --- fanli/src/main/java/com/yeshi/fanli/service/impl/push/HWPushServiceImpl.java | 399 ++++++++++++++++++++++++++++---------------------------- 1 files changed, 202 insertions(+), 197 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 cd5d6ae..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,236 +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.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); - // 1.6.5鍚庡紑濮嬫帹閫� - for (int i = 0; i < newVersionList.size(); i++) { - if (newVersionList.get(i) < 47) - newVersionList.remove(i--); - } + //娣诲姞鍒版帹閫侀槦鍒� + 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); + } - 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); + /** + * @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--); + } - 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); - } + 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); + } - } - } 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; + } + } 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()); + } - 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); - } + 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