提交代码

dev-discount
胡锐 3 years ago
parent ad96d22b5e
commit 366f508bc4
  1. 10
      hai-bweb/src/main/java/com/bweb/config/RedisConfig.java
  2. 27
      hai-bweb/src/main/java/com/bweb/config/msg/OilPriceTaskMsgListener.java
  3. 31
      hai-bweb/src/main/java/com/bweb/config/msg/RedisKeyExpirationListener.java
  4. 16
      hai-service/src/main/java/com/hai/common/utils/DateUtil.java
  5. 87
      hai-service/src/main/java/com/hai/service/impl/HighGasOilPriceTaskServiceImpl.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相关配置

@ -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<String, Object> redisTemplate;
@Override
public void onMessage(Message message, byte[] pattern) {
System.out.println(message);
}
}

@ -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);
}
}
}
*/

@ -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));
}
}

@ -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

Loading…
Cancel
Save