@@ -32,4 +32,7 @@ public class Constant { | |||
public static final String importMemPrev = "importmem:"; | |||
public static final String adminPage = "https://admin.malls.iformall.com"; | |||
/// REDIS key Prev | |||
public static final String tt_cuser_customer_service_url_key = "cuser:serviceurl:"; | |||
} |
@@ -0,0 +1,165 @@ | |||
package com.iformall.utils; | |||
import com.alibaba.fastjson.JSON; | |||
import com.alibaba.fastjson.JSONObject; | |||
import com.alibaba.fastjson.TypeReference; | |||
import org.springframework.data.redis.core.RedisTemplate; | |||
import org.springframework.data.redis.core.ValueOperations; | |||
import java.util.List; | |||
import java.util.Map; | |||
import java.util.Set; | |||
import java.util.concurrent.TimeUnit; | |||
public class RedisCacheUtils { | |||
private static <T> T parseJson(String json,Class<T> clazz) { | |||
return JSON.parseObject(json,clazz); | |||
} | |||
private static <T> List<T> parseListJson(String json,Class<T> clazz) { | |||
return JSON.parseObject(json,new TypeReference<List<T>>(clazz) {}); | |||
} | |||
private static <T> Set<T> parseSetJson(String json,Class<T> clazz) { | |||
return JSON.parseObject(json,new TypeReference<Set<T>>(clazz) {}); | |||
} | |||
public static void cache(RedisTemplate<String, Object> template,String key, Object value,long seconds) { | |||
ValueOperations<String, Object> operations = template.opsForValue(); | |||
if (seconds > 0) { | |||
operations.set(key, value, seconds,TimeUnit.SECONDS); | |||
}else { | |||
operations.set(key, value); | |||
} | |||
} | |||
public static <T> T getCacheObject(RedisTemplate<String, Object> template,String key,Class<T> clazz) { | |||
if (template.hasKey(key)) { | |||
ValueOperations<String, Object> operations = template.opsForValue(); | |||
Object o = operations.get(key); | |||
if (o instanceof String) { | |||
return parseJson((String)o, clazz); | |||
}else { | |||
return parseJson(JSON.toJSONString(o), clazz); | |||
} | |||
} | |||
return null; | |||
} | |||
public static <T> List<T> getCacheListObject(RedisTemplate<String, Object> template,String key,Class<T> clazz) { | |||
if (template.hasKey(key)) { | |||
ValueOperations<String, Object> operations = template.opsForValue(); | |||
Object o = operations.get(key); | |||
if (o instanceof String) { | |||
return parseListJson((String)o, clazz); | |||
}else { | |||
return parseListJson(JSON.toJSONString(o), clazz); | |||
} | |||
} | |||
return null; | |||
} | |||
public static <T> Set<T> getCacheSetObject(RedisTemplate<String, Object> template,String key,Class<T> clazz) { | |||
if (template.hasKey(key)) { | |||
ValueOperations<String, Object> operations = template.opsForValue(); | |||
Object o = operations.get(key); | |||
if (o instanceof String) { | |||
return parseSetJson((String)o, clazz); | |||
}else { | |||
return parseSetJson(JSON.toJSONString(o), clazz); | |||
} | |||
} | |||
return null; | |||
} | |||
public static Map getCacheMap(RedisTemplate<String, Object> template,String key) { | |||
return getCacheObject(template,key,Map.class); | |||
} | |||
public static String getCacheString(RedisTemplate<String, Object> template,String key) { | |||
if (template.hasKey(key)) { | |||
ValueOperations<String, Object> operations = template.opsForValue(); | |||
Object o = operations.get(key); | |||
if( o instanceof String) { | |||
return (String) o; | |||
} | |||
return JSON.toJSONString(o); | |||
} | |||
return null; | |||
} | |||
public static Long getCacheLong(RedisTemplate<String, Object> template,String key) { | |||
if (template.hasKey(key)) { | |||
ValueOperations<String, Object> operations = template.opsForValue(); | |||
Object o = operations.get(key); | |||
if (o instanceof String) { | |||
Long.parseLong((String)o); | |||
} | |||
return Long.parseLong(o.toString()); | |||
} | |||
return null; | |||
} | |||
public static Integer getCacheInteger(RedisTemplate<String, Object> template,String key) { | |||
if (template.hasKey(key)) { | |||
ValueOperations<String, Object> operations = template.opsForValue(); | |||
Object o = operations.get(key); | |||
if (o instanceof String) { | |||
return new Integer((String)o); | |||
} | |||
return new Integer(o.toString()); | |||
} | |||
return null; | |||
} | |||
public static <T> T getFieldObject(Object o,String property,Class<T> clazz) { | |||
String json = JSON.toJSONString(o); | |||
JSONObject jsonObject = JSON.parseObject(json); | |||
Object p = jsonObject.get(property); | |||
if (null != p ) { | |||
if (p instanceof String) { | |||
return parseJson((String)p, clazz); | |||
} | |||
return parseJson(JSON.toJSONString(p), clazz); | |||
} | |||
return null; | |||
} | |||
public static <T> List<T> getFieldListObject(Object o,String property,Class<T> clazz) { | |||
String json = JSON.toJSONString(o); | |||
JSONObject jsonObject = JSON.parseObject(json); | |||
Object p = jsonObject.get(property); | |||
if (null != p ) { | |||
if (p instanceof String) { | |||
return parseListJson((String)p, clazz); | |||
} | |||
return parseListJson(JSON.toJSONString(p), clazz); | |||
} | |||
return null; | |||
} | |||
public static <T> Set<T> getFieldSetObject(Object o,String property,Class<T> clazz) { | |||
String json = JSON.toJSONString(o); | |||
JSONObject jsonObject = JSON.parseObject(json); | |||
Object p = jsonObject.get(property); | |||
if (null != p ) { | |||
if (p instanceof String) { | |||
return parseSetJson((String)p, clazz); | |||
} | |||
return parseSetJson(JSON.toJSONString(p), clazz); | |||
} | |||
return null; | |||
} | |||
public static Map getFieldMapObject(Object o,String property) { | |||
return getFieldObject(o,property,Map.class); | |||
} | |||
public static void removeCache(RedisTemplate<String, Object> template,String key) { | |||
if (template.hasKey(key)) { | |||
template.delete(key); | |||
} | |||
} | |||
} |
@@ -1,5 +1,9 @@ | |||
package com.iformall.config; | |||
import com.fasterxml.jackson.annotation.JsonAutoDetect; | |||
import com.fasterxml.jackson.annotation.PropertyAccessor; | |||
import com.fasterxml.jackson.databind.DeserializationFeature; | |||
import com.fasterxml.jackson.databind.ObjectMapper; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
import org.springframework.cache.CacheManager; | |||
@@ -10,6 +14,9 @@ import org.springframework.context.annotation.Configuration; | |||
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.core.RedisTemplate; | |||
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; | |||
import org.springframework.data.redis.serializer.StringRedisSerializer; | |||
import java.time.Duration; | |||
import java.util.HashMap; | |||
@@ -69,4 +76,25 @@ public class RedisConfig extends CachingConfigurerSupport { | |||
return cacheManager; | |||
} | |||
@Bean("objectCommonRedisTemplate") | |||
public RedisTemplate<String, Object> getObjectValueOperations(RedisConnectionFactory connectionFactory) { | |||
RedisTemplate<String, Object> template = new RedisTemplate<>(); | |||
template.setConnectionFactory(connectionFactory); | |||
Jackson2JsonRedisSerializer<Object> j = new Jackson2JsonRedisSerializer<Object>(Object.class); | |||
ObjectMapper om = new ObjectMapper(); | |||
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); | |||
om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); | |||
j.setObjectMapper(om); | |||
// value值的序列化 | |||
template.setValueSerializer(j); | |||
template.setHashValueSerializer(j); | |||
// key的序列化 | |||
template.setKeySerializer(new StringRedisSerializer()); | |||
template.setHashKeySerializer(new StringRedisSerializer()); | |||
template.afterPropertiesSet(); | |||
return template; | |||
} | |||
} |
@@ -1,6 +1,7 @@ | |||
package com.iformall.controller; | |||
import com.alibaba.fastjson.JSON; | |||
import com.alibaba.fastjson.JSONObject; | |||
import com.github.pagehelper.PageInfo; | |||
import com.iformall.common.ErrorCode; | |||
import com.iformall.common.ResultData; | |||
@@ -14,6 +15,8 @@ import com.iformall.service.TtMerchantPoiService; | |||
import com.iformall.service.WxAppinfoService; | |||
import com.iformall.service.toutiao.FmTtOpenService; | |||
import com.iformall.service.toutiao.api.TtOpenMaService; | |||
import com.iformall.utils.Constant; | |||
import com.iformall.utils.RedisCacheUtils; | |||
import io.swagger.annotations.ApiImplicitParam; | |||
import io.swagger.annotations.ApiImplicitParams; | |||
import io.swagger.annotations.ApiOperation; | |||
@@ -21,6 +24,8 @@ import org.apache.commons.lang3.StringUtils; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.beans.factory.annotation.Qualifier; | |||
import org.springframework.data.redis.core.RedisTemplate; | |||
import org.springframework.web.bind.annotation.*; | |||
import org.springframework.web.multipart.MultipartFile; | |||
@@ -43,6 +48,10 @@ public class TtMerchantPoiController extends BaseController { | |||
@Autowired | |||
protected FmTtOpenService openService; | |||
@Autowired | |||
@Qualifier("objectCommonRedisTemplate") | |||
RedisTemplate<String, Object> redisTemplate; | |||
@ApiOperation("分页列表接口") | |||
@GetMapping("list") | |||
@ApiImplicitParams({ | |||
@@ -323,16 +332,31 @@ public class TtMerchantPoiController extends BaseController { | |||
if(!type.equals("1128") && !type.equals("2329")){ | |||
return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); | |||
} | |||
WxAppinfo appinfo = appinfoService.getByAppId(appid); | |||
String key = Constant.tt_cuser_customer_service_url_key + "type:" | |||
+ appid + ":" + openid; | |||
String cacheString = RedisCacheUtils.getCacheString(redisTemplate, key); | |||
if(appinfo == null){ | |||
return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"找不到小程序信息"); | |||
if(StringUtils.isNotBlank(cacheString)){ | |||
return new ResultData(cacheString); | |||
} | |||
// WxAppinfo appinfo = appinfoService.getByAppId(appid); | |||
// | |||
// if(appinfo == null){ | |||
// return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"找不到小程序信息"); | |||
// } | |||
try{ | |||
TtOpenMaService openMaService = openService.getTtOpenComponentService().getTtMaServiceByAppid(appid); | |||
String res = openMaService.queryCustomerServiceUrl(openid,type); | |||
return new ResultData(res); | |||
JSONObject jsonObject = JSONObject.parseObject(res); | |||
Integer err_no = jsonObject.getInteger("err_no"); | |||
if(err_no.intValue() == 0){ | |||
RedisCacheUtils.cache(redisTemplate,key,res,24*3600); | |||
return new ResultData(res); | |||
}else{ | |||
String err_tips = jsonObject.getString("err_tips"); | |||
return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(),err_tips); | |||
} | |||
}catch(Exception e){ | |||
logger.error("获取客服链接 error"+ e.getMessage()); | |||
return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(),"获取客服链接失败"); | |||