redis配置类
package com.sca4cloud.sca.merchantsoperation.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
* @ClassName RedisConfig
* @Description Redis配置类
* @Author wdk
* @Date 2022/1/22 10:42
* @Version 1.0
**/
@Configuration
public class RedisConfig {
@Bean
@SuppressWarnings("all")
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(factory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
//key采用String的序列化方式
template.setKeySerializer(stringRedisSerializer);
//hash的key也采用String的序列化方式
template.setHashKeySerializer(stringRedisSerializer);
//value序列化方式采用jackson
template.setValueSerializer(jackson2JsonRedisSerializer);
//hash的value序列化方式采用jackson
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
业务生成的几位流水号工具类
public class SequenceUtils {
static final int DEFAULT_LENGTH = 6;
public static String getSequence(long seq) {
String str = String.valueOf(seq);
int len = str.length();
if (len >= DEFAULT_LENGTH) {// 取决于业务规模,应该不会到达4
return str;
}
int rest = DEFAULT_LENGTH - len;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < rest; i++) {
sb.append('0');
}
sb.append(str);
return sb.toString();
}
}
例如新增进件的编号第一天为IN20220101000001,IN20220101000002,IN20220101000003 ......第二天IN20220102000001,IN20220102000002,IN20220102000003等
//新增进件编号
String date = new SimpleDateFormat("yyyyMMdd").format(new Date());
//进件编码
String purchaseCodekey="IN"+date;
Long increment = redisTemplate.opsForValue().increment(purchaseCodekey, 1);
String sequence = SequenceUtils.getSequence(increment);
//设置过期时间24小时
redisTemplate.expire(purchaseCodekey, 24, TimeUnit.HOURS);
StringBuilder sb = new StringBuilder();
sb.append(purchaseCodekey).append(sequence);
String purchaseCode = sb.toString();
moTaskPurchase.setPurchaseCode(purchaseCode);