提交 3f4b05f1 authored 作者: aiqingguo's avatar aiqingguo

司机积分定时任务

上级 871f57f9
package com.clx.performance.config;
import com.clx.performance.constant.RabbitKeyIntegralConstants;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
import java.util.Map;
/**
* @Author: aiqingguo
* @Description: 司机积分 MQ
* @Date: 2023-10-12 16:27:30
* @Version: 1.0
*/
@Configuration
public class RabbitOrderIntegralConfig {
@Bean
public DirectExchange integralDefaultExchange() {
return new DirectExchange(RabbitKeyIntegralConstants.DEFAULT_EXCHANGE);
}
@Bean
public Queue integralDefaultDelayQueue() {
Map<String, Object> params = new HashMap<>(8);
params.put("x-message-ttl", 15 * 60 * 1000);
params.put("x-max-length", 5000000);
params.put("x-dead-letter-exchange", RabbitKeyIntegralConstants.DEFAULT_EXCHANGE);
params.put("x-dead-letter-routing-key", RabbitKeyIntegralConstants.DEFAULT_DEAD_ROUTING_KEY);
return new Queue(RabbitKeyIntegralConstants.DEFAULT_DELAY_QUEUE, true, false, false, params);
}
@Bean
public Binding integralDefaultDelayQueueBinding() {
return BindingBuilder.bind(integralDefaultDelayQueue()).to(integralDefaultExchange()).with(RabbitKeyIntegralConstants.DEFAULT_DELAY_ROUTING_KEY);
}
@Bean
public Queue integralDefaultDeadQueue() {
return new Queue(RabbitKeyIntegralConstants.DEFAULT_DEAD_QUEUE);
}
@Bean
public Binding integralDefaultDeadQueueBinding() {
return BindingBuilder.bind(integralDefaultDeadQueue()).to(integralDefaultExchange()).with(RabbitKeyIntegralConstants.DEFAULT_DEAD_ROUTING_KEY);
}
/**
* 积分车辆新增
*/
@Bean
public Queue integralTruckAddQueue() {
return new Queue(RabbitKeyIntegralConstants.INTEGRAL_TRUCK_ADD_QUEUE);
}
@Bean
public Binding integralTruckAddQueueBinding() {
return BindingBuilder.bind(integralTruckAddQueue()).to(integralDefaultExchange()).with(RabbitKeyIntegralConstants.INTEGRAL_TRUCK_ADD_ROUTING_KEY);
}
/**
* 积分记录新增
*/
@Bean
public Queue integralRecordAddQueue() {
return new Queue(RabbitKeyIntegralConstants.INTEGRAL_RECORD_ADD_QUEUE);
}
@Bean
public Binding integralRecordAddQueueBinding() {
return BindingBuilder.bind(integralRecordAddQueue()).to(integralDefaultExchange()).with(RabbitKeyIntegralConstants.INTEGRAL_RECORD_ADD_ROUTING_KEY);
}
/**
* 下周车辆初始化
*/
@Bean
public Queue integralNextWeekTruckInitQueue() {
return new Queue(RabbitKeyIntegralConstants.INTEGRAL_NEXT_WEEK_TRUCK_INIT_QUEUE);
}
@Bean
public Binding integralNextWeekTruckInitQueueBinding() {
return BindingBuilder.bind(integralNextWeekTruckInitQueue()).to(integralDefaultExchange()).with(RabbitKeyIntegralConstants.INTEGRAL_NEXT_WEEK_TRUCK_INIT_ROUTING_KEY);
}
/**
* 车辆周统计
*/
@Bean
public Queue integralWeekTruckStatisticsQueue() {
Map<String, Object> params = new HashMap<>(8);
params.put("x-single-active-consumer", true);
return new Queue(RabbitKeyIntegralConstants.INTEGRAL_WEEK_TRUCK_STATISTICS_QUEUE, true, false, false, params);
}
@Bean
public Binding integralWeekTruckStatisticsQueueBinding() {
return BindingBuilder.bind(integralWeekTruckStatisticsQueue()).to(integralDefaultExchange()).with(RabbitKeyIntegralConstants.INTEGRAL_WEEK_TRUCK_STATISTICS_ROUTING_KEY);
}
/**
* 新手保护取消
*/
@Bean
public Queue integralNewTruckProtectionCancelQueue() {
return new Queue(RabbitKeyIntegralConstants.INTEGRAL_TRUCK_PROTECTION_CANCEL_QUEUE);
}
@Bean
public Binding integralNewTruckProtectionCancelQueueBinding() {
return BindingBuilder.bind(integralNewTruckProtectionCancelQueue()).to(integralDefaultExchange()).with(RabbitKeyIntegralConstants.INTEGRAL_TRUCK_PROTECTION_CANCEL_ROUTING_KEY);
}
/**
* 运单结束
*/
@Bean
public Queue integralOrderChildFinishQueue() {
Map<String, Object> params = new HashMap<>(8);
params.put("x-single-active-consumer", true);
return new Queue(RabbitKeyIntegralConstants.INTEGRAL_ORDER_CHILD_FINISH_QUEUE, true, false, false, params);
}
@Bean
public Binding integralOrderChildFinishQueueBinding() {
return BindingBuilder.bind(integralOrderChildFinishQueue()).to(integralDefaultExchange()).with(RabbitKeyIntegralConstants.INTEGRAL_ORDER_CHILD_FINISH_ROUTING_KEY);
}
}
package com.clx.performance.constant;
/**
* @Author: aiqingguo
* @Description: 司机积分-mq
* @Date: 2023-10-12 15:27:23
* @Version: 1.0
*/
public class RabbitKeyIntegralConstants {
private static final String PREFIX = "clx-performance.integral.";
private static final String EXCHANGE = ".exchange";
private static final String QUEUE = ".queue";
private static final String QUEUE_ROUTING_KEY = ".routing.key";
private static final String DELAY_QUEUE = ".delay.queue";
private static final String DELAY_ROUTING_KEY = ".delay.routing.key";
private static final String DEAD_QUEUE = ".dead.queue";
private static final String DEAD_ROUTING_KEY = ".dead.routing.key";
private RabbitKeyIntegralConstants() {
}
/**
* 缺省交换机
*/
public static final String DEFAULT_EXCHANGE = PREFIX +"default"+EXCHANGE;
/**
* 缺省延迟队列
*/
public static final String DEFAULT_DELAY_QUEUE = PREFIX +"default"+DELAY_QUEUE;
public static final String DEFAULT_DELAY_ROUTING_KEY = PREFIX +"default"+DELAY_ROUTING_KEY;
public static final String DEFAULT_DEAD_QUEUE = PREFIX +"default"+DEAD_QUEUE;
public static final String DEFAULT_DEAD_ROUTING_KEY = PREFIX +"default"+DEAD_ROUTING_KEY;
/**
* 新增积分车辆
*/
public static final String INTEGRAL_TRUCK_ADD_QUEUE = PREFIX +"truck.add"+QUEUE;
public static final String INTEGRAL_TRUCK_ADD_ROUTING_KEY = PREFIX +"truck.add"+QUEUE_ROUTING_KEY;
/**
* 新增积分记录
*/
public static final String INTEGRAL_RECORD_ADD_QUEUE = PREFIX +"record.add"+QUEUE;
public static final String INTEGRAL_RECORD_ADD_ROUTING_KEY = PREFIX +"record.add"+QUEUE_ROUTING_KEY;
/**
* 下周车辆初始化
*/
public static final String INTEGRAL_NEXT_WEEK_TRUCK_INIT_QUEUE = PREFIX +"nextWeekTruck.init"+QUEUE;
public static final String INTEGRAL_NEXT_WEEK_TRUCK_INIT_ROUTING_KEY = PREFIX +"nextWeekTruck.init"+QUEUE_ROUTING_KEY;
/**
* 积分周统计
*/
public static final String INTEGRAL_WEEK_TRUCK_STATISTICS_QUEUE = PREFIX +"weekTruck.statistics"+QUEUE;
public static final String INTEGRAL_WEEK_TRUCK_STATISTICS_ROUTING_KEY = PREFIX +"weekTruck.statistics"+QUEUE_ROUTING_KEY;
/**
* 新车保护取消
*/
public static final String INTEGRAL_TRUCK_PROTECTION_CANCEL_QUEUE = PREFIX +"truckProtection.cancel"+QUEUE;
public static final String INTEGRAL_TRUCK_PROTECTION_CANCEL_ROUTING_KEY = PREFIX +"truckProtection.cancel"+QUEUE_ROUTING_KEY;
/**
* 运单结束
*/
public static final String INTEGRAL_ORDER_CHILD_FINISH_QUEUE = PREFIX +"orderChild.finish"+QUEUE;
public static final String INTEGRAL_ORDER_CHILD_FINISH_ROUTING_KEY = PREFIX +"orderChild.finish"+QUEUE_ROUTING_KEY;
/**
* 实时积分统计
*/
public static final String INTEGRAL_REAL_TIME_STATISTICS_QUEUE = PREFIX +"integralRealTime.statistics"+QUEUE;
public static final String INTEGRAL_REAL_TIME_STATISTICS_ROUTING_KEY = PREFIX +"integralRealTime.statistics"+QUEUE_ROUTING_KEY;
}
......@@ -5,7 +5,7 @@ import com.clx.performance.service.IntegralTruckService;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
......@@ -16,10 +16,10 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/feign/integral")
@Validated
@Api(tags = "积分车辆")
@AllArgsConstructor
public class IntegralTruckFeignController {
private final IntegralTruckService integralTruckService;
@Autowired
private IntegralTruckService integralTruckService;
@ApiOperation(value = "新增车辆")
@PostMapping("/saveTruck")
......
......@@ -20,4 +20,6 @@ public interface IntegralRecordDao extends BaseDao<IntegraRecordMapper, Integral
Integer sumIntegral(@Param("statisticsId") Integer statisticsId);
IntegralRecord selectByStatisticsIdAndType(@Param("statisticsId") Integer statisticsId, @Param("type") Integer type);
}
......@@ -33,5 +33,6 @@ public interface IntegralStatisticsDao extends BaseDao<IntegralStatisticsMapper,
List<IntegralStatistics> selectListByStatisticsDateAndTruckNoList(@Param("statisticsDate")String statisticsDate, @Param("list")List<String> truckNoList);
int countByStatisticsDate(@Param("statisticsDate")String statisticsDate);
}
......@@ -35,4 +35,6 @@ public interface IntegralTruckDao extends BaseDao<IntegralTruckMapper, IntegralT
IPage<IntegralTruckVO> pageTruckRank(PageIntegralTruckRankParam param);
List<IntegralTruck> selectListByTime(@Param("beginTime") String beginTime, @Param("endTime") String endTime);
}
......@@ -33,4 +33,11 @@ public class IntegralRecordDaoImpl extends BaseDaoImpl<IntegraRecordMapper, Inte
.eq("statistics_id", statisticsId))).map(item->item.getIntegral()).orNull();
}
@Override
public IntegralRecord selectByStatisticsIdAndType(Integer statisticsId, Integer type) {
return getOne(lQrWrapper()
.eq(IntegralRecord::getStatisticsId, statisticsId)
.eq(IntegralRecord::getType, type));
}
}
......@@ -75,4 +75,11 @@ public class IntegralStatisticsDaoImpl extends BaseDaoImpl<IntegralStatisticsMap
.in(IntegralStatistics::getTruckNo, truckNoList));
}
@Override
public int countByStatisticsDate(String statisticsDate) {
return (int)count(lQrWrapper()
.eq(IntegralStatistics::getStatisticsDate, statisticsDate)
);
}
}
......@@ -77,4 +77,11 @@ public class IntegralTruckDaoImpl extends BaseDaoImpl<IntegralTruckMapper, Integ
return null;
}
@Override
public List<IntegralTruck> selectListByTime(String beginTime, String endTime) {
return list(lQrWrapper()
.ge(IntegralTruck::getCreateTime, beginTime)
.le(IntegralTruck::getCreateTime, endTime));
}
}
package com.clx.performance.job;
import com.msl.common.job.JobLog;
import com.clx.performance.dao.IntegralTruckDao;
import com.clx.performance.model.IntegralTruck;
import com.clx.performance.service.IntegralJobHandlerService;
import com.clx.performance.utils.JobHandlerService;
import com.clx.performance.utils.LocalDateTimeUtils;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.List;
@Slf4j
@Component
@AllArgsConstructor
public class IntegralJob {
private final IntegralTruckDao integralTruckDao;
private final JobHandlerService jobHandlerService;
private final IntegralJobHandlerService integralJobHandlerService;
/**
* 下周车辆初始化 (周三)
* @Scheduled(cron = "0 0 6 ? * 3")
* 下周车辆初始化 (周日)
* @Scheduled(cron = "0 0 22 ? * 7")
*/
@XxlJob("favoriteStatusSyncTask")
public void favoriteStatusSyncTask() {
try {
} catch (Exception e) {
JobLog.error("下周车辆初始化定时任务处理失败", e);
}
jobHandlerService.handler("司机积分-下周车辆初始化", integralJobHandlerService::nextWeekTruckInit);
}
/**
* 下周车辆初始化 (周日)
* @Scheduled(cron = "0 0 22 ? * 7")
*/
@XxlJob("favoriteStatusSyncTask1")
public void favoriteStatusSyncTask1() {
try {
} catch (Exception e) {
JobLog.error("下周车辆初始化定时任务处理失败", e);
}
}
/**
* 车辆周统计(结算上周积分) (周1)
......@@ -43,12 +42,16 @@ public class IntegralJob {
*/
@XxlJob("weekTruckStatistics")
public void weekTruckStatistics() {
try {
jobHandlerService.handler("司机积分-车辆周统计", ()->{
List<IntegralTruck> list = integralTruckDao.listAll();
log.info("司机积分,车辆数量:{}", list.size());
list.forEach(integralJobHandlerService::weekTruckStatistics);
});
jobHandlerService.handler("司机积分-车辆周统计", integralJobHandlerService::weekTruckStatistics);
} catch (Exception e) {
JobLog.error("车辆周统计(结算上周积分)定时任务处理失败", e);
}
}
/**
......@@ -57,12 +60,16 @@ public class IntegralJob {
*/
@XxlJob("truckProtectionCancel")
public void truckProtectionCancel() {
try {
LocalDateTime time = LocalDateTimeUtils.getDayStart().minusDays(7);
jobHandlerService.handler("司机积分-车辆保护取消", ()->{
// 查找刚好7天的车辆
List<IntegralTruck> list = integralTruckDao.selectListByTime(LocalDateTimeUtils.formatTime(time), LocalDateTimeUtils.formatTime(time.plusDays(1)));
log.info("查找待同步车辆, size:{}", list.size());
list.forEach(integralJobHandlerService::truckProtectionCancel);
} catch (Exception e) {
JobLog.error("车辆保护期取消定时任务处理失败", e);
}
});
}
}
package com.clx.performance.listener;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.constant.RabbitKeyIntegralConstants;
import com.clx.performance.utils.MqDelay;
import com.clx.performance.utils.MqWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author: 艾庆国
* @Description: 司机积分 mq
* @Date: 2023-10-12 11:44:13
* @Version: 1.0
*/
@Slf4j
@Component
public class IntegralDelayListener {
@Autowired
private RabbitTemplate rabbitTemplate;
@RabbitListener(queues = RabbitKeyIntegralConstants.DEFAULT_DEAD_QUEUE)
public void process(Message message) {
try{
log.info("司机积分-延迟, message:{}", message);
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<MqDelay>>(){}).getData());
}catch (Exception e){
log.info("司机积分-延迟 失败",e);
}
}
void process(MqDelay mq){
Message message = MessageBuilder.withBody(JSON.toJSONString(mq).getBytes()).build();
rabbitTemplate.send(mq.getExchange(), mq.getRouterKey(), message);
}
}
package com.clx.performance.listener;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.constant.RabbitKeyIntegralConstants;
import com.clx.performance.param.mq.IntegralNextWeekTruckInitMqParam;
import com.clx.performance.service.IntegralMqHandlerService;
import com.clx.performance.utils.MqWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author: 艾庆国
* @Description: 积分车辆新增 mq
* @Date: 2023-10-12 11:44:13
* @Version: 1.0
*/
@Slf4j
@Component
public class IntegralNextWeekTruckInitListener {
@Autowired
private IntegralMqHandlerService integralMqHandlerService;
@RabbitListener(queues = RabbitKeyIntegralConstants.INTEGRAL_NEXT_WEEK_TRUCK_INIT_QUEUE)
public void process(Message message) {
try{
log.info("司机积分-下周车辆初始化, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<IntegralNextWeekTruckInitMqParam>>(){}).getData());
}catch (Exception e){
log.info("司机积分-下周车辆初始化 失败",e);
}
}
private void process(IntegralNextWeekTruckInitMqParam mq){
integralMqHandlerService.nextWeekTruckInit(mq);
}
}
package com.clx.performance.listener;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.constant.RabbitKeyIntegralConstants;
import com.clx.performance.param.mq.IntegralOrderChildFinishMqParam;
import com.clx.performance.service.IntegralMqHandlerService;
import com.clx.performance.utils.MqWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author: 艾庆国
* @Description: 运单结束 mq
* @Date: 2023-10-12 11:44:13
* @Version: 1.0
*/
@Slf4j
@Component
public class IntegralOrderChildFinishListener {
@Autowired
private IntegralMqHandlerService integralMqHandlerService;
@RabbitListener(queues = RabbitKeyIntegralConstants.INTEGRAL_ORDER_CHILD_FINISH_QUEUE)
public void process(Message message) {
try{
log.info("司机积分-运单结束, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<IntegralOrderChildFinishMqParam>>(){}).getData());
}catch (Exception e){
log.info("司机积分-运单结束 失败",e);
}
}
private void process(IntegralOrderChildFinishMqParam mq){
integralMqHandlerService.orderChildFinish(mq);
}
}
package com.clx.performance.listener;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.constant.RabbitKeyIntegralConstants;
import com.clx.performance.param.mq.IntegralRecordAddMqParam;
import com.clx.performance.service.IntegralMqHandlerService;
import com.clx.performance.utils.MqWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author: 艾庆国
* @Description: 积分记录新增 mq
* @Date: 2023-10-12 11:44:13
* @Version: 1.0
*/
@Slf4j
@Component
public class IntegralRecordAddListener {
@Autowired
private IntegralMqHandlerService integralMqHandlerService;
@RabbitListener(queues = RabbitKeyIntegralConstants.INTEGRAL_RECORD_ADD_QUEUE)
public void process(Message message) {
try{
log.info("司机积分-新增积分记录, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<IntegralRecordAddMqParam>>(){}).getData());
}catch (Exception e){
log.info("司机积分-新增积分记录 失败",e);
}
}
private void process(IntegralRecordAddMqParam mq){
integralMqHandlerService.recordAdd(mq);
}
}
package com.clx.performance.listener;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.constant.RabbitKeyIntegralConstants;
import com.clx.performance.param.mq.IntegralTuckAddMqParam;
import com.clx.performance.service.IntegralMqHandlerService;
import com.clx.performance.utils.MqWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author: 艾庆国
* @Description: 积分车辆新增 mq
* @Date: 2023-10-12 19:27:49
* @Version: 1.0
*/
@Slf4j
@Component
public class IntegralTruckAddListener {
@Autowired
private IntegralMqHandlerService integralMqHandlerService;
@RabbitListener(queues = RabbitKeyIntegralConstants.INTEGRAL_TRUCK_ADD_QUEUE)
public void process(Message message) {
try{
log.info("司机积分-新增车辆, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<IntegralTuckAddMqParam>>(){}).getData());
}catch (Exception e){
log.info("司机积分-新增车辆 失败",e);
}
}
private void process(IntegralTuckAddMqParam mq){
integralMqHandlerService.truckAdd(mq);
}
}
package com.clx.performance.listener;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.constant.RabbitKeyIntegralConstants;
import com.clx.performance.param.mq.IntegralTruckProtectionCancelMqParam;
import com.clx.performance.service.IntegralMqHandlerService;
import com.clx.performance.utils.MqWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author: 艾庆国
* @Description: 新车保护取消 mq
* @Date: 2023-10-12 19:27:58
* @Version: 1.0
*/
@Slf4j
@Component
public class IntegralTruckProtectionCancelListener {
@Autowired
private IntegralMqHandlerService integralMqHandlerService;
@RabbitListener(queues = RabbitKeyIntegralConstants.INTEGRAL_TRUCK_PROTECTION_CANCEL_QUEUE)
public void process(Message message) {
try{
log.info("司机积分-新车保护取消, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<IntegralTruckProtectionCancelMqParam>>(){}).getData());
}catch (Exception e){
log.info("司机积分-新车保护取消 失败",e);
}
}
private void process(IntegralTruckProtectionCancelMqParam mq){
integralMqHandlerService.truckProtectionCancel(mq);
}
}
package com.clx.performance.listener;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.constant.RabbitKeyIntegralConstants;
import com.clx.performance.param.mq.IntegralWeekTruckStatisticsMqParam;
import com.clx.performance.service.IntegralMqHandlerService;
import com.clx.performance.utils.MqWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author: 艾庆国
* @Description: 积分车辆新增 mq
* @Date: 2023-10-12 11:44:13
* @Version: 1.0
*/
@Slf4j
@Component
public class IntegralWeekTruckStatisticsListener {
@Autowired
private IntegralMqHandlerService integralMqHandlerService;
@RabbitListener(queues = RabbitKeyIntegralConstants.INTEGRAL_WEEK_TRUCK_STATISTICS_QUEUE)
public void process(Message message) {
try{
log.info("司机积分-车辆周统计, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<IntegralWeekTruckStatisticsMqParam>>(){}).getData());
}catch (Exception e){
log.info("司机积分-车辆周统计 失败",e);
}
}
private void process(IntegralWeekTruckStatisticsMqParam mq){
integralMqHandlerService.weekTruckStatistics(mq);
}
}
package com.clx.performance.service;
import com.clx.performance.model.IntegralTruck;
import com.clx.performance.utils.LocalDateTimeUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class IntegralJobHandlerService {
@Autowired
private IntegralMqService integralMqService;
/**
* 下周车辆初始化
*/
public void nextWeekTruckInit(){
// 发送mq (下周车辆初始化)
integralMqService.nextWeekTruckInit(LocalDateTimeUtils.getWeekStart());
}
/**
* 车辆周统计 (结算上周积分)
*/
public void weekTruckStatistics(){
// 发送mq (下周车辆初始化)
integralMqService.weekTruckStatistics(LocalDateTimeUtils.getWeekStart());
}
public void weekTruckStatistics(IntegralTruck truck){
// 发送mq (下周车辆初始化)
integralMqService.weekTruckStatistics(LocalDateTimeUtils.getWeekStart(), truck.getTruckNo());
}
/**
* 车辆保护取消
*/
public void truckProtectionCancel(IntegralTruck truck){
// 发送mq (车辆保护取消)
integralMqService.truckProtectionCancel(LocalDateTimeUtils.getWeekStart(), truck.getTruckNo());
}
}
package com.clx.performance.service;
import com.clx.performance.param.mq.*;
public interface IntegralMqHandlerService {
void truckAdd(IntegralTuckAddMqParam mq);
void recordAdd(IntegralRecordAddMqParam mq);
void nextWeekTruckInit(IntegralNextWeekTruckInitMqParam mq);
void weekTruckStatistics(IntegralWeekTruckStatisticsMqParam mq);
void truckProtectionCancel(IntegralTruckProtectionCancelMqParam mq);
void orderChildFinish(IntegralOrderChildFinishMqParam mq);
void integralRealTimeStatistics(Integer statisticsId);
void integralRealTimeRankStatistics(String statisticsDate);
}
package com.clx.performance.service;
public interface IntegralMqService {
void truckAdd(Integer statisticsId, String truckNo);
void integralRecordAdd(Integer statisticsId, String truckNo, Integer type, Integer integral, String remark);
void nextWeekTruckInit(String statisticsDate);
void weekTruckStatistics(String statisticsDate);
void weekTruckStatistics(String statisticsDate, String truckNo);
void truckProtectionCancel(String statisticsDate, String truckNo);
void orderChildFinish(String childNo);
}
package com.clx.performance.service.impl;
import com.clx.performance.dao.*;
import com.clx.performance.model.IntegralRecord;
import com.clx.performance.model.IntegralStatistics;
import com.clx.performance.model.IntegralTruck;
import com.clx.performance.param.mq.*;
import com.clx.performance.service.IntegralMqHandlerService;
import com.clx.performance.service.IntegralMqService;
import com.clx.performance.service.IntegralRecordService;
import com.clx.performance.service.IntegralStatisticsService;
import com.clx.performance.utils.LocalDateTimeUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@Service
public class IntegralMqHandlerServiceImpl implements IntegralMqHandlerService {
@Autowired
private IntegralMqService integralMqService;
@Autowired
private IntegralStatisticsDao integralStatisticsDao;
@Autowired
private IntegralRecordDao integralRecordDao;
@Autowired
private IntegralTruckDao integralTruckDao;
@Autowired
private IntegralOrderDao integralOrderDao;
@Autowired
private OrderChildDao orderChildDao;
@Autowired
private OrderGoodsDao orderGoodsDao;
@Autowired
private IntegralStatisticsService integralStatisticsService;
@Autowired
private IntegralRecordService integralRecordService;
/**
* 车辆新增
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void truckAdd(IntegralTuckAddMqParam mq){
}
/**
* 积分记录新增
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void recordAdd(IntegralRecordAddMqParam mq){
}
/**
* 下周车辆初始化(新增统计车辆) (周3、周7 晚上)
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void nextWeekTruckInit(IntegralNextWeekTruckInitMqParam mq){
String statisticsDateCurrent = mq.getStatisticsDate();
String statisticsDateNext = LocalDateTimeUtils.formatTime(LocalDateTimeUtils.parseTime(statisticsDateCurrent).plusDays(7));
// 查找本周车辆
List<IntegralStatistics> list = integralStatisticsDao.selectByStatisticsDate(statisticsDateCurrent);
// 查找下周车辆
List<IntegralStatistics> nextList = integralStatisticsDao.selectByStatisticsDate(statisticsDateNext);
List<String> truckNoNextList = nextList.stream().map(item -> item.getTruckNo()).collect(Collectors.toList());
List<IntegralStatistics> newList = new ArrayList<>();
for (IntegralStatistics item : list) {
if (truckNoNextList.contains(item.getTruckNo())) {continue;}
IntegralStatistics statistics = new IntegralStatistics();
statistics.setTruckNo(item.getTruckNo());
statistics.setStatisticsDate(statisticsDateNext);
statistics.setIntegralBase(0);
statistics.setIntegral(0);
statistics.setRank(1);
newList.add(statistics);
}
if (newList.isEmpty()) {return;}
// 新增下周车辆
integralStatisticsDao.batchSaveEntity(newList);
}
/**
* 车辆周统计 (统计周初始积分)
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void weekTruckStatistics(IntegralWeekTruckStatisticsMqParam mq){
if (StringUtils.isNotBlank(mq.getTruckNo())){
// 基础分初始化
truckBaseIntegralInit(mq.getTruckNo(), mq.getStatisticsDate());
return;
}
// 更新本周实时排名
integralRealTimeRankStatistics(mq.getStatisticsDate());
}
/**
* 新一周基础积分初始化
*/
private void truckBaseIntegralInit(String truckNo, String statisticsDate){
IntegralTruck truck = integralTruckDao.getByTruckNo(truckNo).orNull();
if (null == truck) {return;}
IntegralStatistics statistics = integralStatisticsDao.selectByTruckNoAndStatisticsDate(truck.getTruckNo(), statisticsDate).orNull();
if (null == statistics) {return;}
// 新车保护分
newTruckProtection(truck, statistics);
// 周结算分
truckWeekSettlement(truck, statistics);
integralStatisticsDao.updateIntegral(statistics);
truck.setIntegral(statistics.getIntegral());
integralTruckDao.updateIntegral(truck);
}
/**
* 新车保护分
*/
private void newTruckProtection(IntegralTruck truck, IntegralStatistics statistics){
String statisticsDate = statistics.getStatisticsDate();
// 超过保护期
if (LocalDateTimeUtils.parseTime(truck.getCreateTime()).isBefore(LocalDateTimeUtils.parseTime(statisticsDate).minusDays(7))) {return;}
// 已保护不处理
IntegralRecord record = integralRecordDao.selectByStatisticsIdAndType(statistics.getId(), IntegralRecord.type.PROTECTION.getValue());
if (null != record) {return;}
// 计算新车积分
int integral = integralStatisticsService.protectionIntegralCalc(truck.getCreateTime(), statisticsDate);
if (integral == 0) {return;}
statistics.setIntegral(statistics.getIntegral()+integral);
integralStatisticsDao.updateIntegral(statistics);
integralRecordService.save(statistics.getId(), statistics.getStatisticsDate(), statistics.getTruckNo(), IntegralRecord.type.PROTECTION.getValue(), integral, "新用户");
}
/**
* 上周结算分
*/
private void truckWeekSettlement(IntegralTruck truck, IntegralStatistics statistics){
int integral;
// 已结算不处理
IntegralRecord record = integralRecordDao.selectByStatisticsIdAndType(statistics.getId(), IntegralRecord.type.SETTLEMENT.getValue());
if (null != record) {return;}
String statisticsDatePre = LocalDateTimeUtils.formatTime(LocalDateTimeUtils.parseTime(statistics.getStatisticsDate()).minusDays(7));
// 查找上周统计数据
IntegralStatistics statisticsPre = integralStatisticsDao.selectByTruckNoAndStatisticsDate(truck.getTruckNo(), statisticsDatePre).orNull();
if (null == statisticsPre) {return;}
// 查找总车数
int truckSum = integralStatisticsDao.countByStatisticsDate(statisticsDatePre);
if (statisticsPre.getRank() <= truckSum*0.1){
integral = 300;
}
else if ( (statisticsPre.getRank() > truckSum*0.1) && (statisticsPre.getRank() <= truckSum*0.3)){
integral = 200;
}
else if ( (statisticsPre.getRank() > truckSum*0.3) && (statisticsPre.getRank() <= truckSum*0.6)){
integral = 100;
}
else if ( (statisticsPre.getRank() > truckSum*0.6) && (statisticsPre.getRank() <= truckSum*0.9)){
integral = 60;
}
else {
integral = 0;
}
if (integral == 0) {return;}
statistics.setIntegral(statistics.getIntegral()+integral);
integralRecordService.save(statistics.getId(), statistics.getStatisticsDate(), statistics.getTruckNo(), IntegralRecord.type.SETTLEMENT.getValue(), integral, "上周结算");
}
/**
* 新手保护取消
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void truckProtectionCancel(IntegralTruckProtectionCancelMqParam mq){
IntegralTruck truck = integralTruckDao.getByTruckNo(mq.getTruckNo()).orNull();
if (null == truck) {return;}
IntegralStatistics statistics = integralStatisticsDao.selectByTruckNoAndStatisticsDate(truck.getTruckNo(), mq.getStatisticsDate()).orNull();
if (null == statistics) {return;}
IntegralRecord record = integralRecordDao.selectByStatisticsIdAndType(statistics.getId(), IntegralRecord.type.PROTECTION.getValue());
IntegralRecord recordCancel = integralRecordDao.selectByStatisticsIdAndType(statistics.getId(), IntegralRecord.type.PROTECTION_CANCEL.getValue());
if (null != recordCancel) {return;}
int integral = -record.getIntegral();
integralRecordService.save(statistics.getId(), statistics.getStatisticsDate(), statistics.getTruckNo(), IntegralRecord.type.PROTECTION_CANCEL.getValue(), integral, "新用户过保护期");
statistics.setIntegral(statistics.getIntegral()+integral);
integralStatisticsDao.updateIntegral(statistics);
truck.setIntegral(statistics.getIntegral());
integralTruckDao.updateIntegral(truck);
// 更新本周实时排名
integralRealTimeRankStatistics(mq.getStatisticsDate());
}
/**
* 运单结束
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void orderChildFinish(IntegralOrderChildFinishMqParam mq) {
}
/**
* 更新实时积分
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void integralRealTimeStatistics(Integer statisticsId){
}
/**
* 更新实时排名
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void integralRealTimeRankStatistics(String statisticsDate){
}
}
package com.clx.performance.service.impl;
import com.alibaba.fastjson.JSON;
import com.clx.performance.constant.RabbitKeyIntegralConstants;
import com.clx.performance.param.mq.IntegralNextWeekTruckInitMqParam;
import com.clx.performance.param.mq.IntegralOrderChildFinishMqParam;
import com.clx.performance.param.mq.IntegralTruckProtectionCancelMqParam;
import com.clx.performance.param.mq.IntegralWeekTruckStatisticsMqParam;
import com.clx.performance.service.IntegralMqService;
import lombok.AllArgsConstructor;
import com.clx.performance.utils.MqWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
......@@ -14,26 +24,115 @@ import org.springframework.stereotype.Service;
@Slf4j
@Service
@AllArgsConstructor
public class IntegralMqServiceImpl implements IntegralMqService {
@Autowired
private RabbitTemplate rabbitTemplate;
@Autowired
private IntegralMqHandlerServiceImpl integralMqHandlerService;
/**
* 新增车辆 (manage)
* 新增车辆 (performance)
*/
@Override
public void truckAdd(Integer statisticsId, String truckNo){
// IntegralTuckAddMQ mq = new IntegralTuckAddMQ();
// mq.setStatisticsId(statisticsId);
// mq.setTruckNo(truckNo);
// Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(mq)).getBytes()).build();
// rabbitTemplate.send(RabbitKeyIntegralConstants.DEFAULT_EXCHANGE, RabbitKeyIntegralConstants.INTEGRAL_TRUCK_ADD_ROUTING_KEY, message);
// 实时积分统计
integralMqHandlerService.integralRealTimeStatistics(statisticsId);
}
/**
* 新增积分记录 (manage)
* 新增积分记录 (performance)
*/
@Override
public void integralRecordAdd(Integer statisticsId, String truckNo, Integer type, Integer integral, String remark){
// IntegralRecordAddMQ mq = new IntegralRecordAddMQ();
// mq.setStatisticsId(statisticsId);
// mq.setTruckNo(truckNo);
// mq.setType(type);
// mq.setIntegral(integral);
// mq.setRemark(remark);
// Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(mq)).getBytes()).build();
// rabbitTemplate.send(RabbitKeyIntegralConstants.DEFAULT_EXCHANGE, RabbitKeyIntegralConstants.INTEGRAL_RECORD_ADD_ROUTING_KEY, message);
// 实时积分统计
integralMqHandlerService.integralRealTimeStatistics(statisticsId);
}
/**
* 下周车辆初始化 (job)
*/
@Override
public void nextWeekTruckInit(String statisticsDate){
IntegralNextWeekTruckInitMqParam mq = new IntegralNextWeekTruckInitMqParam();
mq.setStatisticsDate(statisticsDate);
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(mq)).getBytes()).build();
rabbitTemplate.send(RabbitKeyIntegralConstants.DEFAULT_EXCHANGE, RabbitKeyIntegralConstants.INTEGRAL_NEXT_WEEK_TRUCK_INIT_ROUTING_KEY, message);
}
/**
* 车辆周统计 (结算上周积分) (job)
*/
@Override
public void weekTruckStatistics(String statisticsDate){
IntegralWeekTruckStatisticsMqParam mq = new IntegralWeekTruckStatisticsMqParam();
mq.setStatisticsDate(statisticsDate);
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(mq)).getBytes()).build();
rabbitTemplate.send(RabbitKeyIntegralConstants.DEFAULT_EXCHANGE, RabbitKeyIntegralConstants.INTEGRAL_WEEK_TRUCK_STATISTICS_ROUTING_KEY, message);
}
/**
* 车辆周统计 (结算上周积分) (job)
*/
@Override
public void weekTruckStatistics(String statisticsDate, String truckNo){
IntegralWeekTruckStatisticsMqParam mq = new IntegralWeekTruckStatisticsMqParam();
mq.setStatisticsDate(statisticsDate);
mq.setTruckNo(truckNo);
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(mq)).getBytes()).build();
rabbitTemplate.send(RabbitKeyIntegralConstants.DEFAULT_EXCHANGE, RabbitKeyIntegralConstants.INTEGRAL_WEEK_TRUCK_STATISTICS_ROUTING_KEY, message);
}
/**
* 新车保护取消 (job)
*/
@Override
public void truckProtectionCancel(String statisticsDate, String truckNo){
IntegralTruckProtectionCancelMqParam mq = new IntegralTruckProtectionCancelMqParam();
mq.setStatisticsDate(statisticsDate);
mq.setTruckNo(truckNo);
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(mq)).getBytes()).build();
rabbitTemplate.send(RabbitKeyIntegralConstants.DEFAULT_EXCHANGE, RabbitKeyIntegralConstants.INTEGRAL_TRUCK_PROTECTION_CANCEL_ROUTING_KEY, message);
}
/**
* 运单结束 (performance)
*/
@Override
public void orderChildFinish(String childNo){
IntegralOrderChildFinishMqParam mq = new IntegralOrderChildFinishMqParam();
mq.setChildNo(childNo);
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(mq)).getBytes()).build();
rabbitTemplate.send(RabbitKeyIntegralConstants.DEFAULT_EXCHANGE, RabbitKeyIntegralConstants.INTEGRAL_ORDER_CHILD_FINISH_ROUTING_KEY, message);
}
}
......@@ -11,20 +11,25 @@ import com.clx.performance.param.pc.IntegralRecordAddParam;
import com.clx.performance.service.IntegralMqService;
import com.clx.performance.service.IntegralRecordService;
import com.clx.performance.utils.LocalDateTimeUtils;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Slf4j
@Service
@AllArgsConstructor
public class IntegralRecordServiceImpl implements IntegralRecordService {
private final IntegralRecordDao integralRecordDao;
private final IntegralTruckDao integralTruckDao;
private final IntegralStatisticsDao integralStatisticsDao;
@Autowired
private IntegralRecordDao integralRecordDao;
private final IntegralMqService integralMqService;
@Autowired
private IntegralTruckDao integralTruckDao;
@Autowired
private IntegralStatisticsDao integralStatisticsDao;
@Autowired
private IntegralMqService integralMqService;
@Override
public void addRecord(IntegralRecordAddParam param) {
......
......@@ -19,8 +19,8 @@ import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.vo.pc.IntegralTruckVO;
import com.clx.user.vo.feign.DriverInfoFeignVo;
import com.msl.common.exception.ServiceSystemException;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -30,17 +30,23 @@ import java.util.stream.Collectors;
@Slf4j
@Service
@AllArgsConstructor
public class IntegralTruckServiceImpl implements IntegralTruckService {
private final IntegralTruckDao integralTruckDao;
private final IntegralStatisticsDao integralStatisticsDao;
@Autowired
private IntegralTruckDao integralTruckDao;
@Autowired
private IntegralStatisticsDao integralStatisticsDao;
private final IntegralRecordService integralRecordService;
private final IntegralStatisticsService integralStatisticsService;
@Autowired
private IntegralRecordService integralRecordService;
@Autowired
private IntegralStatisticsService integralStatisticsService;
private final DriverService driverService;
private final IntegralMqService integralMqService;
@Autowired
private DriverService driverService;
@Autowired
private IntegralMqService integralMqService;
@Transactional(rollbackFor = Exception.class)
@Override
......
package com.clx.performance.utils;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.job.JobLog;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.util.StopWatch;
import java.util.function.Consumer;
/**
* @Author: aiqingguo
* @Description:
* @Date: 2023-10-12 19:38:41
* @Version: 1.0
*/
@Component
public class JobHandlerService {
protected Logger logger = LoggerFactory.getLogger(this.getClass());
public <T> void handler(String title, Runnable target) {
handler(title, null, target);
}
public <T> void handler(String title, T data, Runnable target) {
StopWatch stopWatch = new StopWatch();
stopWatch.start();
logger.info("{}, 主任务开始, data:{}", title, data);
try {
target.run();
}catch (ServiceSystemException e){
logger.info("{}, 主任务执行失败, data:{}, error:{}, detail:{}", title, data, e.getResultEnum().getMsg(), e.getDetail());
JobLog.error(title + "定时任务处理失败", e);
}catch (Exception e){
logger.error("{}, 主任务执行异常, data:{}, error:{}", title, data, e.getMessage());
JobLog.error(title + "定时任务处理失败", e);
}
stopWatch.stop();
logger.info("{}, 主任务结束, data:{}, duration:{}", title, data, stopWatch.getTotalTimeMillis());
}
public <T> void subHandler(String title, T data, Consumer<T> target) {
StopWatch stopWatch = new StopWatch();
stopWatch.start();
logger.info("{}, 子任务开始, data:{}", title, data);
try {
target.accept(data);
}catch (ServiceSystemException e){
logger.info("{}, 子任务执行失败, data:{}, error:{}, detail:{}", title, data, e.getResultEnum().getMsg(), e.getDetail());
JobLog.error(title + "定时任务处理失败", e);
}catch (Exception e){
logger.error("{}, 子任务执行异常, data:{}, error:{}", title, data, e.getMessage());
JobLog.error(title + "定时任务处理失败", e);
}
stopWatch.stop();
logger.info("{}, 子任务结束, data:{}, duration:{}", title, data, stopWatch.getTotalTimeMillis());
}
}
......@@ -163,6 +163,9 @@ public class LocalDateTimeUtils {
return time.withHour(0).withMinute(0).withSecond(0).withNano(0);
}
public static LocalDateTime getDayStart() {
return LocalDateTime.now().withHour(0).withMinute(0).withSecond(0).withNano(0);
}
public static String getStringDayEnd(String time) {
return formatTime(parseTime(time).withHour(23).withMinute(59).withSecond(59).withNano(999999999));
}
......
package com.clx.performance.utils;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
/**
* @Author: aiqingguo
* @Description:
* @Date: 2023-10-12 14:00:14
* @Version: 1.0
*/
@Setter
@Getter
@NoArgsConstructor
public class MqDelay<T> {
private String exchange;
private String routerKey;
private T data;
public MqDelay(String exchange, String routerKey, T data) {
this.exchange = exchange;
this.routerKey = routerKey;
this.data = data;
}
}
package com.clx.performance.utils;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* @Author: aiqingguo
* @Description:
* @Date: 2023-10-12 11:59:33
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
public class MqWrapper<T> {
private T data;
private String exchange; //交换机
private String routeKey; //路由键
private String createTime; //创建时间
public MqWrapper(T data) {
this.data = data;
this.createTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());
}
public MqWrapper(T data, String exchange, String routeKey) {
this.data = data;
this.exchange = exchange;
this.routeKey = routeKey;
this.createTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论