From 744594ef1a2f530fc3e86ea9dc48b62247f79420 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期二, 19 五月 2020 17:13:23 +0800 Subject: [PATCH] 饿了么绘图,添加口碑 --- fanli/src/main/java/com/yeshi/fanli/service/impl/push/HWPushServiceImpl.java | 397 +++++++++++++++++++++++++++++-------------------------- 1 files changed, 209 insertions(+), 188 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 f84295e..95b548a 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,27 +1,29 @@ 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.controller.admin.PushController; -import com.yeshi.fanli.entity.bus.user.AccountMessage; +import com.yeshi.fanli.dto.push.PushTypeEnum; +import com.yeshi.fanli.entity.AppVersionInfo; +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.entity.system.SystemZnx; -import com.yeshi.fanli.entity.xinge.MessageInfo; -import com.yeshi.fanli.entity.xinge.PushRecord; -import com.yeshi.fanli.exception.PushException; +import com.yeshi.fanli.exception.push.PushException; 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.util.Constant; -import com.yeshi.fanli.util.ThreadUtil; +import com.yeshi.fanli.service.inter.user.UserCustomSettingsService; +import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.push.HWPushUtil; - -import net.sf.json.JSONObject; @Service public class HWPushServiceImpl implements HWPushService { @@ -29,190 +31,209 @@ @Resource private DeviceTokenHWService deviceTokenHWService; + @Resource + private AppVersionService appVersionService; + + @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()); + } + + } 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) throws PushException { - String gid = auctionId + ""; - JSONObject json = new JSONObject(); - json.put("url", ""); - json.put("id", gid); - json.put("type", "goodsdetail"); - json.put("miPushUrl", String.format("%s.ui.recommend.GoodsBrowserActivity", - Constant.systemCommonConfig.getAndroidBaseactivityName())); - if (uid == null || uid == 0) { - // 鍗庝负鍏ㄦ帹閫� --鏆傛椂璁剧疆鎺ㄩ��100000鐢ㄦ埛 - List<DeviceTokenHW> hwDeviceList = deviceTokenHWService.getDeviceTokenList(1, 100000); - ThreadUtil.run(new Runnable() { - @Override - public void run() { - while (hwDeviceList != null && hwDeviceList.size() > 0) { - List<String> deviceTokens = new ArrayList<>(); - if (hwDeviceList.size() > 10000) { - List<DeviceTokenHW> pushList = hwDeviceList.subList(0, 1000); - for (DeviceTokenHW DeviceTokenHW : pushList) { - deviceTokens.add(DeviceTokenHW.getDeviceToken()); - hwDeviceList.remove(DeviceTokenHW); - } - } else { - for (DeviceTokenHW DeviceTokenHW : hwDeviceList) { - deviceTokens.add(DeviceTokenHW.getDeviceToken()); - hwDeviceList.remove(DeviceTokenHW); - } - } - try { - HWPushUtil.pushGoods(deviceTokens, title, content, 1, Long.parseLong(gid)); - } catch (Exception e) { - PushLogHelper.hwError(e); - } + 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); + } + + @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); + } + + @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); + } + + @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); + } + + @Async("pushExecutor") + @Override + public void pushBaiChuanUrl(Long uid, String title, String content, String url, List<Integer> versionCodeList) + throws PushException { + + push(PushTypeEnum.baichuan, uid, title, content, null, url, null, versionCodeList); + } + + @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 pushUserSignInNotification(Long uid, String title, String content, List<Integer> versionCodeList) + throws PushException { + push(PushTypeEnum.signin, uid, title, content, null, null, null, versionCodeList); + } + + 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--); + } + + 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); + + 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); + } + + } } else { // 鍗庝负鍗曟帹 - List<DeviceTokenHW> hwDeviceList = deviceTokenHWService.getDeviceTokenByUid(uid); - if (hwDeviceList != null && hwDeviceList.size() > 0) { - List<String> deviceList = new ArrayList<>(); - for (DeviceTokenHW dt : hwDeviceList) - deviceList.add(dt.getDeviceToken()); - try { - HWPushUtil.pushGoods(deviceList, title, content, 1, Long.parseLong(gid)); - } catch (Exception e) { - PushLogHelper.hwError(e); - } + 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; + + 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); + } + } } - - @Override - public void pushUrl(Long uid, String url, String title, String content) throws PushException { - JSONObject json = new JSONObject(); - json.put("url", url); - json.put("type", "url"); - json.put("webUrl", url); - json.put("miPushUrl", - String.format("%s.ui.BrowserActivity", Constant.systemCommonConfig.getAndroidBaseactivityName())); - - MessageInfo info = new MessageInfo(); - info.setTitle(title); - info.setContent(content); - info.setDescription(content); - // 灏忕背鎺ㄩ�佺綉椤� - info.setPackageName(Constant.systemCommonConfig.getAndroidPackageName()); - info.setActivty( - String.format("%s.ui.BrowserActivity", Constant.systemCommonConfig.getAndroidBaseactivityName())); - - PushRecord pushRecord = new PushRecord(); - pushRecord.setState(1); - pushRecord.setType(PushController.URL); - pushRecord.setUrl(url); - pushRecord.setTitle(title); - pushRecord.setAppName(Constant.systemCommonConfig.getProjectChineseName()); - - // 鍗庝负鍏ㄦ帹閫� --鏆傛椂璁剧疆鎺ㄩ��100000鐢ㄦ埛 - if (uid == null || uid == 0) { - List<DeviceTokenHW> hwDeviceList = deviceTokenHWService.getDeviceTokenList(1, 100000); - ThreadUtil.run(new Runnable() { - @Override - public void run() { - while (hwDeviceList != null && hwDeviceList.size() > 0) { - List<String> deviceTokens = new ArrayList<>(); - if (hwDeviceList.size() > 1000) { - List<DeviceTokenHW> pushList = hwDeviceList.subList(0, 1000); - for (DeviceTokenHW DeviceTokenHW : pushList) { - deviceTokens.add(DeviceTokenHW.getDeviceToken()); - hwDeviceList.remove(DeviceTokenHW); - } - } else { - for (DeviceTokenHW DeviceTokenHW : hwDeviceList) { - deviceTokens.add(DeviceTokenHW.getDeviceToken()); - hwDeviceList.remove(DeviceTokenHW); - } - } - try { - HWPushUtil.pushWeb(deviceTokens, title, content, url); - } catch (Exception e) { - PushLogHelper.hwError(e); - } - } - } - }); - } else { - // 鍗庝负鍗曟帹 - List<DeviceTokenHW> hwDeviceList = deviceTokenHWService.getDeviceTokenByUid(uid); - if (hwDeviceList != null && hwDeviceList.size() > 0) { - List<String> deviceList = new ArrayList<>(); - for (DeviceTokenHW dt : hwDeviceList) - deviceList.add(dt.getDeviceToken()); - try { - HWPushUtil.pushWeb(deviceList, title, content, url); - } catch (Exception e) { - PushLogHelper.hwError(e); - } - } - } - } - - @Override - public void pushZNX(Long uid, AccountMessage msg, SystemZnx systemZNX) throws PushException { - - JSONObject contentJson = new JSONObject(); - contentJson.put("isOpen", 0); - contentJson.put("createTime", java.lang.System.currentTimeMillis()); - - if (systemZNX != null) { - // 鍗庝负鍏ㄦ帹閫� --鏆傛椂璁剧疆鎺ㄩ��10000鐢ㄦ埛 - List<DeviceTokenHW> hwDeviceList = deviceTokenHWService.getDeviceTokenList(1, 10000); - ThreadUtil.run(new Runnable() { - @Override - public void run() { - while (hwDeviceList != null && hwDeviceList.size() > 0) { - List<String> deviceTokens = new ArrayList<>(); - if (hwDeviceList.size() > 1000) { - List<DeviceTokenHW> pushList = hwDeviceList.subList(0, 1000); - for (DeviceTokenHW DeviceTokenHW : pushList) { - deviceTokens.add(DeviceTokenHW.getDeviceToken()); - hwDeviceList.remove(DeviceTokenHW); - } - } else { - for (DeviceTokenHW DeviceTokenHW : hwDeviceList) { - deviceTokens.add(DeviceTokenHW.getDeviceToken()); - hwDeviceList.remove(DeviceTokenHW); - } - } - try { - HWPushUtil.pushZNX(deviceTokens, systemZNX.getTitle(), systemZNX.getContent()); - } catch (Exception e) { - PushLogHelper.hwError(e); - } - } - } - }); - - } else if (msg != null) { - // 鍗庝负鍗曟帹 - List<DeviceTokenHW> hwDeviceList = deviceTokenHWService.getDeviceTokenByUid(uid); - if (hwDeviceList != null && hwDeviceList.size() > 0) { - List<String> deviceList = new ArrayList<>(); - for (DeviceTokenHW dt : hwDeviceList) - deviceList.add(dt.getDeviceToken()); - try { - HWPushUtil.pushZNX(deviceList, msg.getTitle(), msg.getContent()); - } catch (Exception e) { - PushLogHelper.hwError(e); - } - } - } - } - - @Override - public void pushWEEX(Long uid, String title, String content, String weexUrl) throws PushException { - // TODO 鎺ㄩ�亀eex椤甸潰 - - } - - @Override - public void pushBaiChuanUrl(Long uid, String title, String content, String url) throws PushException { - // TODO 鎺ㄩ�佹窐瀹㈢櫨宸濋摼鎺� - - } - } -- Gitblit v1.8.0