fix: 优化逻辑

This commit is contained in:
tangwei 2026-07-02 18:05:16 +08:00
parent 716ee0bfa9
commit 98afa05338
2 changed files with 71 additions and 10 deletions

View File

@ -5,15 +5,27 @@ import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.time.Duration;
import java.util.HashMap;
import java.util.Map;
@Configuration @Configuration
@EnableCaching
public class RedisConfig { public class RedisConfig {
@Bean @Bean
@ -21,19 +33,12 @@ public class RedisConfig {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory); redisTemplate.setConnectionFactory(redisConnectionFactory);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.registerModule(new JavaTimeModule());
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
Jackson2JsonRedisSerializer<Object> jsonSerializer = new Jackson2JsonRedisSerializer<>(objectMapper, Object.class);
StringRedisSerializer stringSerializer = new StringRedisSerializer(); StringRedisSerializer stringSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringSerializer); redisTemplate.setKeySerializer(stringSerializer);
redisTemplate.setHashKeySerializer(stringSerializer); redisTemplate.setHashKeySerializer(stringSerializer);
redisTemplate.setValueSerializer(jsonSerializer); redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer());
redisTemplate.setHashValueSerializer(jsonSerializer); redisTemplate.setHashValueSerializer(genericJackson2JsonRedisSerializer());
redisTemplate.afterPropertiesSet(); redisTemplate.afterPropertiesSet();
return redisTemplate; return redisTemplate;
@ -45,4 +50,51 @@ public class RedisConfig {
stringRedisTemplate.setConnectionFactory(redisConnectionFactory); stringRedisTemplate.setConnectionFactory(redisConnectionFactory);
return stringRedisTemplate; return stringRedisTemplate;
} }
@Bean
@Primary
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
RedisCacheConfiguration defaultConfig = RedisCacheConfiguration.defaultCacheConfig()
.prefixCacheNameWith("qgc:")
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(genericJackson2JsonRedisSerializer()))
.entryTtl(Duration.ofMinutes(30));
Map<String, RedisCacheConfiguration> cacheConfigs = new HashMap<>();
cacheConfigs.put("dictCache", defaultConfig.entryTtl(Duration.ofHours(6)));
cacheConfigs.put("dataCache", defaultConfig.entryTtl(Duration.ofMinutes(5)));
return RedisCacheManager.builder(redisConnectionFactory)
.cacheDefaults(defaultConfig)
.withInitialCacheConfigurations(cacheConfigs)
.build();
}
@Bean
public GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.registerModule(new JavaTimeModule());
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
return new GenericJackson2JsonRedisSerializer(objectMapper);
}
@Bean("customKeyGenerator")
public KeyGenerator customKeyGenerator() {
return (target, method, params) -> {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getSimpleName());
sb.append(":");
sb.append(method.getName());
sb.append(":");
for (Object param : params) {
sb.append(param != null ? param.toString() : "null");
sb.append(",");
}
if (sb.length() > 0 && sb.charAt(sb.length() - 1) == ',') {
sb.deleteCharAt(sb.length() - 1);
}
return sb.toString();
};
}
} }

View File

@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yfd.platform.qgc_base.domain.SdHycdDic; import com.yfd.platform.qgc_base.domain.SdHycdDic;
import com.yfd.platform.qgc_base.mapper.SdHycdDicMapper; import com.yfd.platform.qgc_base.mapper.SdHycdDicMapper;
import com.yfd.platform.qgc_base.service.ISdHycdDicService; import com.yfd.platform.qgc_base.service.ISdHycdDicService;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
@ -27,6 +29,7 @@ public class SdHycdDicServiceImpl extends ServiceImpl<SdHycdDicMapper, SdHycdDic
} }
@Override @Override
@Cacheable(cacheNames = "dictCache", key = "'hycd:phycd:' + #phycd")
public List<SdHycdDic> getByPhycd(String phycd) { public List<SdHycdDic> getByPhycd(String phycd) {
return this.lambdaQuery() return this.lambdaQuery()
.eq(SdHycdDic::getPhycd, phycd) .eq(SdHycdDic::getPhycd, phycd)
@ -35,6 +38,7 @@ public class SdHycdDicServiceImpl extends ServiceImpl<SdHycdDicMapper, SdHycdDic
} }
@Override @Override
@Cacheable(cacheNames = "dictCache", key = "'hycd:root'")
public List<SdHycdDic> getRootList() { public List<SdHycdDic> getRootList() {
return this.lambdaQuery() return this.lambdaQuery()
.eq(SdHycdDic::getPhycd, "0") .eq(SdHycdDic::getPhycd, "0")
@ -43,21 +47,25 @@ public class SdHycdDicServiceImpl extends ServiceImpl<SdHycdDicMapper, SdHycdDic
} }
@Override @Override
@CacheEvict(cacheNames = "dictCache", allEntries = true)
public boolean addHycdDic(SdHycdDic hycdDic) { public boolean addHycdDic(SdHycdDic hycdDic) {
return this.save(hycdDic); return this.save(hycdDic);
} }
@Override @Override
@CacheEvict(cacheNames = "dictCache", allEntries = true)
public boolean updateHycdDic(SdHycdDic hycdDic) { public boolean updateHycdDic(SdHycdDic hycdDic) {
return this.updateById(hycdDic); return this.updateById(hycdDic);
} }
@Override @Override
@CacheEvict(cacheNames = "dictCache", allEntries = true)
public boolean deleteHycdDic(String hycd) { public boolean deleteHycdDic(String hycd) {
return this.removeById(hycd); return this.removeById(hycd);
} }
@Override @Override
@Cacheable(cacheNames = "dictCache", keyGenerator = "customKeyGenerator")
public List<SdHycdDic> selectForDropdown(String hynm, Integer grd, Integer lx,String phycd) { public List<SdHycdDic> selectForDropdown(String hynm, Integer grd, Integer lx,String phycd) {
return this.lambdaQuery() return this.lambdaQuery()
.like(hynm != null && !hynm.isEmpty(), SdHycdDic::getHynm, hynm) .like(hynm != null && !hynm.isEmpty(), SdHycdDic::getHynm, hynm)
@ -69,6 +77,7 @@ public class SdHycdDicServiceImpl extends ServiceImpl<SdHycdDicMapper, SdHycdDic
} }
@Override @Override
@Cacheable(cacheNames = "dictCache", keyGenerator = "customKeyGenerator")
public List<SdHycdDic> regDropdown(String hynm, Integer grd,Integer lx,String phycd) { public List<SdHycdDic> regDropdown(String hynm, Integer grd,Integer lx,String phycd) {
return this.lambdaQuery() return this.lambdaQuery()
.like(hynm != null && !hynm.isEmpty(), SdHycdDic::getHynm, hynm) .like(hynm != null && !hynm.isEmpty(), SdHycdDic::getHynm, hynm)