记得上下班打卡 | git大法好,push需谨慎

Commit aca96511 authored by jiangxiulong's avatar jiangxiulong

优化发送订阅消息接口;演出时间状态判断提出来;演出数据参数提出来;

parent d23e8361
package com.liquidnet.service.sweet.service; package com.liquidnet.service.sweet.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.base.ResponseDto; import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.entity.SweetAppletSubMsg; import com.liquidnet.service.sweet.entity.SweetAppletSubMsg;
import com.baomidou.mybatisplus.extension.service.IService;
/** /**
* <p> * <p>
...@@ -16,7 +16,7 @@ public interface ISweetAppletSubMsgService extends IService<SweetAppletSubMsg> { ...@@ -16,7 +16,7 @@ public interface ISweetAppletSubMsgService extends IService<SweetAppletSubMsg> {
ResponseDto sendMsg(Integer type, String targetId); ResponseDto sendMsg(Integer type, String targetId);
ResponseDto sendOfMid(Integer type, String midList, String targetId); ResponseDto sendOfMid(String midList, String targetId, Integer timeType);
ResponseDto<Boolean> create(String openId, String templateId, String targetId, Integer appletType, Integer activityType); ResponseDto<Boolean> create(String openId, String templateId, String targetId, Integer appletType, Integer activityType);
......
...@@ -2,11 +2,12 @@ package com.liquidnet.service.sweet.entity; ...@@ -2,11 +2,12 @@ package com.liquidnet.service.sweet.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDateTime;
/** /**
* <p> * <p>
* 小程序订阅消息记录表 * 小程序订阅消息记录表
...@@ -17,7 +18,7 @@ import lombok.EqualsAndHashCode; ...@@ -17,7 +18,7 @@ import lombok.EqualsAndHashCode;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
public class SweetAppletSubMsg implements Serializable { public class SweetAppletSubMsg implements Serializable, Cloneable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
...@@ -69,5 +70,14 @@ public class SweetAppletSubMsg implements Serializable { ...@@ -69,5 +70,14 @@ public class SweetAppletSubMsg implements Serializable {
*/ */
private LocalDateTime updatedAt; private LocalDateTime updatedAt;
private static final SweetAppletSubMsg obj = new SweetAppletSubMsg();
public static SweetAppletSubMsg getNew() {
try {
return (SweetAppletSubMsg) obj.clone();
} catch (CloneNotSupportedException e) {
return new SweetAppletSubMsg();
}
}
} }
...@@ -31,7 +31,11 @@ public class SweetAppletSubMsgController { ...@@ -31,7 +31,11 @@ public class SweetAppletSubMsgController {
private SweetAppletSubMsgServiceImpl subMsgService; private SweetAppletSubMsgServiceImpl subMsgService;
@GetMapping("send") @GetMapping("send")
@ApiOperation("发送模版消息") @ApiOperation("发送模版消息 定时任务使用")
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "Integer", name = "type", value = "活动类型", required = true),
@ApiImplicitParam(type = "query", dataType = "String", name = "targetId", value = "演出ID", required = true),
})
public ResponseDto send( public ResponseDto send(
@RequestParam Integer type, @RequestParam Integer type,
@RequestParam String targetId @RequestParam String targetId
...@@ -40,13 +44,18 @@ public class SweetAppletSubMsgController { ...@@ -40,13 +44,18 @@ public class SweetAppletSubMsgController {
} }
@PostMapping("sendOfMid") @PostMapping("sendOfMid")
@ApiOperation("发送模版消息OfMid") @ApiOperation("发送模版消息OfMid, 特殊情况手动调用使用")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", dataType = "String", name = "midList", value = "mid列表逗号分割", required = true),
@ApiImplicitParam(type = "form", dataType = "String", name = "targetId", value = "演出ID"),
@ApiImplicitParam(type = "form", dataType = "Integer", name = "timeType", value = "是否判断演出时间 1判断 2不判断"),
})
public ResponseDto sendOfMid( public ResponseDto sendOfMid(
@RequestParam Integer type,
@RequestParam String midList, @RequestParam String midList,
@RequestParam String targetId @RequestParam(defaultValue = "") String targetId,
@RequestParam(defaultValue = "1") Integer timeType
) { ) {
return subMsgService.sendOfMid(type, midList, targetId); return subMsgService.sendOfMid(midList, targetId, timeType);
} }
// 一次订阅 可以多次发 直到用户取消订阅 所以正规做法应该是记录订阅模版 不关联任何推送数据 等推送的时候查是否订阅某模版 // 一次订阅 可以多次发 直到用户取消订阅 所以正规做法应该是记录订阅模版 不关联任何推送数据 等推送的时候查是否订阅某模版
......
...@@ -3,6 +3,7 @@ package com.liquidnet.service.sweet.service.impl; ...@@ -3,6 +3,7 @@ package com.liquidnet.service.sweet.service.impl;
import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage; import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.commons.lang.util.CollectionUtil; import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.DateUtil; import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.IDGenerator; import com.liquidnet.commons.lang.util.IDGenerator;
...@@ -10,13 +11,11 @@ import com.liquidnet.service.base.ResponseDto; ...@@ -10,13 +11,11 @@ import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.SqlMapping; import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst; import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.feign.kylin.api.FeignKylinPerformancesClient; import com.liquidnet.service.feign.kylin.api.FeignKylinPerformancesClient;
import com.liquidnet.service.kylin.dto.vo.middle.KylinTicketTimesVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo; import com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo;
import com.liquidnet.service.sweet.config.WechatMaConfigure; import com.liquidnet.service.sweet.config.WechatMaConfigure;
import com.liquidnet.service.sweet.entity.SweetAppletSubMsg; import com.liquidnet.service.sweet.entity.SweetAppletSubMsg;
import com.liquidnet.service.sweet.mapper.SweetAppletSubMsgMapper; import com.liquidnet.service.sweet.mapper.SweetAppletSubMsgMapper;
import com.liquidnet.service.sweet.service.ISweetAppletSubMsgService; import com.liquidnet.service.sweet.service.ISweetAppletSubMsgService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.service.sweet.utils.QueueUtils; import com.liquidnet.service.sweet.utils.QueueUtils;
import com.liquidnet.service.sweet.utils.RedisActivityUtils; import com.liquidnet.service.sweet.utils.RedisActivityUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -66,38 +65,25 @@ public class SweetAppletSubMsgServiceImpl extends ServiceImpl<SweetAppletSubMsgM ...@@ -66,38 +65,25 @@ public class SweetAppletSubMsgServiceImpl extends ServiceImpl<SweetAppletSubMsgM
.eq(SweetAppletSubMsg::getActivityType, type) .eq(SweetAppletSubMsg::getActivityType, type)
); );
ResponseDto<KylinPerformanceVo> kylinPerformanceVo = feignKylinPerformancesClient.detail(targetId, 0, 0, ""); KylinPerformanceVo performanceVoData = null;
KylinPerformanceVo performanceVoData = kylinPerformanceVo.getData(); if (!targetId.isEmpty()) {
if (null == performanceVoData || ObjectUtils.isEmpty(performanceVoData)) { ResponseDto<KylinPerformanceVo> kylinPerformanceVo = feignKylinPerformancesClient.detail(targetId, 0, 0, "");
log.info("无演出数据:[getPerformancesId=[{}]", targetId); performanceVoData = kylinPerformanceVo.getData();
return ResponseDto.success("无演出数据"); Integer isPush = isPush(performanceVoData, targetId);
} if (isPush != 3) {
LocalDateTime nowTime = LocalDateTime.now(); return ResponseDto.failure("当前演出还不能推送,状态".concat(String.valueOf(isPush)));
String nowTimeStr = DateUtil.Formatter.yyyyMMddHHmmss.format(nowTime); }
String sellTime = performanceVoData.getSellTime();
LocalDateTime sellTimeLocal = LocalDateTime.parse(sellTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
LocalDateTime sellTimeLocalNew = sellTimeLocal.minusMinutes(5);
String sellTimeLocalNewStr = DateUtil.Formatter.yyyyMMddHHmmss.format(sellTimeLocalNew);
String stopSellTime = performanceVoData.getStopSellTime();
if (1 == DateUtil.compareStrDay(nowTimeStr, stopSellTime)) { // 超过售卖期 不推 删redis
log.info("超过售卖期:[nowTimeStr=[{}], [stopSellTime=[{}]",
nowTimeStr, stopSellTime);
return ResponseDto.success("超过售卖期");
}
if (-1 == DateUtil.compareStrDay(nowTimeStr, sellTimeLocalNewStr)) { // 还没到售卖期
log.info("还没到售卖期:[nowTimeStr=[{}], [sellTimeLocalNewStr=[{}]",
nowTimeStr, sellTimeLocalNewStr);
return ResponseDto.success("还没到售卖期");
} }
String title = performanceVoData.getTitle();
String timeStart = performanceVoData.getTimeStart();
ArrayList<String> msgIdList = CollectionUtil.arrayListString(); ArrayList<String> msgIdList = CollectionUtil.arrayListString();
if (!CollectionUtils.isEmpty(msgList)) { if (!CollectionUtils.isEmpty(msgList)) {
for (SweetAppletSubMsg info : msgList) { for (SweetAppletSubMsg info : msgList) {
try { try {
String msgId = info.getMsgId(); String msgId = info.getMsgId();
// 发送订阅消息接口 // 发送订阅消息接口
boolean subMessage = sendSubMessage(info, performanceVoData); boolean subMessage = sendSubMessage(info, targetId, title, timeStart);
if (subMessage) { if (subMessage) {
msgIdList.add(msgId); msgIdList.add(msgId);
} }
...@@ -121,47 +107,35 @@ public class SweetAppletSubMsgServiceImpl extends ServiceImpl<SweetAppletSubMsgM ...@@ -121,47 +107,35 @@ public class SweetAppletSubMsgServiceImpl extends ServiceImpl<SweetAppletSubMsgM
} }
@Override @Override
public ResponseDto sendOfMid(Integer type, String midList, String targetId) { public ResponseDto sendOfMid(String midList, String targetId, Integer timeType) {
String[] midListArray = midList.split(","); String[] midListArray = midList.split(",");
List<SweetAppletSubMsg> msgList = subMsgMapper.selectList( List<SweetAppletSubMsg> msgList = subMsgMapper.selectList(
Wrappers.lambdaQuery(SweetAppletSubMsg.class) Wrappers.lambdaQuery(SweetAppletSubMsg.class)
.eq(SweetAppletSubMsg::getIsPush, 1) .eq(SweetAppletSubMsg::getIsPush, 1)
.eq(SweetAppletSubMsg::getActivityType, type)
.in(SweetAppletSubMsg::getMid, midListArray) .in(SweetAppletSubMsg::getMid, midListArray)
); );
ResponseDto<KylinPerformanceVo> kylinPerformanceVo = feignKylinPerformancesClient.detail(targetId, 0, 0, ""); KylinPerformanceVo performanceVoData = null;
KylinPerformanceVo performanceVoData = kylinPerformanceVo.getData(); if (!targetId.isEmpty()) {
if (null == performanceVoData || ObjectUtils.isEmpty(performanceVoData)) { ResponseDto<KylinPerformanceVo> kylinPerformanceVo = feignKylinPerformancesClient.detail(targetId, 0, 0, "");
log.info("无演出数据:[getPerformancesId=[{}]", targetId); performanceVoData = kylinPerformanceVo.getData();
return ResponseDto.failure("无演出数据"); if (timeType == 1) {
} Integer isPush = isPush(performanceVoData, targetId);
LocalDateTime nowTime = LocalDateTime.now(); if (isPush != 3) {
String nowTimeStr = DateUtil.Formatter.yyyyMMddHHmmss.format(nowTime); return ResponseDto.failure("当前演出还不能推送,状态".concat(String.valueOf(isPush)));
String sellTime = performanceVoData.getSellTime(); }
LocalDateTime sellTimeLocal = LocalDateTime.parse(sellTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); }
LocalDateTime sellTimeLocalNew = sellTimeLocal.minusMinutes(5);
String sellTimeLocalNewStr = DateUtil.Formatter.yyyyMMddHHmmss.format(sellTimeLocalNew);
String stopSellTime = performanceVoData.getStopSellTime();
if (1 == DateUtil.compareStrDay(nowTimeStr, stopSellTime)) { // 超过售卖期 不推 删redis
log.info("超过售卖期:[nowTimeStr=[{}], [stopSellTime=[{}]",
nowTimeStr, stopSellTime);
return ResponseDto.failure("超过售卖期");
}
if (-1 == DateUtil.compareStrDay(nowTimeStr, sellTimeLocalNewStr)) { // 还没到售卖期
log.info("还没到售卖期:[nowTimeStr=[{}], [sellTimeLocalNewStr=[{}]",
nowTimeStr, sellTimeLocalNewStr);
return ResponseDto.failure("还没到售卖期");
} }
String title = performanceVoData.getTitle();
String timeStart = performanceVoData.getTimeStart();
ArrayList<String> msgIdList = CollectionUtil.arrayListString(); ArrayList<String> msgIdList = CollectionUtil.arrayListString();
if (!CollectionUtils.isEmpty(msgList)) { if (!CollectionUtils.isEmpty(msgList)) {
for (SweetAppletSubMsg info : msgList) { for (SweetAppletSubMsg info : msgList) {
try { try {
String msgId = info.getMsgId(); String msgId = info.getMsgId();
// 发送订阅消息接口 // 发送订阅消息接口
boolean subMessage = sendSubMessage(info, performanceVoData); boolean subMessage = sendSubMessage(info, targetId, title, timeStart);
if (subMessage) { if (subMessage) {
msgIdList.add(msgId); msgIdList.add(msgId);
} }
...@@ -213,25 +187,25 @@ public class SweetAppletSubMsgServiceImpl extends ServiceImpl<SweetAppletSubMsgM ...@@ -213,25 +187,25 @@ public class SweetAppletSubMsgServiceImpl extends ServiceImpl<SweetAppletSubMsgM
/** /**
* 微信小程序推送订阅消息 * 微信小程序推送订阅消息
*/ */
public boolean sendSubMessage(SweetAppletSubMsg info, KylinPerformanceVo performanceVo) { private boolean sendSubMessage(SweetAppletSubMsg info, String performancesId, String title, String timeStart) {
WxMaSubscribeMessage subscribeMessage = new WxMaSubscribeMessage(); WxMaSubscribeMessage subscribeMessage = new WxMaSubscribeMessage();
subscribeMessage.setPage("pages/webview?query=showdetails&id=".concat(performanceVo.getPerformancesId())); subscribeMessage.setPage("pages/webview?query=showdetails&id=".concat(performancesId));
subscribeMessage.setTemplateId(info.getTemplateId()); subscribeMessage.setTemplateId(info.getTemplateId());
subscribeMessage.setToUser(info.getOpenId()); subscribeMessage.setToUser(info.getOpenId());
ArrayList<WxMaSubscribeMessage.MsgData> wxMaSubscribeData = new ArrayList<>(); ArrayList<WxMaSubscribeMessage.MsgData> wxMaSubscribeData = new ArrayList<>();
WxMaSubscribeMessage.MsgData wxMaSubscribeData1 = new WxMaSubscribeMessage.MsgData(); WxMaSubscribeMessage.MsgData wxMaSubscribeData1 = new WxMaSubscribeMessage.MsgData();
wxMaSubscribeData1.setName("thing1"); wxMaSubscribeData1.setName("thing1");
wxMaSubscribeData1.setValue(performanceVo.getTitle()); wxMaSubscribeData1.setValue(title);
//每个参数 存放到大集合中 //每个参数 存放到大集合中
wxMaSubscribeData.add(wxMaSubscribeData1); wxMaSubscribeData.add(wxMaSubscribeData1);
// 第二个内容:用户昵称 // 第二个内容:用户昵称
WxMaSubscribeMessage.MsgData wxMaSubscribeData2 = new WxMaSubscribeMessage.MsgData(); WxMaSubscribeMessage.MsgData wxMaSubscribeData2 = new WxMaSubscribeMessage.MsgData();
wxMaSubscribeData2.setName("time2"); wxMaSubscribeData2.setName("time2");
wxMaSubscribeData2.setValue(performanceVo.getTimeStart()); wxMaSubscribeData2.setValue(timeStart);
wxMaSubscribeData.add(wxMaSubscribeData2); wxMaSubscribeData.add(wxMaSubscribeData2);
// 第三个内容:领取方式 // 第三个内容:领取方式
...@@ -252,4 +226,31 @@ public class SweetAppletSubMsgServiceImpl extends ServiceImpl<SweetAppletSubMsgM ...@@ -252,4 +226,31 @@ public class SweetAppletSubMsgServiceImpl extends ServiceImpl<SweetAppletSubMsgM
} }
return false; return false;
} }
/**
* 判断演出时间 是否可以推送
*/
private Integer isPush(KylinPerformanceVo performanceVoData, String targetId) {
if (null == performanceVoData || ObjectUtils.isEmpty(performanceVoData)) {
log.info("无演出数据:[performancesId={}]", targetId);
return 0;
}
LocalDateTime nowTime = LocalDateTime.now();
String nowTimeStr = DateUtil.Formatter.yyyyMMddHHmmss.format(nowTime);
String sellTime = performanceVoData.getSellTime();
LocalDateTime sellTimeLocal = LocalDateTime.parse(sellTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
LocalDateTime sellTimeLocalNew = sellTimeLocal.minusMinutes(5);
String sellTimeLocalNewStr = DateUtil.Formatter.yyyyMMddHHmmss.format(sellTimeLocalNew);
String stopSellTime = performanceVoData.getStopSellTime();
if (1 == DateUtil.compareStrDay(nowTimeStr, stopSellTime)) { // 超过售卖期 不推 删redis
log.info("超过售卖期:[nowTimeStr={}, stopSellTime={}, performancesId={}]", nowTimeStr, stopSellTime, targetId);
return 1;
}
if (-1 == DateUtil.compareStrDay(nowTimeStr, sellTimeLocalNewStr)) { // 还没到售卖期
log.info("还没到售卖期:[nowTimeStr={}, sellTimeLocalNewStr={}, performancesId={}]", nowTimeStr, sellTimeLocalNewStr, targetId);
return 2;
}
return 3;
}
} }
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