package com.guohuai.cms.platformext.push;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;import javax.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;import com.alibaba.fastjson.JSON;
import com.gexin.rp.sdk.base.IPushResult;
import com.gexin.rp.sdk.base.ITemplate;
import com.gexin.rp.sdk.base.impl.AppMessage;
import com.gexin.rp.sdk.base.impl.ListMessage;
import com.gexin.rp.sdk.base.impl.SingleMessage;
import com.gexin.rp.sdk.base.impl.Target;
import com.gexin.rp.sdk.base.payload.APNPayload;
import com.gexin.rp.sdk.base.uitls.AppConditions;
import com.gexin.rp.sdk.exceptions.RequestException;
import com.gexin.rp.sdk.http.IGtPush;
import com.gexin.rp.sdk.template.LinkTemplate;
import com.gexin.rp.sdk.template.NotificationTemplate;
import com.gexin.rp.sdk.template.TransmissionTemplate;
import com.guohuai.basic.component.ext.web.BaseResp;
import com.guohuai.cms.component.exception.MoneyException;
import com.guohuai.cms.component.mail.MailUtil;
import com.guohuai.cms.component.push.PushContEntity;
import com.guohuai.cms.component.push.PushUtil;
import com.guohuai.cms.component.userUtil.RedisUserinfo;
import com.guohuai.cms.component.userUtil.UserinfoRedisUtil;
import com.guohuai.cms.component.util.AdminUtil;
import com.guohuai.cms.component.util.Clock;
import com.guohuai.cms.component.web.BaseRep;
import com.guohuai.cms.component.web.PagesRep;
import com.guohuai.cms.platform.mail.api.UserCenterApi;
import com.guohuai.cms.platform.mail.api.UserInfoRep;
import com.guohuai.cms.platformext.push.PushExtEntity;
import com.guohuai.cms.platformext.push.PushExtAddReq;
import com.guohuai.cms.platformext.push.PushExtQueryRep.PushExtQueryRepBuilder;
import com.guohuai.cms.platformext.push.api.UserCenterExtApi;
import com.guohuai.cms.platformext.push.api.UserLabelExtResp;
import com.guohuai.cms.platformext.push.api.UserLabelExtResp.LabelInvestorExt;import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service
@Transactional
public class PushExtService {
@Autowired
private PushExtDao pushExtDao;
@Autowired
private UserCenterExtApi userCenterExtApi;
@Autowired
private UserCenterApi userCenterApi;
@Autowired
private AdminUtil adminUtil;
@Value("${push.appId}")
private String appId;
@Value("${push.appKey}")
private String appKey;
@Value("${push.masterSecret}")
private String masterSecret;
@Value("${push.host}")
private String host;
@Autowired
private RedisTemplate<String, String> redis;
private static long OFFLINEEXPIRETIME = 24 * 3600 * 1000;//推送离线有效时间
public PushExtEntity save(PushExtEntity en){
return this.pushExtDao.save(en);
}
/**
* 页面查询信息
* @param spec
* @param pageable
* @return
*/
public PagesRep<PushExtQueryRep> pushFindAll(Specification<PushExtEntity> spec, Pageable pageable) {
Page<PushExtEntity> products = this.pushExtDao.findAll(spec, pageable);
PagesRep<PushExtQueryRep> pagesRep = new PagesRep<PushExtQueryRep>();
for (PushExtEntity pe : products) {
PushExtQueryRep rep = new PushExtQueryRepBuilder()
.oid(pe.getOid())
.title(pe.getTitle())
.pusher(this.adminUtil.getAdminName(pe.getPusher()))
.status(pe.getStatus())
.pushTime(pe.getPushTime())
.url(pe.getUrl())
.type(pe.getType())
.summary(pe.getSummary())
.pushType(pe.getPushType())
.pushUserOid(pe.getPushUserOid())
.pushUserAcc(pe.getPushUserAcc())
.labelCode(pe.getLabelCode())
.build();
pagesRep.add(rep);
}
pagesRep.setTotal(products.getTotalElements());
return pagesRep;
} /**
* 新增/编辑推送信息
* @param req
* @param operator
* @return
*/
public BaseRep addPush(PushExtAddReq req, String operator) {
BaseRep rep = new BaseRep();
if(req.getOid() != null && !"".equals(req.getOid())){
PushExtEntity push = this.getOne(req.getOid());
if (req.getPushType().equals(PushExtEntity.PUSH_pushType_person)){
UserInfoRep user = userCenterApi.isregist(req.getPushUserAcc());
if (user == null || !user.isRegist() || user.getInvestorOid() == null || user.getInvestorOid().isEmpty()){
// 会员不存在!(CODE:13000)
throw MoneyException.getException(13000);
}
push = groupPushExtEntity(push, req, operator, user.getInvestorOid(), req.getPushUserAcc(),null);
}else if(req.getPushType().equals(PushExtEntity.PUSH_pushType_group)){
push = groupPushExtEntity(push, req, operator, null, null,req.getLabelCode());
}else{
push = groupPushExtEntity(push, req, operator, null, null,null);
}
push = this.pushExtDao.save(push);
}else{
PushExtEntity push = new PushExtEntity();
if (req.getPushType().equals(PushExtEntity.PUSH_pushType_person)){
UserInfoRep user = userCenterApi.isregist(req.getPushUserAcc());
if (user == null || !user.isRegist() || user.getInvestorOid() == null || user.getInvestorOid().isEmpty()){
// 会员不存在!(CODE:13000)
throw MoneyException.getException(13000);
}
push = groupPushExtEntity(push, req, operator, user.getInvestorOid(), req.getPushUserAcc(),null);
push = this.pushExtDao.save(push);
}else if(req.getPushType().equals(PushExtEntity.PUSH_pushType_group)){
push = groupPushExtEntity(push, req, operator, null, null,req.getLabelCode());
}else{
push = groupPushExtEntity(push, req, operator, null, null,null);
push = this.pushExtDao.save(push);
}
}
return rep;
}
// 组装并保存
public PushExtEntity groupAndSaveExt(String title, String url, String type, String creator, String summary, String pushType, String pushUserOid, String pushUserAcc,String labelCode){
PushExtEntity push = new PushExtEntity();
push.setTitle(title);
push.setUrl(url);
push.setType(type);
push.setCreator(creator);
push.setSummary(summary);
push.setPushType(pushType);
push.setLabelCode(labelCode);
push.setPushUserOid(pushUserOid);
push.setPushUserAcc(pushUserAcc);
push.setStatus(PushExtEntity.PUSH_status_pending);
push.setCreateTime(new Timestamp(Clock.DEFAULT.getCurrentTimeInMillis()));
return this.save(push);
}
// 组装推送
private PushExtEntity groupPushExtEntity(PushExtEntity push, PushExtAddReq req, String operator, String userOid, String pushUserAcc,String labelCode){
push.setCreateTime(new Timestamp(Clock.DEFAULT.getCurrentTimeInMillis()));
push.setTitle(req.getTitle());
push.setStatus(PushExtEntity.PUSH_status_pending);
push.setType(req.getType());
push.setLabelCode(labelCode);
push.setCreator(operator);
if("activity".equals(req.getType())){
push.setUrl(req.getUrl());
}else{
push.setUrl(req.getType());
}
push.setSummary(req.getSummary());
push.setPushType(req.getPushType());
push.setPushUserOid(userOid);
push.setPushUserAcc(pushUserAcc);
return push;
}
/**
* 获取推送实体
* @param oid
* @return
*/
public PushExtEntity getOne(String oid){
PushExtEntity en = this.pushExtDao.findOne(oid);
if(en == null){
//error.define[70001]=推送信息不存在(CODE:70001)
throw MoneyException.getException(70001);
}
return en;
}
/**
* 删除推送信息
* @param oid
* @return
*/
public BaseRep delPush(String oid) {
BaseRep rep = new BaseRep();
this.pushExtDao.delete(oid);
return rep;
}
/**
* 标题名称重复判断
* @param title
* @param oid
* @return
*/
public int isHasSamePushTitle(String title, String oid) {
return this.pushExtDao.isHasSamePushTitle(title,oid);
}
/**
* 获取推送信息详情
* @param oid
* @return
*/
public PushExtQueryRep getPush(String oid) {
PushExtEntity pe = this.pushExtDao.getOne(oid);
PushExtQueryRep rep = new PushExtQueryRepBuilder()
.oid(pe.getOid())
.title(pe.getTitle())
.status(pe.getStatus())
.pushTime(pe.getPushTime())
.url(pe.getUrl())
.review(adminUtil.getAdminName(pe.getReview()))
.reviewTime(pe.getReviewTime())
.pusher(adminUtil.getAdminName(pe.getPusher()))
.creator(adminUtil.getAdminName(pe.getCreator()))
.createTime(pe.getCreateTime())
.reviewRemark(pe.getReviewRemark())
.type(pe.getType())
.summary(pe.getSummary())
.pushType(pe.getPushType())
.pushUserOid(pe.getPushUserOid())
.pushUserAcc(pe.getPushUserAcc())
.labelCode(pe.getLabelCode())
.build();
return rep;
}
/**
* 推送审核
* @param req
* @param operator
* @return
*/
public BaseRep pushReview(PushReviewRep req, String operator) {
BaseRep rep = new BaseRep();
Timestamp now = new Timestamp(Clock.DEFAULT.getCurrentTimeInMillis());
PushExtEntity push = this.getOne(req.getOid());
push.setReview(operator);
push.setReviewTime(now);
if(req.getApprResult().equals(PushExtEntity.PUSH_reviewStatus_pass)){
push.setStatus(PushExtEntity.PUSH_status_reviewed);
}else if(req.getApprResult().equals(PushExtEntity.PUSH_reviewStatus_refused)){
push.setStatus(PushExtEntity.PUSH_status_refused);
}
push.setReviewRemark(req.getRemark());
this.pushExtDao.save(push);
return rep;
}
/**
* 推送上/下架
* @param oid
* @return
*/
public BaseRep pushPubilsh(String oid,String operator) {
BaseRep rep = new BaseRep();
try{
PushExtEntity push = this.getOne(oid);
if (push.getPushType().equals(PushExtEntity.PUSH_pushType_all)){
//向安卓手机推送信息
this.pushAndroidtoApp(push);
//向IOS手机推送信息
this.pushIOStoApp(push);
}else if(push.getPushType().equals(PushExtEntity.PUSH_pushType_person)){
RedisUserinfo info = UserinfoRedisUtil.get(redis, push.getPushUserOid());
if (info != null){
this.push2Single(info.getClientId(), 0, push.getType(), push.getTitle(), push.getSummary(), push.getUrl());
this.push2Single(info.getClientId(), 1, push.getType(), push.getTitle(), push.getSummary(), push.getUrl());
}
}else if(push.getPushType().equals(PushExtEntity.PUSH_pushType_group)){
//List<InvestorLabelInvestorEntity> list=investorLabelInvestorDao.findAccountListByLabelCode(push.getLabelCode());
//List<UserLabelResp> userInfolist = userCenterApi.getUserLabelInfo(push.getLabelCode());
this.push2ToList(push.getLabelCode(), 0, push.getType(), push.getTitle(), push.getSummary(), push.getUrl());
this.push2ToList(push.getLabelCode(), 1, push.getType(), push.getTitle(), push.getSummary(), push.getUrl());
}else{
// 推送类型有误(CODE:70002)
throw MoneyException.getException(70002);
}
if(push.getStatus().equalsIgnoreCase(PushExtEntity.PUSH_status_reviewed)){
push.setStatus(PushExtEntity.PUSH_status_on);
push.setPusher(operator);
push.setPushTime(new Timestamp(Clock.DEFAULT.getCurrentTimeInMillis()));
}
this.pushExtDao.save(push);
}catch(Exception e){
e.printStackTrace();
//error.define[70000]=推送失败(CODE:70000)
throw MoneyException.getException(70000);
}
return rep;
}
/**
* 给安卓推送
* @param PushExtEntity
* @throws Exception
*/
public void pushAndroidtoApp(PushExtEntity PushExtEntity){
IGtPush push = new IGtPush(host, appKey, masterSecret); AppMessage message = new AppMessage();
//链接推送
LinkTemplate template = linkTemplate(PushExtEntity.getTitle(), PushExtEntity.getSummary(), PushExtEntity.getUrl());
NotificationTemplate notiTem = notificationTemplate(PushExtEntity.getUrl(), PushExtEntity.getTitle(), PushExtEntity.getSummary());
String type=PushExtEntity.getType();//活动属于链接类型
if(type.equals("activity")){
message.setData(template);
}else{
message.setData(notiTem);
} message.setOffline(true);
//离线有效时间,单位为毫秒,可选
message.setOfflineExpireTime(OFFLINEEXPIRETIME);
//推送给App的目标用户需要满足的条件
AppConditions cdt = new AppConditions();
List<String> appIdList = new ArrayList<String>();
appIdList.add(appId);
message.setAppIdList(appIdList);
//手机类型
List<String> phoneTypeList = new ArrayList<String>();
phoneTypeList.add("ANDROID");
//省份
List<String> provinceList = new ArrayList<String>();
//自定义tag
List<String> tagList = new ArrayList<String>(); cdt.addCondition(AppConditions.PHONE_TYPE, phoneTypeList);
cdt.addCondition(AppConditions.REGION, provinceList);
cdt.addCondition(AppConditions.TAG,tagList);
message.setConditions(cdt);
IPushResult ret = push.pushMessageToApp(message, "Android");
System.out.println(ret.getResponse().toString());
}
/**
* 给IOS推送
* @param PushExtEntity
* @throws Exception
*/
public void pushIOStoApp(PushExtEntity PushExtEntity)throws Exception{
IGtPush push = new IGtPush(host, appKey, masterSecret);
//透传模板,对ios使用透传推送
TransmissionTemplate transmisionTem = transmissionTemplate(PushExtEntity.getUrl(), PushExtEntity.getTitle(), PushExtEntity.getSummary());
AppMessage message = new AppMessage();
message.setData(transmisionTem);
message.setOffline(true);
//离线有效时间,单位为毫秒,可选
message.setOfflineExpireTime(OFFLINEEXPIRETIME);
//推送给App的目标用户需要满足的条件
AppConditions cdt = new AppConditions();
List<String> appIdList = new ArrayList<String>();
appIdList.add(appId);
message.setAppIdList(appIdList);
//手机类型
List<String> phoneTypeList = new ArrayList<String>();
phoneTypeList.add("IOS");
//省份
List<String> provinceList = new ArrayList<String>();
//自定义tag
List<String> tagList = new ArrayList<String>(); cdt.addCondition(AppConditions.PHONE_TYPE, phoneTypeList);
cdt.addCondition(AppConditions.REGION, provinceList);
cdt.addCondition(AppConditions.TAG,tagList);
message.setConditions(cdt);
IPushResult ret = push.pushMessageToApp(message,"IOS");
System.out.println(ret.getResponse().toString());
}
/**
* 通知模板
* @param content 透传消息
* @param title 标题
* @param text 内容
* @return
*/
public NotificationTemplate notificationTemplate(String content, String title, String text) {
NotificationTemplate template = new NotificationTemplate();
// 设置APPID与APPKEY
template.setAppId(appId);
template.setAppkey(appKey);
// 设置通知栏标题与内容
template.setTitle(title);
String summary=text;
if(summary != null && !"".equals(summary)){
if(summary.length() > 45){
summary=summary.substring(0, 45) + "......";
}
}
template.setText(summary);
// 配置通知栏图标
template.setLogo("icon.png");
// 配置通知栏网络图标
template.setLogoUrl("");
// 设置通知是否响铃,震动,或者可清除
template.setIsRing(true);
template.setIsVibrate(true);
template.setIsClearable(true);
// 透传消息设置,1为强制启动应用,客户端接收到消息后就会立即启动应用;2为等待应用启动
template.setTransmissionType(1);
template.setTransmissionContent(content);
return template;
} /**
* 链接模板
* @return
* @throws Exception
*/
public LinkTemplate linkTemplate(String title, String text, String url){
LinkTemplate template = new LinkTemplate();
template.setAppId(appId);
template.setAppkey(appKey);
template.setTitle(title);
String summary=text;
if(summary != null && !"".equals(summary)){
if(summary.length() > 45){
summary=summary.substring(0, 45) + "......";
}
}
template.setText(summary);
template.setLogo("icon.png");
template.setLogoUrl("");
template.setIsRing(true);
template.setIsVibrate(true);
template.setIsClearable(true);
template.setUrl(url); return template;
}
/**
* 透传模板
* @return
*/
public TransmissionTemplate transmissionTemplate(String content, String title, String text) {
TransmissionTemplate template = new TransmissionTemplate();
template.setAppId(appId);
template.setAppkey(appKey);
//透传消息设置,1为强制启动应用,客户端接收到消息后就会立即启动应用;2为等待应用启动
template.setTransmissionType(2);
template.setTransmissionContent(content);
APNPayload payload = new APNPayload();
payload.setAutoBadge("1");
payload.setContentAvailable(1);
payload.setSound("default");
payload.setCategory("$由客户端定义");
payload.addCustomMsg("data", content);
//字典模式使用下者
payload.setAlertMsg(getDictionaryAlertMsg(title, text));
template.setAPNInfo(payload);
return template;
}
/**
* 给ISO发送消息
* @return
*/
private APNPayload.DictionaryAlertMsg getDictionaryAlertMsg(String title, String text){
APNPayload.DictionaryAlertMsg alertMsg = new APNPayload.DictionaryAlertMsg();
//通知文本消息标题
alertMsg.setTitle(title);
//通知文本消息字符串
String summary=text;
if(summary != null && !"".equals(summary)){
if(summary.length() > 45){
summary=summary.substring(0, 45) + "......";
}
}
alertMsg.setBody(summary);
alertMsg.setActionLocKey("国槐金融演示版");
alertMsg.setLaunchImage("launch-image");
// IOS8.2以上版本支持
alertMsg.setTitleLocKey(title);
return alertMsg;
}
// 个推
/**
* @param clientId 终端clientId
* @param userOid 用户userOid
* @param phoneType 0是安卓系统1是苹果系统
* @param mesTemp 站内信模板id
* @param param 参数
* @return
*/
public BaseResp sendPush2Person(String userOid, String mesTempCode, String mesParam) {
BaseResp resp = new BaseResp();
try {
log.info("后台请求推送参数:用户oid:"+userOid+",推送模板code:"+mesTempCode+",推送参数:"+mesParam);
if (userOid == null || userOid.isEmpty()){
// 会员id不能为空!(CODE:13002)
throw MoneyException.getException(13002);
}
String phone = null;
try {
UserInfoRep user = userCenterApi.getLoginUserInfo(userOid);
if (user == null || user.getPhoneNum() == null){
// 会员不存在!(CODE:13000)
throw MoneyException.getException(13000);
}
phone = user.getPhoneNum();
} catch (Exception e) {
e.printStackTrace();
// 会员信息访问失败!(CODE:13001)
throw MoneyException.getException(13001);
}
PushContEntity pushContEntity = PushUtil.pushContentsMap.get(mesTempCode);
if (pushContEntity == null){
// 推送内容模板不存在!(CODE:70003)
throw MoneyException.getException(70003);
}
String content = pushContEntity.getPushContent();
if (mesParam != null && !mesParam.isEmpty()){
String[] par = JSON.parseObject(mesParam, String[].class);
content = MailUtil.replaceComStrArr(content, par);
}
String clientId = null;
RedisUserinfo info = UserinfoRedisUtil.get(redis, userOid);
if (info != null){
clientId = info.getClientId();
}
log.info("后台请求推送参数处理后:用户oid:"+userOid+",手机:"+phone+",推送标题:"+pushContEntity.getPushTitle()+",推送内容:"+content+",clientId:"+clientId);
PushExtEntity push = new PushExtEntity();
push.setTitle(pushContEntity.getPushTitle());
push.setUrl(PushExtEntity.PUSH_type_mail);
push.setType(PushExtEntity.PUSH_type_mail);
push.setCreator(null);
push.setSummary(content);
push.setPushType(PushExtEntity.PUSH_pushType_person);
push.setPushUserOid(userOid);
push.setPushUserAcc(phone);
push.setStatus(PushExtEntity.PUSH_status_on);
push.setCreateTime(new Timestamp(Clock.DEFAULT.getCurrentTimeInMillis()));
push.setPushTime(new Timestamp(Clock.DEFAULT.getCurrentTimeInMillis()));
push = this.save(push);
log.info("后台请求推送:用户oid:"+userOid+",手机:"+phone+",推送保存成功!");
if (clientId != null && !clientId.isEmpty()){
this.push2Single(clientId, 0, "", pushContEntity.getPushTitle(), content, push.getUrl());
this.push2Single(clientId, 1, "", pushContEntity.getPushTitle(), content, push.getUrl());
log.info("后台请求推送:用户oid:"+userOid+",手机:"+phone+",推送已发送!clientId:"+clientId);
}else{
log.error("后台请求推送:用户oid:"+userOid+",手机:"+phone+",推送oid:"+push.getOid()+",推送发送失败!clientId不存在!");
}
} catch (Exception e) {
resp.setErrorCode(-1);
resp.setErrorMessage(e.getMessage());
log.error("后台请求推送:用户oid:"+userOid+",推送发送失败!失败内容:"+e.getMessage());
}
return resp;
}
// 个推组装发送
/**
* @param clientId 终端clientId
* @param phoneType 0是安卓系统1是苹果系统
* @param type 个推类型
* @param title 标题
* @param content 内容
* @param url 链接
*/
private void push2ToList(String labelCode, int phoneType, String type, String title, String content, String url) {
ITemplate template = null;
if (phoneType == 0){
if(type.equals("activity")){
template = linkTemplate(title, content, url);
}else{
// 点击通知打开应用模板
template = notificationTemplate(url, title, content);
}
}else{
// 透传模板,对ios使用透传推送
template = transmissionTemplate(url, title, content);
}
IGtPush push = new IGtPush(host, appKey, masterSecret);
ListMessage message = groupMes(template);
List<Target> targets = new ArrayList();
UserLabelExtResp userInfolist = userCenterExtApi.getUserLabelList(labelCode);
if(userInfolist!=null&&userInfolist.getErrorCode()==0&&userInfolist.getRows()!=null&&userInfolist.getRows().size()>0){
for(LabelInvestorExt userInfos:userInfolist.getRows()){
RedisUserinfo info = UserinfoRedisUtil.get(redis, userInfos.getInvestorOid());
Target target = groupTarget(info.getClientId());
targets.add(target);
}
String taskId = push.getContentId(message);
IPushResult ret = null;
try {
ret = push.pushMessageToList(taskId, targets);
} catch (RequestException e) {
e.printStackTrace();
}
if (ret != null) {
System.out.println(ret.getResponse().toString());
} else {
System.out.println("服务器响应异常");
}
}
}
// 个推组装发送
/**
* @param clientId 终端clientId
* @param phoneType 0是安卓系统1是苹果系统
* @param type 个推类型
* @param title 标题
* @param content 内容
* @param url 链接
*/
private void push2Single(String clientId, int phoneType, String type, String title, String content, String url) {
ITemplate template = null;
if (phoneType == 0){
if(type.equals("activity")){
template = linkTemplate(title, content, url);
}else{
// 点击通知打开应用模板
template = notificationTemplate(url, title, content);
}
}else{
// 透传模板,对ios使用透传推送
template = transmissionTemplate(url, title, content);
}
IGtPush push = new IGtPush(host, appKey, masterSecret);
SingleMessage message = groupSingleMes(template);
Target target = groupTarget(clientId);
IPushResult ret = null;
try {
ret = push.pushMessageToSingle(message, target);
} catch (RequestException e) {
e.printStackTrace();
ret = push.pushMessageToSingle(message, target, e.getRequestId());
}
if (ret != null) {
System.out.println(ret.getResponse().toString());
} else {
System.out.println("服务器响应异常");
}
} // 组装个推目标
private Target groupTarget(String clientId) {
// 设置接收目标
Target target = new Target();
target.setAppId(appId);
target.setClientId(clientId);
//target.setAlias(Alias); // 设置别名
return target;
} // 组装个推信息
private SingleMessage groupSingleMes(ITemplate template) {
SingleMessage message = new SingleMessage();
message.setOffline(true);
// 离线有效时间,单位为毫秒,可选
message.setOfflineExpireTime(OFFLINEEXPIRETIME);
message.setData(template);
// 可选,1为wifi,0为不限制网络环境。根据手机处于的网络情况,决定是否下发
message.setPushNetWorkType(0);
return message;
}
// 组装个推信息
private ListMessage groupMes(ITemplate template) {
ListMessage message = new ListMessage();
message.setOffline(true);
// 离线有效时间,单位为毫秒,可选
message.setOfflineExpireTime(OFFLINEEXPIRETIME);
message.setData(template);
// 可选,1为wifi,0为不限制网络环境。根据手机处于的网络情况,决定是否下发
message.setPushNetWorkType(0);
return message;
}}
spring data操作mysql
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
上一篇:导出为OVF 无法选择
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
实践使用Spring JDBC API JdbcTemplate来对MySQL数据库进行增删改查操作
实践使用Spring JDBC API JdbcTemplate来对MySQL数据库进行增删改查操作
sql JdbcTemplate Spring JDBC API MySQL -
使用Spring Data来操作MongoDB
这里只记录一下相关资料:h
nosql MongoDB html -
【JPA】Spring Data JPA封装CURD操作
一、参考资料Spring Data JPA 封装API_吕小小
spring java 后端 封装 JPA