ChannelServiceImpl.java 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893
  1. package info.aspirecn.iov.sjjh.supplier10000040.service;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.alibaba.fastjson.serializer.SerializerFeature;
  5. import com.fasterxml.jackson.databind.ObjectMapper;
  6. import com.jcraft.jsch.JSchException;
  7. import com.jcraft.jsch.SftpException;
  8. import info.aspirecn.iov.sjjh.commons.lang.ChannelTypeHandleResponseObject;
  9. import info.aspirecn.iov.sjjh.commons.lang.Constant;
  10. import info.aspirecn.iov.sjjh.commons.lang.PatternTools;
  11. import info.aspirecn.iov.sjjh.supplier10000040.constant.ChannelConstant;
  12. import info.aspirecn.iov.sjjh.supplier10000040.model.*;
  13. import info.aspirecn.iov.sjjh.supplier10000040.util.*;
  14. import info.aspirecn.rdc.aspirecloud.node.except.utils.ErrorUtils;
  15. import lombok.extern.slf4j.Slf4j;
  16. import okhttp3.*;
  17. import org.apache.commons.codec.binary.Base64;
  18. import org.apache.commons.lang3.StringUtils;
  19. import org.springframework.beans.BeanUtils;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.beans.factory.annotation.Qualifier;
  22. import org.springframework.beans.factory.annotation.Value;
  23. import org.springframework.data.redis.core.StringRedisTemplate;
  24. import org.springframework.stereotype.Service;
  25. import sun.rmi.runtime.Log;
  26. import javax.servlet.http.HttpServletRequest;
  27. import javax.validation.ConstraintViolation;
  28. import javax.validation.Validation;
  29. import javax.validation.Validator;
  30. import javax.validation.ValidatorFactory;
  31. import java.io.*;
  32. import java.net.SocketTimeoutException;
  33. import java.security.MessageDigest;
  34. import java.time.LocalDateTime;
  35. import java.time.format.DateTimeFormatter;
  36. import java.util.*;
  37. import java.util.concurrent.ThreadPoolExecutor;
  38. import java.util.concurrent.TimeUnit;
  39. /**
  40. * @description:
  41. * @author: xusonglin
  42. * @create: 2020/4/22 15:00
  43. * @version: V1.0
  44. **/
  45. @Service
  46. @Slf4j
  47. public class ChannelServiceImpl implements ChannelService {
  48. @Autowired
  49. private ObjectMapper objectMapper;
  50. @Autowired
  51. private StringRedisTemplate redisTemplate;
  52. @Autowired
  53. private EsOpeateUtils esOpeateUtils;
  54. @Autowired
  55. private SendService sendService;
  56. @Value("${localDir.upload}")
  57. private String localUploadDir;
  58. @Value("${localDir.keyFilePath}")
  59. private String keyFilePath;
  60. @Value("${ftpServer.host}")
  61. private String ftpServerHost;
  62. @Value("${ftpServer.port}")
  63. private String ftpServerPort;
  64. @Value("${ftpServer.username}")
  65. private String ftpServerUsername;
  66. @Value("${ftpServer.passphrase}")
  67. private String ftpServerPassphrase;
  68. @Value("${ftpServer.dir.upload}")
  69. private String ftpServerUploadDir;
  70. @Value("${supplier.illegalInfoV2.url}")
  71. private String illegalInfoV2Url;
  72. @Value("${supplier.decodeApi}")
  73. private String decodeApi;
  74. @Value("${supplier.decodeUrl}")
  75. private String decodeUrl;
  76. @Value("${supplier.decodeAppKey}")
  77. private String decodeAppKey;
  78. @Value("${supplier.decodeAppSecret}")
  79. private String decodeAppSecret;
  80. DateTimeFormatter yMdHms = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
  81. private static final String MEDIA_TYPE = "application/json;charset=UTF-8";
  82. private OkHttpClient okHttpClient = new OkHttpClient.Builder().build();
  83. @Override
  84. public ChannelTypeHandleResponseObject validateIllegalInfo(HttpServletRequest request, String customBody,
  85. int outTime, String type, String interfaceType) {
  86. ChannelTypeHandleResponseObject ret = new ChannelTypeHandleResponseObject();
  87. ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
  88. String upstreamCode = Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE;
  89. String returnType = request.getHeader(Constant.CUSTOMER_RETURN_TYPE_PARA);
  90. if (StringUtils.isBlank(returnType)) {
  91. returnType = Constant.CUSTOMER_RETURN_ZW;
  92. }
  93. if (outTime <= 0) {
  94. outTime = Constant.HTTPCLIENT_CONNECTTIMEOUT;
  95. }
  96. log.info("validateIllegalInfo---customBody={},outTime={}", customBody, outTime);
  97. try {
  98. IllegalInfoRequestObject illegalInfoRequestObject = objectMapper.readValue(customBody, IllegalInfoRequestObject.class);
  99. // 参数校验
  100. if (!validateParams(ret, returnType, illegalInfoRequestObject)) {
  101. ret.setCode(Constant.SUCCESS);
  102. request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
  103. return ret;
  104. }
  105. // 封装放入缓存参数对象
  106. RedisParamObject redisParamObject = new RedisParamObject();
  107. BeanUtils.copyProperties(illegalInfoRequestObject, redisParamObject);
  108. redisParamObject.setReturnType(type);
  109. redisParamObject.setTraceId((String) request.getAttribute("x-b3-traceid"));
  110. redisParamObject.setInterfaceType(interfaceType);
  111. // 身份证姓名放入缓存
  112. redisParamObject.setStatus(ChannelConstant.REQUEST_STATUS_1);
  113. redisParamObject.setVersion(1);
  114. redisParamObject.setTimestamp(System.currentTimeMillis());
  115. redisTemplate.boundHashOps("asynchronous-illegal-info-request").put(request.getAttribute("x-b3-traceid"),
  116. JSON.toJSONString(redisParamObject));
  117. ret.setIfSuccessAsyn(1);
  118. ret.setIsCharge(Constant.IS_CHARGE);
  119. ret.setCode(Constant.SUCCESS);
  120. request.setAttribute(Constant.IFCJ_KEY, Constant.IFCJ_NO_CJ);
  121. if (returnType.equals(Constant.CUSTOMER_RETURN_JK)) {
  122. ret.setResultCode(Constant.JK_RETURN_CODE_MATCH);
  123. } else {
  124. ret.setResultCode(Constant.MATCH_CODE);
  125. }
  126. ret.setResultBody(Constant.QUERY_SUCCESS);
  127. ret.setResultDesc(Constant.QUERY_SUCCESS);
  128. upstreamCode = "1000";
  129. } catch (Exception ioe) {
  130. ErrorUtils.captureException(ioe);
  131. log.info("supplier10000040.validateIllegalInfo接口Exception={}", ioe);
  132. ret.setCode(Constant.FAIL);
  133. if (returnType.equals(Constant.CUSTOMER_RETURN_JK)) {
  134. ret.setResultCode(Constant.JK_RETURN_CODE_OTHER_ERROR);
  135. } else {
  136. ret.setResultCode(Constant.OTHER_ERROR_CODE);
  137. }
  138. ret.setResultBody(Constant.OTHER_ERROR);
  139. ret.setResultDesc(Constant.OTHER_ERROR);
  140. }
  141. //上游返回码
  142. request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
  143. return ret;
  144. }
  145. private boolean validateParams(ChannelTypeHandleResponseObject ret, String returnType, IllegalInfoRequestObject requestObject) {
  146. if (!validateParamNullValue(requestObject)) {
  147. if (Constant.CUSTOMER_RETURN_ZW.equals(returnType)) {
  148. ret.setResultCode(Constant.INVALID_PARAMETER_CODE);
  149. ret.setResultBody(Constant.PARAMETER_NAME_ERROR);
  150. ret.setResultDesc(Constant.PARAMETER_NAME_ERROR);
  151. } else {
  152. ret.setResultCode(Constant.JK_RETURN_CODE_INVALID_PARAMETER);
  153. ret.setResultBody(Constant.PARAMETER_NAME_ERROR);
  154. ret.setResultDesc(Constant.PARAMETER_NAME_ERROR);
  155. }
  156. return false;
  157. } else if (StringUtils.isBlank(requestObject.getName()) ||
  158. !PatternTools.checkResult(Constant.PATTERN_CN_NAME_REGEX, requestObject.getName())) {
  159. if (Constant.CUSTOMER_RETURN_ZW.equals(returnType)) {
  160. ret.setResultCode(Constant.NAME_FORMAT_ERROR_CODE);
  161. ret.setResultDesc(Constant.NAME_FORMAT_ERROR);
  162. ret.setResultBody(Constant.NAME_FORMAT_ERROR);
  163. } else {
  164. ret.setResultCode(Constant.JK_NAME_FORMAT_ERROR_CODE);
  165. ret.setResultDesc(Constant.JK_NAME_FORMAT_ERROR);
  166. ret.setResultBody(Constant.JK_NAME_FORMAT_ERROR);
  167. }
  168. return false;
  169. } else if (StringUtils.isBlank(requestObject.getIdCode())
  170. || !PatternTools.checkResult(Constant.PATTERN_SPECIAL_ID_NUMBER_REGEX, requestObject.getIdCode())) {
  171. if (Constant.CUSTOMER_RETURN_ZW.equals(returnType)) {
  172. ret.setResultCode(Constant.IDCODE_FORMAT_ERROR_CODE);
  173. ret.setResultDesc(Constant.IDCODE_FORMAT_ERROR);
  174. ret.setResultBody(Constant.IDCODE_FORMAT_ERROR);
  175. } else {
  176. ret.setResultCode(Constant.JK_IDCODE_FORMAT_ERROR_CODE);
  177. ret.setResultDesc(Constant.JK_IDCODE_FORMAT_ERROR);
  178. ret.setResultBody(Constant.JK_IDCODE_FORMAT_ERROR);
  179. }
  180. return false;
  181. }
  182. return true;
  183. }
  184. private boolean validateType(ChannelTypeHandleResponseObject ret, String returnType, IllegalInfoV2CustomBodyObject customBodyObject) {
  185. if (StringUtils.isBlank(customBodyObject.getType()) || !customBodyObject.getType().equals("1")) {
  186. if (Constant.CUSTOMER_RETURN_ZW.equals(returnType)) {
  187. ret.setResultCode(Constant.INVALID_PARAMETER_CODE);
  188. ret.setResultBody(Constant.INVALID_PARAMETER);
  189. ret.setResultDesc(Constant.INVALID_PARAMETER);
  190. } else {
  191. ret.setResultCode(Constant.JK_RETURN_CODE_INVALID_PARAMETER);
  192. ret.setResultBody(Constant.INVALID_PARAMETER);
  193. ret.setResultDesc(Constant.INVALID_PARAMETER);
  194. }
  195. return false;
  196. } else {
  197. return true;
  198. }
  199. }
  200. private boolean validateParamNullValue(Object jsonResolveObject) {
  201. ValidatorFactory vf = Validation.buildDefaultValidatorFactory();
  202. Validator validator = vf.getValidator();
  203. Set<ConstraintViolation<Object>> set = validator.validate(jsonResolveObject);
  204. for (ConstraintViolation<Object> con : set) {
  205. if (StringUtils.isNotBlank(con.getMessage())) {
  206. return false;
  207. }
  208. }
  209. return true;
  210. }
  211. private String getRedisNowTimeKey() {
  212. String redisNowTimeKey;
  213. String nowTime = yMdHms.format(LocalDateTime.now());
  214. String seconds = nowTime.substring(12, 14);
  215. if (Long.parseLong(seconds) < 20) {
  216. redisNowTimeKey = nowTime.substring(0, 12) + "00";
  217. } else if (Long.parseLong(seconds) < 40) {
  218. redisNowTimeKey = nowTime.substring(0, 12) + "20";
  219. } else {
  220. redisNowTimeKey = nowTime.substring(0, 12) + "40";
  221. }
  222. return redisNowTimeKey;
  223. }
  224. // @Override
  225. // public boolean sendRequest(Set<String> set, String key) {
  226. // List<IllegalInfoParamExcelObject> paramExcelObjectList = new ArrayList<>();
  227. // for (String content : set) {
  228. // RedisParamObject redisParamObject = JSON.toJavaObject(JSON.parseObject(content), RedisParamObject.class);
  229. // IllegalInfoParamExcelObject paramExcelObject = new IllegalInfoParamExcelObject();
  230. // BeanUtils.copyProperties(redisParamObject, paramExcelObject);
  231. // paramExcelObject.setTraceId(redisParamObject.getInterfaceType() + "-" + redisParamObject.getTraceId());
  232. // paramExcelObjectList.add(paramExcelObject);
  233. // }
  234. //
  235. // String fileName = System.currentTimeMillis() + ".xlsx";
  236. // String path = localUploadDir + File.separator + fileName;
  237. // Map<String, String> headMap = new LinkedHashMap<>();
  238. // headMap.put("traceId", "序列号");
  239. // headMap.put("name", "姓名");
  240. // headMap.put("idCode", "身份证号");
  241. // try {
  242. // OutputStream outXlsx = new FileOutputStream(path);
  243. // ExcelUtil.createExcel(outXlsx, paramExcelObjectList);
  244. // } catch (IOException ioe) {
  245. // log.info("supplier10000040.sendRequest,导出参数excel发生异常,Exception={}", ioe);
  246. // return false;
  247. // }
  248. // try {
  249. // SFTPUtil.upload(ftpServerHost, Integer.parseInt(ftpServerPort), ftpServerUsername, ftpServerPassphrase,
  250. // "/" + ftpServerUploadDir + "/" + fileName, path, keyFilePath);
  251. // File localFile = new File(path);
  252. // boolean deleteResult = false;
  253. // if (localFile.exists()) {
  254. // deleteResult = localFile.delete();
  255. // }
  256. // if (!deleteResult) {
  257. // log.info("supplier10000040.sendRequest删除参数excel失败,文件{}", path);
  258. // }
  259. // for (String content : set) {
  260. // long removeResult = redisTemplate.boundSetOps(key).remove(content);
  261. // log.info("key:{},removeValue:{},result:{}", key, content, removeResult);
  262. // }
  263. // return true;
  264. // } catch (JSchException jschException) {
  265. // log.info("supplier10000040.sendRequest,上传文件时连接sftp服务器失败, 文件{}, 失败原因{}", path, jschException.getMessage());
  266. // return false;
  267. // } catch (FileNotFoundException fileNotFoundException) {
  268. // log.info("supplier10000040.sendRequest,上传文件到sftp服务器生成文件失败, 文件{}, 失败原因{}", path, fileNotFoundException.getMessage());
  269. // return false;
  270. // } catch (SftpException sftpException) {
  271. // log.info("supplier10000040.sendRequest,上传文件到sftp服务器失败, 文件{}, 失败原因{}", path, sftpException.getMessage());
  272. // return false;
  273. // }
  274. // }
  275. @Override
  276. public boolean sendRequest(List<IllegalInfoParamExcelObject> excelObjectList) {
  277. String fileName = System.currentTimeMillis() + ".xlsx";
  278. String path = localUploadDir + File.separator + fileName;
  279. Map<String, String> headMap = new LinkedHashMap<>();
  280. headMap.put("traceId", "序列号");
  281. headMap.put("name", "姓名");
  282. headMap.put("idCode", "身份证号");
  283. try {
  284. OutputStream outXlsx = new FileOutputStream(path);
  285. ExcelUtil.createExcel(outXlsx, excelObjectList);
  286. } catch (IOException ioe) {
  287. log.info("supplier10000040.sendRequest,导出参数excel发生异常,Exception={}", ioe);
  288. return false;
  289. }
  290. try {
  291. SFTPUtil.upload(ftpServerHost, Integer.parseInt(ftpServerPort), ftpServerUsername, ftpServerPassphrase,
  292. "/" + ftpServerUploadDir + "/" + fileName, path, keyFilePath);
  293. return true;
  294. } catch (JSchException jschException) {
  295. log.info("supplier10000040.sendRequest,上传文件时连接sftp服务器失败, 文件{}, 失败原因{}", path, jschException.getMessage());
  296. return false;
  297. } catch (FileNotFoundException fileNotFoundException) {
  298. log.info("supplier10000040.sendRequest,上传文件到sftp服务器生成文件失败, 文件{}, 失败原因{}", path, fileNotFoundException.getMessage());
  299. return false;
  300. } catch (SftpException sftpException) {
  301. log.info("supplier10000040.sendRequest,上传文件到sftp服务器失败, 文件{}, 失败原因{}", path, sftpException.getMessage());
  302. return false;
  303. } finally {
  304. File localFile = new File(path);
  305. boolean deleteResult = false;
  306. if (localFile.exists()) {
  307. deleteResult = localFile.delete();
  308. }
  309. if (!deleteResult) {
  310. log.info("supplier10000040.sendRequest删除参数excel失败,文件{}", path);
  311. }
  312. }
  313. }
  314. @Override
  315. public void sendFailedMessage(String traceId) {
  316. AsyncReqMqMessage asyncReqMqMessage = new AsyncReqMqMessage();
  317. asyncReqMqMessage.setTraceid(traceId);
  318. asyncReqMqMessage.setQueryCache(false);
  319. asyncReqMqMessage.setSyncReturn(false);
  320. asyncReqMqMessage.setIsCharge(Constant.IS_NOT_CHARGE);
  321. String asyncReqInfoStr = (String) redisTemplate.boundHashOps("sjjh_async_request_info").get(traceId);
  322. log.info("sendFailedMessage, asyncReqInfoStr:{}", asyncReqInfoStr);
  323. if (StringUtils.isNotEmpty(asyncReqInfoStr)) {
  324. CacheStreamObject.AsyncMsg asyncReqInfo = JSON.parseObject(asyncReqInfoStr, CacheStreamObject.AsyncMsg.class);
  325. CallbackDownstreamRequest request = new CallbackDownstreamRequest();
  326. request.setAccessId(asyncReqInfo.getAccessId());
  327. request.setTransationId(traceId);
  328. if (asyncReqInfo.getIfJkCode() == 1) {
  329. request.setResultCode(Constant.JK_RETURN_CODE_OTHER_ERROR);
  330. } else {
  331. request.setResultCode(Constant.OTHER_ERROR_CODE);
  332. }
  333. request.setResultBody(Constant.OTHER_ERROR);
  334. try {
  335. asyncReqMqMessage.setCallbackResult(Base64.encodeBase64String(JSON.toJSONString(request, SerializerFeature.WriteMapNullValue).getBytes("UTF-8")));
  336. } catch (UnsupportedEncodingException e) {
  337. ErrorUtils.captureException(e);
  338. log.info("supplier10000040.sendFailedMessage 发送到kafka的message转base64失败Exception={}", e);
  339. return;
  340. }
  341. String message = JSON.toJSONString(asyncReqMqMessage, SerializerFeature.WriteMapNullValue);
  342. log.info("发送到kafka的message:{}", message);
  343. Boolean sendResult;
  344. sendResult = sendService.sendMsg(JSON.toJSONString(asyncReqMqMessage, SerializerFeature.WriteMapNullValue));
  345. if (!sendResult) {//成功发起请求记录日志
  346. KafkaAccessLog kafkaAccessLog = new KafkaAccessLog();
  347. kafkaAccessLog.setType(1);
  348. kafkaAccessLog.setContent(message);
  349. String kafkaContent = JSON.toJSONString(kafkaAccessLog);
  350. long addKafkaAccessLogResult = redisTemplate.boundSetOps("Kafka_AccessLog").add(kafkaContent);
  351. log.info("kafka信息:{}发送redis是否成功:{}", message, addKafkaAccessLogResult);
  352. }
  353. boolean logFlag = false;
  354. //修改es日志记录
  355. try {
  356. logFlag = esOpeateUtils.updateByQuery(traceId, "use", Constant.IS_NOT_CHARGE, "1000");
  357. } catch (Exception ex) {
  358. log.error("update es 异常:{}", ex);
  359. }
  360. if (!logFlag) {
  361. KafkaAccessLog kafkaAccessLog = new KafkaAccessLog();
  362. kafkaAccessLog.setType(2);
  363. Map<String, String> contentMap = new HashMap<String, String>();
  364. contentMap.put("traceId", traceId);
  365. contentMap.put("ifCj", "use");
  366. contentMap.put("isCharge", String.valueOf(Constant.IS_NOT_CHARGE));
  367. String contentStr = JSON.toJSONString(contentMap);
  368. kafkaAccessLog.setContent(contentStr);
  369. String kafkaContent = JSON.toJSONString(kafkaAccessLog);
  370. long addKafkaAccessLogResult = redisTemplate.boundSetOps("Kafka_AccessLog").add(kafkaContent);
  371. log.info("log update 信息:{}是否成功:{}", contentStr, addKafkaAccessLogResult);
  372. } else {
  373. // 修改es成功
  374. redisTemplate.boundHashOps("asynchronous-illegal-info-request").delete(traceId);
  375. log.info("dealParamInfo -- 移除处理完成的参数:{}", traceId);
  376. }
  377. Long removeResult = redisTemplate.boundZSetOps("sjjh_async_request_traceids").remove(traceId);
  378. log.info("删除sjjh_async_request_traceids:{},结果:{}", traceId, removeResult);
  379. }
  380. }
  381. @Override
  382. public ChannelTypeHandleResponseObject validateIllegalInfoV2(HttpServletRequest request, String customBody, int outTime, String interfaceType) {
  383. ChannelTypeHandleResponseObject ret = new ChannelTypeHandleResponseObject();
  384. ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
  385. String upstreamCode = Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE;
  386. String returnType = request.getHeader(Constant.CUSTOMER_RETURN_TYPE_PARA);
  387. if (StringUtils.isBlank(returnType)) {
  388. returnType = Constant.CUSTOMER_RETURN_ZW;
  389. }
  390. if (outTime <= 0) {
  391. outTime = Constant.HTTPCLIENT_CONNECTTIMEOUT;
  392. }
  393. log.info("validateIllegalInfoV2---customBody={},outTime={}", customBody, outTime);
  394. IllegalInfoV2CustomBodyObject customBodyObject = new IllegalInfoV2CustomBodyObject();
  395. try {
  396. customBodyObject = objectMapper.readValue(customBody, IllegalInfoV2CustomBodyObject.class);
  397. } catch (IOException ioe) {
  398. log.info("supplier10000040.validateIllegalInfoV2接口-IOException:{}", ioe);
  399. ErrorUtils.captureException(ioe);
  400. ret.setCode(Constant.FAIL);
  401. }
  402. // 参数校验
  403. if (!validateParams(ret, returnType, customBodyObject) || !validateType(ret, returnType, customBodyObject)) {
  404. ret.setCode(Constant.SUCCESS);
  405. request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
  406. return ret;
  407. }
  408. IllegalInfoV2RequestObject illegalInfoRequestObject = new IllegalInfoV2RequestObject();
  409. BeanUtils.copyProperties(customBodyObject, illegalInfoRequestObject);
  410. String traceId = request.getHeader("x-b3-traceid");
  411. illegalInfoRequestObject.setTraceId(traceId);
  412. illegalInfoRequestObject.setIdCode(illegalInfoRequestObject.getIdCode().toUpperCase());
  413. MediaType mediaType = MediaType.parse(MEDIA_TYPE);
  414. RequestBody requestBody = RequestBody.create(mediaType, JSON.toJSONString(illegalInfoRequestObject));
  415. Request okRequest = new Request.Builder()
  416. .post(requestBody)
  417. .url(illegalInfoV2Url)
  418. .build();
  419. OkHttpClient client = okHttpClient.newBuilder()
  420. .connectTimeout(outTime, TimeUnit.MILLISECONDS)
  421. .readTimeout(outTime, TimeUnit.MILLISECONDS)
  422. .writeTimeout(outTime, TimeUnit.MILLISECONDS)
  423. .build();
  424. String responseContext = "";
  425. try {
  426. Long startTime = System.currentTimeMillis();
  427. Response response = client.newCall(okRequest).execute();
  428. log.info("supplier10000040.validateIllegalInfoV2接口-上游返回时间={}", System.currentTimeMillis() - startTime);
  429. if (response.body() != null) {
  430. responseContext = response.body().string();
  431. log.info("supplier10000040.validateIllegalInfoV2接口responseContext={}",responseContext);
  432. }
  433. response.close();
  434. } catch (SocketTimeoutException ste) {
  435. log.info("supplier10000040.validateIllegalInfoV2接口-SocketTimeoutException:{}", ste);
  436. ErrorUtils.captureException(ste);
  437. ret.setCode(Constant.REQUEST_TIMEOUT);
  438. return ret;
  439. } catch (Exception e) {
  440. log.info("supplier10000040.validateIllegalInfoV2接口Exception={}", e);
  441. ErrorUtils.captureException(e);
  442. ret.setCode(Constant.FAIL);
  443. return ret;
  444. }
  445. JSONObject resultJsonObject = JSON.parseObject(responseContext);
  446. if (resultJsonObject.get("code") != null && resultJsonObject.getString("code").equals("1")) {
  447. IllegalInfoV2ResponseObject responseObject = JSON.toJavaObject(resultJsonObject, IllegalInfoV2ResponseObject.class);
  448. if (responseObject != null) {
  449. ret.setCode(Constant.SUCCESS);
  450. setIllegalInfoV2Response(responseObject, interfaceType, ret);
  451. } else {
  452. ret.setCode(Constant.FAIL);
  453. }
  454. } else {
  455. ret.setResultCode(Constant.OTHER_ERROR_CODE);
  456. ret.setResultBody(Constant.OTHER_ERROR);
  457. ret.setIsCharge(Constant.IS_NOT_CHARGE);
  458. ret.setCode(Constant.SUCCESS);
  459. }
  460. if (resultJsonObject.get("code") != null) {
  461. upstreamCode = resultJsonObject.getString("code");
  462. }
  463. //上游返回码
  464. request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
  465. return ret;
  466. }
  467. private ChannelTypeHandleResponseObject setIllegalInfoV2Response(IllegalInfoV2ResponseObject responseObject,
  468. String interfaceType, ChannelTypeHandleResponseObject ret) {
  469. if (!responseObject.getCode().equals("1")) {
  470. ret.setResultCode(Constant.OTHER_ERROR_CODE);
  471. ret.setResultBody(Constant.OTHER_ERROR);
  472. ret.setIsCharge(Constant.IS_NOT_CHARGE);
  473. return ret;
  474. }
  475. String code = responseObject.getMessage().getCode();
  476. String isDrugs = responseObject.getMessage().getIsDrugs();
  477. String isEscape = responseObject.getMessage().getIsEscape();
  478. String isPedigree = responseObject.getMessage().getIsPedigree();
  479. if (!checkIllegalInfoV2ErrorResult(code, isDrugs, isEscape, isPedigree, interfaceType)) {
  480. ret.setResultCode(Constant.OTHER_ERROR_CODE);
  481. ret.setResultBody(Constant.OTHER_ERROR);
  482. ret.setIsCharge(Constant.IS_NOT_CHARGE);
  483. return ret;
  484. }
  485. if (interfaceType.equals(ChannelConstant.ILLEGAL_INFO_SCORE)) {
  486. // 评分版
  487. String resultCode = isDrugs + isEscape + isPedigree;
  488. ret = IllegalInfoScoreUtil.getIllegalInfoScoreResult(resultCode, ret);
  489. } else if (interfaceType.equals(ChannelConstant.ILLEGAL_INFO_SIMPLE)) {
  490. // 简版
  491. if (isDrugs.equals("1") || isEscape.equals("1") || isPedigree.equals("1")) {
  492. ret.setResultBody("1");
  493. } else {
  494. ret.setResultBody("0");
  495. }
  496. ret.setResultCode(Constant.SUCCESS);
  497. ret.setIsCharge(Constant.IS_CHARGE);
  498. } else if (interfaceType.equals(ChannelConstant.ILLEGAL_INFO_DRUG_ESCAPE)) {
  499. // xd zt 定制版
  500. if (isDrugs.equals("1") || isEscape.equals("1")) {
  501. ret.setResultBody("1");
  502. } else {
  503. ret.setResultBody("0");
  504. }
  505. ret.setResultCode(Constant.SUCCESS);
  506. ret.setIsCharge(Constant.IS_CHARGE);
  507. } else {
  508. // 详版
  509. JSONObject result = new JSONObject();
  510. result.put("isDrugs", isDrugs);
  511. result.put("isEscape", isEscape);
  512. result.put("isPedigree", isPedigree);
  513. ret.setResultCode(Constant.MATCH_CODE);
  514. ret.setResultBody(JSON.toJSONString(result));
  515. ret.setIsCharge(Constant.IS_CHARGE);
  516. }
  517. return ret;
  518. }
  519. private boolean checkIllegalInfoV2ErrorResult (String code, String isDrugs, String isEscape, String isPedigree, String interfaceType) {
  520. if (StringUtils.isBlank(code) || StringUtils.isBlank(isDrugs) || StringUtils.isBlank(isEscape) || StringUtils.isBlank(isPedigree)) {
  521. return false;
  522. } else if (!code.equals("0")) {
  523. return false;
  524. } else if (interfaceType.equals(ChannelConstant.ILLEGAL_INFO_DRUG_ESCAPE) && (isDrugs.equals("2") || isEscape.equals("2"))) {
  525. return false;
  526. } else if (!interfaceType.equals(ChannelConstant.ILLEGAL_INFO_DRUG_ESCAPE) && (isDrugs.equals("2") || isEscape.equals("2") || isPedigree.equals("2"))) {
  527. return false;
  528. } else {
  529. return true;
  530. }
  531. }
  532. @Override
  533. public String getDecodeIdCard(HttpServletRequest request, String customBody, int outTime, String decodeType, ChannelTypeHandleResponseObject ret) {
  534. JSONObject customBodyObject = JSON.parseObject(customBody);
  535. if (StringUtils.isBlank(customBodyObject.getString("idCode")) || StringUtils.isBlank(customBodyObject.getString("name"))
  536. || (decodeType.equals(ChannelConstant.DECODE_TYPE_SHA256) && (customBodyObject.getString("idCode").length() != 64 || customBodyObject.getString("name").length() != 64))
  537. || (decodeType.equals(ChannelConstant.DECODE_TYPE_MD5) && (customBodyObject.getString("idCode").length() != 32 || customBodyObject.getString("name").length() != 32))
  538. ) {
  539. ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
  540. ret.setResultCode(Constant.INVALID_PARAMETER_CODE);
  541. ret.setResultBody(Constant.INVALID_PARAMETER);
  542. ret.setResultDesc(Constant.INVALID_PARAMETER);
  543. ret.setCode(Constant.SUCCESS);
  544. request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE);
  545. return "";
  546. }
  547. String result = "";
  548. String decodeResponseContext = Md5Sha256DecodeUtil.getDecodeIdCard(customBodyObject.getString("idCode"),
  549. customBodyObject.getString("name"), decodeType, outTime);
  550. JSONObject decodeResponseObject = JSON.parseObject(decodeResponseContext);
  551. if (decodeResponseObject != null && decodeResponseObject.getString("code").equals("200") && decodeResponseObject.getString("data").equals("1")) {
  552. JSONObject msg = JSON.parseObject(JSON.toJSONString(decodeResponseObject.get("msg")));
  553. if (StringUtils.isNotBlank(msg.getString("idcard")) && StringUtils.isNotBlank(msg.getString("name"))) {
  554. customBodyObject.put("idCode", msg.getString("idcard"));
  555. customBodyObject.put("name", msg.getString("name"));
  556. result = JSON.toJSONString(customBodyObject);
  557. }
  558. }
  559. if (StringUtils.isBlank(result)) {
  560. ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
  561. ret.setResultCode(Constant.ZW_RETURN_CODE_134);
  562. ret.setResultBody(Constant.RETURN_MESSAGE_134);
  563. ret.setResultDesc(Constant.RETURN_MESSAGE_134);
  564. ret.setCode(Constant.SUCCESS);
  565. request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE);
  566. }
  567. return result;
  568. }
  569. @Override
  570. public String getAesDecodeIdCard(HttpServletRequest request, String customBody, ChannelTypeHandleResponseObject ret) {
  571. JSONObject customBodyObject = JSON.parseObject(customBody);
  572. if (customBodyObject.get("idCode") == null || customBodyObject.get("name") == null) {
  573. ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
  574. ret.setResultCode(Constant.INVALID_PARAMETER_CODE);
  575. ret.setResultBody(Constant.PARAMETER_NAME_ERROR);
  576. ret.setResultDesc(Constant.PARAMETER_NAME_ERROR);
  577. ret.setCode(Constant.SUCCESS);
  578. request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE);
  579. return "";
  580. }
  581. if (StringUtils.isBlank(customBodyObject.getString("idCode")) || StringUtils.isBlank(customBodyObject.getString("name"))) {
  582. ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
  583. ret.setResultCode(Constant.INVALID_PARAMETER_CODE);
  584. ret.setResultBody(Constant.INVALID_PARAMETER);
  585. ret.setResultDesc(Constant.INVALID_PARAMETER);
  586. ret.setCode(Constant.SUCCESS);
  587. request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE);
  588. return "";
  589. }
  590. try {
  591. String userId = request.getHeader(ChannelConstant.USER_ID_HEADER_KEY);
  592. String aesDecryptKey = encrypt32(ChannelConstant.AES_KEY + userId).substring(8, 24);
  593. log.info("getAesDecodeIdCard.user:{},aesDecryptKey:{}", userId, aesDecryptKey);
  594. String decodeIdCode = AesUtil.decryAES(aesDecryptKey, customBodyObject.getString("idCode"));
  595. String decodeName = AesUtil.decryAES(aesDecryptKey, customBodyObject.getString("name"));
  596. if (StringUtils.isBlank(decodeIdCode) || StringUtils.isBlank(decodeName)) {
  597. ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
  598. ret.setResultCode(Constant.ZW_RETURN_CODE_133);
  599. ret.setResultBody(Constant.RETURN_MESSAGE_133);
  600. ret.setResultDesc(Constant.RETURN_MESSAGE_133);
  601. ret.setCode(Constant.SUCCESS);
  602. request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE);
  603. return "";
  604. }
  605. customBodyObject.put("idCode", decodeIdCode);
  606. customBodyObject.put("name", decodeName);
  607. return customBodyObject.toJSONString();
  608. } catch (Exception e) {
  609. ErrorUtils.captureException(e);
  610. log.info("supplier10000040.getAesDecodeIdCard解密失败,Exception={}", e);
  611. ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
  612. ret.setResultCode(Constant.ZW_RETURN_CODE_133);
  613. ret.setResultBody(Constant.RETURN_MESSAGE_133);
  614. ret.setResultDesc(Constant.RETURN_MESSAGE_133);
  615. ret.setCode(Constant.SUCCESS);
  616. request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE);
  617. return "";
  618. }
  619. }
  620. public static String encrypt32(String encryptStr) {
  621. MessageDigest md5;
  622. try {
  623. md5 = MessageDigest.getInstance("MD5");
  624. byte[] md5Bytes = md5.digest(encryptStr.getBytes());
  625. StringBuffer hexValue = new StringBuffer();
  626. for (int i = 0; i < md5Bytes.length; i++) {
  627. int val = ((int) md5Bytes[i]) & 0xff;
  628. if (val < 16)
  629. hexValue.append("0");
  630. hexValue.append(Integer.toHexString(val));
  631. }
  632. encryptStr = hexValue.toString();
  633. } catch (Exception e) {
  634. throw new RuntimeException(e);
  635. }
  636. return encryptStr;
  637. }
  638. @Override
  639. public boolean isIllegalInfoV2ScoreSHA256TestData(HttpServletRequest request, String customBody, ChannelTypeHandleResponseObject ret) {
  640. JSONObject customBodyObject = JSON.parseObject(customBody);
  641. String idCode = customBodyObject.getString("idCode");
  642. String name = customBodyObject.getString("name");
  643. String type = customBodyObject.getString("type");
  644. if (idCode == null || name == null || type == null) {
  645. return false;
  646. }
  647. if (idCode.equals("010fea543ecc27a2a47a1d83c24941960e04fc0040be7a4de9117ab1d0d74bb1")
  648. && name.equals("6b4fbd39a02eae625eb38d97a20750e84ac3cd01b06f1a279b709de6ac303b66")
  649. && type.equals("1")) {
  650. ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
  651. ret.setResultCode(Constant.MATCH_CODE);
  652. ret.setResultBody("30");
  653. ret.setResultDesc("30");
  654. ret.setCode(Constant.SUCCESS);
  655. request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, "test-1");
  656. return true;
  657. } else if (idCode.equals("eac5b0fec35ac8df2dc9a38a43773c37b5082fc5892c1ed29e254819433e8f25")
  658. && name.equals("1d841bc0ee98309cb7916670b7f0fdef5f4c35150711a41405ef3633b56322cf")
  659. && type.equals("1")) {
  660. ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
  661. ret.setResultCode(Constant.MATCH_CODE);
  662. ret.setResultBody("30-55");
  663. ret.setResultDesc("30-55");
  664. ret.setCode(Constant.SUCCESS);
  665. request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, "test-1");
  666. return true;
  667. } else if (idCode.equals("cbd41cfeb36bede8b618ea7173d80919a343d210e048a6d69d5641d1fa34ff5f")
  668. && name.equals("bb1695365ab4734f7e1bc84e0651731391ad699f75577b11bcc3e43108c9c2f8")
  669. && type.equals("1")) {
  670. ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
  671. ret.setResultCode(Constant.MATCH_CODE);
  672. ret.setResultBody("55-60");
  673. ret.setResultDesc("55-60");
  674. ret.setCode(Constant.SUCCESS);
  675. request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, "test-1");
  676. return true;
  677. } else if (idCode.equals("01d50825a2592b3d9a21cd6a144134ba0da21840825e80298113f89ed50392b5")
  678. && name.equals("eaa7e959207fb76c8e7e38b022709defb9a1f0255538fd40ed47b7f2b70f4824")
  679. && type.equals("1")) {
  680. ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
  681. ret.setResultCode(Constant.MATCH_CODE);
  682. ret.setResultBody("60-65");
  683. ret.setResultDesc("60-65");
  684. ret.setCode(Constant.SUCCESS);
  685. request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, "test-1");
  686. return true;
  687. } else if (idCode.equals("e3d20f804609da6875fda87fc87fe61f9a8ce9fa3a3bada5743288c730a0e32c")
  688. && name.equals("6004493a9414ea3b0a058c543e73920418da5228c7ca603f8ea8cc59d759dab9")
  689. && type.equals("1")) {
  690. ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
  691. ret.setResultCode(Constant.MATCH_CODE);
  692. ret.setResultBody("65-70");
  693. ret.setResultDesc("65-70");
  694. ret.setCode(Constant.SUCCESS);
  695. request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, "test-1");
  696. return true;
  697. } else if (idCode.equals("ffefcf3e3937ab7bbdddf287e80815dc39842d8eca6ba35a956f3d6b79850dee")
  698. && name.equals("a31915d77b7e052780cbbb4e8e7a88ea03001b3170f98a260403641991126a99")
  699. && type.equals("1")) {
  700. ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
  701. ret.setResultCode(Constant.MATCH_CODE);
  702. ret.setResultBody("70-85");
  703. ret.setResultDesc("70-85");
  704. ret.setCode(Constant.SUCCESS);
  705. request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, "test-1");
  706. return true;
  707. } else if (idCode.equals("8bcbbb7e94673ca5c62207dc40c342bda85cd5c79b343c3d5321c2d6aedeaa85")
  708. && name.equals("1c244860bfa8267a7af76a412cd5c5f2e9e9851e7e9f3857041a41c6a4a3fc3e")
  709. && type.equals("1")) {
  710. ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
  711. ret.setResultCode(Constant.MATCH_CODE);
  712. ret.setResultBody("85-90");
  713. ret.setResultDesc("85-90");
  714. ret.setCode(Constant.SUCCESS);
  715. request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, "test-1");
  716. return true;
  717. } else if (idCode.equals("282f8dcbdaacbb8ce12e064c67ef06228811fbc05144b83b3e727b28b2eb03d5")
  718. && name.equals("a653f33d1b06678ec0dc06e2ea6f4a3e1f58a84d7b7689a22e1d9cd78b415953")
  719. && type.equals("1")) {
  720. ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
  721. ret.setResultCode(Constant.MATCH_CODE);
  722. ret.setResultBody("90-100");
  723. ret.setResultDesc("90-100");
  724. ret.setCode(Constant.SUCCESS);
  725. request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, "test-1");
  726. return true;
  727. } else {
  728. return false;
  729. }
  730. }
  731. @Override
  732. public String getAesMd5DecodeIdCode(HttpServletRequest request, String customBody,
  733. ChannelTypeHandleResponseObject ret, int outTime) {
  734. JSONObject customBodyObject = JSON.parseObject(customBody);
  735. if (customBodyObject.get("idCode") == null || customBodyObject.get("name") == null) {
  736. ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
  737. ret.setResultCode(Constant.INVALID_PARAMETER_CODE);
  738. ret.setResultBody(Constant.PARAMETER_NAME_ERROR);
  739. ret.setResultDesc(Constant.PARAMETER_NAME_ERROR);
  740. ret.setCode(Constant.SUCCESS);
  741. request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE);
  742. return "";
  743. }
  744. if (StringUtils.isBlank(customBodyObject.getString("idCode")) || StringUtils.isBlank(customBodyObject.getString("name"))) {
  745. ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
  746. ret.setResultCode(Constant.INVALID_PARAMETER_CODE);
  747. ret.setResultBody(Constant.INVALID_PARAMETER);
  748. ret.setResultDesc(Constant.INVALID_PARAMETER);
  749. ret.setCode(Constant.SUCCESS);
  750. request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE);
  751. return "";
  752. }
  753. try {
  754. String userId = request.getHeader(ChannelConstant.USER_ID_HEADER_KEY);
  755. // 对姓名AES解密
  756. String aesDecryptKey = encrypt32(ChannelConstant.AES_KEY + userId).substring(8, 24);
  757. log.info("getAesDecodeIdCard.user:{},aesDecryptKey:{}", userId, aesDecryptKey);
  758. String decodeName = AesUtil.decryAES(aesDecryptKey, customBodyObject.getString("name"));
  759. // 对身份证MD5解密
  760. String decodeIdCode = "";
  761. String decodeIdCodeResponseContext = Md5Sha256DecodeUtil.getDecodeIdCard(customBodyObject.getString("idCode"),
  762. "", ChannelConstant.DECODE_TYPE_MD5, outTime);
  763. JSONObject decodeResponseObject = JSON.parseObject(decodeIdCodeResponseContext);
  764. if (decodeResponseObject != null && decodeResponseObject.getString("code").equals("200") && decodeResponseObject.getString("data").equals("1")) {
  765. JSONObject msg = JSON.parseObject(JSON.toJSONString(decodeResponseObject.get("msg")));
  766. if (StringUtils.isNotBlank(msg.getString("idcard"))) {
  767. decodeIdCode = msg.getString("idcard");
  768. }
  769. }
  770. if (StringUtils.isBlank(decodeIdCode) || StringUtils.isBlank(decodeName)) {
  771. ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
  772. ret.setResultCode(Constant.ZW_RETURN_CODE_133);
  773. ret.setResultBody(Constant.RETURN_MESSAGE_133);
  774. ret.setResultDesc(Constant.RETURN_MESSAGE_133);
  775. ret.setCode(Constant.SUCCESS);
  776. request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE);
  777. return "";
  778. }
  779. customBodyObject.put("idCode", decodeIdCode);
  780. customBodyObject.put("name", decodeName);
  781. return customBodyObject.toJSONString();
  782. } catch (Exception e) {
  783. ErrorUtils.captureException(e);
  784. log.info("supplier10000040.getAesDecodeIdCard解密失败,Exception={}", e);
  785. ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
  786. ret.setResultCode(Constant.ZW_RETURN_CODE_133);
  787. ret.setResultBody(Constant.RETURN_MESSAGE_133);
  788. ret.setResultDesc(Constant.RETURN_MESSAGE_133);
  789. ret.setCode(Constant.SUCCESS);
  790. request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE);
  791. return "";
  792. }
  793. }
  794. @Override
  795. public String getDecodeIdCode(HttpServletRequest request, String customBody, int outTime, String decodeType, ChannelTypeHandleResponseObject ret) {
  796. JSONObject customBodyObject = JSON.parseObject(customBody);
  797. if (StringUtils.isBlank(customBodyObject.getString("idCode")) || StringUtils.isBlank(customBodyObject.getString("name"))
  798. || (decodeType.equals(ChannelConstant.DECODE_TYPE_SHA256) && customBodyObject.getString("idCode").length() != 64)
  799. || (decodeType.equals(ChannelConstant.DECODE_TYPE_MD5) && customBodyObject.getString("idCode").length() != 32)
  800. ) {
  801. ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
  802. ret.setResultCode(Constant.INVALID_PARAMETER_CODE);
  803. ret.setResultBody(Constant.INVALID_PARAMETER);
  804. ret.setResultDesc(Constant.INVALID_PARAMETER);
  805. ret.setCode(Constant.SUCCESS);
  806. request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE);
  807. return "";
  808. }
  809. String result = "";
  810. String decodeResponseContext = Md5Sha256DecodeUtil.getDecodeIdCard(customBodyObject.getString("idCode"),
  811. "", decodeType, outTime);
  812. JSONObject decodeResponseObject = JSON.parseObject(decodeResponseContext);
  813. if (decodeResponseObject != null && decodeResponseObject.getString("code").equals("200") && decodeResponseObject.getString("data").equals("1")) {
  814. JSONObject msg = JSON.parseObject(JSON.toJSONString(decodeResponseObject.get("msg")));
  815. if (StringUtils.isNotBlank(msg.getString("idcard"))) {
  816. customBodyObject.put("idCode", msg.getString("idcard"));
  817. result = JSON.toJSONString(customBodyObject);
  818. }
  819. }
  820. if (StringUtils.isBlank(result)) {
  821. ret.setIsCharge(Constant.INTERFACE_QUERY_NO_FEE);
  822. ret.setResultCode(Constant.ZW_RETURN_CODE_134);
  823. ret.setResultBody(Constant.RETURN_MESSAGE_134);
  824. ret.setResultDesc(Constant.RETURN_MESSAGE_134);
  825. ret.setCode(Constant.SUCCESS);
  826. request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE);
  827. }
  828. return result;
  829. }
  830. }