Commit ed53074b authored by zuoadmin's avatar zuoadmin

Merge branch 'bug' into 'master'

Bug

See merge request !30
parents 180b4039 2acfaec5
...@@ -5,13 +5,39 @@ import com.weface.code.ResultCode; ...@@ -5,13 +5,39 @@ import com.weface.code.ResultCode;
import com.weface.dto.InformForm; import com.weface.dto.InformForm;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import java.util.Objects;
/** /**
* @author : Administrator * @author : Administrator
* @date : 2022/4/21 14:28 * @date : 2022/4/21 14:28
*/ */
public class ValidatorParam { public class ValidatorParam {
/**
* 校验推送参数
*
* @param informForm 推送参数
* @return 核验结果
*/
public static CommonResult validPushParams(InformForm informForm) {
Integer style = informForm.getStyle();
if (Objects.nonNull(style)) {
if (style == 1 || style == 2) {
String content = informForm.getContent();
if (StringUtils.isEmpty(content)) {
return CommonResult.failed(ResultCode.PARAMS_ERROR);
}
}
}
return null;
}
/**
* 核验别名单推推送参数
*
* @param informForm 推送参数
* @return 核验结果
*/
public static CommonResult validPushSingleAlias(InformForm informForm) { public static CommonResult validPushSingleAlias(InformForm informForm) {
String body = informForm.getBody(); String body = informForm.getBody();
if (body.length() > 60) { if (body.length() > 60) {
......
...@@ -300,7 +300,7 @@ public class GeTuiService { ...@@ -300,7 +300,7 @@ public class GeTuiService {
public CommonResult listPush(InformForm informForm) { public CommonResult listPush(InformForm informForm) {
try { try {
String type = informForm.getEquipmentType(); String type = informForm.getEquipmentType();
if ("kkwj".equals(type)){ if ("kkwj".equals(type)) {
return CommonResult.success("暂未开放推送"); return CommonResult.success("暂未开放推送");
} }
String appId = getAppId(type); String appId = getAppId(type);
...@@ -318,6 +318,7 @@ public class GeTuiService { ...@@ -318,6 +318,7 @@ public class GeTuiService {
String url = GE_TUI_BASE_URL + appId + "/push/all"; String url = GE_TUI_BASE_URL + appId + "/push/all";
log.info("执行群推"); log.info("执行群推");
String result = generalPost(url, pushToken, map); String result = generalPost(url, pushToken, map);
log.error("个推群推结果:{}", result);
if (result == null) { if (result == null) {
return CommonResult.failed(); return CommonResult.failed();
} }
...@@ -497,6 +498,54 @@ public class GeTuiService { ...@@ -497,6 +498,54 @@ public class GeTuiService {
return null; return null;
} }
/**
* 撤回下发消息
*
* @param taskId 任务id
* @return 执行结果
*/
public String revokeTask(String taskId, String equipmentType) {
String appId = getAppId(equipmentType);
String pushToken = getPushToken(equipmentType);
Map<String, Object> map = new HashMap<>();
map.put("request_id", String.valueOf(SnowIdUtil.nextId()));
map.put("audience", "all");
Map<String, Object> push_message = new HashMap<>();
HashMap<String, Object> revoke = new HashMap<>();
revoke.put("old_task_id", "RASA_0607_cca1c0bbccb4eccc9b102eee15708989");
revoke.put("force", false);
push_message.put("revoke", revoke);
map.put("push_message", push_message);
String revokePush = GeTuiService.GE_TUI_BASE_URL + appId + "/push/all";
String s = generalPost(revokePush, pushToken, map);
log.error("推送撤回消息:{}", s);
if (StringUtils.isBlank(pushToken)) {
return null;
}
String revokeDel = GE_TUI_BASE_URL + appId + "/task/" + taskId;
String token = HttpRequest.delete(revokeDel).header("token", pushToken).header("content-type", "application/json;charset=utf-8").execute().body();
log.error("停止下发:{}", token);
return token;
}
/**
* 获取推送下发实时结果 注意:该接口需要开通权限,如需开通,请联系对应的商务同学开通
*
* @param taskId 任务id
* @param equipmentType 推送app
* @return 下发结果
*/
public String getReportByTaskId(String taskId, String equipmentType) {
String prefix = String.format("/report/push/task/%s/detail", taskId);
String appId = getAppId(equipmentType);
String pushToken = getPushToken(equipmentType);
String url = GE_TUI_BASE_URL + appId + prefix;
String token = HttpRequest.get(url).header("token", pushToken).header("content-type", "application/json;charset=utf-8").execute().body();
log.error("推送下发结果:{}", token);
return token;
}
/** /**
* 将内容转为推送模板 * 将内容转为推送模板
* *
......
...@@ -15,6 +15,7 @@ import com.weface.common.utils.Model; ...@@ -15,6 +15,7 @@ import com.weface.common.utils.Model;
import com.weface.dto.InformForm; import com.weface.dto.InformForm;
import com.weface.service.PushLogService; import com.weface.service.PushLogService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -152,7 +153,12 @@ public class MobPushService { ...@@ -152,7 +153,12 @@ public class MobPushService {
return Model.error(); return Model.error();
} }
/**
* 通过 workId查询当前消息推送结果
*
* @param workId 推送id
* @return 是否收到
*/
public boolean getPushInfoById(String workId) { public boolean getPushInfoById(String workId) {
String reqUrl = "http://api.push.mob.com/v3/stats/getByWorkId"; String reqUrl = "http://api.push.mob.com/v3/stats/getByWorkId";
Map<String, Object> request = new HashMap<>(); Map<String, Object> request = new HashMap<>();
...@@ -221,7 +227,7 @@ public class MobPushService { ...@@ -221,7 +227,7 @@ public class MobPushService {
//推送类型:1通知;2自定义 //推送类型:1通知;2自定义
pushNotify.put("type", 1); pushNotify.put("type", 1);
//android通知消息, type=1, android //android通知消息, type=1, android
Map<String, Object> androidNotify = getAndroidNotify(); Map<String, Object> androidNotify = getAndroidNotify(informForm);
if (!androidNotify.isEmpty()) { if (!androidNotify.isEmpty()) {
pushNotify.put("androidNotify", androidNotify); pushNotify.put("androidNotify", androidNotify);
} }
...@@ -236,7 +242,7 @@ public class MobPushService { ...@@ -236,7 +242,7 @@ public class MobPushService {
//推送时,不走厂商通道。1: 开启,不走厂商通道;其它,关闭 ,默认关闭。 //推送时,不走厂商通道。1: 开启,不走厂商通道;其它,关闭 ,默认关闭。
pushNotify.put("skipFactory", 0); pushNotify.put("skipFactory", 0);
//推送策略: * 1:先走tcp,再走厂商 * 2:先走厂商,再走tcp * 3:只走厂商 * 4:只走tcp (厂商透传policy只支持策略3或4) //推送策略: * 1:先走tcp,再走厂商 * 2:先走厂商,再走tcp * 3:只走厂商 * 4:只走tcp (厂商透传policy只支持策略3或4)
pushNotify.put("policy", 2); pushNotify.put("policy", 1);
//拓展参数 //拓展参数
pushNotify.put("extrasMapList", getExtrasMapList(informForm)); pushNotify.put("extrasMapList", getExtrasMapList(informForm));
return pushNotify; return pushNotify;
...@@ -391,16 +397,43 @@ public class MobPushService { ...@@ -391,16 +397,43 @@ public class MobPushService {
/** /**
* 安卓通知细节配置 * 安卓通知细节配置
* *
* @param informForm 推送消息内容
* @return 安卓细节 * @return 安卓细节
*/ */
private Map<String, Object> getAndroidNotify() { private Map<String, Object> getAndroidNotify(InformForm informForm) {
Map<String, Object> androidNotify = new HashMap<>(1); Map<String, Object> androidNotify = new HashMap<>(1);
androidNotify.put("warn", "123"); androidNotify.put("warn", "123");
//androidNotify.put("content", new String[]{"测试这是一条数据"}); Integer style = informForm.getStyle();
//androidNotify.put("style", "3"); if (Objects.isNull(style)) {
return androidNotify;
}
androidNotify.put("style", style);
String content = informForm.getContent();
if (style == 1 || style == 2) {
androidNotify.put("content", new String[]{content});
}
String image = informForm.getImage();
if (StringUtils.isNotEmpty(image)) {
androidNotify.put("image", image);
}
return androidNotify; return androidNotify;
} }
/**
* customStyle:安卓通知自定义样式
*
* @return 安卓细节
*/
private Map<String, Object> getCustomStyle() {
Map<String, Object> map = new HashMap<>();
map.put("styleNo", 1);
map.put("backgroundUrl", "https://socialsecurity.oss-cn-beijing.aliyuncs.com/userPhoto/ycfj.png");
map.put("smallIcons", "http://i.weface.com.cn/banners/tcformphoto/certificationOldSuucess01.gif");
map.put("buttonCopy", "测试文案");
map.put("buttonJumpUrl", "https://www.hutool.cn/");
return map;
}
/** /**
* ios通知细节配置 * ios通知细节配置
* *
......
...@@ -12,6 +12,7 @@ import com.weface.dto.MsgDTO; ...@@ -12,6 +12,7 @@ import com.weface.dto.MsgDTO;
import com.weface.dto.PushDTO; import com.weface.dto.PushDTO;
import com.weface.service.PushService; import com.weface.service.PushService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
...@@ -43,42 +44,76 @@ public class PushController { ...@@ -43,42 +44,76 @@ public class PushController {
return pushService.pushSingle(param); return pushService.pushSingle(param);
} }
/**
* 群推
*/
@PostMapping("/all") @PostMapping("/all")
public CommonResult pushAll(InformForm informForm) { public CommonResult pushAll(InformForm informForm) {
log.error("群推内容:{}", JSONObject.toJSONString(informForm)); log.error("群推内容:{}", JSONObject.toJSONString(informForm));
ValidatorUtils.validateEntity(informForm, InformForm.PushValid.class); ValidatorUtils.validateEntity(informForm, InformForm.PushValid.class);
if(informForm.getEquipmentType().equals("kksh")) CommonResult result = ValidatorParam.validPushParams(informForm);
{ if (result != null) {
return result;
}
if (informForm.getEquipmentType().equals("kksh")) {
mobPushService.mobPush(informForm, Constant.PushTarget.RADIO); mobPushService.mobPush(informForm, Constant.PushTarget.RADIO);
} }
return geTuiService.listPush(informForm); return geTuiService.listPush(informForm);
} }
/**
* 别名单推
*/
@PostMapping("/single/alias") @PostMapping("/single/alias")
public CommonResult pushSingleAlias(@RequestBody InformForm informForm) { public CommonResult pushSingleAlias(@RequestBody InformForm informForm) {
ValidatorUtils.validateEntity(informForm, InformForm.PushValid.class); ValidatorUtils.validateEntity(informForm, InformForm.PushValid.class);
CommonResult commonResult = ValidatorParam.validPushSingleAlias(informForm); CommonResult result = ValidatorParam.validPushParams(informForm);
if (commonResult != null) { if (result != null) {
return commonResult; return result;
}
result = ValidatorParam.validPushSingleAlias(informForm);
if (result != null) {
return result;
} }
CommonResult result = mobPushService.mobPush(informForm, Constant.PushTarget.ALIAS); result = mobPushService.mobPush(informForm, Constant.PushTarget.ALIAS);
if (result != null) { if (result != null) {
return CommonResult.success(); return CommonResult.success();
} }
return geTuiService.pushSingleAlias(informForm); return geTuiService.pushSingleAlias(informForm);
} }
/**
* cid单推
*/
@PostMapping("/single/cid") @PostMapping("/single/cid")
public CommonResult pushSingleCid(@RequestBody InformForm informForm) { public CommonResult pushSingleCid(@RequestBody InformForm informForm) {
ValidatorUtils.validateEntity(informForm, InformForm.PushValid.class); ValidatorUtils.validateEntity(informForm, InformForm.PushValid.class);
CommonResult commonResult = ValidatorParam.validPushSingleAlias(informForm); CommonResult result = ValidatorParam.validPushParams(informForm);
if (commonResult != null) { if (result != null) {
return commonResult; return result;
}
result = ValidatorParam.validPushSingleAlias(informForm);
if (result != null) {
return result;
} }
CommonResult result = mobPushService.mobPush(informForm, Constant.PushTarget.RIDS); result = mobPushService.mobPush(informForm, Constant.PushTarget.RIDS);
if (result != null) { if (result != null) {
return CommonResult.success(); return CommonResult.success();
} }
return geTuiService.pushSingleCid(informForm); return geTuiService.pushSingleCid(informForm);
} }
/**
* 别名批量推送
*/
@PostMapping("/list/alias")
public CommonResult pushListMessage(@RequestBody InformForm informForm) {
ValidatorUtils.validateEntity(informForm, InformForm.PushValid.class);
String result = geTuiService.pushListMessage(informForm, true);
if (StringUtils.isEmpty(result)) {
return CommonResult.failed("推送失败");
} else {
return CommonResult.success(result, "推送成功");
}
}
} }
...@@ -39,8 +39,12 @@ public class InformForm { ...@@ -39,8 +39,12 @@ public class InformForm {
private String phone; private String phone;
//推送模板 //推送模板
private Integer messageTemplate; private Integer messageTemplate;
//显示样式标识- 0:默认 - 1:长内容 - 2:大图 - 3:横幅 - 4:自定义样式
private Integer style;
//推送内容,配合style参数使用- style=0 不生效 - style=1 部分机型可以生效覆盖- style=2 传入图片链接,部分低版本手机不支持- style=3 对应传入文字内容默认: 0
private String content;
//推送大图标的url地址小米厂商对图片尺寸有严格要求
private String image;
public interface PushValid{ public interface PushValid{
} }
......
package com.weface.serviceimpl; package com.weface.serviceimpl;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
...@@ -77,8 +78,11 @@ public class PushLogServiceImpl extends ServiceImpl<PushLogDao, PushLogEntity> i ...@@ -77,8 +78,11 @@ public class PushLogServiceImpl extends ServiceImpl<PushLogDao, PushLogEntity> i
pushLogEntity.setId(id); pushLogEntity.setId(id);
pushLogEntity.setAppName(informForm.getEquipmentType()); pushLogEntity.setAppName(informForm.getEquipmentType());
pushLogEntity.setPushType(pushType); pushLogEntity.setPushType(pushType);
if (StringUtils.isNotEmpty(taskId) && taskId.length() > 200) {
taskId = taskId.substring(0, 200);
}
pushLogEntity.setTaskId(taskId); pushLogEntity.setTaskId(taskId);
if (result.length() > 200) { if (StringUtils.isNotEmpty(result) && result.length() > 200) {
result = result.substring(0, 200); result = result.substring(0, 200);
} }
pushLogEntity.setResult(result); pushLogEntity.setResult(result);
...@@ -91,9 +95,30 @@ public class PushLogServiceImpl extends ServiceImpl<PushLogDao, PushLogEntity> i ...@@ -91,9 +95,30 @@ public class PushLogServiceImpl extends ServiceImpl<PushLogDao, PushLogEntity> i
if (messageTemplate != null) { if (messageTemplate != null) {
pushLogEntity.setMessageTemplate(messageTemplate); pushLogEntity.setMessageTemplate(messageTemplate);
} }
pushLogEntity.setPushTarget(informForm.getCid() == null ? "all" : informForm.getCid()); String cid = informForm.getCid();
pushLogEntity.setPushContent(informForm.getBody()); String pushTarget;
if (StringUtils.isEmpty(cid)) {
pushTarget = "all";
} else {
int length = cid.length();
if (length > 200) {
pushTarget = "toListMessage";
} else {
pushTarget = cid;
}
}
pushLogEntity.setPushTarget(pushTarget);
String body = informForm.getBody();
if (StringUtils.isNotEmpty(body) && body.length() > 200) {
body = body.substring(0, 200);
}
pushLogEntity.setPushContent(body);
pushLogEntity.setArriveStatus(1001); pushLogEntity.setArriveStatus(1001);
String jsonStr = JSONUtil.toJsonStr(informForm);
if (jsonStr.length() > 200) {
jsonStr = jsonStr.substring(0, 200);
}
pushLogEntity.setBas1(jsonStr);
pushLogEntity.setUpdateTime(new Date()); pushLogEntity.setUpdateTime(new Date());
return pushLogEntity; return pushLogEntity;
} }
......
...@@ -75,6 +75,7 @@ public class UserTagsTask { ...@@ -75,6 +75,7 @@ public class UserTagsTask {
*/ */
@Scheduled(cron = "0 0 8 1,15 * ?") @Scheduled(cron = "0 0 8 1,15 * ?")
public void timingPush() { public void timingPush() {
log.error("开始推送1,15号");
//判断当前是否为当月1/15号 //判断当前是否为当月1/15号
if (DateUtils.isToday(1) || DateUtils.isToday(15)) { if (DateUtils.isToday(1) || DateUtils.isToday(15)) {
//获取推送配置信息 //获取推送配置信息
...@@ -87,14 +88,14 @@ public class UserTagsTask { ...@@ -87,14 +88,14 @@ public class UserTagsTask {
return; return;
} }
//查询老用户 //查询老用户
List<String> list = pushLogService.getOrderUidList().stream().filter(org.apache.commons.lang3.StringUtils::isNumeric).collect(Collectors.toList()); List<String> list = pushLogService.getOrderUidList().stream().filter(org.apache.commons.lang3.StringUtils::isNumeric).distinct().collect(Collectors.toList());
if (!CollectionUtils.isEmpty(list)) { if (!CollectionUtils.isEmpty(list)) {
//将推送配置json转为推送实体类 //将推送配置json转为推送实体类
InformForm form = JSONObject.parseObject(configContent, InformForm.class); InformForm form = JSONObject.parseObject(configContent, InformForm.class);
//当天是否为15号 //当天是否为15号
if (DateUtils.isToday(15)) { if (DateUtils.isToday(15)) {
//查询14天前至今有缴费记录用户 //查询14天前至今有缴费记录用户
List<String> record = pushLogService.getPayCostRecord().stream().filter(org.apache.commons.lang3.StringUtils::isNumeric).collect(Collectors.toList()); List<String> record = pushLogService.getPayCostRecord().stream().filter(org.apache.commons.lang3.StringUtils::isNumeric).distinct().collect(Collectors.toList());
//过滤已缴费用户 //过滤已缴费用户
if (!CollectionUtils.isEmpty(record)) { if (!CollectionUtils.isEmpty(record)) {
list.removeAll(record); list.removeAll(record);
...@@ -116,6 +117,7 @@ public class UserTagsTask { ...@@ -116,6 +117,7 @@ public class UserTagsTask {
//个推批量推送 //个推批量推送
geTuiService.pushListMessage(form, true); geTuiService.pushListMessage(form, true);
} }
log.error("本次推送目标数:{}", list.size());
} }
} }
} }
......
...@@ -111,19 +111,17 @@ class PushMessageApplicationTests { ...@@ -111,19 +111,17 @@ class PushMessageApplicationTests {
@Test @Test
void testRevoke() { void testRevoke() {
Map<String, Object> map = new HashMap<>(); String taskId = "RASA_0726_e51c93e787d103e072e4cd2cd43e8500";
map.put("request_id", String.valueOf(SnowIdUtil.nextId())); String equipmentType = "kksh";
map.put("audience", "all"); String s = geTuiService.revokeTask(taskId, equipmentType);
System.out.println(s);
}
Map<String, Object> push_message = new HashMap<>(); @Test
HashMap<String, Object> revoke = new HashMap<>(); void testPushResult(){
revoke.put("old_task_id", "RASA_0127_011f801354c5236738787cdda86cf232"); String taskId = "RASA_0726_e51c93e787d103e072e4cd2cd43e8500";
revoke.put("force", false); String equipmentType = "kksh";
push_message.put("revoke", revoke); String s = geTuiService.getReportByTaskId(taskId, equipmentType);
map.put("push_message", push_message);
String url = GeTuiService.GE_TUI_BASE_URL + geTuiService.getAppId("kksh") + "/push/all";
String kk_sh_token_ge_tui = geTuiService.getAuthToken("kk_sh_token_ge_tui");
String s = geTuiService.generalPost(url, kk_sh_token_ge_tui, map);
System.out.println(s); System.out.println(s);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment