diff --git a/hai-bweb/src/main/java/com/bweb/config/RedisConfig.java b/hai-bweb/src/main/java/com/bweb/config/RedisConfig.java index 965093e5..9689c265 100644 --- a/hai-bweb/src/main/java/com/bweb/config/RedisConfig.java +++ b/hai-bweb/src/main/java/com/bweb/config/RedisConfig.java @@ -1,5 +1,6 @@ package com.bweb.config; +import com.bweb.config.msg.OilPriceTaskMsgListener; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; @@ -22,17 +23,16 @@ import org.springframework.data.redis.serializer.StringRedisSerializer; public class RedisConfig extends CachingConfigurerSupport { -/* @Bean(destroyMethod = "destroy") - public RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory factory, - MessageListener driverLBSMsgListener) { + @Bean + public RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory factory) { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(factory); //可以添加多个 messageListener - container.addMessageListener(driverLBSMsgListener, new PatternTopic(MsgTopic.oilPriceTask.getName())); + container.addMessageListener(new OilPriceTaskMsgListener(), new PatternTopic(MsgTopic.oilPriceTask.getName())); return container; - }*/ + } /** * retemplate相关配置 diff --git a/hai-bweb/src/main/java/com/bweb/config/msg/OilPriceTaskMsgListener.java b/hai-bweb/src/main/java/com/bweb/config/msg/OilPriceTaskMsgListener.java new file mode 100644 index 00000000..8609c91a --- /dev/null +++ b/hai-bweb/src/main/java/com/bweb/config/msg/OilPriceTaskMsgListener.java @@ -0,0 +1,27 @@ +package com.bweb.config.msg; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.connection.Message; +import org.springframework.data.redis.connection.MessageListener; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.UUID; + +@Service(value = "driverLBSMsgListener") +public class OilPriceTaskMsgListener implements MessageListener { + + private static Logger logger = LoggerFactory.getLogger(OilPriceTaskMsgListener.class); + private RedisTemplate redisTemplate; + + @Override + public void onMessage(Message message, byte[] pattern) { + System.out.println(message); + } +} diff --git a/hai-bweb/src/main/java/com/bweb/config/msg/RedisKeyExpirationListener.java b/hai-bweb/src/main/java/com/bweb/config/msg/RedisKeyExpirationListener.java index 457ced76..334b1058 100644 --- a/hai-bweb/src/main/java/com/bweb/config/msg/RedisKeyExpirationListener.java +++ b/hai-bweb/src/main/java/com/bweb/config/msg/RedisKeyExpirationListener.java @@ -1,5 +1,8 @@ package com.bweb.config.msg; +import com.hai.entity.HighGasOilPriceTask; +import com.hai.msg.entity.MsgTopic; +import com.hai.service.HighGasOilPriceTaskService; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -8,6 +11,11 @@ import org.springframework.data.redis.listener.KeyExpirationEventMessageListener import org.springframework.data.redis.listener.RedisMessageListenerContainer; import org.springframework.stereotype.Component; +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + /** * @author hurui * @version 1.0 @@ -15,22 +23,37 @@ import org.springframework.stereotype.Component; * @description: TODO * @date 2021/8/19 10:00 */ -/* @Component public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener { private static Logger logger = LoggerFactory.getLogger(RedisKeyExpirationListener.class); + @Resource + private HighGasOilPriceTaskService gasOilPriceTaskService; + public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) { super(listenerContainer); } public void onMessage(Message message, byte[] pattern) { try { - System.out.println(message); + if (message != null && StringUtils.isNotBlank(message.toString())) { + // 加油站价格任务 + if (message.toString().contains(MsgTopic.oilPriceTask.getName())) { + // 截取任务id + Long taskId = Long.parseLong(StringUtils.substringAfterLast(message.toString(), MsgTopic.oilPriceTask.getName() + "-")); + if (taskId != null) { + // 查询任务 + HighGasOilPriceTask gasOilPriceTask = gasOilPriceTaskService.getDetailById(taskId); + if (gasOilPriceTask != null) { + // 任务处理 + gasOilPriceTaskService.businessHandle(gasOilPriceTask); + } + } + } + } } catch (Exception e) { - logger.error("redis过期事件异常:",e); + logger.error("redis过期事件异常:", e); } } } -*/ diff --git a/hai-service/src/main/java/com/hai/common/utils/DateUtil.java b/hai-service/src/main/java/com/hai/common/utils/DateUtil.java index 72f6bc61..b36e6d81 100644 --- a/hai-service/src/main/java/com/hai/common/utils/DateUtil.java +++ b/hai-service/src/main/java/com/hai/common/utils/DateUtil.java @@ -34,6 +34,19 @@ public class DateUtil { public static final String Y_M = "yyyy-MM"; private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + //计算两个时间相差的秒数 + public static long getSecondDiff(Date startTime, Date endTime) { + try { + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + long eTime = startTime.getTime(); + long sTime = endTime.getTime(); + long diff = (eTime - sTime) / 1000; + return diff; + } catch (Exception e) { + log.error("getSecondDiff error", e); + } + return 0; + } public static Integer getThisYear(){ Calendar calendar = Calendar.getInstance(); @@ -765,9 +778,6 @@ public class DateUtil { public static void main(String[] args) throws Exception { String a = "51130319931105651X"; - System.out.println(a.substring(6,10)); - System.out.println(a.substring(10,12)); - System.out.println(a.substring(12,14)); } } diff --git a/hai-service/src/main/java/com/hai/service/impl/HighGasOilPriceTaskServiceImpl.java b/hai-service/src/main/java/com/hai/service/impl/HighGasOilPriceTaskServiceImpl.java index 3ad0fbc1..8bd0c48a 100644 --- a/hai-service/src/main/java/com/hai/service/impl/HighGasOilPriceTaskServiceImpl.java +++ b/hai-service/src/main/java/com/hai/service/impl/HighGasOilPriceTaskServiceImpl.java @@ -3,6 +3,8 @@ package com.hai.service.impl; import com.hai.common.exception.ErrorCode; import com.hai.common.exception.ErrorHelp; import com.hai.common.exception.SysCode; +import com.hai.common.utils.DateUtil; +import com.hai.common.utils.RedisUtil; import com.hai.dao.HighGasOilPriceTaskMapper; import com.hai.entity.HighGasOilPrice; import com.hai.entity.HighGasOilPriceOfficial; @@ -11,6 +13,7 @@ import com.hai.entity.HighGasOilPriceTaskExample; import com.hai.enum_type.GasTaskExecutionTypeEnum; import com.hai.enum_type.GasTaskPriceTypeEnum; import com.hai.enum_type.GasTaskStatusEnum; +import com.hai.msg.entity.MsgTopic; import com.hai.service.HighGasOilPriceOfficialService; import com.hai.service.HighGasOilPriceService; import com.hai.service.HighGasOilPriceTaskService; @@ -28,6 +31,9 @@ import java.util.Map; @Service("gasOilPriceTaskService") public class HighGasOilPriceTaskServiceImpl implements HighGasOilPriceTaskService { + @Resource + private RedisUtil redisUtil; + @Resource private HighGasOilPriceTaskMapper gasOilPriceTaskMapper; @@ -64,56 +70,58 @@ public class HighGasOilPriceTaskServiceImpl implements HighGasOilPriceTaskServic // 立刻执行 if (gasOilPriceTask.getExecutionType().equals(GasTaskExecutionTypeEnum.type1.getStatus())) { businessHandle(gasOilPriceTask); + + } else if (gasOilPriceTask.getExecutionType().equals(GasTaskExecutionTypeEnum.type2.getStatus())) { + redisUtil.set(MsgTopic.oilPriceTask.getName() + "-" + gasOilPriceTask, DateUtil.getSecondDiff(new Date(), gasOilPriceTask.getStartTime())); } } @Override + @Transactional(propagation= Propagation.REQUIRED) public void businessHandle(HighGasOilPriceTask gasOilPriceTask) { // 立刻执行 - if (gasOilPriceTask.getExecutionType().equals(GasTaskExecutionTypeEnum.type1.getStatus())) { - gasOilPriceTask.setStartTime(new Date()); - gasOilPriceTask.setStatus(GasTaskStatusEnum.status2.getStatus()); - editData(gasOilPriceTask); - - // 国标价 - if (gasOilPriceTask.getPriceType().equals(GasTaskPriceTypeEnum.type1.getStatus())) { - // 查询国标价油品价格 - HighGasOilPriceOfficial price = gasOilPriceOfficialService.getPrice(gasOilPriceTask.getRegionId(), gasOilPriceTask.getOilNo()); - if (price == null) { - throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未找到油品价格"); - } - gasOilPriceOfficialService.editPrice(gasOilPriceTask.getRegionId(), gasOilPriceTask.getOilNo(), gasOilPriceTask.getPrice()); - - new Thread(() -> { - gasOilPriceOfficialService.refreshGasPriceOfficial(gasOilPriceTask.getRegionId(), gasOilPriceTask.getOilNo()); - }).start(); - } + gasOilPriceTask.setStartTime(new Date()); + gasOilPriceTask.setStatus(GasTaskStatusEnum.status2.getStatus()); + editData(gasOilPriceTask); - // 油站价 - if (gasOilPriceTask.getPriceType().equals(GasTaskPriceTypeEnum.type2.getStatus())) { - // 查询油品价格 - HighGasOilPrice price = gasOilPriceService.getGasOilPriceByStoreAndOilNo(gasOilPriceTask.getMerStoreId(), gasOilPriceTask.getOilNo()); - if (price == null) { - throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未找到油品价格"); - } - price.setPriceGun(gasOilPriceTask.getPrice()); - price.setPriceVip(gasOilPriceTask.getPrice().subtract(price.getPreferentialMargin())); - gasOilPriceService.editGasOilPrice(price); + // 国标价 + if (gasOilPriceTask.getPriceType().equals(GasTaskPriceTypeEnum.type1.getStatus())) { + // 查询国标价油品价格 + HighGasOilPriceOfficial price = gasOilPriceOfficialService.getPrice(gasOilPriceTask.getRegionId(), gasOilPriceTask.getOilNo()); + if (price == null) { + throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未找到油品价格"); } + gasOilPriceOfficialService.editPrice(gasOilPriceTask.getRegionId(), gasOilPriceTask.getOilNo(), gasOilPriceTask.getPrice()); - // 优惠幅度 - if (gasOilPriceTask.getPriceType().equals(GasTaskPriceTypeEnum.type3.getStatus())) { - // 查询油品价格 - HighGasOilPrice price = gasOilPriceService.getGasOilPriceByStoreAndOilNo(gasOilPriceTask.getMerStoreId(), gasOilPriceTask.getOilNo()); - if (price == null) { - throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未找到油品价格"); - } - price.setPreferentialMargin(gasOilPriceTask.getPrice()); - price.setPriceVip(price.getPriceGun().subtract(price.getPreferentialMargin())); - gasOilPriceService.editGasOilPrice(price); + new Thread(() -> { + gasOilPriceOfficialService.refreshGasPriceOfficial(gasOilPriceTask.getRegionId(), gasOilPriceTask.getOilNo()); + }).start(); + } + + // 油站价 + if (gasOilPriceTask.getPriceType().equals(GasTaskPriceTypeEnum.type2.getStatus())) { + // 查询油品价格 + HighGasOilPrice price = gasOilPriceService.getGasOilPriceByStoreAndOilNo(gasOilPriceTask.getMerStoreId(), gasOilPriceTask.getOilNo()); + if (price == null) { + throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未找到油品价格"); } + price.setPriceGun(gasOilPriceTask.getPrice()); + price.setPriceVip(gasOilPriceTask.getPrice().subtract(price.getPreferentialMargin())); + gasOilPriceService.editGasOilPrice(price); + } + // 优惠幅度 + if (gasOilPriceTask.getPriceType().equals(GasTaskPriceTypeEnum.type3.getStatus())) { + // 查询油品价格 + HighGasOilPrice price = gasOilPriceService.getGasOilPriceByStoreAndOilNo(gasOilPriceTask.getMerStoreId(), gasOilPriceTask.getOilNo()); + if (price == null) { + throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未找到油品价格"); + } + price.setPreferentialMargin(gasOilPriceTask.getPrice()); + price.setPriceVip(price.getPriceGun().subtract(price.getPreferentialMargin())); + gasOilPriceService.editGasOilPrice(price); } + } @Override @@ -130,6 +138,9 @@ public class HighGasOilPriceTaskServiceImpl implements HighGasOilPriceTaskServic } detail.setStatus(GasTaskStatusEnum.status0.getStatus()); editData(detail); + + // 从redis中删除任务 + redisUtil.del(MsgTopic.oilPriceTask.getName() + "-" + taskId); } @Override