| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -4,7 +4,7 @@ import com.alibaba.fastjson.JSON; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import com.alibaba.fastjson.JSONObject; | 
					 | 
					 | 
					 | 
					import com.alibaba.fastjson.JSONObject; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import com.ynxbd.push.config.EhCacheConfig; | 
					 | 
					 | 
					 | 
					import com.ynxbd.push.config.EhCacheConfig; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import com.ynxbd.push.config.IniConfig; | 
					 | 
					 | 
					 | 
					import com.ynxbd.push.config.IniConfig; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import com.ynxbd.push.entity.xbd.wx.RespAccessToken; | 
					 | 
					 | 
					 | 
					import com.ynxbd.push.entity.xbd.wx.AccessToken; | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import com.ynxbd.push.helper.DateHelper; | 
					 | 
					 | 
					 | 
					import com.ynxbd.push.helper.DateHelper; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import com.ynxbd.push.helper.DesEncryptHelper; | 
					 | 
					 | 
					 | 
					import com.ynxbd.push.helper.DesEncryptHelper; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import com.ynxbd.push.helper.RequestHelper; | 
					 | 
					 | 
					 | 
					import com.ynxbd.push.helper.RequestHelper; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -14,18 +14,17 @@ import org.ehcache.Cache; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					@Slf4j | 
					 | 
					 | 
					 | 
					@Slf4j | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					public class WxCacheRequest { | 
					 | 
					 | 
					 | 
					public class WxCacheRequest { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    private static final String SERVICE_URL = "http://127.0.0.1:8080/wx/api/getWxAccessToken.do"; | 
					 | 
					 | 
					 | 
					    private static final String SERVICE_URL = "http://127.0.0.1:8080/wx/api/getWxAccessToken.do"; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    private static final String LOCALHOST_URL = "http://wx.mzsrmyy.net/wx/api/getWxAccessToken.do"; | 
					 | 
					 | 
					 | 
					    private static final String LOCALHOST_URL = "http://wx.hhzyy.com/wx/api/getWxAccessToken.do"; | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    private static final int MAX_RETRY = 3; | 
					 | 
					 | 
					 | 
					    private static final int MAX_RETRY = 3; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    static { | 
					 | 
					 | 
					 | 
					    static { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        createAccessTokenCache(); | 
					 | 
					 | 
					 | 
					        createAccessTokenCache(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    } | 
					 | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // 缓存
 | 
					 | 
					 | 
					 | 
					    // 缓存
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    private static Cache<String, RespAccessToken> ACCESS_TOKEN_CACHE; | 
					 | 
					 | 
					 | 
					    private static Cache<String, AccessToken> ACCESS_TOKEN_CACHE; | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    private static final String CACHE_NAME = "access_token"; | 
					 | 
					 | 
					 | 
					    private static final String CACHE_NAME = "access_token"; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    private static final long CACHE_TIME = 7100; | 
					 | 
					 | 
					 | 
					    private static final long CACHE_TIME = 7100; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -33,39 +32,51 @@ public class WxCacheRequest { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    private synchronized static void createAccessTokenCache() { | 
					 | 
					 | 
					 | 
					    private synchronized static void createAccessTokenCache() { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if (ACCESS_TOKEN_CACHE == null) { | 
					 | 
					 | 
					 | 
					        if (ACCESS_TOKEN_CACHE == null) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            ACCESS_TOKEN_CACHE = EhCacheConfig.createCacheTTL(String.class, RespAccessToken.class, "wx_access_token_cache", (CACHE_TIME)); // 一个半小时
 | 
					 | 
					 | 
					 | 
					            ACCESS_TOKEN_CACHE = EhCacheConfig.createCacheTTL(String.class, AccessToken.class, "wx_access_token_cache", (CACHE_TIME)); // 一个半小时
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        } | 
					 | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    } | 
					 | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    public static String getAccessToken() { | 
					 | 
					 | 
					 | 
					    public static String getAccessToken() { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        RespAccessToken respAccessToken = getWxAccessToken(); | 
					 | 
					 | 
					 | 
					        AccessToken accessToken = getWxAccessToken(); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if (respAccessToken == null) { | 
					 | 
					 | 
					 | 
					        if (accessToken == null) { | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            return null; | 
					 | 
					 | 
					 | 
					            return null; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        } | 
					 | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        return respAccessToken.getAccessToken(); | 
					 | 
					 | 
					 | 
					        return accessToken.getAccessToken(); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    } | 
					 | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    /** | 
					 | 
					 | 
					 | 
					    /** | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     * 获取微信token | 
					 | 
					 | 
					 | 
					     * 获取微信token | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     */ | 
					 | 
					 | 
					 | 
					     */ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    private synchronized static RespAccessToken getWxAccessToken() { | 
					 | 
					 | 
					 | 
					    private synchronized static AccessToken getWxAccessToken() { | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if (ACCESS_TOKEN_CACHE == null) { | 
					 | 
					 | 
					 | 
					        if (ACCESS_TOKEN_CACHE == null) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            createAccessTokenCache(); | 
					 | 
					 | 
					 | 
					            createAccessTokenCache(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        } | 
					 | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        log.info("启动医院为:{}", IniConfig.getInstance("name")); | 
					 | 
					 | 
					 | 
					        log.info("启动医院为:{}", IniConfig.getInstance("name")); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        try { | 
					 | 
					 | 
					 | 
					        try { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            RespAccessToken respAccessToken = ACCESS_TOKEN_CACHE.get(CACHE_NAME); | 
					 | 
					 | 
					 | 
					            AccessToken token = new AccessToken(); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            if (respAccessToken == null) { | 
					 | 
					 | 
					 | 
					            AccessToken cacheToken = ACCESS_TOKEN_CACHE.get(CACHE_NAME); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                respAccessToken = againGetWxAccessToken(); | 
					 | 
					 | 
					 | 
					            if (cacheToken != null) { | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                ACCESS_TOKEN_CACHE.put(CACHE_NAME, respAccessToken); | 
					 | 
					 | 
					 | 
					                if (7200 > DateHelper.differCurSecond(cacheToken.getCreateTime())) { // 允许100s的旧token存在(5分钟内可以继续使用佬)
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                return respAccessToken; | 
					 | 
					 | 
					 | 
					                    AccessToken respToken = againGetWxAccessToken(); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                    if (respToken != null) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                        token.setAccessToken(respToken.getAccessToken()); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                        token.setCreateTime(respToken.getCreateTime()); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                        ACCESS_TOKEN_CACHE.put(CACHE_NAME, respToken); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                    } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                } else { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                    token.setAccessToken(cacheToken.getAccessToken()); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                    token.setCreateTime(cacheToken.getCreateTime()); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                return token; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            } | 
					 | 
					 | 
					 | 
					            } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            if (7200 > DateHelper.differCurSecond(respAccessToken.getCreateTime())) { // 允许100s的旧token存在(5分钟内可以继续使用佬)
 | 
					 | 
					 | 
					 | 
					            AccessToken respToken = againGetWxAccessToken(); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                respAccessToken = againGetWxAccessToken(); | 
					 | 
					 | 
					 | 
					            if (respToken != null) { | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                ACCESS_TOKEN_CACHE.put(CACHE_NAME, respAccessToken); | 
					 | 
					 | 
					 | 
					                token.setAccessToken(respToken.getAccessToken()); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                return respAccessToken; | 
					 | 
					 | 
					 | 
					                token.setCreateTime(respToken.getCreateTime()); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                ACCESS_TOKEN_CACHE.put(CACHE_NAME, respToken); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            } | 
					 | 
					 | 
					 | 
					            } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            return token; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        } catch (Exception e) { | 
					 | 
					 | 
					 | 
					        } catch (Exception e) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            log.error("请求微信获取Token错误:{}", e.getMessage()); | 
					 | 
					 | 
					 | 
					            log.error("请求微信获取Token错误:{}", e.getMessage()); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        } | 
					 | 
					 | 
					 | 
					        } | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -75,15 +86,15 @@ public class WxCacheRequest { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    /** | 
					 | 
					 | 
					 | 
					    /** | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     * 根据次数循环获取 | 
					 | 
					 | 
					 | 
					     * 根据次数循环获取 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     */ | 
					 | 
					 | 
					 | 
					     */ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    private static RespAccessToken againGetWxAccessToken() { | 
					 | 
					 | 
					 | 
					    private static AccessToken againGetWxAccessToken() { | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        RespAccessToken respAccessToken = null; | 
					 | 
					 | 
					 | 
					        AccessToken accessToken; | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        for (int i = 0; i < MAX_RETRY; i++) { | 
					 | 
					 | 
					 | 
					        for (int i = 0; i < MAX_RETRY; i++) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            respAccessToken = requestWxAccessToken(); | 
					 | 
					 | 
					 | 
					            accessToken = requestWxAccessToken(); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            if (i != 0) { | 
					 | 
					 | 
					 | 
					            if (i != 0) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                log.error("重试请求第{}次", (i + 1)); | 
					 | 
					 | 
					 | 
					                log.error("重试请求第{}次", (i + 1)); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            } | 
					 | 
					 | 
					 | 
					            } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            if (respAccessToken != null) { | 
					 | 
					 | 
					 | 
					            if (accessToken != null) { | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                return respAccessToken; | 
					 | 
					 | 
					 | 
					                return accessToken; | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            } | 
					 | 
					 | 
					 | 
					            } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            if ((i + 1) == MAX_RETRY) { | 
					 | 
					 | 
					 | 
					            if ((i + 1) == MAX_RETRY) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                log.error("{} 次请求后未获取到正确token", MAX_RETRY); | 
					 | 
					 | 
					 | 
					                log.error("{} 次请求后未获取到正确token", MAX_RETRY); | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -96,9 +107,10 @@ public class WxCacheRequest { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    /** | 
					 | 
					 | 
					 | 
					    /** | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     * 请求微信token | 
					 | 
					 | 
					 | 
					     * 请求微信token | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     */ | 
					 | 
					 | 
					 | 
					     */ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    private static RespAccessToken requestWxAccessToken() { | 
					 | 
					 | 
					 | 
					    private static AccessToken requestWxAccessToken() { | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        try { | 
					 | 
					 | 
					 | 
					        try { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            JSONObject respJson = RequestHelper.getJsonObj(SERVICE_URL, null); | 
					 | 
					 | 
					 | 
					            JSONObject respJson = RequestHelper.getJsonObj(LOCALHOST_URL, null); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            log.info("[token请求]resp={}", respJson); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            String code = respJson.getString("code"); | 
					 | 
					 | 
					 | 
					            String code = respJson.getString("code"); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            if (!"200".equals(code)) { | 
					 | 
					 | 
					 | 
					            if (!"200".equals(code)) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                log.info("请求token失败 code={}, message={}", code, respJson.getString("message")); | 
					 | 
					 | 
					 | 
					                log.info("请求token失败 code={}, message={}", code, respJson.getString("message")); | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -108,7 +120,8 @@ public class WxCacheRequest { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            if (data == null || "".equals(data)) { | 
					 | 
					 | 
					 | 
					            if (data == null || "".equals(data)) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                return null; | 
					 | 
					 | 
					 | 
					                return null; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            } | 
					 | 
					 | 
					 | 
					            } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            RespAccessToken resp = JSON.parseObject(data, RespAccessToken.class); | 
					 | 
					 | 
					 | 
					            AccessToken resp = JSON.parseObject(data, AccessToken.class); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            System.out.println(resp); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            if (resp == null) { | 
					 | 
					 | 
					 | 
					            if (resp == null) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                return null; | 
					 | 
					 | 
					 | 
					                return null; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            } | 
					 | 
					 | 
					 | 
					            } | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |