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

Commit aca96511 authored by jiangxiulong's avatar jiangxiulong

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

parent d23e8361
package com.liquidnet.service.sweet.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.entity.SweetAppletSubMsg;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
......@@ -16,7 +16,7 @@ public interface ISweetAppletSubMsgService extends IService<SweetAppletSubMsg> {
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);
......
......@@ -2,11 +2,12 @@ package com.liquidnet.service.sweet.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 小程序订阅消息记录表
......@@ -17,7 +18,7 @@ import lombok.EqualsAndHashCode;
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SweetAppletSubMsg implements Serializable {
public class SweetAppletSubMsg implements Serializable, Cloneable {
private static final long serialVersionUID = 1L;
......@@ -69,5 +70,14 @@ public class SweetAppletSubMsg implements Serializable {
*/
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 {
private SweetAppletSubMsgServiceImpl subMsgService;
@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(
@RequestParam Integer type,
@RequestParam String targetId
......@@ -40,13 +44,18 @@ public class SweetAppletSubMsgController {
}
@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(
@RequestParam Integer type,
@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;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage;
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.DateUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
......@@ -10,13 +11,11 @@ import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst;
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.sweet.config.WechatMaConfigure;
import com.liquidnet.service.sweet.entity.SweetAppletSubMsg;
import com.liquidnet.service.sweet.mapper.SweetAppletSubMsgMapper;
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.RedisActivityUtils;
import lombok.extern.slf4j.Slf4j;
......@@ -66,38 +65,25 @@ public class SweetAppletSubMsgServiceImpl extends ServiceImpl<SweetAppletSubMsgM
.eq(SweetAppletSubMsg::getActivityType, type)
);
ResponseDto<KylinPerformanceVo> kylinPerformanceVo = feignKylinPerformancesClient.detail(targetId, 0, 0, "");
KylinPerformanceVo performanceVoData = kylinPerformanceVo.getData();
if (null == performanceVoData || ObjectUtils.isEmpty(performanceVoData)) {
log.info("无演出数据:[getPerformancesId=[{}]", targetId);
return ResponseDto.success("无演出数据");
}
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=[{}]",
nowTimeStr, stopSellTime);
return ResponseDto.success("超过售卖期");
}
if (-1 == DateUtil.compareStrDay(nowTimeStr, sellTimeLocalNewStr)) { // 还没到售卖期
log.info("还没到售卖期:[nowTimeStr=[{}], [sellTimeLocalNewStr=[{}]",
nowTimeStr, sellTimeLocalNewStr);
return ResponseDto.success("还没到售卖期");
KylinPerformanceVo performanceVoData = null;
if (!targetId.isEmpty()) {
ResponseDto<KylinPerformanceVo> kylinPerformanceVo = feignKylinPerformancesClient.detail(targetId, 0, 0, "");
performanceVoData = kylinPerformanceVo.getData();
Integer isPush = isPush(performanceVoData, targetId);
if (isPush != 3) {
return ResponseDto.failure("当前演出还不能推送,状态".concat(String.valueOf(isPush)));
}
}
String title = performanceVoData.getTitle();
String timeStart = performanceVoData.getTimeStart();
ArrayList<String> msgIdList = CollectionUtil.arrayListString();
if (!CollectionUtils.isEmpty(msgList)) {
for (SweetAppletSubMsg info : msgList) {
try {
String msgId = info.getMsgId();
// 发送订阅消息接口
boolean subMessage = sendSubMessage(info, performanceVoData);
boolean subMessage = sendSubMessage(info, targetId, title, timeStart);
if (subMessage) {
msgIdList.add(msgId);
}
......@@ -121,47 +107,35 @@ public class SweetAppletSubMsgServiceImpl extends ServiceImpl<SweetAppletSubMsgM
}
@Override
public ResponseDto sendOfMid(Integer type, String midList, String targetId) {
public ResponseDto sendOfMid(String midList, String targetId, Integer timeType) {
String[] midListArray = midList.split(",");
List<SweetAppletSubMsg> msgList = subMsgMapper.selectList(
Wrappers.lambdaQuery(SweetAppletSubMsg.class)
.eq(SweetAppletSubMsg::getIsPush, 1)
.eq(SweetAppletSubMsg::getActivityType, type)
.in(SweetAppletSubMsg::getMid, midListArray)
);
ResponseDto<KylinPerformanceVo> kylinPerformanceVo = feignKylinPerformancesClient.detail(targetId, 0, 0, "");
KylinPerformanceVo performanceVoData = kylinPerformanceVo.getData();
if (null == performanceVoData || ObjectUtils.isEmpty(performanceVoData)) {
log.info("无演出数据:[getPerformancesId=[{}]", targetId);
return ResponseDto.failure("无演出数据");
}
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=[{}]",
nowTimeStr, stopSellTime);
return ResponseDto.failure("超过售卖期");
}
if (-1 == DateUtil.compareStrDay(nowTimeStr, sellTimeLocalNewStr)) { // 还没到售卖期
log.info("还没到售卖期:[nowTimeStr=[{}], [sellTimeLocalNewStr=[{}]",
nowTimeStr, sellTimeLocalNewStr);
return ResponseDto.failure("还没到售卖期");
KylinPerformanceVo performanceVoData = null;
if (!targetId.isEmpty()) {
ResponseDto<KylinPerformanceVo> kylinPerformanceVo = feignKylinPerformancesClient.detail(targetId, 0, 0, "");
performanceVoData = kylinPerformanceVo.getData();
if (timeType == 1) {
Integer isPush = isPush(performanceVoData, targetId);
if (isPush != 3) {
return ResponseDto.failure("当前演出还不能推送,状态".concat(String.valueOf(isPush)));
}
}
}
String title = performanceVoData.getTitle();
String timeStart = performanceVoData.getTimeStart();
ArrayList<String> msgIdList = CollectionUtil.arrayListString();
if (!CollectionUtils.isEmpty(msgList)) {
for (SweetAppletSubMsg info : msgList) {
try {
String msgId = info.getMsgId();
// 发送订阅消息接口
boolean subMessage = sendSubMessage(info, performanceVoData);
boolean subMessage = sendSubMessage(info, targetId, title, timeStart);
if (subMessage) {
msgIdList.add(msgId);
}
......@@ -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();
subscribeMessage.setPage("pages/webview?query=showdetails&id=".concat(performanceVo.getPerformancesId()));
subscribeMessage.setPage("pages/webview?query=showdetails&id=".concat(performancesId));
subscribeMessage.setTemplateId(info.getTemplateId());
subscribeMessage.setToUser(info.getOpenId());
ArrayList<WxMaSubscribeMessage.MsgData> wxMaSubscribeData = new ArrayList<>();
WxMaSubscribeMessage.MsgData wxMaSubscribeData1 = new WxMaSubscribeMessage.MsgData();
wxMaSubscribeData1.setName("thing1");
wxMaSubscribeData1.setValue(performanceVo.getTitle());
wxMaSubscribeData1.setValue(title);
//每个参数 存放到大集合中
wxMaSubscribeData.add(wxMaSubscribeData1);
// 第二个内容:用户昵称
WxMaSubscribeMessage.MsgData wxMaSubscribeData2 = new WxMaSubscribeMessage.MsgData();
wxMaSubscribeData2.setName("time2");
wxMaSubscribeData2.setValue(performanceVo.getTimeStart());
wxMaSubscribeData2.setValue(timeStart);
wxMaSubscribeData.add(wxMaSubscribeData2);
// 第三个内容:领取方式
......@@ -252,4 +226,31 @@ public class SweetAppletSubMsgServiceImpl extends ServiceImpl<SweetAppletSubMsgM
}
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