From 0e2d8cb8e2794265bbd2241a2f320203af053721 Mon Sep 17 00:00:00 2001
From: yujian <yujian>
Date: 星期五, 15 三月 2019 17:50:09 +0800
Subject: [PATCH] Merge branch 'div'
---
fanli/src/main/java/com/yeshi/fanli/service/impl/push/IOSPushServiceImpl.java | 289 ++++++++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 250 insertions(+), 39 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 1b8730b..648d0c5 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,12 @@
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.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -14,6 +14,7 @@
import com.yeshi.fanli.controller.admin.PushController;
import com.yeshi.fanli.dao.mybatis.push.DeviceTokenIOSMapper;
import com.yeshi.fanli.dao.mybatis.push.PushQueueRecordMapper;
+import com.yeshi.fanli.entity.AppVersionInfo;
import com.yeshi.fanli.entity.bus.user.AccountMessage;
import com.yeshi.fanli.entity.push.DeviceTokenIOS;
import com.yeshi.fanli.entity.push.PushQueueRecord;
@@ -21,14 +22,16 @@
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.config.AppVersionService;
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 +42,15 @@
@Resource
private PushQueueRecordMapper pushQueueRecordMapper;
+ @Resource
+ private UserCustomSettingsService userCustomSettingsService;
+
+ @Resource
+ private AppVersionService appVersionService;
+
+
@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, List<String> listVersion) throws PushException {
String url = "https://item.taobao.com/item.htm?id=" + auctionId;
JSONObject json = new JSONObject();
@@ -66,7 +76,7 @@
if (uid == null || uid == 0) {
- addPushIOSQueue(info, url, PushController.GOODS);
+ addPushIOSQueue(info, url, PushController.GOODS, listVersion);
/*
* // 鏌ヨIOS鎵�鏈夎澶囧彿 // TODO 闇�瑕佸叏鎺� List<String> deviceTokenList =
@@ -81,8 +91,12 @@
* } } });
*/
} else {
+ if (!validateNotDisturbSingle(uid)) {
+ return; // 閫氱煡鍏嶆墦鎵�(20:00-24:00 / 00:00 -08:00)
+ }
+
// IOS 鍗曟帹
- List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(uid);
+ List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(uid, listVersion);
List<String> deviceTokenList = new ArrayList<>();
if (deviceTokenIosList != null)
for (DeviceTokenIOS ios : deviceTokenIosList) {
@@ -99,7 +113,7 @@
}
@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, List<String> listVersion) throws PushException {
JSONObject json = new JSONObject();
json.put("url", url);
json.put("type", "url");
@@ -121,7 +135,7 @@
if (uid == null || uid == 0) {
// TODO 闇�瑕佸叏鎺�
- addPushIOSQueue(info, url, PushController.URL);
+ addPushIOSQueue(info, url, PushController.URL, listVersion);
/*
* List<String> deviceTokenList = getDeviceTokenList(1, 1000);
@@ -135,7 +149,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, listVersion);
List<String> deviceTokenList = new ArrayList<>();
if (deviceTokenIosList != null)
for (DeviceTokenIOS ios : deviceTokenIosList) {
@@ -150,12 +168,7 @@
}
@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, List<String> listVersion) 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, listVersion);
/*
* 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(), listVersion);
List<String> deviceTokenList = new ArrayList<>();
if (deviceTokenIosList != null)
for (DeviceTokenIOS ios : deviceTokenIosList) {
@@ -241,7 +261,7 @@
@Override
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鏄惁瀛樺湪
@@ -252,21 +272,39 @@
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);
}
}
@Override
- public List<DeviceTokenIOS> getDeviceTokenListByUid(Long uid) {
- return deviceTokenIOSMapper.selectByUid(uid);
+ public List<DeviceTokenIOS> getDeviceTokenListByUid(Long uid, List<String> listVersion) throws PushException {
+ List<Integer> listCode = null;
+ if (listVersion != null && listVersion.size() > 0) {
+ // 鐗堟湰鍙锋帹閫侀檺鍒�
+ listCode = appVersionService.listVersionCodeByVersions(AppVersionInfo.PLATFORM_IOS,listVersion);
+ if (listCode == null || listCode.size() == 0) {
+ throw new PushException(1, "IOS鎺ㄩ�佸け璐ワ紝鎺ㄩ�佺増鏈笉瀛樺湪锛�");
+ }
+ }
+
+ return deviceTokenIOSMapper.selectByUid(uid, listCode);
}
@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()))
@@ -288,8 +326,8 @@
}
@Override
- public DeviceTokenIOS getDeviceTokenByDevice(String device) {
- return deviceTokenIOSMapper.selectByDevice(device);
+ public DeviceTokenIOS getDeviceTokenByDeviceToken(String deviceToken) {
+ return deviceTokenIOSMapper.selectByDeviceToken(deviceToken);
}
/**
@@ -298,7 +336,7 @@
* @param json
*/
@Transactional
- public void addPushIOSQueue(MessageInfo info, String url, int type) {
+ public void addPushIOSQueue(MessageInfo info, String url, int type, List<String> listVersion) throws PushException {
try {
@@ -313,6 +351,30 @@
// 姣忔鎵ц鏉$洰
int pushNum = 50;
+ String versionCodes = "";
+
+ if (listVersion != null && listVersion.size() > 0) {
+ // 鍔犲叆鐗堟湰鎺ㄩ�侀檺鍒�
+ List<Integer> listCode = appVersionService.listVersionCodeByVersions(AppVersionInfo.PLATFORM_IOS,listVersion);
+
+ if (listCode != null && listCode.size() > 0) {
+ for (Integer code: listCode) {
+ versionCodes = versionCodes + code + ",";
+ }
+
+ // 鍘婚櫎鏈熬閫楀彿
+ if (versionCodes.endsWith(",")) {
+ versionCodes = versionCodes.substring(0, versionCodes.length() - 1);
+ }
+ }
+
+ if (versionCodes == null || versionCodes.trim().length() == 0) {
+ throw new PushException(1, "IOS鎺ㄩ�佸け璐ワ紝鎺ㄩ�佺増鏈笉瀛樺湪锛�");
+ }
+
+ }
+
+
for (long i = 0; i < tokenCount + totalCount;) {
PushQueueRecord pushQueueRecord = new PushQueueRecord();
@@ -326,6 +388,9 @@
pushQueueRecord.setPushNum(pushNum);
// 鎺ㄩ�佺 IOS
pushQueueRecord.setType(1);
+ // 鐗堟湰鍙�
+ pushQueueRecord.setVersions(versionCodes);
+
if (tokenCount - i < totalCount) {
// 璧峰娓告爣
@@ -351,7 +416,7 @@
// 缁撴潫娓告爣
pushQueueRecord.setEndCursor(endCursor);
- // TODO 瀛樺叆鏁版嵁搴�
+ // 瀛樺叆鏁版嵁搴�
pushQueueRecordMapper.insert(pushQueueRecord);
// 鍔犲叆闃熷垪
CMQManager.getInstance().addIOSPushMsg(pushQueueRecord);
@@ -361,7 +426,6 @@
}
} catch (Exception e) {
- // TODO Auto-generated catch block
e.printStackTrace();
}
@@ -377,11 +441,33 @@
Long startCursor = pushQueueRecord.getStartCursor();
// 缁撴潫浣嶇疆
Long endCursor = pushQueueRecord.getEndCursor();
-
+
if (startCursor == null && endCursor == null) {
return;
}
+
+ // 鎺ㄩ�佺殑鐗堟湰鍙�
+ String versions = pushQueueRecord.getVersions();
+ List<Integer> listVersionCode = null;
+ if (versions != null && versions.trim().length() > 0) {
+
+ List<String> listVersion = Arrays.asList(versions.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));
+ }
+ }
+ }
+
+ if (listVersionCode == null || listVersionCode.size() == 0) {
+ return; //鐗堟湰鍙峰瓨鍦ㄥ紓甯�
+ }
+ }
+
+
int total = (int) (endCursor - startCursor);
// 姣忔鎺ㄩ�佹�绘潯鏁�
@@ -396,11 +482,12 @@
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, listVersionCode);
recordCursor = endCursor;
if (list != null) {
@@ -414,7 +501,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, listVersionCode);
if (list != null) {
executePushIOS(list, pushQueueRecord, endCursor);
PushLogHelper.iosInfo("鎺ㄩ�佹父鏍�:" + recordCursor + "锛�" + moveNum);
@@ -422,7 +509,7 @@
recordCursor = endCursor;
} else {
- List<DeviceTokenIOS> list = deviceTokenIOSMapper.selectList(recordCursor, moveNum);
+ List<DeviceTokenIOS> list = deviceTokenIOSMapper.selectList(recordCursor, moveNum, listVersionCode);
recordCursor = recordCursor + 50;
if (list != null) {
@@ -430,11 +517,8 @@
PushLogHelper.iosInfo("鎺ㄩ�佹父鏍�:" + recordCursor + "锛�" + moveNum);
}
}
-
- // System.out.println("recordCursor:" +recordCursor);
}
}
-
}
public void executePushIOS(List<DeviceTokenIOS> list, PushQueueRecord pushQueueRecord, long recordCursor) {
@@ -443,20 +527,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();
}
}
@@ -464,8 +564,119 @@
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, List<String> listVersion) 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, listVersion);
+ } else {
+ List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(uid, listVersion);
+ 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, List<String> listVersion) 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, listVersion);
+ } else {
+ List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(uid, listVersion);
+ 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, List<String> listVersion) 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, listVersion);
+ } else {
+ if (!validateNotDisturbSingle(uid)) {
+ return;
+ }
+ List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(uid, listVersion);
+ 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