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

Commit d3c7b41d authored by Administrator's avatar Administrator 🎨

Merge branch 'test' into 'master'

Test

See merge request !8
parents 6db63fa4 db23a2c8
......@@ -125,6 +125,16 @@ public abstract class DateUtil {
return new Date(c.getTimeInMillis());
}
/**
* 计算日期,增加分支
*/
public static Date addMin(Date date, int months) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.MINUTE, c.get(Calendar.MINUTE) + months);
return new Date(c.getTimeInMillis());
}
/**
* 计算日期,增加天数
*
......
......@@ -13,9 +13,9 @@ liquidnet:
file-max-size: 200MB
level: debug
mysql:
database-name: dev_ln_scene
database-name: test_ln_scene
mongodb:
sslEnabled: false
database: dev_ln_scene
database: test_ln_scene
#以下为spring各环境个性配置
......@@ -26,6 +26,12 @@ public class SweetManualAppletDto implements Serializable ,Cloneable{
private String timeStart;
@ApiModelProperty("演出结束时间")
private String timeEnd;
@ApiModelProperty("演出开售时间")
private String timeSell;
@ApiModelProperty("是否会员")
private Integer isMember;
@ApiModelProperty("提前时间")
private Integer payCountdownMinute;
@ApiModelProperty("经度")
private String longitude;
......
......@@ -25,6 +25,13 @@ public class SweetManualAppletMDSKDto implements Serializable ,Cloneable{
private String timeStart;
@ApiModelProperty("演出结束时间")
private String timeEnd;
@ApiModelProperty("演出开售时间")
private String timeSell;
@ApiModelProperty("是否会员")
private Integer isMember;
@ApiModelProperty("提前时间")
private Integer payCountdownMinute;
@ApiModelProperty("经度")
private String longitude;
......
......@@ -10,6 +10,7 @@ import com.liquidnet.service.sweet.constant.SweetConstant;
import com.liquidnet.service.sweet.entity.SweetWechatUser;
import com.liquidnet.service.sweet.utils.RedisDataUtils;
import com.liquidnet.service.sweet.vo.SweetRemindVo;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
......@@ -24,6 +25,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Set;
/**
......@@ -34,6 +36,7 @@ import java.util.Set;
* @author liquidnet
* @since 2021-07-27
*/
@Slf4j
@Service
public class SweetWechatTemplateServiceImpl {
......@@ -56,53 +59,72 @@ public class SweetWechatTemplateServiceImpl {
Set<String> keys = redisTemplate.keys(redisKey);
if (!CollectionUtils.isEmpty(keys)) {
for (String rkey : keys) {
SweetRemindVo remindInfo = (SweetRemindVo) redisUtil.get(rkey);
SweetWechatUser sweetWechatUser = redisDataUtils.getSweetWechatUser(remindInfo.getUnionId());
KylinPerformanceVo performanceVo = (KylinPerformanceVo) redisUtil.get(KylinRedisConst.PERFORMANCES.concat(remindInfo.getPerformancesId()));
KylinTicketTimesVo kylinTicketTimesVo = performanceVo.getTicketTimeList().get(0);
if (null == sweetWechatUser || null == performanceVo) {
continue;
}
LocalDateTime nowTime = LocalDateTime.now();
LocalDateTime newNowTime = nowTime.minusMinutes(5);
String nowTimeStr = DateUtil.Formatter.yyyyMMddHHmmss.format(newNowTime);
String sellTime = performanceVo.getSellTime();
String stopSellTime = performanceVo.getStopSellTime();
if (1 == DateUtil.compareStrDay(nowTimeStr, stopSellTime)) { // 超过售卖期 不推 删redis
redisDataUtils.delSweetRemind(remindInfo.getUnionId());
continue;
}
if (-1 == DateUtil.compareStrDay(nowTimeStr, sellTime)) { // 还没到售卖期
continue;
}
// 发送模板消息接口
WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
// 接收者openid
.toUser(sweetWechatUser.getOpenId())
// 模板id
.templateId(templateId)
// 模板跳转链接
.url(h5Url.concat("/#/ticket/detail?id=").concat(remindInfo.getPerformancesId()))
.build();
// 添加模板数据
templateMessage.addData(new WxMpTemplateData("first", "您关注的演出即将开始售票"))
.addData(new WxMpTemplateData("keyword1", performanceVo.getTitle()))
.addData(new WxMpTemplateData("keyword2", kylinTicketTimesVo.getTitle()))
.addData(new WxMpTemplateData("keyword3", performanceVo.getFieldName()))
.addData(new WxMpTemplateData("remark", "点击这里跳转购票"));
String msgId = null;
try {
// 发送模板消息
WxMpConfigStorage wxMpConfig = wxMpConfig(appid, secret);
WxMpService wxMpService = wxMpService(wxMpConfig);
msgId = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
if (null != msgId) {
SweetRemindVo remindInfo = (SweetRemindVo) redisUtil.get(rkey);
SweetWechatUser sweetWechatUser = redisDataUtils.getSweetWechatUser(remindInfo.getUnionId());
KylinPerformanceVo performanceVo = (KylinPerformanceVo) redisUtil.get(KylinRedisConst.PERFORMANCES.concat(remindInfo.getPerformancesId()));
if (null == sweetWechatUser) {
log.info("无用户数据:[UnionId=[{}]", remindInfo.getUnionId());
continue;
}
if (null == performanceVo) {
log.info("无演出数据:[getPerformancesId=[{}]", remindInfo.getPerformancesId());
continue;
}
KylinTicketTimesVo kylinTicketTimesVo = performanceVo.getTicketTimeList().get(0);
LocalDateTime nowTime = LocalDateTime.now();
// LocalDateTime newNowTime = nowTime.minusMinutes(5);
String nowTimeStr = DateUtil.Formatter.yyyyMMddHHmmss.format(nowTime);
String sellTime = performanceVo.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 = performanceVo.getStopSellTime();
if (1 == DateUtil.compareStrDay(nowTimeStr, stopSellTime)) { // 超过售卖期 不推 删redis
log.info("超过售卖期:[nowTimeStr=[{}], [stopSellTime=[{}]",
nowTimeStr, stopSellTime);
redisDataUtils.delSweetRemind(remindInfo.getUnionId());
continue;
}
if (-1 == DateUtil.compareStrDay(nowTimeStr, sellTimeLocalNewStr)) { // 还没到售卖期
log.info("还没到售卖期:[nowTimeStr=[{}], [sellTimeLocalNewStr=[{}]",
nowTimeStr, sellTimeLocalNewStr);
continue;
}
// 发送模板消息接口
WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
// 接收者openid
.toUser(sweetWechatUser.getOpenId())
// 模板id
.templateId(templateId)
// 模板跳转链接
.url(h5Url.concat("/#/ticket/detail?id=").concat(remindInfo.getPerformancesId()))
.build();
// 添加模板数据
templateMessage.addData(new WxMpTemplateData("first", "您关注的演出即将开始售票"))
.addData(new WxMpTemplateData("keyword1", performanceVo.getTitle()))
.addData(new WxMpTemplateData("keyword2", kylinTicketTimesVo.getTitle()))
.addData(new WxMpTemplateData("keyword3", performanceVo.getFieldName()))
.addData(new WxMpTemplateData("remark", "点击这里跳转购票"));
String msgId = null;
try {
// 发送模板消息
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);
}
} catch (WxErrorException e) {
e.printStackTrace();
log.info("发送成功:[msgId=[{}]", msgId);
} catch (Exception e) {
log.error("小程序演出提醒消息处理异常", e);
}
System.out.println(msgId);
}
}
return ResponseDto.success();
......
......@@ -50,6 +50,9 @@ public class RedisDataUtils {
String redisKey = SweetConstant.REDIS_KEY_SWEET_MANUAL_PUSH_LIST;
List<SweetManualAppletDto> data = sweetManualMapper.getManualAppletDto();
for (SweetManualAppletDto item : data) {
if(!item.getIsMember().equals(1)){
item.setTimeSell(DateUtil.format(DateUtil.addMin(DateUtil.parse(item.getTimeSell(),"yyyy-MM-dd HH:mm:ss"),item.getPayCountdownMinute()),DateUtil.Formatter.yyyyMMddHHmmss));
}
item.setFieldName((String) redisUtil.hget("kylin:fields:id" + ":" + item.getFieldId(), "name"));
item.setCityName((String) redisUtil.hget("kylin:fields:id" + ":" + item.getFieldId(), "city_name"));
item.setLatitude((String) redisUtil.hget("kylin:fields:id" + ":" + item.getFieldId(), "latitude"));
......
......@@ -45,6 +45,9 @@ public class RedisMDSKDataUtils {
String redisKey = SweetConstant.REDIS_KEY_SWEET_MDSK_MANUAL_PUSH_LIST;
List<SweetManualAppletMDSKDto> data = sweetManualMdskMapper.getManualAppletDto();
for (SweetManualAppletMDSKDto item : data) {
if(!item.getIsMember().equals(1)){
item.setTimeSell(DateUtil.format(DateUtil.addMin(DateUtil.parse(item.getTimeSell(),"yyyy-MM-dd HH:mm:ss"),-item.getPayCountdownMinute()),DateUtil.Formatter.yyyyMMddHHmmss));
}
item.setFieldName((String) redisUtil.hget("kylin:fields:id" + ":" + item.getFieldId(), "name"));
item.setCityName((String) redisUtil.hget("kylin:fields:id" + ":" + item.getFieldId(), "city_name"));
item.setLatitude((String) redisUtil.hget("kylin:fields:id" + ":" + item.getFieldId(), "latitude"));
......
......@@ -32,6 +32,9 @@
<result column="field_id" property="fieldId"/>
<result column="time_start" property="timeStart"/>
<result column="time_end" property="timeEnd"/>
<result column="time_sell" property="timeSell"/>
<result column="pay_countdown_minute" property="payCountdownMinute"/>
<result column="is_member" property="isMember"/>
</resultMap>
<!-- 电子手册列表 -->
......@@ -130,7 +133,10 @@
p.title ,
pr.field_id ,
p.time_start ,
p.time_end
p.time_end,
t1.time_sell,
t1.pay_countdown_minute,
t1.is_member
FROM
kylin_performances AS p
LEFT JOIN kylin_performance_status AS ps ON p.performances_id = ps.performance_id
......@@ -153,6 +159,28 @@
LEFT JOIN kylin_ticket_time_relation AS ttr ON tr.times_id = ttr.times_id
GROUP BY
ttr.performance_id
) AS t ON p.performances_id = t.performance_id where sm.`status` = 1 and sm.is_release = 1
) AS t ON p.performances_id = t.performance_id
LEFT JOIN(
SELECT
ttr.performance_id ,
ts.is_member,
pay_countdown_minute,
sum(ts.total_general) AS 'total_general' ,
MIN(
DATE_SUB(
t.time_start ,
INTERVAL pay_countdown_minute MINUTE
)
) AS 'time_sell' ,
MAX(t.time_end) AS 'time_stop'
FROM
kylin_ticket_status AS ts
LEFT JOIN kylin_ticket_relations AS tr ON tr.ticket_id = ts.ticket_id
LEFT JOIN kylin_tickets AS t ON t.tickets_id = ts.ticket_id
LEFT JOIN kylin_ticket_time_relation AS ttr ON tr.times_id = ttr.times_id
GROUP BY
ttr.performance_id
) AS t1 ON p.performances_id = t1.performance_id
where sm.`status` = 1 and sm.is_release = 1
</select>
</mapper>
......@@ -32,6 +32,9 @@
<result column="field_id" property="fieldId"/>
<result column="time_start" property="timeStart"/>
<result column="time_end" property="timeEnd"/>
<result column="time_sell" property="timeSell"/>
<result column="pay_countdown_minute" property="payCountdownMinute"/>
<result column="is_member" property="isMember"/>
</resultMap>
<!-- 电子手册列表 -->
......@@ -130,7 +133,10 @@
p.title ,
pr.field_id ,
p.time_start ,
p.time_end
p.time_end,
t1.time_sell,
t1.pay_countdown_minute,
t1.is_member
FROM
kylin_performances AS p
LEFT JOIN kylin_performance_status AS ps ON p.performances_id = ps.performance_id
......@@ -153,7 +159,29 @@
LEFT JOIN kylin_ticket_time_relation AS ttr ON tr.times_id = ttr.times_id
GROUP BY
ttr.performance_id
) AS t ON p.performances_id = t.performance_id where sm.`status` = 1 and sm.is_release = 1
) AS t ON p.performances_id = t.performance_id
LEFT JOIN(
SELECT
ttr.performance_id ,
pay_countdown_minute,
ts.is_member,
sum(ts.total_general) AS 'total_general' ,
MIN(
DATE_SUB(
t.time_start ,
INTERVAL pay_countdown_minute MINUTE
)
) AS 'time_sell' ,
MAX(t.time_end) AS 'time_stop'
FROM
kylin_ticket_status AS ts
LEFT JOIN kylin_ticket_relations AS tr ON tr.ticket_id = ts.ticket_id
LEFT JOIN kylin_tickets AS t ON t.tickets_id = ts.ticket_id
LEFT JOIN kylin_ticket_time_relation AS ttr ON tr.times_id = ttr.times_id
GROUP BY
ttr.performance_id
) AS t1 ON p.performances_id = t1.performance_id
where sm.`status` = 1 and sm.is_release = 1
</select>
</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