/** * Copyright (c) 2018 人人开源 All rights reserved. *

* https://www.renren.io *

* 版权所有,侵权必究! */ package com.epmet.redis; import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl; import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl; import com.alibaba.fastjson.JSON; import com.epmet.commons.tools.redis.RedisKeys; import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.Result; import com.epmet.dto.CustomerAppDTO; import com.epmet.dto.CustomerAppRedisDTO; import com.epmet.feign.OperCrmOpenFeignClient; import com.google.common.collect.Maps; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.SetOperations; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import java.util.List; import java.util.Map; import java.util.Set; /** * 客户app Redis * * @author Mark sunlightcs@gmail.com * @since 1.0.0 */ @Component public class CustomerAppWxServiceUtil implements ApplicationRunner { private static Logger logger = LogManager.getLogger(CustomerAppWxServiceUtil.class); /** * 过期时长为30分钟,单位:秒 */ private final static long MINUTE_THIRTY_EXPIRE = 60 * 60 * 24 * 7L; private final static String JSON_STR = "JSON"; @Autowired private RedisTemplate redisTemplate; @Autowired private OperCrmOpenFeignClient operCrmOpenFeignClient; private static Map maServices = Maps.newConcurrentMap(); public static WxMaService getWxMaService(String appId) { WxMaService wxMaService = maServices.get(appId); if (wxMaService == null) { logger.error("getMaService appId:{} is not config from customer_app", appId); } return wxMaService; } @Override public void run(ApplicationArguments args) { initWxMaService(); } public Set initWxMaService() { Map maServicesNew = Maps.newConcurrentMap(); SetOperations appSet = null; List result = null; String appKey = RedisKeys.getCustomerAppKey(); try { appSet = redisTemplate.opsForSet(); Set members = appSet.members(appKey); if (!CollectionUtils.isEmpty(members)) { members.forEach(app -> { WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl(); config.setAppid(app.getAppId()); config.setSecret(app.getSecret()); config.setMsgDataFormat(JSON_STR); WxMaService service = new WxMaServiceImpl(); service.setWxMaConfig(config); maServicesNew.put(app.getAppId(), service); }); } } catch (Exception ex) { logger.error("init wxMaService from redis error", ex); } try { Result> configAllAppResult = operCrmOpenFeignClient.getConfigAllApp(); logger.info("wxMaService operCrmOpenFeignClient.getConfigAllApp result:{}", JSON.toJSONString(configAllAppResult)); if (configAllAppResult == null || !configAllAppResult.success()) { logger.info("wxMaService operCrmOpenFeignClient.getConfigAllApp fail"); return maServicesNew.keySet(); } result = configAllAppResult.getData(); result.forEach(app -> { WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl(); config.setAppid(app.getAppId()); config.setSecret(app.getSecret()); config.setMsgDataFormat(JSON_STR); WxMaService service = new WxMaServiceImpl(); service.setWxMaConfig(config); maServicesNew.put(app.getAppId(), service); }); } catch (Exception e) { logger.error("init wxMaService from db exception", e); } if (maServicesNew.size() > 0) { maServices = maServicesNew; if (appSet != null && result != null) { for (CustomerAppDTO app : result) { CustomerAppRedisDTO appRedis = ConvertUtils.sourceToTarget(app, CustomerAppRedisDTO.class); if(appRedis == null){ logger.warn("init CustomerAppRedis fail,convert return null,appDB:{}",JSON.toJSONString(app)); continue; } appSet.add(appKey, appRedis); } } } return maServicesNew.keySet(); } }