diff --git a/code/smart-community/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/ActWithoutProofController.java b/code/smart-community/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/ActWithoutProofController.java index 1c198457..12b80a6a 100644 --- a/code/smart-community/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/ActWithoutProofController.java +++ b/code/smart-community/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/ActWithoutProofController.java @@ -36,11 +36,11 @@ public class ActWithoutProofController { */ @GetMapping("getAll") public Result getAll(@RequestParam Map params) throws IOException { - String token = ActWithoutProofUtils.getToken(); + String token = actWithoutProofService.getToken(false); if (StringUtils.isEmpty(token)) { return new Result().error(-1, "获取token失败,请联系管理员!"); } - params.put("token", token); + return new Result().ok(actWithoutProofService.getZmTasks(params)); } @@ -54,7 +54,7 @@ public class ActWithoutProofController { @GetMapping("getWzmProject") public Result> getWzmProject(@RequestParam Map params) throws IOException { String idCard = "", certType = "", qrcode = "", xm = "", zmtaskguid = ""; - String token = ActWithoutProofUtils.getToken(); + String token = actWithoutProofService.getToken(false); if (StringUtils.isEmpty(token)) { return new Result().error(-1, "获取token失败,请联系管理员!"); } @@ -72,13 +72,13 @@ public class ActWithoutProofController { if (null != params.get("zmtaskguid")) { zmtaskguid = (String) params.get("zmtaskguid"); } - return new Result().ok(actWithoutProofService.getWzmProject(token, idCard, certType, qrcode, xm, zmtaskguid)); + return new Result().ok(actWithoutProofService.getWzmProject(idCard, certType, qrcode, xm, zmtaskguid)); } @GetMapping("redealProject") public Result redealProject(@RequestParam Map params) throws IOException { String idCard = "", zmtaskguid = ""; - String token = ActWithoutProofUtils.getToken(); + String token = actWithoutProofService.getToken(false); if (StringUtils.isEmpty(token)) { return new Result().error(-1, "获取token失败,请联系管理员!"); } @@ -88,6 +88,6 @@ public class ActWithoutProofController { if (null != params.get("zmtaskguid")) { zmtaskguid = (String) params.get("zmtaskguid"); } - return new Result().ok(actWithoutProofService.redealProject(token, idCard, zmtaskguid)); + return new Result().ok(actWithoutProofService.redealProject(idCard, zmtaskguid)); } } diff --git a/code/smart-community/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/ActWithoutProofService.java b/code/smart-community/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/ActWithoutProofService.java index de5fe729..245331b5 100644 --- a/code/smart-community/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/ActWithoutProofService.java +++ b/code/smart-community/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/ActWithoutProofService.java @@ -34,7 +34,7 @@ public interface ActWithoutProofService { * @param xm 残疾人证和不动产权属状况证明必填 * @param zmtaskguid 证明guid */ - List getWzmProject(String token, String idCard, String certType, String qrcode, String xm, String zmtaskguid) throws IOException; + List getWzmProject(String idCard, String certType, String qrcode, String xm, String zmtaskguid) throws IOException; /** * 重新开具证明 @@ -44,5 +44,14 @@ public interface ActWithoutProofService { * @param zmtaskguid * @return */ - Result redealProject(String token, String idCard, String zmtaskguid) throws IOException; + Result redealProject(String idCard, String zmtaskguid) throws IOException; + + /** + * 获取token + * 先从缓存中获取 + * 如果缓存没有或失效从接口中获取 + * @param refresh 是否刷新token(true刷新false不刷新) + * @return + */ + String getToken(Boolean refresh) throws IOException;; } diff --git a/code/smart-community/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/ActWithoutProofServiceImpl.java b/code/smart-community/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/ActWithoutProofServiceImpl.java index 02e4b2ca..63eaab01 100644 --- a/code/smart-community/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/ActWithoutProofServiceImpl.java +++ b/code/smart-community/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/ActWithoutProofServiceImpl.java @@ -3,6 +3,7 @@ package com.epmet.service.impl; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.epmet.commons.tools.exception.EpmetException; +import com.epmet.commons.tools.redis.RedisUtils; import com.epmet.commons.tools.utils.Result; import com.epmet.dto.result.WzmDocumentRsultDTO; import com.epmet.dto.result.WzmProjectResultDTO; @@ -18,7 +19,9 @@ import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; +import javax.annotation.Resource; import java.io.IOException; import java.nio.charset.Charset; import java.util.ArrayList; @@ -35,9 +38,21 @@ import java.util.Map; @Service public class ActWithoutProofServiceImpl implements ActWithoutProofService { + @Resource + private RedisUtils redisUtils; + @Override public List getZmTasks(Map param) throws IOException { + + String listKey = "WITHOUT_PROOF_LIST"; + + List list = (List) redisUtils.get(listKey); + + if(!ObjectUtils.isEmpty(list)) { + return list; + } + CloseableHttpClient client = null; CloseableHttpResponse response = null; try { @@ -64,7 +79,7 @@ public class ActWithoutProofServiceImpl implements ActWithoutProofService { post.setHeader("appKey", ActWithoutProofUtils.APP_KEY); post.setHeader("Content-Type", "application/json"); params = new JSONObject(); - params.put("token", param.get("token")); + params.put("token", getToken(false)); params.put("params", baseEncode); post.setEntity(new StringEntity(params.toString(), Charset.forName("UTF-8"))); response = client.execute(post); @@ -72,19 +87,25 @@ public class ActWithoutProofServiceImpl implements ActWithoutProofService { JSONObject result = JSONObject.parseObject(EntityUtils.toString(response.getEntity())); List resultList = new ArrayList<>(); if (result.getString("code").equals("200")) { - JSONArray jsonArray = JSONObject.parseObject(result.getJSONObject("data").getString("custom")).getJSONArray("result"); - if (null != jsonArray && jsonArray.size() > 0) { - for (Object data : jsonArray) { - JSONObject j = JSONObject.parseObject(data.toString()); - WzmProjectResultDTO dto = new WzmProjectResultDTO(); - dto.setDealouname(j.getString("dealouname")); - dto.setRowguid(j.getString("rowguid")); - dto.setApplyertype(j.getString("applyertype")); - dto.setZmtaskname(j.getString("zmtaskname")); - resultList.add(dto); + if(isTokenExpire(result)) { + getToken(true); + } else { + JSONArray jsonArray = JSONObject.parseObject(result.getJSONObject("data").getString("custom")).getJSONArray("result"); + if (null != jsonArray && jsonArray.size() > 0) { + for (Object data : jsonArray) { + JSONObject j = JSONObject.parseObject(data.toString()); + WzmProjectResultDTO dto = new WzmProjectResultDTO(); + dto.setDealouname(j.getString("dealouname")); + dto.setRowguid(j.getString("rowguid")); + dto.setApplyertype(j.getString("applyertype")); + dto.setZmtaskname(j.getString("zmtaskname")); + resultList.add(dto); + } } + redisUtils.set(listKey, resultList); } log.info(result.toString()); + return resultList; } else { String erro = JSONObject.parseObject(result.getJSONObject("data").getString("custom")).getString("text"); @@ -102,7 +123,8 @@ public class ActWithoutProofServiceImpl implements ActWithoutProofService { } @Override - public List getWzmProject(String token, String idCard, String certType, String qrcode, String xm, String zmtaskguid) throws IOException { + public List getWzmProject(String idCard, String certType, String qrcode, String xm, String zmtaskguid) throws IOException { + CloseableHttpClient client = null; CloseableHttpResponse response = null; try { @@ -137,7 +159,7 @@ public class ActWithoutProofServiceImpl implements ActWithoutProofService { post.setHeader("Content-Type", "application/json"); post.setHeader("Accept-Encoding", "deflate/br"); params = new JSONObject(); - params.put("token", token); + params.put("token", getToken(false)); params.put("params", baseEncode); post.setEntity(new StringEntity(params.toString(), Charset.forName("UTF-8"))); response = client.execute(post); @@ -146,23 +168,27 @@ public class ActWithoutProofServiceImpl implements ActWithoutProofService { WzmDocumentRsultDTO dto = null; List dtoList= new ArrayList<>(); if (result.getString("code").equals("200")) { - JSONArray jsonArray = JSONObject.parseObject(result.getJSONObject("data").getString("custom")).getJSONArray("resultlist"); - if (null != jsonArray && jsonArray.size() > 0) { - JSONObject j = JSONObject.parseObject(jsonArray.get(0).toString()); - dto = new WzmDocumentRsultDTO(); - dto.setZmresultname(j.getString("zmresultname")); - if(StringUtils.isNotEmpty(j.getString("downloadurl"))){ - String url = j.getString("downloadurl"); - if (url.startsWith("http://172.20.84.138/")) { - url = url.replaceAll("http://172.20.84.138/", "https://rzzhsq.shuzirizhao.cn/"); + if(isTokenExpire(result)) { + getToken(true); + } else { + JSONArray jsonArray = JSONObject.parseObject(result.getJSONObject("data").getString("custom")).getJSONArray("resultlist"); + if (null != jsonArray && jsonArray.size() > 0) { + JSONObject j = JSONObject.parseObject(jsonArray.get(0).toString()); + dto = new WzmDocumentRsultDTO(); + dto.setZmresultname(j.getString("zmresultname")); + if (StringUtils.isNotEmpty(j.getString("downloadurl"))) { + String url = j.getString("downloadurl"); + if (url.startsWith("http://172.20.84.138/")) { + url = url.replaceAll("http://172.20.84.138/", "https://rzzhsq.shuzirizhao.cn/"); + } + dto.setDownloadurl(url); } - dto.setDownloadurl(url); - } - dto.setTimeqrcode(j.getString("timeqrcode")); - if(StringUtils.isNotEmpty(j.getString("base64str"))){ - dto.setBase64str("data:image/jpeg;base64," + j.getString("base64str")); + dto.setTimeqrcode(j.getString("timeqrcode")); + if (StringUtils.isNotEmpty(j.getString("base64str"))) { + dto.setBase64str("data:image/jpeg;base64," + j.getString("base64str")); + } + dtoList.add(dto); } - dtoList.add(dto); } return dtoList; } else { @@ -181,7 +207,7 @@ public class ActWithoutProofServiceImpl implements ActWithoutProofService { } @Override - public Result redealProject(String token, String idCard, String zmtaskguid) throws IOException { + public Result redealProject(String idCard, String zmtaskguid) throws IOException { CloseableHttpClient client = null; CloseableHttpResponse response = null; try { @@ -205,15 +231,20 @@ public class ActWithoutProofServiceImpl implements ActWithoutProofService { post.setHeader("appKey", ActWithoutProofUtils.APP_KEY); post.setHeader("Content-Type", "application/json"); params = new JSONObject(); - params.put("token", token); + params.put("token", getToken(false)); params.put("params", baseEncode); post.setEntity(new StringEntity(params.toString(), Charset.forName("UTF-8"))); response = client.execute(post); //返回 JSONObject result = JSONObject.parseObject(EntityUtils.toString(response.getEntity())); if (result.getString("code").equals("200")) { - JSONObject json = JSONObject.parseObject(result.getJSONObject("data").getString("custom")); - return new Result().ok(json.getString("text")); + if(isTokenExpire(result)) { + getToken(true); + return new Result().error("API调用失败,请重试"); + } else { + JSONObject json = JSONObject.parseObject(result.getJSONObject("data").getString("custom")); + return new Result().ok(json.getString("text")); + } } else { JSONObject json = JSONObject.parseObject(result.getJSONObject("data").getString("custom")); return new Result().error(-1, json.getString("text")); @@ -227,4 +258,72 @@ public class ActWithoutProofServiceImpl implements ActWithoutProofService { response.close(); } } + + @Override + public String getToken(Boolean refresh) throws IOException { + String tokenKey = "WITHOUT_PROOF_TOKEN"; + String token = null; + + if(refresh) { + token = getTokenAndRefresh(tokenKey); + } else { + token = (String) redisUtils.get(tokenKey); + if(StringUtils.isEmpty(token)) { + token = getTokenAndRefresh(tokenKey); + } + } + + return token; + } + + /*** + * 接口是否成功获取数据 + * @param result + * @return + */ + private Boolean isSuccess(JSONObject result) { + Boolean success = Boolean.FALSE; + if(result != null && !result.isEmpty()) { + JSONObject customObject = JSONObject.parseObject(result.getJSONObject("data").getString("custom")); + int code = customObject.getInteger("code"); + if(code == 1) { + success = Boolean.TRUE; + } + } + + return success; + } + + /** + * 是否token过期 + * @param result + * @return + */ + private Boolean isTokenExpire(JSONObject result) { + Boolean expire = Boolean.FALSE; + if(result != null && !result.isEmpty()) { + if(!isSuccess(result)) { + JSONObject customObject = JSONObject.parseObject(result.getJSONObject("data").getString("custom")); + int code = customObject.getInteger("code"); + String message = customObject.getString("text"); + if(code == 0 && "身份验证失败".equals(message)) { + expire = Boolean.TRUE; + } + } + } + return expire; + } + + /** + * 获取token并将token存入redis缓存 + * @param tokenKey + * @return + * @throws IOException + */ + private String getTokenAndRefresh(String tokenKey) throws IOException { + String token = null; + token = ActWithoutProofUtils.getToken(); + redisUtils.set(tokenKey, token); + return token; + } }