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

Commit 604ebc72 authored by zhoujianping's avatar zhoujianping

1.预约提醒重构

parent f5ad5b66
......@@ -91,7 +91,7 @@ public class KylinRedisConst {
public static final String REDIS_KEY_KYLIN_PERFORM_SUBSCRIBE = "kylin:performSubscribe:uid:";
public static final String REDIS_KEY_KYLIN_PERFORMANCE_SUBSCRIBE = "kylin:performance:subscribe:"; //演出预约
public static final String REDIS_KEY_KYLIN_PERFORMANCE_SUBSCRIBE_TICKETS = "kylin:performance:subscribe:tickets";//演出票种预约
public static final String REDIS_KEY_KYLIN_PERFORMANCE_SUBSCRIBE_LIST = "kylin:performance:subscribe:list"; //预约列表
public static final String REDIS_KEY_KYLIN_PERFORMANCE_SUBSCRIBE_READ = "kylin:performance:subscribe:read"; //预约列表是否已读
......
......@@ -6,10 +6,12 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.scheduling.support.SimpleTriggerContext;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
/**
* @author zjp
......@@ -45,4 +47,9 @@ public class KylinPerformanceSubscribeParam implements Serializable {
@ApiModelProperty(position = 10,value = "演出图片")
@NotBlank(message = "演出图片不能为空")
private String imgPoster;
@ApiModelProperty(position = 11,value = "会员提前分钟")
private Integer advanceMinuteMember;
@ApiModelProperty(position = 12,value = "本场场次全部的票种id")
private List<String> ticketsIds;
}
......@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.time.LocalDateTime;
......@@ -49,5 +50,7 @@ public class KylinPerformanceSubscribeUpushVo implements Serializable, Cloneable
@ApiModelProperty(value = "场次id")
private String ticketTimesId;
@ApiModelProperty(position = 5,value = "票种id")
private String ticketsId;
}
......@@ -50,7 +50,15 @@ public interface IKylinPerformancesService {
* @return: com.liquidnet.service.base.ResponseDto<java.lang.Integer>
* @date 2024/3/6 14:45
*/
ResponseDto<Integer> performanceIsSubscribe(String performancesId,String ticketTimesId);
void deleteIsSubscribe(String performancesId,String ticketTimesId);
ResponseDto<Integer> performanceIsSubscribe(String performancesId,String ticketTimesId,String ticketsId);
/*
* @description:删除预约演出票种
* @author: zjp
* @date: 2024/5/15 14:10
* @param:
* @return:
**/
void deleteIsSubscribe(String performancesId,String ticketTimesId,String ticketsId);
}
......@@ -34,24 +34,28 @@ public class KylinPerformanceSubscribeController {
return iKylinPerformancesService.performanceSubscribe(request,param);
}
@GetMapping("")
@ApiOperation("是否预约演出")
@ApiOperation("是否预约演出票种")
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "performancesId", value = "演出id", required = true),
@ApiImplicitParam(type = "query", dataType = "String", name = "ticketTimesId", value = "场次id", required = true),
@ApiImplicitParam(type = "query", dataType = "String", name = "ticketsId", value = "票种id", required = true),
})
public ResponseDto<Integer> isSubscribe(@RequestParam("performancesId") String performancesId,
@RequestParam("ticketTimesId") String ticketTimesId) {
return iKylinPerformancesService.performanceIsSubscribe(performancesId, ticketTimesId);
@RequestParam("ticketTimesId") String ticketTimesId,
@RequestParam("ticketsId") String ticketsId) {
return iKylinPerformancesService.performanceIsSubscribe(performancesId, ticketTimesId,ticketsId);
}
@DeleteMapping("")
@ApiOperation("删除演出预约")
@ApiOperation("删除预约演出票种")
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "performancesId", value = "演出id", required = true),
@ApiImplicitParam(type = "query", dataType = "String", name = "ticketTimesId", value = "场次id", required = true),
@ApiImplicitParam(type = "query", dataType = "String", name = "ticketsId", value = "票种id", required = true),
})
public ResponseDto deleteIsSubscribe(@RequestParam("performancesId") String performancesId,
@RequestParam("ticketTimesId") String ticketTimesId) {
iKylinPerformancesService.deleteIsSubscribe(performancesId, ticketTimesId);
@RequestParam("ticketTimesId") String ticketTimesId,
@RequestParam("ticketsId") String ticketsId) {
iKylinPerformancesService.deleteIsSubscribe(performancesId, ticketTimesId,ticketsId);
return ResponseDto.success();
}
......
......@@ -56,6 +56,7 @@ import org.springframework.util.MultiValueMap;
import javax.servlet.http.HttpServletRequest;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
......@@ -304,17 +305,8 @@ public class KylinPerformancesServiceImpl implements IKylinPerformancesService {
log.info(UserPathDto.setData("演出详情", "performancesId=" + performancesId + " latitudeFrom=" + latitudeFrom + " longitudeFrom=" + longitudeFrom, performancesInfo));
//判断当前用户是否预约演出
if(!StringUtils.isEmpty(uid)){
List<KylinTicketTimesVo> ticketTimeList = performancesInfo.getTicketTimeList();
if(!CollectionUtils.isEmpty(ticketTimeList)){
for (KylinTicketTimesVo kylinTicketTimesVo : ticketTimeList) {
//判断当前用户是否预约演出
Integer performanceSubscribe = dataUtils.getPerformanceSubscribe(uid, performancesInfo.getPerformancesId(), kylinTicketTimesVo.getTicketTimesId());
if(performanceSubscribe==1){
performancesInfo.setIsSubscribe(1);
}
}
}
if (!StringUtils.isEmpty(uid)) {
performancesInfo.setIsSubscribe(dataUtils.getPerformanceSubscribe(uid, performancesInfo.getPerformancesId()));
}
return performancesInfo;
}
......@@ -656,7 +648,10 @@ public class KylinPerformancesServiceImpl implements IKylinPerformancesService {
String sellTime = info.getSellTime();
if (1 == DateUtil.compareStrDay(sellTime, nowTimeStr)) {// 未开始
info.setAppStatus(9);
int isMemberStatus = getPerformanceIsMemberStatus(info);
//老判断 不根据用户会员做判断
//int isMemberStatus = getPerformanceIsMemberStatus(info);
//新判断 根据用户会员做判断
int isMemberStatus = getPerformanceIsMemberStatusByIsMember(info,CurrentUtil.getCurrentUid());
if (1 == isMemberStatus) {
info.setAppStatus(6);
}
......@@ -758,7 +753,32 @@ public class KylinPerformancesServiceImpl implements IKylinPerformancesService {
}
return isMemberStatus;
}
// 会员状态
public Integer getPerformanceIsMemberStatusByIsMember(KylinPerformanceVo info,String uid) {
Integer isMemberStatus = 0;
if (null != info) {
if (1 == info.getIsMember()) { // 有会员
//会员开售时间
String memberTimeStart = info.getSellMemberTime();
if(StringUtils.isNotEmpty(uid)){
Integer memberByUser = dataUtils.isMemberByUser(uid);
if(memberByUser==0){
//普通开售时间
memberTimeStart=info.getSellTime();
}
}
String nowTime = DateUtil.getNowTime();
if (1 == DateUtil.compareStrDay(memberTimeStart, nowTime)) { // 还没到会员购买时间
isMemberStatus = 0;
} else { // 可以购买
isMemberStatus = 1;
}
} else {
isMemberStatus = 0;
}
}
return isMemberStatus;
}
/**
* 获取我的已购票演出列表
*
......@@ -852,14 +872,36 @@ public class KylinPerformancesServiceImpl implements IKylinPerformancesService {
String source = request.getHeader("source");
String uid = CurrentUtil.getCurrentUid();
// 避免重复预约
Integer performanceSubscribe = dataUtils.getPerformanceSubscribe(uid, param.getPerformancesId(), param.getTicketTimesId());
Integer performanceSubscribe = dataUtils.getPerformanceTicketsSubscribe(uid, param.getPerformancesId(), param.getTicketTimesId(),param.getTicketsId());
if (performanceSubscribe != 1) {
//先删除其他票种预约信息
List<String> ticketsIds = param.getTicketsIds();
if(!CollectionUtils.isEmpty(ticketsIds)){
ticketsIds.forEach(iter->{
dataUtils.deleteIsSubscribe(uid,param.getPerformancesId(), param.getTicketTimesId(),iter);
});
}
//删除预约记录
queueUtils.sendMsgByRedis(
MQConst.KylinQueue.SQL_PERFORMANCE_SUBSCRIBE.getKey(),
SqlMapping.get(
"kylin_performance_subscribe.delete",
new Object[]{
param.getPerformancesId(), param.getTicketTimesId()
}
));
// 计算过期时间 演出结束时间-当前时间
long expirationTime = DateUtil.intervalSeconds(DateUtil.parse(DateUtil.format(param.getTimeEnd(), DateUtil.Formatter.yyyyMMddHHmmss), DateUtil.DATE_FULL_STR), DateUtil.now());
// 计算通知时间 演出开始时间-10分钟
LocalDateTime timeStart = param.getTimeStart();
LocalDateTime localDateTime = timeStart.minusMinutes(10);
String pushTime = DateUtil.format(localDateTime, DateUtil.Formatter.yyyyMMddHHmmss);
//票种预约
dataUtils.setPerformanceTicketsSubscribe(uid, param.getPerformancesId(), param.getTicketTimesId(),param.getTicketsId(),expirationTime);
//本场演出预约
dataUtils.setPerformanceSubscribe(uid, param.getPerformancesId(),expirationTime);
//push推送内容
String title=param.getPerformancesTitle()+DateUtil.format(timeStart, DateUtil.Formatter.yyyyMMddHHmmss)+"即将开票,登登登提前"+param.getAdvanceMinuteMember()+"分钟开抢";
// 记录预约信息
queueUtils.sendMsgByRedis(
MQConst.KylinQueue.SQL_PERFORMANCE_SUBSCRIBE.getKey(),
......@@ -867,15 +909,13 @@ public class KylinPerformancesServiceImpl implements IKylinPerformancesService {
"kylin_performance_subscribe.insert",
new Object[]{
param.getPerformancesId(), param.getTicketTimesId(), param.getTicketsId(), uid,KylinTableStatusConst.SubscribeTypeEnum.TYPE1.getKey(),param.getDeviceTokens(),
source,pushTime,param.getPerformancesTitle(),0
source,pushTime,title,0
}
));
// 演出预约
dataUtils.setPerformanceSubscribe(uid, param.getPerformancesId(), param.getTicketTimesId(), expirationTime);
));
//redis 用户开票提醒列表
KylinPerformanceSubscribeUpushVo kylinPerformanceSubscribeUpushVo = new KylinPerformanceSubscribeUpushVo();
kylinPerformanceSubscribeUpushVo.setPushTitle(param.getPerformancesTitle());
kylinPerformanceSubscribeUpushVo.setPushContent(param.getPerformancesTitle()+",10分钟后即将开售,请点击进入详情页购买。");
kylinPerformanceSubscribeUpushVo.setPushContent(title);
kylinPerformanceSubscribeUpushVo.setImg(param.getImgPoster());
kylinPerformanceSubscribeUpushVo.setJumpType(6);
kylinPerformanceSubscribeUpushVo.setJumpValue(param.getPerformancesId());
......@@ -884,8 +924,17 @@ public class KylinPerformancesServiceImpl implements IKylinPerformancesService {
kylinPerformanceSubscribeUpushVo.setType(KylinTableStatusConst.SubscribeTypeEnum.TYPE1.getKey());
kylinPerformanceSubscribeUpushVo.setPerformancesId(param.getPerformancesId());
kylinPerformanceSubscribeUpushVo.setTicketTimesId(param.getTicketTimesId());
kylinPerformanceSubscribeUpushVo.setTicketsId(param.getTicketsId());
//开票提醒最多存20条数据
LinkedList<KylinPerformanceSubscribeUpushVo> performanceSubscribeList = dataUtils.getPerformanceSubscribeList(uid);
//删除其他票种的消息提醒
for (Iterator<KylinPerformanceSubscribeUpushVo> it = performanceSubscribeList.iterator(); it.hasNext(); ) {
KylinPerformanceSubscribeUpushVo info = it.next();
if(info.getPerformancesId().equals(param.getPerformancesId()) && info.getTicketTimesId().equals(param.getTicketTimesId())){
//移除
it.remove();
}
}
if(performanceSubscribeList.size()>=20){
KylinPerformanceSubscribeUpushVo last = performanceSubscribeList.getLast();
//删除redis中已读信息
......@@ -909,17 +958,17 @@ public class KylinPerformancesServiceImpl implements IKylinPerformancesService {
}
@Override
public ResponseDto<Integer> performanceIsSubscribe(String performancesId, String ticketTimesId) {
public ResponseDto<Integer> performanceIsSubscribe(String performancesId, String ticketTimesId,String ticketsId ) {
String uid = CurrentUtil.getCurrentUid();
Integer performanceSubscribe = dataUtils.getPerformanceSubscribe(uid, performancesId, ticketTimesId);
Integer performanceSubscribe = dataUtils.getPerformanceTicketsSubscribe(uid, performancesId, ticketTimesId,ticketsId);
return ResponseDto.success(performanceSubscribe);
}
@Override
public void deleteIsSubscribe(String performancesId, String ticketTimesId) {
public void deleteIsSubscribe(String performancesId, String ticketTimesId,String ticketsId) {
String uid = CurrentUtil.getCurrentUid();
//删除预约提醒
dataUtils.deleteIsSubscribe(uid,performancesId,ticketTimesId);
dataUtils.deleteIsSubscribe(uid,performancesId,ticketTimesId,ticketsId);
//删除已读
dataUtils.deleteIsSubscribeRead(uid,performancesId,ticketTimesId);
}
......
......@@ -3,6 +3,9 @@ package com.liquidnet.service.kylin.utils;
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.service.adam.constant.AdamRedisConst;
import com.liquidnet.service.adam.dto.vo.AdamMemberVo;
import com.liquidnet.service.adam.dto.vo.AdamUserMemberVo;
import com.liquidnet.service.goblin.constant.GoblinRedisConst;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinGoodsAnticipateValueVo;
import com.liquidnet.service.goblin.dto.vo.*;
......@@ -1447,13 +1450,13 @@ public class DataUtils {
return (List<String>) obj;
}
}
public void setPerformanceSubscribe(String uid,String performancesId,String ticketTimesId,long expirationTime) {
String redisKey=getPerformanceSubscribeKey(uid,performancesId,ticketTimesId);
public void setPerformanceTicketsSubscribe(String uid,String performancesId,String ticketTimesId,String ticketsId,long expirationTime) {
String redisKey=getPerformanceTicketsSubscribeKey(uid,performancesId,ticketTimesId,ticketsId);
redisUtil.set(redisKey, 1,expirationTime);
}
public Integer getPerformanceSubscribe(String uid,String performancesId,String ticketTimesId) {
String redisKey=getPerformanceSubscribeKey(uid,performancesId,ticketTimesId);
public Integer getPerformanceTicketsSubscribe(String uid,String performancesId,String ticketTimesId,String ticketsId) {
String redisKey=getPerformanceTicketsSubscribeKey(uid,performancesId,ticketTimesId,ticketsId);
Object obj = redisUtil.get(redisKey);
if (obj == null) {
return 0;
......@@ -1461,18 +1464,43 @@ public class DataUtils {
return (Integer) obj;
}
}
public void setPerformanceSubscribe(String uid,String performancesId,long expirationTime) {
String redisKey=getPerformanceSubscribeKey(uid,performancesId);
redisUtil.set(redisKey, 1,expirationTime);
}
public Integer getPerformanceSubscribe(String uid,String performancesId) {
String redisKey=getPerformanceSubscribeKey(uid,performancesId);
Object obj = redisUtil.get(redisKey);
if (obj == null) {
return 0;
} else {
return (Integer) obj;
}
}
public void deleteIsSubscribe(String uid,String performancesId,String ticketTimesId){
String redisKey=getPerformanceSubscribeKey(uid,performancesId,ticketTimesId);
public void deleteIsSubscribe(String uid,String performancesId,String ticketTimesId,String ticketsId){
String redisKey=getPerformanceTicketsSubscribeKey(uid,performancesId,ticketTimesId,ticketsId);
redisUtil.del(redisKey);
}
private String getPerformanceSubscribeKey(String uid,String performancesId,String ticketTimesId){
String redisKey = KylinRedisConst.REDIS_KEY_KYLIN_PERFORMANCE_SUBSCRIBE
private String getPerformanceTicketsSubscribeKey(String uid,String performancesId,String ticketTimesId,String ticketsId){
String redisKey = KylinRedisConst.REDIS_KEY_KYLIN_PERFORMANCE_SUBSCRIBE_TICKETS
.concat(uid)
.concat(":")
.concat(performancesId)
.concat(":")
.concat(ticketTimesId);
.concat(ticketTimesId)
.concat(":")
.concat(ticketsId);
return redisKey;
}
private String getPerformanceSubscribeKey(String uid,String performancesId){
String redisKey = KylinRedisConst.REDIS_KEY_KYLIN_PERFORMANCE_SUBSCRIBE
.concat(uid)
.concat(":")
.concat(performancesId);
return redisKey;
}
public void setPerformanceSubscribeList(String uid, LinkedList<KylinPerformanceSubscribeUpushVo> list) {
......@@ -1535,4 +1563,27 @@ public class DataUtils {
public int incrOrderRefundCode(String orderCode) {
return (int) redisUtil.incr(KylinRedisConst.ORDER_REFUND_TEMP + orderCode,1);
}
//判断是否是会员
public Integer isMemberByUser(String uid) {
Integer isMember=0;
AdamUserMemberVo userMemberVo = getUserMemberVoByUid(uid);
if (null!=isMember && userMemberVo.isActive()){
isMember=1;
}
return isMember;
}
//获取用户信息
public AdamUserMemberVo getUserMemberVoByUid(String uid) {
String rk = AdamRedisConst.INFO_USER_MEMBER.concat(uid);
long s = System.currentTimeMillis();
AdamUserMemberVo vo = (AdamUserMemberVo) redisUtil.get(rk);
if (null != vo) {
vo.setState(vo.getState() == 1 ? (vo.getExpiryAt().isAfter(LocalDateTime.now()) ? 1 : 2) : vo.getState());
}
log.debug("#RDM耗时:{}ms", System.currentTimeMillis() - s);
return vo;
}
}
......@@ -41,4 +41,5 @@ kylin_ar_ticket.update =update kylin_ticket_active set state=?,redeem_uid= ?,red
kylin_order_ticket_entities.update_status_bystation_pad=UPDATE kylin_order_ticket_entities SET `status`=?,check_client=?,updated_at=?, comment=? WHERE order_ticket_entities_id=?
# ------------------------ \u6F14\u51FA\u9884\u7EA6 ----------------------------
kylin_performance_subscribe.insert=INSERT INTO kylin_performance_subscribe(performance_id,ticket_times_id,tickets_id,user_id,type,device_tokens,push_range,push_time,push_title,is_push)VALUES(?,?,?,?,?,?,?,?,?,?)
\ No newline at end of file
kylin_performance_subscribe.insert=INSERT INTO kylin_performance_subscribe(performance_id,ticket_times_id,tickets_id,user_id,type,device_tokens,push_range,push_time,push_title,is_push)VALUES(?,?,?,?,?,?,?,?,?,?)
kylin_performance_subscribe.delete=DELETE FROM kylin_performance_subscribe WHERE performance_id= ? and ticket_times_id = ?;
\ No newline at end of file
......@@ -556,7 +556,7 @@ public class PerformanceVoTask {
unicast.setBadge(1);
unicast.setTicker("【正在现场】开票提醒");
unicast.setTitle("【正在现场】开票提醒");
unicast.setText(pushTitle+",10分钟后即将开售,请点击进入详情页购买。");
unicast.setText(pushTitle);
String custom = UpushTargetType.getTypeAction(jumpType);
unicast.goCustomAfterOpen(custom);
unicast.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION);
......@@ -588,7 +588,7 @@ public class PerformanceVoTask {
try {
IOSUnicast unicast = new IOSUnicast(iosAppkey, iosAppMasterSecret);
//alert的值设置为字典
unicast.setAlert("【正在现场】开票提醒", "", pushTitle+",10分钟后即将开售,请点击进入详情页购买。");
unicast.setAlert("【正在现场】开票提醒", "", pushTitle);
unicast.setBadge(1);
unicast.setSound("default");
if (!LnsEnum.ENV.prod.name().equals(environment.getProperty(CurrentUtil.CK_ENV_ACTIVE))) {
......
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