Browse Source

【功能优化】无证明对接增加缓存

1.无证明获取token增加缓存,待接口身份验证失败时重新获取token({"code":"200","msg":"","data":"{\"custom\":{\"code\":0,\"text\":\"身份验证失败\"},\"status\":{\"code\":200,\"text\":\"\"}}"})
2.缓存所有证明列表
3.所有接口默认去缓存token,身份验证失败时从接口刷新token
national_dev
Bill 2 years ago
parent
commit
3d78edd41d
  1. 12
      code/smart-community/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/ActWithoutProofController.java
  2. 13
      code/smart-community/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/ActWithoutProofService.java
  3. 163
      code/smart-community/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/ActWithoutProofServiceImpl.java

12
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") @GetMapping("getAll")
public Result getAll(@RequestParam Map<String, Object> params) throws IOException { public Result getAll(@RequestParam Map<String, Object> params) throws IOException {
String token = ActWithoutProofUtils.getToken(); String token = actWithoutProofService.getToken(false);
if (StringUtils.isEmpty(token)) { if (StringUtils.isEmpty(token)) {
return new Result().error(-1, "获取token失败,请联系管理员!"); return new Result().error(-1, "获取token失败,请联系管理员!");
} }
params.put("token", token);
return new Result().ok(actWithoutProofService.getZmTasks(params)); return new Result().ok(actWithoutProofService.getZmTasks(params));
} }
@ -54,7 +54,7 @@ public class ActWithoutProofController {
@GetMapping("getWzmProject") @GetMapping("getWzmProject")
public Result<List<WzmDocumentRsultDTO>> getWzmProject(@RequestParam Map<String, Object> params) throws IOException { public Result<List<WzmDocumentRsultDTO>> getWzmProject(@RequestParam Map<String, Object> params) throws IOException {
String idCard = "", certType = "", qrcode = "", xm = "", zmtaskguid = ""; String idCard = "", certType = "", qrcode = "", xm = "", zmtaskguid = "";
String token = ActWithoutProofUtils.getToken(); String token = actWithoutProofService.getToken(false);
if (StringUtils.isEmpty(token)) { if (StringUtils.isEmpty(token)) {
return new Result().error(-1, "获取token失败,请联系管理员!"); return new Result().error(-1, "获取token失败,请联系管理员!");
} }
@ -72,13 +72,13 @@ public class ActWithoutProofController {
if (null != params.get("zmtaskguid")) { if (null != params.get("zmtaskguid")) {
zmtaskguid = (String) 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") @GetMapping("redealProject")
public Result redealProject(@RequestParam Map<String, Object> params) throws IOException { public Result redealProject(@RequestParam Map<String, Object> params) throws IOException {
String idCard = "", zmtaskguid = ""; String idCard = "", zmtaskguid = "";
String token = ActWithoutProofUtils.getToken(); String token = actWithoutProofService.getToken(false);
if (StringUtils.isEmpty(token)) { if (StringUtils.isEmpty(token)) {
return new Result().error(-1, "获取token失败,请联系管理员!"); return new Result().error(-1, "获取token失败,请联系管理员!");
} }
@ -88,6 +88,6 @@ public class ActWithoutProofController {
if (null != params.get("zmtaskguid")) { if (null != params.get("zmtaskguid")) {
zmtaskguid = (String) 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));
} }
} }

13
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 xm 残疾人证和不动产权属状况证明必填
* @param zmtaskguid 证明guid * @param zmtaskguid 证明guid
*/ */
List<WzmDocumentRsultDTO> getWzmProject(String token, String idCard, String certType, String qrcode, String xm, String zmtaskguid) throws IOException; List<WzmDocumentRsultDTO> getWzmProject(String idCard, String certType, String qrcode, String xm, String zmtaskguid) throws IOException;
/** /**
* 重新开具证明 * 重新开具证明
@ -44,5 +44,14 @@ public interface ActWithoutProofService {
* @param zmtaskguid * @param zmtaskguid
* @return * @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;;
} }

163
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.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.epmet.commons.tools.exception.EpmetException; import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.result.WzmDocumentRsultDTO; import com.epmet.dto.result.WzmDocumentRsultDTO;
import com.epmet.dto.result.WzmProjectResultDTO; 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.impl.client.HttpClients;
import org.apache.http.util.EntityUtils; import org.apache.http.util.EntityUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.util.ArrayList; import java.util.ArrayList;
@ -35,9 +38,21 @@ import java.util.Map;
@Service @Service
public class ActWithoutProofServiceImpl implements ActWithoutProofService { public class ActWithoutProofServiceImpl implements ActWithoutProofService {
@Resource
private RedisUtils redisUtils;
@Override @Override
public List<WzmProjectResultDTO> getZmTasks(Map<String, Object> param) throws IOException { public List<WzmProjectResultDTO> getZmTasks(Map<String, Object> param) throws IOException {
String listKey = "WITHOUT_PROOF_LIST";
List<WzmProjectResultDTO> list = (List<WzmProjectResultDTO>) redisUtils.get(listKey);
if(!ObjectUtils.isEmpty(list)) {
return list;
}
CloseableHttpClient client = null; CloseableHttpClient client = null;
CloseableHttpResponse response = null; CloseableHttpResponse response = null;
try { try {
@ -64,7 +79,7 @@ public class ActWithoutProofServiceImpl implements ActWithoutProofService {
post.setHeader("appKey", ActWithoutProofUtils.APP_KEY); post.setHeader("appKey", ActWithoutProofUtils.APP_KEY);
post.setHeader("Content-Type", "application/json"); post.setHeader("Content-Type", "application/json");
params = new JSONObject(); params = new JSONObject();
params.put("token", param.get("token")); params.put("token", getToken(false));
params.put("params", baseEncode); params.put("params", baseEncode);
post.setEntity(new StringEntity(params.toString(), Charset.forName("UTF-8"))); post.setEntity(new StringEntity(params.toString(), Charset.forName("UTF-8")));
response = client.execute(post); response = client.execute(post);
@ -72,19 +87,25 @@ public class ActWithoutProofServiceImpl implements ActWithoutProofService {
JSONObject result = JSONObject.parseObject(EntityUtils.toString(response.getEntity())); JSONObject result = JSONObject.parseObject(EntityUtils.toString(response.getEntity()));
List<WzmProjectResultDTO> resultList = new ArrayList<>(); List<WzmProjectResultDTO> resultList = new ArrayList<>();
if (result.getString("code").equals("200")) { if (result.getString("code").equals("200")) {
JSONArray jsonArray = JSONObject.parseObject(result.getJSONObject("data").getString("custom")).getJSONArray("result"); if(isTokenExpire(result)) {
if (null != jsonArray && jsonArray.size() > 0) { getToken(true);
for (Object data : jsonArray) { } else {
JSONObject j = JSONObject.parseObject(data.toString()); JSONArray jsonArray = JSONObject.parseObject(result.getJSONObject("data").getString("custom")).getJSONArray("result");
WzmProjectResultDTO dto = new WzmProjectResultDTO(); if (null != jsonArray && jsonArray.size() > 0) {
dto.setDealouname(j.getString("dealouname")); for (Object data : jsonArray) {
dto.setRowguid(j.getString("rowguid")); JSONObject j = JSONObject.parseObject(data.toString());
dto.setApplyertype(j.getString("applyertype")); WzmProjectResultDTO dto = new WzmProjectResultDTO();
dto.setZmtaskname(j.getString("zmtaskname")); dto.setDealouname(j.getString("dealouname"));
resultList.add(dto); 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()); log.info(result.toString());
return resultList; return resultList;
} else { } else {
String erro = JSONObject.parseObject(result.getJSONObject("data").getString("custom")).getString("text"); String erro = JSONObject.parseObject(result.getJSONObject("data").getString("custom")).getString("text");
@ -102,7 +123,8 @@ public class ActWithoutProofServiceImpl implements ActWithoutProofService {
} }
@Override @Override
public List<WzmDocumentRsultDTO> getWzmProject(String token, String idCard, String certType, String qrcode, String xm, String zmtaskguid) throws IOException { public List<WzmDocumentRsultDTO> getWzmProject(String idCard, String certType, String qrcode, String xm, String zmtaskguid) throws IOException {
CloseableHttpClient client = null; CloseableHttpClient client = null;
CloseableHttpResponse response = null; CloseableHttpResponse response = null;
try { try {
@ -137,7 +159,7 @@ public class ActWithoutProofServiceImpl implements ActWithoutProofService {
post.setHeader("Content-Type", "application/json"); post.setHeader("Content-Type", "application/json");
post.setHeader("Accept-Encoding", "deflate/br"); post.setHeader("Accept-Encoding", "deflate/br");
params = new JSONObject(); params = new JSONObject();
params.put("token", token); params.put("token", getToken(false));
params.put("params", baseEncode); params.put("params", baseEncode);
post.setEntity(new StringEntity(params.toString(), Charset.forName("UTF-8"))); post.setEntity(new StringEntity(params.toString(), Charset.forName("UTF-8")));
response = client.execute(post); response = client.execute(post);
@ -146,23 +168,27 @@ public class ActWithoutProofServiceImpl implements ActWithoutProofService {
WzmDocumentRsultDTO dto = null; WzmDocumentRsultDTO dto = null;
List<WzmDocumentRsultDTO> dtoList= new ArrayList<>(); List<WzmDocumentRsultDTO> dtoList= new ArrayList<>();
if (result.getString("code").equals("200")) { if (result.getString("code").equals("200")) {
JSONArray jsonArray = JSONObject.parseObject(result.getJSONObject("data").getString("custom")).getJSONArray("resultlist"); if(isTokenExpire(result)) {
if (null != jsonArray && jsonArray.size() > 0) { getToken(true);
JSONObject j = JSONObject.parseObject(jsonArray.get(0).toString()); } else {
dto = new WzmDocumentRsultDTO(); JSONArray jsonArray = JSONObject.parseObject(result.getJSONObject("data").getString("custom")).getJSONArray("resultlist");
dto.setZmresultname(j.getString("zmresultname")); if (null != jsonArray && jsonArray.size() > 0) {
if(StringUtils.isNotEmpty(j.getString("downloadurl"))){ JSONObject j = JSONObject.parseObject(jsonArray.get(0).toString());
String url = j.getString("downloadurl"); dto = new WzmDocumentRsultDTO();
if (url.startsWith("http://172.20.84.138/")) { dto.setZmresultname(j.getString("zmresultname"));
url = url.replaceAll("http://172.20.84.138/", "https://rzzhsq.shuzirizhao.cn/"); 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.setTimeqrcode(j.getString("timeqrcode")); dto.setBase64str("data:image/jpeg;base64," + j.getString("base64str"));
if(StringUtils.isNotEmpty(j.getString("base64str"))){ }
dto.setBase64str("data:image/jpeg;base64," + j.getString("base64str")); dtoList.add(dto);
} }
dtoList.add(dto);
} }
return dtoList; return dtoList;
} else { } else {
@ -181,7 +207,7 @@ public class ActWithoutProofServiceImpl implements ActWithoutProofService {
} }
@Override @Override
public Result redealProject(String token, String idCard, String zmtaskguid) throws IOException { public Result redealProject(String idCard, String zmtaskguid) throws IOException {
CloseableHttpClient client = null; CloseableHttpClient client = null;
CloseableHttpResponse response = null; CloseableHttpResponse response = null;
try { try {
@ -205,15 +231,20 @@ public class ActWithoutProofServiceImpl implements ActWithoutProofService {
post.setHeader("appKey", ActWithoutProofUtils.APP_KEY); post.setHeader("appKey", ActWithoutProofUtils.APP_KEY);
post.setHeader("Content-Type", "application/json"); post.setHeader("Content-Type", "application/json");
params = new JSONObject(); params = new JSONObject();
params.put("token", token); params.put("token", getToken(false));
params.put("params", baseEncode); params.put("params", baseEncode);
post.setEntity(new StringEntity(params.toString(), Charset.forName("UTF-8"))); post.setEntity(new StringEntity(params.toString(), Charset.forName("UTF-8")));
response = client.execute(post); response = client.execute(post);
//返回 //返回
JSONObject result = JSONObject.parseObject(EntityUtils.toString(response.getEntity())); JSONObject result = JSONObject.parseObject(EntityUtils.toString(response.getEntity()));
if (result.getString("code").equals("200")) { if (result.getString("code").equals("200")) {
JSONObject json = JSONObject.parseObject(result.getJSONObject("data").getString("custom")); if(isTokenExpire(result)) {
return new Result().ok(json.getString("text")); 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 { } else {
JSONObject json = JSONObject.parseObject(result.getJSONObject("data").getString("custom")); JSONObject json = JSONObject.parseObject(result.getJSONObject("data").getString("custom"));
return new Result().error(-1, json.getString("text")); return new Result().error(-1, json.getString("text"));
@ -227,4 +258,72 @@ public class ActWithoutProofServiceImpl implements ActWithoutProofService {
response.close(); 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;
}
} }

Loading…
Cancel
Save