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

Commit add392ee authored by jiangxiulong's avatar jiangxiulong

remind 去掉redis*

parent 1f1fc3ac
...@@ -16,6 +16,6 @@ liquidnet: ...@@ -16,6 +16,6 @@ liquidnet:
database-name: test_ln_scene database-name: test_ln_scene
mongodb: mongodb:
sslEnabled: false sslEnabled: false
database: test_ln_scene database: dev_ln_scene
#以下为spring各环境个性配置 #以下为spring各环境个性配置
...@@ -442,7 +442,7 @@ drop TABLE if exists `sweet_answer`; ...@@ -442,7 +442,7 @@ drop TABLE if exists `sweet_answer`;
CREATE TABLE `sweet_answer` CREATE TABLE `sweet_answer`
( (
`mid` bigint unsigned NOT NULL AUTO_INCREMENT, `mid` bigint unsigned NOT NULL AUTO_INCREMENT,
`answer_id` varchar(200) NOT NULL DEFAULT '' COMMENT 'answer_id', `answer_id` varchar(255) NOT NULL DEFAULT '' COMMENT 'answer_id',
`phone` varchar(11) NOT NULL DEFAULT '' COMMENT '手机号', `phone` varchar(11) NOT NULL DEFAULT '' COMMENT '手机号',
`answer_json` varchar(255) NOT NULL DEFAULT '' COMMENT '答案json', `answer_json` varchar(255) NOT NULL DEFAULT '' COMMENT '答案json',
`img_url` varchar(255) NOT NULL DEFAULT '' COMMENT '图片', `img_url` varchar(255) NOT NULL DEFAULT '' COMMENT '图片',
...@@ -460,12 +460,12 @@ drop TABLE if exists `sweet_remind`; ...@@ -460,12 +460,12 @@ drop TABLE if exists `sweet_remind`;
CREATE TABLE `sweet_remind` CREATE TABLE `sweet_remind`
( (
`mid` bigint unsigned NOT NULL AUTO_INCREMENT, `mid` bigint unsigned NOT NULL AUTO_INCREMENT,
`remind_id` varchar(200) NOT NULL DEFAULT '' COMMENT 'remind_id', `remind_id` varchar(255) NOT NULL DEFAULT '' COMMENT 'remind_id',
`openId` varchar(11) NOT NULL DEFAULT '' COMMENT 'openId', `openId` varchar(255) NOT NULL DEFAULT '' COMMENT 'openId',
`unionId` varchar(255) NOT NULL DEFAULT '' COMMENT 'unionId', `unionId` varchar(255) NOT NULL DEFAULT '' COMMENT 'unionId',
`performancesId` varchar(255) NOT NULL DEFAULT '' COMMENT '演出id', `performancesId` varchar(255) NOT NULL DEFAULT '' COMMENT '演出id',
`is_push` tinyint NOT NULL DEFAULT 1 COMMENT '是否推送 1未推送 2已推送', `is_push` tinyint NOT NULL DEFAULT 1 COMMENT '是否推送 1未推送 2已推送',
`push_time` varchar(200) NOT NULL DEFAULT '' COMMENT '推送时间', `push_time` varchar(255) NOT NULL DEFAULT '' COMMENT '推送时间',
`created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', `updated_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`mid`), PRIMARY KEY (`mid`),
......
...@@ -16,7 +16,6 @@ public class SweetConstant { ...@@ -16,7 +16,6 @@ public class SweetConstant {
public final static String REDIS_KEY_SWEET_LUCK_DRAW = "sweet:artists:luckDraw:uid:"; public final static String REDIS_KEY_SWEET_LUCK_DRAW = "sweet:artists:luckDraw:uid:";
public final static String REDIS_KEY_SWEET_REMIND="sweet:remind:unionId:"; public final static String REDIS_KEY_SWEET_REMIND="sweet:remind:unionId:";
public static final String REDIS_KEY_SWEET_REMIND_ALL = "sweet:remind:unionId*";
public final static String REDIS_KEY_SWEET_WECHAT_USER_INFO="sweet:wechatUser:unionId:"; public final static String REDIS_KEY_SWEET_WECHAT_USER_INFO="sweet:wechatUser:unionId:";
public final static String REDIS_KEY_SWEET_WECHAT_USER_UNIONID="sweet:wechatUser:openId:"; public final static String REDIS_KEY_SWEET_WECHAT_USER_UNIONID="sweet:wechatUser:openId:";
......
...@@ -20,7 +20,7 @@ public class SweetWechatTemplateController { ...@@ -20,7 +20,7 @@ public class SweetWechatTemplateController {
@GetMapping("send") @GetMapping("send")
@ApiOperation("发送模版消息") @ApiOperation("发送模版消息")
public ResponseDto send() { public ResponseDto send() {
return sweetTemplateService.sendMsg(); return sweetTemplateService.sendRemindMsg();
} }
@PostMapping("remind") @PostMapping("remind")
......
package com.liquidnet.service.sweet.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 提醒记录表
* </p>
*
* @author jiangxiulong
* @since 2021-08-13
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SweetRemind implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* remind_id
*/
private String remindId;
/**
* openId
*/
@TableField("openId")
private String openId;
/**
* unionId
*/
@TableField("unionId")
private String unionId;
/**
* 演出id
*/
@TableField("performancesId")
private String performancesId;
/**
* 是否推送 1未推送 2已推送
*/
private Integer isPush;
/**
* 推送时间
*/
private String pushTime;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 更新时间
*/
private LocalDateTime updatedAt;
private static final SweetRemind obj = new SweetRemind();
public static SweetRemind getNew() {
try {
return (SweetRemind) obj.clone();
} catch (CloneNotSupportedException e) {
return new SweetRemind();
}
}
}
...@@ -96,6 +96,11 @@ public class SweetWechatUser implements Serializable { ...@@ -96,6 +96,11 @@ public class SweetWechatUser implements Serializable {
@TableField("subscribeScene") @TableField("subscribeScene")
private String subscribeScene; private String subscribeScene;
/**
* 是否取消关注
*/
private Integer isCancel;
/** /**
* 创建时间 * 创建时间
*/ */
......
package com.liquidnet.service.sweet.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.liquidnet.service.sweet.entity.SweetRemind;
/**
* <p>
* 提醒记录表 Mapper 接口
* </p>
*
* @author jiangxiulong
* @since 2021-08-13
*/
public interface SweetRemindMapper extends BaseMapper<SweetRemind> {
}
package com.liquidnet.service.sweet.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.sweet.entity.SweetRemind;
/**
* <p>
* 提醒记录表 服务类
* </p>
*
* @author jiangxiulong
* @since 2021-08-13
*/
public interface ISweetRemindService extends IService<SweetRemind> {
}
package com.liquidnet.service.sweet.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.service.sweet.entity.SweetRemind;
import com.liquidnet.service.sweet.mapper.SweetRemindMapper;
import com.liquidnet.service.sweet.service.ISweetRemindService;
import org.springframework.stereotype.Service;
/**
* <p>
* 提醒记录表 服务实现类
* </p>
*
* @author jiangxiulong
* @since 2021-08-13
*/
@Service
public class SweetRemindServiceImpl extends ServiceImpl<SweetRemindMapper, SweetRemind> implements ISweetRemindService {
}
package com.liquidnet.service.sweet.service.impl; package com.liquidnet.service.sweet.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.liquidnet.common.cache.redis.util.RedisUtil; import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.DateUtil; import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.base.ResponseDto; import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.kylin.constant.KylinRedisConst; import com.liquidnet.service.kylin.constant.KylinRedisConst;
import com.liquidnet.service.kylin.dto.vo.middle.KylinTicketTimesVo; 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.constant.SweetConstant; import com.liquidnet.service.sweet.entity.SweetRemind;
import com.liquidnet.service.sweet.entity.SweetWechatUser; import com.liquidnet.service.sweet.entity.SweetWechatUser;
import com.liquidnet.service.sweet.mapper.SweetRemindMapper;
import com.liquidnet.service.sweet.utils.RedisDataUtils; import com.liquidnet.service.sweet.utils.RedisDataUtils;
import com.liquidnet.service.sweet.vo.SweetRemindVo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.api.WxMpService;
...@@ -26,7 +28,8 @@ import org.springframework.util.CollectionUtils; ...@@ -26,7 +28,8 @@ import org.springframework.util.CollectionUtils;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.Set; import java.util.ArrayList;
import java.util.List;
/** /**
* <p> * <p>
...@@ -50,20 +53,27 @@ public class SweetWechatTemplateServiceImpl { ...@@ -50,20 +53,27 @@ public class SweetWechatTemplateServiceImpl {
@Autowired @Autowired
private RedisDataUtils redisDataUtils; private RedisDataUtils redisDataUtils;
@Autowired @Autowired
private RedisTemplate redisTemplate;
@Autowired
private RedisUtil redisUtil; private RedisUtil redisUtil;
public ResponseDto send(String templateId) { @Autowired
String redisKey = SweetConstant.REDIS_KEY_SWEET_REMIND_ALL; private SweetRemindMapper sweetRemindMapper;
Set<String> keys = redisTemplate.keys(redisKey);
if (!CollectionUtils.isEmpty(keys)) { public ResponseDto sendRemindMsg() {
for (String rkey : keys) { String templateId = "CNLDBZYQoDgTWudicx8WU81Jr9b6RyG9hmK4O0tpK-k";
List<SweetRemind> sweetRemindList = sweetRemindMapper.selectList(
Wrappers.lambdaQuery(SweetRemind.class)
.eq(SweetRemind::getIsPush, 1)
);
ArrayList<String> remindIdList = CollectionUtil.arrayListString();
if (!CollectionUtils.isEmpty(sweetRemindList)) {
for (SweetRemind remindInfo : sweetRemindList) {
try { try {
SweetRemindVo remindInfo = (SweetRemindVo) redisUtil.get(rkey); String remindId = remindInfo.getRemindId();
SweetWechatUser sweetWechatUser = redisDataUtils.getSweetWechatUser(remindInfo.getUnionId()); SweetWechatUser sweetWechatUser = redisDataUtils.getSweetWechatUser(remindInfo.getUnionId());
KylinPerformanceVo performanceVo = (KylinPerformanceVo) redisUtil.get(KylinRedisConst.PERFORMANCES.concat(remindInfo.getPerformancesId())); KylinPerformanceVo performanceVo = (KylinPerformanceVo) redisUtil.get(KylinRedisConst.PERFORMANCES.concat(remindInfo.getPerformancesId()));
if (null == sweetWechatUser) { if (null == sweetWechatUser) {
remindIdList.add(remindId);
log.info("无用户数据:[UnionId=[{}]", remindInfo.getUnionId()); log.info("无用户数据:[UnionId=[{}]", remindInfo.getUnionId());
continue; continue;
} }
...@@ -74,7 +84,6 @@ public class SweetWechatTemplateServiceImpl { ...@@ -74,7 +84,6 @@ public class SweetWechatTemplateServiceImpl {
KylinTicketTimesVo kylinTicketTimesVo = performanceVo.getTicketTimeList().get(0); KylinTicketTimesVo kylinTicketTimesVo = performanceVo.getTicketTimeList().get(0);
LocalDateTime nowTime = LocalDateTime.now(); LocalDateTime nowTime = LocalDateTime.now();
// LocalDateTime newNowTime = nowTime.minusMinutes(5);
String nowTimeStr = DateUtil.Formatter.yyyyMMddHHmmss.format(nowTime); String nowTimeStr = DateUtil.Formatter.yyyyMMddHHmmss.format(nowTime);
String sellTime = performanceVo.getSellTime(); String sellTime = performanceVo.getSellTime();
LocalDateTime sellTimeLocal = LocalDateTime.parse(sellTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); LocalDateTime sellTimeLocal = LocalDateTime.parse(sellTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
...@@ -85,56 +94,45 @@ public class SweetWechatTemplateServiceImpl { ...@@ -85,56 +94,45 @@ public class SweetWechatTemplateServiceImpl {
if (1 == DateUtil.compareStrDay(nowTimeStr, stopSellTime)) { // 超过售卖期 不推 删redis if (1 == DateUtil.compareStrDay(nowTimeStr, stopSellTime)) { // 超过售卖期 不推 删redis
log.info("超过售卖期:[nowTimeStr=[{}], [stopSellTime=[{}]", log.info("超过售卖期:[nowTimeStr=[{}], [stopSellTime=[{}]",
nowTimeStr, stopSellTime); nowTimeStr, stopSellTime);
redisDataUtils.delSweetRemind(remindInfo.getUnionId()); remindIdList.add(remindId);
// redisDataUtils.delSweetRemind(remindInfo.getUnionId());
continue; continue;
} }
if (-1 == DateUtil.compareStrDay(nowTimeStr, sellTimeLocalNewStr)) { // 还没到售卖期 if (-1 == DateUtil.compareStrDay(nowTimeStr, sellTimeLocalNewStr)) { // 还没到售卖期
log.info("还没到售卖期:[nowTimeStr=[{}], [sellTimeLocalNewStr=[{}]", log.info("还没到售卖期:[nowTimeStr=[{}], [sellTimeLocalNewStr=[{}]",
nowTimeStr, sellTimeLocalNewStr); nowTimeStr, sellTimeLocalNewStr);
continue; continue;
} }
// 发送模板消息接口 // 发送模板消息接口
WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder() WxMpTemplateMessage templateMessage = getTemplateMessage(templateId, sweetWechatUser.getOpenId(), h5Url.concat("/#/ticket/detail?id=").concat(remindInfo.getPerformancesId()));
// 接收者openid
.toUser(sweetWechatUser.getOpenId())
// 模板id
.templateId(templateId)
// 模板跳转链接
.url(h5Url.concat("/#/ticket/detail?id=").concat(remindInfo.getPerformancesId()))
.build();
// 添加模板数据 // 添加模板数据
templateMessage.addData(new WxMpTemplateData("first", "您关注的演出即将开始售票")) templateMessage.addData(new WxMpTemplateData("first", "您关注的演出即将开始售票"))
.addData(new WxMpTemplateData("keyword1", performanceVo.getTitle())) .addData(new WxMpTemplateData("keyword1", performanceVo.getTitle()))
.addData(new WxMpTemplateData("keyword2", kylinTicketTimesVo.getTitle())) .addData(new WxMpTemplateData("keyword2", kylinTicketTimesVo.getTitle()))
.addData(new WxMpTemplateData("keyword3", performanceVo.getFieldName())) .addData(new WxMpTemplateData("keyword3", performanceVo.getFieldName()))
.addData(new WxMpTemplateData("remark", "点击这里跳转购票")); .addData(new WxMpTemplateData("remark", "点击这里跳转购票"));
String msgId = null; String msgId = sendTmpMsg(templateMessage);
try { if (null != msgId) {
// 发送模板消息 remindIdList.add(remindId);
WxMpConfigStorage wxMpConfig = wxMpConfig(appid, secret);
WxMpService wxMpService = wxMpService(wxMpConfig);
msgId = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
if (null != msgId) {
redisDataUtils.delSweetRemind(remindInfo.getUnionId());
}
} catch (WxErrorException e) {
log.error("小程序演出提醒消息发送异常", e);
} }
log.info("发送成功:[msgId=[{}]", msgId);
} catch (Exception e) { } catch (Exception e) {
log.error("小程序演出提醒消息处理异常", e); log.error("小程序演出提醒消息处理异常", e);
} }
} }
if (!CollectionUtils.isEmpty(remindIdList)) {
SweetRemind remindUpdate = SweetRemind.getNew();
remindUpdate.setIsPush(2);
remindUpdate.setUpdatedAt(LocalDateTime.now());
sweetRemindMapper.update(
remindUpdate,
Wrappers.lambdaUpdate(SweetRemind.class)
.in(SweetRemind::getRemindId, remindIdList)
);
}
} }
return ResponseDto.success(); return ResponseDto.success();
} }
public ResponseDto sendMsg() {
String templateId = "CNLDBZYQoDgTWudicx8WU81Jr9b6RyG9hmK4O0tpK-k";
return send(templateId);
}
public void subscribeSend(SweetWechatUser sweetWechatUser) { public void subscribeSend(SweetWechatUser sweetWechatUser) {
String templateId = "y-j82V1TYhlTH1j8QscuDPcPQtNiDtENb7N5IZMBvqU"; String templateId = "y-j82V1TYhlTH1j8QscuDPcPQtNiDtENb7N5IZMBvqU";
try { try {
...@@ -152,6 +150,7 @@ public class SweetWechatTemplateServiceImpl { ...@@ -152,6 +150,7 @@ public class SweetWechatTemplateServiceImpl {
/** /**
* 获取templateMessage * 获取templateMessage
*
* @param templateId * @param templateId
* @param openId * @param openId
* @param url * @param url
...@@ -171,6 +170,7 @@ public class SweetWechatTemplateServiceImpl { ...@@ -171,6 +170,7 @@ public class SweetWechatTemplateServiceImpl {
/** /**
* 发送消息 * 发送消息
*
* @param templateMessage * @param templateMessage
* @return * @return
*/ */
...@@ -181,6 +181,7 @@ public class SweetWechatTemplateServiceImpl { ...@@ -181,6 +181,7 @@ public class SweetWechatTemplateServiceImpl {
WxMpConfigStorage wxMpConfig = wxMpConfig(appid, secret); WxMpConfigStorage wxMpConfig = wxMpConfig(appid, secret);
WxMpService wxMpService = wxMpService(wxMpConfig); WxMpService wxMpService = wxMpService(wxMpConfig);
msgId = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage); msgId = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
log.info("发送成功:[msgId=[{}]", msgId);
} catch (WxErrorException e) { } catch (WxErrorException e) {
log.error("模版消息发送异常", e); log.error("模版消息发送异常", e);
} }
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.liquidnet.service.sweet.mapper.SweetRemindMapper">
</mapper>
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