From cdcbed9af813b2a02cdc01eefa24db8bec6b51a9 Mon Sep 17 00:00:00 2001 From: yujian <yujian> Date: 星期三, 27 三月 2019 12:17:33 +0800 Subject: [PATCH] 主分类 + 子分类 DAO改造 --- fanli/src/main/java/com/yeshi/fanli/service/impl/push/IOSPushServiceImpl.java | 258 ++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 220 insertions(+), 38 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/push/IOSPushServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/push/IOSPushServiceImpl.java index 3215be6..42cec89 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/impl/push/IOSPushServiceImpl.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/push/IOSPushServiceImpl.java @@ -1,13 +1,14 @@ package com.yeshi.fanli.service.impl.push; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; import java.util.Date; import java.util.List; import javax.annotation.Resource; -import net.sf.json.JSONObject; - +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -21,14 +22,15 @@ import com.yeshi.fanli.entity.xinge.MessageInfo; import com.yeshi.fanli.entity.xinge.PushRecord; import com.yeshi.fanli.exception.PushException; -import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.log.PushLogHelper; import com.yeshi.fanli.service.inter.push.IOSPushService; +import com.yeshi.fanli.service.inter.user.UserCustomSettingsService; import com.yeshi.fanli.util.CMQManager; import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.StringUtil; -import com.yeshi.fanli.util.ThreadUtil; import com.yeshi.fanli.util.push.IOSPushUtil; + +import net.sf.json.JSONObject; @Service public class IOSPushServiceImpl implements IOSPushService { @@ -39,8 +41,12 @@ @Resource private PushQueueRecordMapper pushQueueRecordMapper; + @Resource + private UserCustomSettingsService userCustomSettingsService; + + @Async("pushExecutor") @Override - public void pushGoods(Long uid, Long auctionId, String title, String content) throws PushException { + public void pushGoods(Long uid, Long auctionId, String title, String content, String versionCodes) throws PushException { String url = "https://item.taobao.com/item.htm?id=" + auctionId; JSONObject json = new JSONObject(); @@ -66,7 +72,7 @@ if (uid == null || uid == 0) { - addPushIOSQueue(info, url, PushController.GOODS); + addPushIOSQueue(info, url, PushController.GOODS, versionCodes); /* * // 鏌ヨIOS鎵�鏈夎澶囧彿 // TODO 闇�瑕佸叏鎺� List<String> deviceTokenList = @@ -81,8 +87,13 @@ * } } }); */ } else { + if (!validateNotDisturbSingle(uid)) { + return; // 閫氱煡鍏嶆墦鎵�(20:00-24:00 / 00:00 -08:00) + } + // IOS 鍗曟帹 - List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(uid); + List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(uid, versionCodes); + List<String> deviceTokenList = new ArrayList<>(); if (deviceTokenIosList != null) for (DeviceTokenIOS ios : deviceTokenIosList) { @@ -98,8 +109,9 @@ } } + @Async("pushExecutor") @Override - public void pushUrl(Long uid, String url, String title, String content) throws PushException { + public void pushUrl(Long uid, String url, String title, String content, String versionCodes) throws PushException { JSONObject json = new JSONObject(); json.put("url", url); json.put("type", "url"); @@ -121,7 +133,7 @@ if (uid == null || uid == 0) { // TODO 闇�瑕佸叏鎺� - addPushIOSQueue(info, url, PushController.URL); + addPushIOSQueue(info, url, PushController.URL, versionCodes); /* * List<String> deviceTokenList = getDeviceTokenList(1, 1000); @@ -135,7 +147,11 @@ * } catch (Exception e) { PushLogHelper.iosError(e); } } }); */ } else { - List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(uid); + if (!validateNotDisturbSingle(uid)) { + return; // 閫氱煡鍏嶆墦鎵�(20:00-24:00 / 00:00 -08:00) + } + + List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(uid, versionCodes); List<String> deviceTokenList = new ArrayList<>(); if (deviceTokenIosList != null) for (DeviceTokenIOS ios : deviceTokenIosList) { @@ -149,13 +165,10 @@ } } + + @Async("pushExecutor") @Override - public void pushWEEXUrl(Long uid, String weexUrl, String title, String content) throws PushException { - - } - - @Override - public void pushZNX(Long uId, AccountMessage msg, SystemZnx systemZNX) throws PushException { + public void pushZNX(Long uId, AccountMessage msg, SystemZnx systemZNX, String versionCodes) throws PushException { MessageInfo info = new MessageInfo(); info.setPackageName(Constant.systemCommonConfig.getAndroidPackageName()); @@ -185,7 +198,7 @@ // TODO 闇�瑕佸叏鎺� - addPushIOSQueue(info, id + "", PushController.ZNX); + addPushIOSQueue(info, id + "", PushController.ZNX, versionCodes); /* * List<String> deviceTokenList = getDeviceTokenList(1, 1000); @@ -200,6 +213,13 @@ * } }); */ } else if (msg != null) { + + if (uId != null) { + if (!validateNotDisturbSingle(uId)) { + return; // 閫氱煡鍏嶆墦鎵�(20:00-24:00 / 00:00 -08:00) + } + } + // 鎻掑叆鎺ㄩ�佽褰� PushRecord pushRecord = new PushRecord(); info.setTitle(msg.getTitle()); @@ -221,7 +241,7 @@ json.put("miPushUrl", String.format("%s.ui.mine.AppMailDetailActivity", Constant.systemCommonConfig.getAndroidBaseactivityName())); - List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(msg.getUserInfo().getId()); + List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(msg.getUserInfo().getId(), versionCodes); List<String> deviceTokenList = new ArrayList<>(); if (deviceTokenIosList != null) for (DeviceTokenIOS ios : deviceTokenIosList) { @@ -245,7 +265,7 @@ return; // 鍒ゆ柇device鏄惁瀛樺湪 - DeviceTokenIOS deviceTokenIos = deviceTokenIOSMapper.selectByDeviceToken(deviceToken); + DeviceTokenIOS deviceTokenIos = deviceTokenIOSMapper.selectByDevice(device); if (deviceTokenIos == null) { deviceTokenIos = new DeviceTokenIOS(); deviceTokenIos.setCreateTime(new Date()); @@ -256,18 +276,26 @@ deviceTokenIos.setUid(uid); deviceTokenIos.setVersion(version); deviceTokenIOSMapper.insertSelective(deviceTokenIos); + } else {// 鏇存柊devicetoken + DeviceTokenIOS updateDeviceTokenIOS = new DeviceTokenIOS(); + updateDeviceTokenIOS.setId(deviceTokenIos.getId()); + updateDeviceTokenIOS.setDeviceToken(deviceToken); + updateDeviceTokenIOS.setDeviceTokenMd5(StringUtil.Md5(deviceToken)); + updateDeviceTokenIOS.setUid(uid); + updateDeviceTokenIOS.setUpdateTime(new Date()); + deviceTokenIOSMapper.updateByPrimaryKeySelective(updateDeviceTokenIOS); } } @Override - public List<DeviceTokenIOS> getDeviceTokenListByUid(Long uid) { - return deviceTokenIOSMapper.selectByUid(uid); + public List<DeviceTokenIOS> getDeviceTokenListByUid(Long uid, String versionCodes) throws PushException { + return deviceTokenIOSMapper.selectByUid(uid, convertVersionType(versionCodes)); } @Override public List<String> getDeviceTokenList(int page, int size) { - List<DeviceTokenIOS> list = deviceTokenIOSMapper.selectList((long) ((page - 1) * size), size); + List<DeviceTokenIOS> list = deviceTokenIOSMapper.selectList((long) ((page - 1) * size), size, null); List<String> tokenList = new ArrayList<>(); for (DeviceTokenIOS ios : list) if (!StringUtil.isNullOrEmpty(ios.getDeviceToken())) @@ -299,7 +327,7 @@ * @param json */ @Transactional - public void addPushIOSQueue(MessageInfo info, String url, int type) { + public void addPushIOSQueue(MessageInfo info, String url, int type, String versionCodes) throws PushException { try { @@ -313,7 +341,7 @@ // 姣忔鎵ц鏉$洰 int pushNum = 50; - + for (long i = 0; i < tokenCount + totalCount;) { PushQueueRecord pushQueueRecord = new PushQueueRecord(); @@ -327,6 +355,9 @@ pushQueueRecord.setPushNum(pushNum); // 鎺ㄩ�佺 IOS pushQueueRecord.setType(1); + // 鐗堟湰鍙� + pushQueueRecord.setVersions(versionCodes); + if (tokenCount - i < totalCount) { // 璧峰娓告爣 @@ -352,7 +383,7 @@ // 缁撴潫娓告爣 pushQueueRecord.setEndCursor(endCursor); - // TODO 瀛樺叆鏁版嵁搴� + // 瀛樺叆鏁版嵁搴� pushQueueRecordMapper.insert(pushQueueRecord); // 鍔犲叆闃熷垪 CMQManager.getInstance().addIOSPushMsg(pushQueueRecord); @@ -362,7 +393,6 @@ } } catch (Exception e) { - // TODO Auto-generated catch block e.printStackTrace(); } @@ -378,11 +408,17 @@ Long startCursor = pushQueueRecord.getStartCursor(); // 缁撴潫浣嶇疆 Long endCursor = pushQueueRecord.getEndCursor(); - + if (startCursor == null && endCursor == null) { return; } + + // 鎺ㄩ�佺殑鐗堟湰鍙� + String versions = pushQueueRecord.getVersions(); + List<Integer> listCode = convertVersionType(versions); + + int total = (int) (endCursor - startCursor); // 姣忔鎺ㄩ�佹�绘潯鏁� @@ -397,11 +433,11 @@ long recordCursor = startCursor; for (int i = 0; i < count; i++) { - + // 涓嶈冻50涓暟鎹� if (moveNum > total) { moveNum = (int) (endCursor - startCursor); - List<DeviceTokenIOS> list = deviceTokenIOSMapper.selectList(startCursor, moveNum); + List<DeviceTokenIOS> list = deviceTokenIOSMapper.selectList(startCursor, moveNum, listCode); recordCursor = endCursor; if (list != null) { @@ -415,7 +451,7 @@ // System.out.println("recordCursorend:" +recordCursor); moveNum = (int) (endCursor - recordCursor); // System.out.println(moveNum); - List<DeviceTokenIOS> list = deviceTokenIOSMapper.selectList(recordCursor, moveNum); + List<DeviceTokenIOS> list = deviceTokenIOSMapper.selectList(recordCursor, moveNum, listCode); if (list != null) { executePushIOS(list, pushQueueRecord, endCursor); PushLogHelper.iosInfo("鎺ㄩ�佹父鏍�:" + recordCursor + "锛�" + moveNum); @@ -423,7 +459,7 @@ recordCursor = endCursor; } else { - List<DeviceTokenIOS> list = deviceTokenIOSMapper.selectList(recordCursor, moveNum); + List<DeviceTokenIOS> list = deviceTokenIOSMapper.selectList(recordCursor, moveNum, listCode); recordCursor = recordCursor + 50; if (list != null) { @@ -431,11 +467,8 @@ PushLogHelper.iosInfo("鎺ㄩ�佹父鏍�:" + recordCursor + "锛�" + moveNum); } } - - // System.out.println("recordCursor:" +recordCursor); } } - } public void executePushIOS(List<DeviceTokenIOS> list, PushQueueRecord pushQueueRecord, long recordCursor) { @@ -444,20 +477,36 @@ JSONObject json = JSONObject.fromObject(jsonContent); List<String> tokenList = new ArrayList<>(); + + boolean ispush = false; + List<Long> listNotPushId = null; + + Calendar now = Calendar.getInstance(); + int hour = now.get(Calendar.HOUR_OF_DAY); + if (hour >= 8 && hour < 20) { + ispush = true; // 鍙帹閫� + } else { + listNotPushId = validateNotDisturb(); + } + for (DeviceTokenIOS ios : list) { + if (!StringUtil.isNullOrEmpty(ios.getDeviceToken())) { + if (!ispush && listNotPushId != null && listNotPushId.size() > 0) { + Long uid = ios.getUid(); + if (uid != null && listNotPushId.contains(uid)) { + continue; // 閫氱煡鍏嶆墦鎵�(20:00-24:00 / 00:00 -08:00) + } + } tokenList.add(ios.getDeviceToken()); - // System.out.println(ios.getDeviceToken()); } } if (tokenList.size() > 0) { - // System.out.println(tokenList.size()); // 鎵ц鎺ㄩ�� try { IOSPushUtil.executePushIOS(tokenList, json); } catch (Exception e) { - // TODO Auto-generated catch block e.printStackTrace(); } } @@ -465,8 +514,141 @@ pushQueueRecord.setEndtime(new Date()); pushQueueRecord.setRecordCursor(recordCursor); - // TODO 鏇存柊鏁版嵁搴� + // 鏇存柊鏁版嵁搴� pushQueueRecordMapper.updateByPrimaryKeySelective(pushQueueRecord); } + @Override + public void unBindUidAndDevice(String device) { + if (StringUtil.isNullOrEmpty(device)) + return; + DeviceTokenIOS deviceTokenIOS = deviceTokenIOSMapper.selectByDevice(device); + if (device != null) { + deviceTokenIOS.setUpdateTime(new Date()); + deviceTokenIOS.setUid(null); + deviceTokenIOSMapper.updateByPrimaryKey(deviceTokenIOS); + } + } + + @Async("pushExecutor") + @Override + public void pushWEEX(Long uid, String title, String content, String weexUrl,String versionCodes) throws PushException { + MessageInfo info = new MessageInfo(); + info.setTitle(title); + info.setContent(content); + info.setDescription(content); + // IOS 鍏ㄦ帹 + if (uid == null || uid == 0) { + addPushIOSQueue(info, weexUrl, PushController.WEEX, versionCodes); + } else { + List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(uid, versionCodes); + List<String> deviceTokenList = new ArrayList<>(); + if (deviceTokenIosList != null) + for (DeviceTokenIOS ios : deviceTokenIosList) { + deviceTokenList.add(ios.getDeviceToken()); + } + try { + IOSPushUtil.allPushIOS(deviceTokenList, info, weexUrl, PushController.WEEX); + } catch (Exception e) { + PushLogHelper.iosError(e); + } + } + } + + @Async("pushExecutor") + @Override + public void pushBaiChuanUrl(Long uid, String title, String content, String url, String versionCodes) throws PushException { + MessageInfo info = new MessageInfo(); + info.setTitle(title); + info.setContent(content); + info.setDescription(content); + // IOS 鍏ㄦ帹 + if (uid == null || uid == 0) { + addPushIOSQueue(info, url, PushController.BAICHUAN, versionCodes); + } else { + List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(uid, versionCodes); + List<String> deviceTokenList = new ArrayList<>(); + if (deviceTokenIosList != null) + for (DeviceTokenIOS ios : deviceTokenIosList) { + deviceTokenList.add(ios.getDeviceToken()); + } + try { + IOSPushUtil.allPushIOS(deviceTokenList, info, url, PushController.BAICHUAN); + } catch (Exception e) { + PushLogHelper.iosError(e); + } + } + } + + /** + * 閫氱煡鍏嶆墦鎵�(20:00-8:00) + */ + public List<Long> validateNotDisturb() { + return userCustomSettingsService.getCancelNoticeUsers(); + } + + /** + * 閫氱煡鍏嶆墦鎵�(20:00-8:00) + */ + public boolean validateNotDisturbSingle(Long uid) { + Calendar now = Calendar.getInstance(); + int hour = now.get(Calendar.HOUR_OF_DAY); + boolean ispush; + if (hour >= 8 && hour < 20) { + ispush = true; // 鍙帹閫� + } else { + // 鑷畾涔夎缃� 閫氱煡鍏嶆墦鎵�(20:00-24:00 / 00:00 -08:00) + ispush = userCustomSettingsService.validateCancelNoticeByUid(uid); + } + + return ispush; + } + + @Async("pushExecutor") + @Override + public void pushWelfareCenter(Long uid, String title, String content, String versionCodes) throws PushException { + MessageInfo info = new MessageInfo(); + info.setTitle(title); + info.setContent(content); + info.setDescription(content); + // IOS 鍏ㄦ帹 + if (uid == null || uid == 0) { + addPushIOSQueue(info, "", PushController.WELFARE_CENTER, versionCodes); + } else { + if (!validateNotDisturbSingle(uid)) { + return; + } + List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(uid, versionCodes); + List<String> deviceTokenList = new ArrayList<>(); + if (deviceTokenIosList != null) + for (DeviceTokenIOS ios : deviceTokenIosList) { + deviceTokenList.add(ios.getDeviceToken()); + } + try { + IOSPushUtil.allPushIOS(deviceTokenList, info, "", PushController.WELFARE_CENTER); + } catch (Exception e) { + PushLogHelper.iosError(e); + } + } + } + + private List<Integer> convertVersionType(String versionCodes) { + List<Integer> listVersionCode = null; + + if (versionCodes != null && versionCodes.trim().length() > 0) { + List<String> listVersion = Arrays.asList(versionCodes.split(",")); + if (listVersion != null && listVersion.size() > 0) { + + listVersionCode = new ArrayList<Integer>(); + // 杞崲鎴愬姛鏁村瀷 + for (String version : listVersion) { + if (version != null && version.trim().length() > 0) { + listVersionCode.add(Integer.parseInt(version)); + } + } + } + } + return listVersionCode; + } + } -- Gitblit v1.8.0