package com.gx.obe.server.management.scancode.service.impl; import java.util.HashMap; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import com.gx.obe.http.HttpResponse; import com.gx.obe.http.HttpStatus; import com.gx.obe.http.HttpUtil; import com.gx.obe.http.json.JsonUtil; import com.gx.obe.server.common.cache.Group; import com.gx.obe.server.common.cache.GroupCacheFactory; import com.gx.obe.server.common.utils.StringUtils; import com.gx.obe.server.management.scancode.entity.CodeTypeEnum; import com.gx.obe.server.management.scancode.entity.QRCodeDetail; import com.gx.obe.server.management.scancode.entity.RequestHeader; import com.gx.obe.server.management.scancode.entity.ScanCodeHeader; import com.gx.obe.server.management.scancode.entity.ScanCodeRequest; import com.gx.obe.server.management.scancode.entity.ScanCodeResult; import com.gx.obe.server.management.scancode.entity.ScanCodeStatusRequest; import com.gx.obe.server.management.scancode.entity.ScanCodeUserInfo; import com.gx.obe.server.management.scancode.entity.SetSignHashInfo; import com.gx.obe.server.management.scancode.entity.SignatureValueInfo; import com.gx.obe.server.management.scancode.service.ScanCodeService; import com.gxcx.sercretkey.util.EnAndDeSecretUtil; @Service public class ScanCodeServiceImpl implements ScanCodeService { private static final org.slf4j.Logger LOG = org.slf4j.LoggerFactory.getLogger(ScanCodeServiceImpl.class); @Value("${scancode.aesKey}") private String aesKey; @Value("${scancode.aesPass}") private String aesPass; @Value("${scancode.publicKey}") private String publicKey; @Value("${scancode.url}") private String url; @Autowired private GroupCacheFactory groupCacheFactory; @Override public Boolean setQRCodeDetailToAppServer(QRCodeDetail codeDetail) { // 缓存数据 // 发送数据 Map paramMap = new HashMap(); String encrypt = JsonUtil.jsonObjectToStr(codeDetail); String decrypt = EnAndDeSecretUtil.aesEncode(publicKey , encrypt); paramMap.put("encrypt",decrypt); try { String save = HttpUtil.post(url+"/gxapp/scanning/setQRCodeDetailToAppServer", paramMap,50000); @SuppressWarnings("unchecked") ScanCodeResult result = JsonUtil.jsonToBean(save, ScanCodeResult.class); LOG.info(result.toString()); return ScanCodeHeader.SUCCESS.equals(result.getHeader().getReturnCode()); } catch (Exception e) { return false; } } @Override public String setSignHashInfo( SetSignHashInfo setSignHashInfo) { Map paramMap = new HashMap(); String encrypt = JsonUtil.objectToStr(setSignHashInfo); String decrypt = EnAndDeSecretUtil.aesEncode(publicKey , encrypt); paramMap.put("encrypt",decrypt); Map headerMap = new HashMap(); headerMap.put("X-AUTH-TOKEN", setSignHashInfo.getAccessTokenJSON()); HttpResponse httpResponse = HttpUtil.createPost(url + "/gxapp/scanning/setSignHashInfo").setHeader(headerMap, true).timeout(5000).form(paramMap).execute(); if(HttpStatus.HTTP_OK == httpResponse.getStatus()) { // @SuppressWarnings("unchecked") // ScanCodeResult result = JsonUtil.jsonToBean(httpResponse.body(), ScanCodeResult.class); // LOG.error(result.toString()); // LOG.error(httpResponse.body()); // LOG.error(result.getHeader().getReturnCode()); // return ScanCodeHeader.SUCCESS.equals(result.getHeader().getReturnCode()); return httpResponse.body(); } return null; } @Override public ScanCodeRequest receiveAppScanData(String type, String data) { switch (type) { case CodeTypeEnum.SCAN_CODE_LOGIN_CODE: return scanCodeLogin(data); case CodeTypeEnum.SCAN_CODE_USER_INFO_CODE: return setScanCodeUserInfo(data); case CodeTypeEnum.SIGNATURE_VALUE_CODE: return setSignatureValue(data); case CodeTypeEnum.SIGNATURE_BATHVALUE_CODE: return setBathSignatureValue(data); case CodeTypeEnum.SIGNATURE_PUBLIC_KEY_CODE: return setSignaturePublicKeyValue(data); default: return new ScanCodeRequest(null,new RequestHeader("",RequestHeader.FAIL)); } } /** * @Description: 登录状态值 * @author mazc * @param data * @return */ private ScanCodeRequest scanCodeLogin(String data){ try { if(StringUtils.isNotEmpty(data)) { // 解密数据 String decrypt = EnAndDeSecretUtil.aesDncode(aesKey, aesPass, data); // 添加缓存 ScanCodeStatusRequest scanCodeStatusRequest = JsonUtil.jsonToBean(decrypt, ScanCodeStatusRequest.class); Group group = groupCacheFactory.group(CodeTypeEnum.SCAN_CODE_LOGIN); group.push(scanCodeStatusRequest.getTId(), scanCodeStatusRequest); // 返回状态 return new ScanCodeRequest(null,new RequestHeader("",RequestHeader.SUCCESS)); } } catch (Exception e) { return new ScanCodeRequest(null,new RequestHeader("",RequestHeader.FAIL)); } return new ScanCodeRequest(null,new RequestHeader("",RequestHeader.FAIL)); } /** * @Description: 保存用户签名信息 * @author mazc * @param data * @return */ private ScanCodeRequest setScanCodeUserInfo(String data) { try { if (StringUtils.isNotEmpty(data)) { String decrypt = EnAndDeSecretUtil.aesDncode(aesKey, aesPass, data); ScanCodeUserInfo ScanCodeUserInfo = JsonUtil.jsonToBean(decrypt, ScanCodeUserInfo.class); Group group = groupCacheFactory.group(CodeTypeEnum.SCAN_CODE_USER_INFO); group.push(ScanCodeUserInfo.getTId(), ScanCodeUserInfo); } } catch (Exception e) { return new ScanCodeRequest(null, new RequestHeader("", RequestHeader.FAIL)); } return new ScanCodeRequest(null, new RequestHeader("", RequestHeader.FAIL)); } /** * @Description: 获取签名值 * @author mazc * @param data * @return */ private ScanCodeRequest setSignatureValue(String data) { try { if (StringUtils.isNotEmpty(data)) { String decrypt = EnAndDeSecretUtil.aesDncode(aesKey, aesPass, data); SignatureValueInfo signatureValueInfo = JsonUtil.jsonToBean(decrypt, SignatureValueInfo.class); Group group = groupCacheFactory.group(CodeTypeEnum.SIGNATURE_VALUE_INFO); group.push(signatureValueInfo.getTId(), signatureValueInfo); } } catch (Exception e) { return new ScanCodeRequest(null, new RequestHeader("", RequestHeader.FAIL)); } return new ScanCodeRequest(null, new RequestHeader("", RequestHeader.FAIL)); } /** * @Description: 获取公钥证书 * @author mazc * @param data * @return */ private ScanCodeRequest setSignaturePublicKeyValue(String data) { try { if (StringUtils.isNotEmpty(data)) { String decrypt = EnAndDeSecretUtil.aesDncode(aesKey, aesPass, data); SignatureValueInfo signatureValueInfo = JsonUtil.jsonToBean(decrypt, SignatureValueInfo.class); Group group = groupCacheFactory.group(CodeTypeEnum.SIGNATURE_PUBLIC_KEY_INFO); group.push(signatureValueInfo.getTId(), signatureValueInfo); } } catch (Exception e) { return new ScanCodeRequest(null, new RequestHeader("", RequestHeader.FAIL)); } return new ScanCodeRequest(null, new RequestHeader("", RequestHeader.FAIL)); } private ScanCodeRequest setBathSignatureValue(String data) { try { if (StringUtils.isNotEmpty(data)) { String decrypt = EnAndDeSecretUtil.aesDncode(aesKey, aesPass, data); SignatureValueInfo signatureValueInfo = JsonUtil.jsonToBean(decrypt, SignatureValueInfo.class); Group group = groupCacheFactory.group(CodeTypeEnum.SIGNATURE_BATHVALUE_INFO); group.push(signatureValueInfo.getTId(), signatureValueInfo); } } catch (Exception e) { return new ScanCodeRequest(null, new RequestHeader("", RequestHeader.FAIL)); } return new ScanCodeRequest(null, new RequestHeader("", RequestHeader.FAIL)); } @Override public String getSealImageListInfo(String tid, String idCard, String accessTokenJSON) { Map paramMap = new HashMap(); paramMap.put("TId", tid); paramMap.put("idCard", idCard); paramMap.put("unifiedTransactionCode", null); String encrypt = JsonUtil.objectToStr(paramMap); String decrypt = EnAndDeSecretUtil.aesEncode(publicKey , encrypt); paramMap.put("encrypt",decrypt); Map headerMap = new HashMap(); headerMap.put("X-AUTH-TOKEN", accessTokenJSON); HttpResponse httpResponse = HttpUtil.createPost(url + "/gxapp/scanning/getSealImageListInfo") .setHeader(headerMap, true).timeout(5000).form(paramMap).execute(); if(HttpStatus.HTTP_OK == httpResponse.getStatus()) { String body = httpResponse.body(); return body; } return null; } }