package com.yeshi.fanli.service.impl.push;
|
|
import java.util.List;
|
|
import javax.annotation.Resource;
|
|
import org.springframework.stereotype.Service;
|
|
import com.yeshi.fanli.controller.admin.PushController;
|
import com.yeshi.fanli.dao.mybatis.AccountMessageMapper;
|
import com.yeshi.fanli.dao.mybatis.push.PushRecordMapper;
|
import com.yeshi.fanli.dto.push.PushTypeEnum;
|
import com.yeshi.fanli.entity.AppVersionInfo;
|
import com.yeshi.fanli.entity.bus.user.AccountMessage;
|
import com.yeshi.fanli.entity.bus.user.UserInfo;
|
import com.yeshi.fanli.entity.system.SystemZnx;
|
import com.yeshi.fanli.entity.xinge.PushRecord;
|
import com.yeshi.fanli.exception.push.PushException;
|
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.push.IOSPushService;
|
import com.yeshi.fanli.service.inter.push.PushRecordService;
|
import com.yeshi.fanli.service.inter.push.PushService;
|
import com.yeshi.fanli.service.inter.push.XMPushService;
|
import com.yeshi.fanli.service.inter.user.SystemZnxService;
|
import com.yeshi.fanli.util.Constant;
|
import com.yeshi.fanli.util.StringUtil;
|
|
@Service
|
public class PushServiceImpl implements PushService {
|
|
static String IOSBundleId = "";
|
static String PROJECT_NAME = "";
|
|
static {
|
IOSBundleId = Constant.systemCommonConfig.getIosBundleId();
|
PROJECT_NAME = Constant.systemCommonConfig.getProjectChineseName();
|
}
|
|
@Resource
|
private PushRecordService pushRecordService;
|
|
@Resource
|
private SystemZnxService systemZnxService;
|
|
@Resource
|
private DeviceTokenHWService deviceTokenHWService;
|
|
@Resource
|
private IOSPushService iosPushService;
|
|
@Resource
|
private HWPushService hwPushService;
|
|
@Resource
|
private XMPushService xmPushService;
|
|
@Resource
|
private PushRecordMapper pushRecordMapper;
|
|
@Resource
|
private AccountMessageMapper accountMessageMapper;
|
|
@Resource
|
private AppVersionService appVersionService;
|
|
@Override
|
public void pushGoods(Long uid, String title, String content, String url, List<String> listIOS,
|
List<String> listAndroid) throws PushException {
|
String gids = url.split("id=")[1];
|
String gid = gids.split("&")[0];
|
if (StringUtil.isNullOrEmpty(gid))
|
throw new PushException(1, "商品解析失败");
|
if (StringUtil.isNullOrEmpty(title))
|
throw new PushException(1, "请填写推送标题");
|
if (StringUtil.isNullOrEmpty(content))
|
throw new PushException(1, "请填写推送内容");
|
|
/* IOS端推送 (注明:list等于 'null' 时全推, size等于0 不做推送) */
|
if (listIOS == null || listIOS.size() > 0) {
|
// 限制推送版本号:0
|
String codes = getEffectiveVersionCodes(0, AppVersionInfo.PLATFORM_IOS, listIOS);
|
if (listIOS == null || (listIOS.size() > 0 && codes != null && codes.trim().length() > 0)) {
|
iosPushService.pushGoods(uid, Long.parseLong(gid), title, content, codes);
|
}
|
}
|
|
/* Android端推送 (注明:list等于 'null' 时全推, size等于0 不做推送) */
|
if (listAndroid == null || listAndroid.size() > 0) {
|
// 限制推送版本号:0
|
String versions = getEffectiveVersions(0, AppVersionInfo.PLATFORM_ANDROID, listAndroid);
|
if (listAndroid == null || (listAndroid.size() > 0 && versions != null && versions.trim().length() > 0)) {
|
xmPushService.pushGoods(uid, Long.parseLong(gid), title, content, versions);
|
}
|
// 华为推送
|
if (listAndroid == null || listAndroid.size() > 0) {
|
List<Integer> versionCodeList = null;
|
if (listAndroid != null)
|
versionCodeList = appVersionService.listVersionCodeByVersions("android", listAndroid);
|
hwPushService.pushGoods(uid, Long.parseLong(gid), title, content, versionCodeList);
|
}
|
}
|
|
PushRecord pushRecord = new PushRecord();
|
pushRecord.setUid(uid);
|
pushRecord.setState(1);
|
pushRecord.setType(PushTypeEnum.goodsdetail.getCode()); // 都成功
|
pushRecord.setUrl(url);
|
pushRecord.setTitle(title);
|
pushRecord.setAppName(Constant.systemCommonConfig.getProjectChineseName());
|
pushRecord.setAccount(1);
|
pushRecord.setCreatetime(java.lang.System.currentTimeMillis());
|
pushRecordMapper.insertSelective(pushRecord);
|
}
|
|
@Override
|
public void pushUrl(Long uid, String title, String content, String url, List<String> listIOS,
|
List<String> listAndroid) throws PushException {
|
|
if (StringUtil.isNullOrEmpty(url))
|
throw new PushException(1, "无推送链接");
|
if (StringUtil.isNullOrEmpty(title))
|
throw new PushException(1, "无推送标题");
|
if (StringUtil.isNullOrEmpty(content))
|
throw new PushException(1, "无推送内容");
|
|
/* IOS端推送 (注明:list等于 'null' 时全推, size等于0 不做推送) */
|
if (listIOS == null || listIOS.size() > 0) {
|
// 限制推送版本号:0
|
String codes = getEffectiveVersionCodes(0, AppVersionInfo.PLATFORM_IOS, listIOS);
|
if (listIOS == null || (listIOS.size() > 0 && codes != null && codes.trim().length() > 0)) {
|
iosPushService.pushUrl(uid, url, title, content, codes);
|
}
|
}
|
|
/* Android端推送 (注明:list等于 'null' 时全推, size等于0 不做推送) */
|
if (listAndroid == null || listAndroid.size() > 0) {
|
// 限制推送版本号:0
|
String versions = getEffectiveVersions(0, AppVersionInfo.PLATFORM_ANDROID, listAndroid);
|
if (listAndroid == null || (listAndroid.size() > 0 && versions != null && versions.trim().length() > 0)) {
|
xmPushService.pushUrl(uid, url, title, content, versions);
|
}
|
|
// 华为推送
|
if (listAndroid == null || listAndroid.size() > 0) {
|
List<Integer> versionCodeList = null;
|
if (listAndroid != null)
|
versionCodeList = appVersionService.listVersionCodeByVersions("android", listAndroid);
|
hwPushService.pushUrl(uid, url, title, content, versionCodeList);
|
}
|
}
|
|
PushRecord pushRecord = new PushRecord();
|
pushRecord.setUid(uid);
|
pushRecord.setState(1);
|
pushRecord.setType(PushTypeEnum.url.getCode());
|
pushRecord.setUrl(url);
|
pushRecord.setTitle(title);
|
pushRecord.setAppName(Constant.systemCommonConfig.getProjectChineseName());
|
pushRecord.setCreatetime(java.lang.System.currentTimeMillis());
|
pushRecordMapper.insertSelective(pushRecord);
|
}
|
|
@Override
|
public void pushZNX(Long uId, String title, String content, List<String> listIOS, List<String> listAndroid)
|
throws PushException {
|
if (StringUtil.isNullOrEmpty(title))
|
throw new PushException(1, "无推送标题");
|
if (StringUtil.isNullOrEmpty(content))
|
throw new PushException(1, "无推送内容");
|
|
SystemZnx systemZnx = null;
|
AccountMessage accountMessage = null;
|
|
/* 无uid , 广播 数据插入系统表 */
|
if (uId == null || uId == 0) {
|
// 插入数据库(系统站内信数据)
|
systemZnx = new SystemZnx();
|
systemZnx.setTitle(title);
|
systemZnx.setContent(content);
|
systemZnx.setCreateTime(System.currentTimeMillis());
|
systemZnxService.save(systemZnx);
|
} else {
|
accountMessage = new AccountMessage();
|
accountMessage.setCreateTime(System.currentTimeMillis());
|
accountMessage.setIsOpen(false);
|
accountMessage.setUserInfo(new UserInfo(uId));
|
accountMessage.setTitle(title);
|
accountMessage.setContent(content);
|
accountMessageMapper.insertSelective(accountMessage);
|
}
|
|
/* IOS端推送 (注明:list等于 'null' 时全推, size等于0 不做推送) */
|
if (listIOS == null || listIOS.size() > 0) {
|
// 限制推送版本号:0
|
String codes = getEffectiveVersionCodes(0, AppVersionInfo.PLATFORM_IOS, listIOS);
|
if (listIOS == null || (listIOS.size() > 0 && codes != null && codes.trim().length() > 0)) {
|
iosPushService.pushZNX(uId, accountMessage, systemZnx, codes);
|
}
|
}
|
|
/* Android端推送 (注明:list等于 'null' 时全推, size等于0 不做推送) */
|
if (listAndroid == null || listAndroid.size() > 0) {
|
// 限制推送版本号:0
|
String versions = getEffectiveVersions(0, AppVersionInfo.PLATFORM_ANDROID, listAndroid);
|
if (listAndroid == null || (listAndroid.size() > 0 && versions != null && versions.trim().length() > 0)) {
|
xmPushService.pushZNX(uId, accountMessage, systemZnx, versions);
|
}
|
|
// 华为推送
|
if (listAndroid == null || listAndroid.size() > 0) {
|
List<Integer> versionCodeList = null;
|
if (listAndroid != null)
|
versionCodeList = appVersionService.listVersionCodeByVersions("android", listAndroid);
|
hwPushService.pushZNX(uId, title, content, versionCodeList);
|
}
|
}
|
|
// 插入推送记录
|
PushRecord pushRecord = new PushRecord();
|
pushRecord.setUid(uId);
|
pushRecord.setTitle(title);
|
pushRecord.setState(1); // 成功
|
pushRecord.setType(PushTypeEnum.ZNX.getCode()); // 类型:站内信
|
pushRecord.setAppName(Constant.systemCommonConfig.getProjectChineseName());
|
pushRecord.setCreatetime(java.lang.System.currentTimeMillis());
|
pushRecordMapper.insertSelective(pushRecord);
|
}
|
|
@Override
|
public void pushWEEX(Long uid, String title, String content, String weexUrl, List<String> listIOS,
|
List<String> listAndroid) throws PushException {
|
if (StringUtil.isNullOrEmpty(title))
|
throw new PushException(1, "无推送标题");
|
if (StringUtil.isNullOrEmpty(content))
|
throw new PushException(1, "无推送内容");
|
|
// 适用版本 1.4.8及以后 推送weex页面
|
|
/* IOS端推送 (注明:list等于 'null' 时全推, size等于0 不做推送) */
|
if (listIOS == null || listIOS.size() > 0) {
|
// 限制推送版本号:0
|
String codes = getEffectiveVersionCodes(0, AppVersionInfo.PLATFORM_IOS, listIOS);
|
if (listIOS == null || (listIOS.size() > 0 && codes != null && codes.trim().length() > 0)) {
|
iosPushService.pushWEEX(uid, title, content, weexUrl, codes);
|
}
|
}
|
|
/* Android端推送 (注明:list等于 'null' 时全推, size等于0 不做推送) */
|
if (listAndroid == null || listAndroid.size() > 0) {
|
// 限制推送版本号:31
|
String versions = getEffectiveVersions(0, AppVersionInfo.PLATFORM_ANDROID, listAndroid);
|
if (listAndroid == null || (listAndroid.size() > 0 && versions != null && versions.trim().length() > 0)) {
|
xmPushService.pushWEEX(uid, title, content, weexUrl, versions);
|
}
|
}
|
|
// 华为推送
|
if (listAndroid == null || listAndroid.size() > 0) {
|
List<Integer> versionCodeList = null;
|
if (listAndroid != null)
|
versionCodeList = appVersionService.listVersionCodeByVersions("android", listAndroid);
|
hwPushService.pushWEEX(uid, title, content, weexUrl, versionCodeList);
|
}
|
|
// 插入推送记录
|
PushRecord pushRecord = new PushRecord();
|
pushRecord.setTitle(title);
|
pushRecord.setUid(uid);
|
pushRecord.setState(1); // 成功
|
pushRecord.setType(PushTypeEnum.weex.getCode()); // 类型:WEEX
|
pushRecord.setAppName(Constant.systemCommonConfig.getProjectChineseName());
|
pushRecord.setCreatetime(java.lang.System.currentTimeMillis());
|
pushRecordMapper.insertSelective(pushRecord);
|
}
|
|
@Override
|
public void pushBaiChuanUrl(Long uid, String title, String content, String url, List<String> listIOS,
|
List<String> listAndroid) throws PushException {
|
|
if (StringUtil.isNullOrEmpty(title))
|
throw new PushException(1, "无推送标题");
|
if (StringUtil.isNullOrEmpty(content))
|
throw new PushException(1, "无推送内容");
|
|
// 适用版本 1.4.8及以后 推送百川网页
|
|
/* IOS端推送 (注明:list等于 'null' 时全推, size等于0 不做推送) */
|
if (listIOS == null || listIOS.size() > 0) {
|
// 限制推送版本号:0
|
String codes = getEffectiveVersionCodes(0, AppVersionInfo.PLATFORM_IOS, listIOS);
|
if (listIOS == null || (listIOS.size() > 0 && codes != null && codes.trim().length() > 0)) {
|
iosPushService.pushBaiChuanUrl(uid, title, content, url, codes);
|
}
|
}
|
|
/* Android端推送 (注明:list等于 'null' 时全推, size等于0 不做推送) */
|
if (listAndroid == null || listAndroid.size() > 0) {
|
// 限制推送版本号:31
|
String versions = getEffectiveVersions(31, AppVersionInfo.PLATFORM_ANDROID, listAndroid);
|
if (listAndroid == null || (listAndroid.size() > 0 && versions != null && versions.trim().length() > 0)) {
|
xmPushService.pushBaiChuanUrl(uid, title, content, url, versions);
|
}
|
}
|
|
// 华为推送
|
if (listAndroid == null || listAndroid.size() > 0) {
|
List<Integer> versionCodeList = null;
|
if (listAndroid != null)
|
versionCodeList = appVersionService.listVersionCodeByVersions("android", listAndroid);
|
hwPushService.pushBaiChuanUrl(uid, title, content, url, versionCodeList);
|
}
|
|
// 插入推送记录
|
PushRecord pushRecord = new PushRecord();
|
pushRecord.setUrl(url);
|
pushRecord.setTitle(title);
|
pushRecord.setUid(uid);
|
pushRecord.setState(1); // 成功
|
pushRecord.setType(PushTypeEnum.baichuan.getCode()); // 类型:百川
|
pushRecord.setAppName(Constant.systemCommonConfig.getProjectChineseName());
|
pushRecord.setCreatetime(java.lang.System.currentTimeMillis());
|
pushRecordMapper.insertSelective(pushRecord);
|
}
|
|
@Override
|
public void pushWelfareCenter(Long uid, String title, String content, List<String> listIOS,
|
List<String> listAndroid) throws PushException {
|
|
if (StringUtil.isNullOrEmpty(title))
|
throw new PushException(1, "无推送标题");
|
if (StringUtil.isNullOrEmpty(content))
|
throw new PushException(1, "无推送内容");
|
|
/* IOS端推送 (注明:list等于 'null' 时全推, size等于0 不做推送) */
|
if (listIOS == null || listIOS.size() > 0) {
|
// 限制推送版本号:0
|
String codes = getEffectiveVersionCodes(0, AppVersionInfo.PLATFORM_IOS, listIOS);
|
if (listIOS == null || (listIOS.size() > 0 && codes != null && codes.trim().length() > 0)) {
|
iosPushService.pushWelfareCenter(uid, title, content, codes);
|
}
|
}
|
|
/* Android端推送 (注明:list等于 'null' 时全推, size等于0 不做推送) */
|
if (listAndroid == null || listAndroid.size() > 0) {
|
// 限制推送版本号:36
|
String versions = getEffectiveVersions(36, AppVersionInfo.PLATFORM_ANDROID, listAndroid);
|
if (listAndroid == null || (listAndroid.size() > 0 && versions != null && versions.trim().length() > 0)) {
|
xmPushService.pushWelfareCenter(uid, title, content, versions);
|
}
|
}
|
|
// 华为推送
|
if (listAndroid == null || listAndroid.size() > 0) {
|
List<Integer> versionCodeList = null;
|
if (listAndroid != null)
|
versionCodeList = appVersionService.listVersionCodeByVersions("android", listAndroid);
|
hwPushService.pushWelfareCenter(uid, title, content, versionCodeList);
|
}
|
|
// 插入推送记录
|
PushRecord pushRecord = new PushRecord();
|
pushRecord.setTitle(title);
|
pushRecord.setUid(uid);
|
pushRecord.setState(1); // 成功
|
pushRecord.setType(PushTypeEnum.welfare.getCode()); // 类型:百川
|
pushRecord.setAppName(Constant.systemCommonConfig.getProjectChineseName());
|
pushRecord.setCreatetime(java.lang.System.currentTimeMillis());
|
pushRecordMapper.insertSelective(pushRecord);
|
}
|
|
/**
|
* 查询能推送版本号
|
*
|
* @param versionCode
|
* @param listVersion
|
* @return
|
*/
|
private String getEffectiveVersions(int minCode, String type, List<String> listVersion) throws PushException {
|
|
if (minCode == 0 && listVersion == null) {
|
return null;
|
}
|
|
String versions = "";
|
if (listVersion == null) {
|
List<AppVersionInfo> list = appVersionService.listByPlatformAndMinVersionCode(type, minCode);
|
if (list != null) {
|
for (AppVersionInfo appVersion : list) {
|
versions += appVersion.getVersion() + ",";
|
}
|
}
|
} else {
|
List<AppVersionInfo> list = appVersionService.listByVersions(type, listVersion);
|
if (list != null) {
|
for (AppVersionInfo appVersion : list) {
|
Integer code = appVersion.getVersionCode();
|
if (code != null && code >= minCode) {
|
versions += appVersion.getVersion() + ",";
|
}
|
}
|
}
|
}
|
|
if (versions.endsWith(",")) {
|
versions = versions.substring(0, versions.length() - 1);
|
}
|
|
return versions;
|
}
|
|
/**
|
* 查询能推送版本号code
|
*
|
* @param versionCode
|
* @param listVersion
|
* @return
|
*/
|
private String getEffectiveVersionCodes(int minCode, String type, List<String> listVersion) throws PushException {
|
|
if (minCode == 0 && listVersion == null) {
|
return null;
|
}
|
|
String versionCodes = "";
|
if (listVersion == null) {
|
List<AppVersionInfo> list = appVersionService.listByPlatformAndMinVersionCode(type, minCode);
|
if (list != null) {
|
for (AppVersionInfo appVersion : list) {
|
versionCodes += appVersion.getVersionCode() + ",";
|
}
|
}
|
} else {
|
List<AppVersionInfo> list = appVersionService.listByVersions(type, listVersion);
|
if (list != null) {
|
for (AppVersionInfo appVersion : list) {
|
Integer code = appVersion.getVersionCode();
|
if (code != null && code >= minCode) {
|
versionCodes += appVersion.getVersionCode() + ",";
|
}
|
}
|
}
|
}
|
|
if (versionCodes.endsWith(",")) {
|
versionCodes = versionCodes.substring(0, versionCodes.length() - 1);
|
}
|
|
return versionCodes;
|
}
|
|
@Override
|
public void pushUserSignInNotification(Long uid, String title, String content, List<String> listIOS,
|
List<String> listAndroid) throws PushException {
|
if (StringUtil.isNullOrEmpty(title))
|
throw new PushException(1, "无推送标题");
|
if (StringUtil.isNullOrEmpty(content))
|
throw new PushException(1, "无推送内容");
|
|
/* IOS端推送 (注明:list等于 'null' 时全推, size等于0 不做推送) */
|
if (listIOS == null || listIOS.size() > 0) {
|
// 限制推送版本号:1.6.5以后
|
String codes = getEffectiveVersionCodes(60, AppVersionInfo.PLATFORM_IOS, listIOS);
|
if (listIOS == null || (listIOS.size() > 0 && codes != null && codes.trim().length() > 0)) {
|
iosPushService.pushUserSignInNotification(uid, title, content, codes);
|
}
|
}
|
|
/* Android端推送 (注明:list等于 'null' 时全推, size等于0 不做推送) */
|
if (listAndroid == null || listAndroid.size() > 0) {
|
// 限制推送版本号:1.6.5以后
|
String versions = getEffectiveVersions(47, AppVersionInfo.PLATFORM_ANDROID, listAndroid);
|
if (listAndroid == null || (listAndroid.size() > 0 && versions != null && versions.trim().length() > 0)) {
|
xmPushService.pushUserSignInNotification(uid, title, content, versions);
|
}
|
}
|
|
// 华为推送
|
if (listAndroid == null || listAndroid.size() > 0) {
|
List<Integer> versionCodeList = null;
|
if (listAndroid != null)
|
versionCodeList = appVersionService.listVersionCodeByVersions("android", listAndroid);
|
hwPushService.pushUserSignInNotification(uid, title, content, versionCodeList);
|
}
|
|
// 插入推送记录
|
PushRecord pushRecord = new PushRecord();
|
pushRecord.setTitle(title);
|
pushRecord.setUid(uid);
|
pushRecord.setState(1); // 成功
|
pushRecord.setType(PushTypeEnum.signin.getCode()); // 类型:百川
|
pushRecord.setAppName(Constant.systemCommonConfig.getProjectChineseName());
|
pushRecord.setCreatetime(java.lang.System.currentTimeMillis());
|
pushRecordMapper.insertSelective(pushRecord);
|
}
|
|
}
|