From 69bee82b81626b82b7f39f0e459e4f56b1699b51 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期三, 13 三月 2019 12:02:16 +0800 Subject: [PATCH] 正式数据库修改 --- fanli/src/main/java/com/yeshi/fanli/service/impl/push/IOSPushServiceImpl.java | 357 +++++++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 248 insertions(+), 109 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 d2094a4..9576a6e 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,12 +1,11 @@ package com.yeshi.fanli.service.impl.push; import java.util.ArrayList; +import java.util.Calendar; import java.util.Date; import java.util.List; import javax.annotation.Resource; - -import net.sf.json.JSONObject; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -23,21 +22,25 @@ import com.yeshi.fanli.exception.PushException; 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 { @Resource private DeviceTokenIOSMapper deviceTokenIOSMapper; - + @Resource private PushQueueRecordMapper pushQueueRecordMapper; - + + @Resource + private UserCustomSettingsService userCustomSettingsService; @Override public void pushGoods(Long uid, Long auctionId, String title, String content) throws PushException { @@ -65,27 +68,26 @@ pushRecord.setAppName(Constant.systemCommonConfig.getProjectChineseName()); if (uid == null || uid == 0) { - - addPushIOSQueue(info, url, PushController.GOODS); - - - /* // 鏌ヨIOS鎵�鏈夎澶囧彿 - // TODO 闇�瑕佸叏鎺� - List<String> deviceTokenList = getDeviceTokenList(1, 20000); - // IOS 鍏ㄦ帹 - ThreadUtil.run(new Runnable() { - @Override - public void run() { - try { - IOSPushUtil.allPushIOS(deviceTokenList, info, url, PushController.GOODS); - } catch (Exception e) { - PushLogHelper.iosError(e); - - } - } - });*/ + addPushIOSQueue(info, url, PushController.GOODS); + + /* + * // 鏌ヨIOS鎵�鏈夎澶囧彿 // TODO 闇�瑕佸叏鎺� List<String> deviceTokenList = + * getDeviceTokenList(1, 20000); // IOS 鍏ㄦ帹 ThreadUtil.run(new + * Runnable() { + * + * @Override public void run() { try { + * IOSPushUtil.allPushIOS(deviceTokenList, info, url, + * PushController.GOODS); } catch (Exception e) { + * PushLogHelper.iosError(e); + * + * } } }); + */ } else { + if (!validateNotDisturbSingle(uid)) { + return; // 閫氱煡鍏嶆墦鎵�(20:00-24:00 / 00:00 -08:00) + } + // IOS 鍗曟帹 List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(uid); List<String> deviceTokenList = new ArrayList<>(); @@ -125,24 +127,25 @@ // IOS 鍏ㄦ帹 if (uid == null || uid == 0) { // TODO 闇�瑕佸叏鎺� - + addPushIOSQueue(info, url, PushController.URL); - - /*List<String> deviceTokenList = getDeviceTokenList(1, 1000); - ThreadUtil.run(new Runnable() { - @Override - public void run() { - try { - - IOSPushUtil.allPushIOS(deviceTokenList, info, url, PushController.URL); - - } catch (Exception e) { - PushLogHelper.iosError(e); - } - } - });*/ + /* + * List<String> deviceTokenList = getDeviceTokenList(1, 1000); + * ThreadUtil.run(new Runnable() { + * + * @Override public void run() { try { + * + * IOSPushUtil.allPushIOS(deviceTokenList, info, url, + * PushController.URL); + * + * } catch (Exception e) { PushLogHelper.iosError(e); } } }); + */ } else { + if (!validateNotDisturbSingle(uid)) { + return; // 閫氱煡鍏嶆墦鎵�(20:00-24:00 / 00:00 -08:00) + } + List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(uid); List<String> deviceTokenList = new ArrayList<>(); if (deviceTokenIosList != null) @@ -155,11 +158,6 @@ PushLogHelper.iosError(e); } } - } - - @Override - public void pushWEEXUrl(Long uid, String weexUrl, String title, String content) throws PushException { - } @Override @@ -192,23 +190,29 @@ PushRecord pushRecord = new PushRecord(); // TODO 闇�瑕佸叏鎺� - + addPushIOSQueue(info, id + "", PushController.ZNX); - - /*List<String> deviceTokenList = getDeviceTokenList(1, 1000); - ThreadUtil.run(new Runnable() { - @Override - public void run() { - try { - IOSPushUtil.allPushIOS(deviceTokenList, info, id + "", PushController.ZNX); - } catch (Exception e) { - PushLogHelper.iosError(e); - } - - } - });*/ + /* + * List<String> deviceTokenList = getDeviceTokenList(1, 1000); + * + * ThreadUtil.run(new Runnable() { + * + * @Override public void run() { try { + * IOSPushUtil.allPushIOS(deviceTokenList, info, id + "", + * PushController.ZNX); } catch (Exception e) { + * PushLogHelper.iosError(e); } + * + * } }); + */ } 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()); @@ -248,9 +252,9 @@ @Transactional @Override - public void addDeviceToken(Long uid,int version, String deviceToken, String device) { + public void addDeviceToken(Long uid, int version, String deviceToken, String device) { // 濡傛灉device涓虹┖灏辫繑鍥� - if (StringUtil.isNullOrEmpty(device)) + if (StringUtil.isNullOrEmpty(device) || StringUtil.isNullOrEmpty(deviceToken)) return; // 鍒ゆ柇device鏄惁瀛樺湪 @@ -261,9 +265,18 @@ deviceTokenIos.setUpdateTime(new Date()); deviceTokenIos.setDevice(device); deviceTokenIos.setDeviceToken(deviceToken); + deviceTokenIos.setDeviceTokenMd5(StringUtil.Md5(deviceToken)); 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); } } @@ -297,20 +310,20 @@ } @Override - public DeviceTokenIOS getDeviceTokenByDevice(String device) { - return deviceTokenIOSMapper.selectByDevice(device); + public DeviceTokenIOS getDeviceTokenByDeviceToken(String deviceToken) { + return deviceTokenIOSMapper.selectByDeviceToken(deviceToken); } - /** * 淇濆瓨鎺ㄩ�佸唴瀹瑰彧闃熷垪涓� + * * @param json */ @Transactional public void addPushIOSQueue(MessageInfo info, String url, int type) { - + try { - + JSONObject json = IOSPushUtil.getJSONObject(info, url, type); // 鎬绘潯鐩� @@ -333,7 +346,7 @@ pushQueueRecord.setCreatetime(new Date()); // 姣忔鎺ㄩ�佹暟閲� pushQueueRecord.setPushNum(pushNum); - // 鎺ㄩ�佺 IOS + // 鎺ㄩ�佺 IOS pushQueueRecord.setType(1); if (tokenCount - i < totalCount) { @@ -360,7 +373,7 @@ // 缁撴潫娓告爣 pushQueueRecord.setEndCursor(endCursor); - // TODO 瀛樺叆鏁版嵁搴� + // 瀛樺叆鏁版嵁搴� pushQueueRecordMapper.insert(pushQueueRecord); // 鍔犲叆闃熷垪 CMQManager.getInstance().addIOSPushMsg(pushQueueRecord); @@ -370,111 +383,237 @@ } } catch (Exception e) { - // TODO Auto-generated catch block e.printStackTrace(); } } - - + /** * 闃熷垪鎵ц鎺ㄩ�佹搷浣� */ @Override public void readyPushIOS(PushQueueRecord pushQueueRecord) throws Exception { - + // 璧峰浣嶇疆 Long startCursor = pushQueueRecord.getStartCursor(); // 缁撴潫浣嶇疆 Long endCursor = pushQueueRecord.getEndCursor(); - + if (startCursor == null && endCursor == null) { return; } - + int total = (int) (endCursor - startCursor); - + // 姣忔鎺ㄩ�佹�绘潯鏁� int moveNum = pushQueueRecord.getPushNum(); - - int count = total/ moveNum; - + + int count = total / moveNum; + if (total % moveNum > 0) { - count +=1; + count += 1; } - + long recordCursor = startCursor; - + for (int i = 0; i < count; i++) { - + // 涓嶈冻50涓暟鎹� if (moveNum > total) { - moveNum = (int) (endCursor- startCursor); + moveNum = (int) (endCursor - startCursor); List<DeviceTokenIOS> list = deviceTokenIOSMapper.selectList(startCursor, moveNum); recordCursor = endCursor; - + if (list != null) { executePushIOS(list, pushQueueRecord, recordCursor); + PushLogHelper.iosInfo("鎺ㄩ�佹父鏍�:" + startCursor + "锛�" + moveNum); } - + } else { - + if (recordCursor + moveNum > endCursor) { - //System.out.println("recordCursorend:" +recordCursor); - moveNum = (int) (endCursor- recordCursor); - //System.out.println(moveNum); + // System.out.println("recordCursorend:" +recordCursor); + moveNum = (int) (endCursor - recordCursor); + // System.out.println(moveNum); List<DeviceTokenIOS> list = deviceTokenIOSMapper.selectList(recordCursor, moveNum); if (list != null) { executePushIOS(list, pushQueueRecord, endCursor); + PushLogHelper.iosInfo("鎺ㄩ�佹父鏍�:" + recordCursor + "锛�" + moveNum); } recordCursor = endCursor; - + } else { List<DeviceTokenIOS> list = deviceTokenIOSMapper.selectList(recordCursor, moveNum); recordCursor = recordCursor + 50; - + if (list != null) { - executePushIOS(list, pushQueueRecord, recordCursor-1); + executePushIOS(list, pushQueueRecord, recordCursor - 1); + PushLogHelper.iosInfo("鎺ㄩ�佹父鏍�:" + recordCursor + "锛�" + moveNum); } } - - //System.out.println("recordCursor:" +recordCursor); + + // System.out.println("recordCursor:" +recordCursor); } } - + } - - - public void executePushIOS(List<DeviceTokenIOS> list ,PushQueueRecord pushQueueRecord, long recordCursor) { - + + public void executePushIOS(List<DeviceTokenIOS> list, PushQueueRecord pushQueueRecord, long recordCursor) { + String jsonContent = pushQueueRecord.getJsonContent(); JSONObject json = JSONObject.fromObject(jsonContent); - + List<String> tokenList = new ArrayList<>(); - for (DeviceTokenIOS ios : list){ - if (!StringUtil.isNullOrEmpty(ios.getDeviceToken())){ + + 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); + IOSPushUtil.executePushIOS(tokenList, json); } catch (Exception e) { - // TODO Auto-generated catch block e.printStackTrace(); } } pushQueueRecord.setState(1); 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); + } + } + + @Override + public void pushWEEX(Long uid, String title, String content, String weexUrl) 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); + } else { + List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(uid); + 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); + } + } + } + + @Override + public void pushBaiChuanUrl(Long uid, String title, String content, String url) 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); + } else { + List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(uid); + 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; + } + + @Override + public void pushWelfareCenter(Long uid, String title, String content) 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); + } else { + if (!validateNotDisturbSingle(uid)) { + return; + } + List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(uid); + 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); + } + } + } + } -- Gitblit v1.8.0