diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/irs/sign/IRSAPIRequest.java b/pmapi/src/main/java/com/ningdatech/pmapi/irs/sign/IRSAPIRequest.java index c14f828..4393846 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/irs/sign/IRSAPIRequest.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/irs/sign/IRSAPIRequest.java @@ -43,7 +43,7 @@ public class IRSAPIRequest { * * @return */ - public static byte[] createSignPdf(SignReqDTO req) { + public static String createSignPdf(SignReqDTO req) { String pdfEncode64 = req.getPdfEncode64(); Float posX = req.getPosX(); Float posY = req.getPosY(); @@ -79,11 +79,7 @@ public class IRSAPIRequest { JSONObject object = JSON.parseObject(data, JSONObject.class); // 获取盖好章的PDF文件内容Base64字符串 String signFileB64 = object.getString("signFileB64"); - if (Objects.nonNull(signFileB64)){ - return Base64.getDecoder().decode(signFileB64); - }else { - return null; - } + return signFileB64; } diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/controller/ProjectApplicationController.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/controller/ProjectApplicationController.java index 4658fc0..edba6bf 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/controller/ProjectApplicationController.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/controller/ProjectApplicationController.java @@ -27,8 +27,8 @@ public class ProjectApplicationController { @GetMapping("/get-report") @ApiOperation("获取应用 试运行报告") @WebLog("获取应用 试运行报告") - public String getReport(@Valid @RequestBody ApplicationAppCodeSaveDTO dto) { - return applicationManage.getReport(dto); + public String getReport(@RequestParam(required = false) String appCode) { + return applicationManage.getReport(appCode); } @PostMapping("/save-appcode") diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/manage/ApplicationManage.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/manage/ApplicationManage.java index 53de5f1..1497136 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/manage/ApplicationManage.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/manage/ApplicationManage.java @@ -1,15 +1,25 @@ package com.ningdatech.pmapi.projectlib.manage; +import com.alibaba.fastjson.JSON; import com.ningdatech.basic.function.VUtils; +import com.ningdatech.pmapi.common.util.HmacAuthUtil; import com.ningdatech.pmapi.projectlib.model.dto.ApplicationAppCodeSaveDTO; import com.ningdatech.pmapi.projectlib.model.entity.ProjectApplication; import com.ningdatech.pmapi.projectlib.service.IProjectApplicationService; import com.ningdatech.pmapi.user.util.LoginUserUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestTemplate; import java.time.LocalDateTime; +import java.util.Map; import java.util.Objects; /** @@ -25,6 +35,15 @@ import java.util.Objects; @Slf4j public class ApplicationManage { + @Value("${irs.app-report.url}") + private String url; + + @Value("${irs.app-report.appKey}") + private String appKey; + + @Value("${irs.app-report.appScret}") + private String appScret; + private final IProjectApplicationService applicationService; /** @@ -46,7 +65,30 @@ public class ApplicationManage { return "保存失败"; } - public String getReport(ApplicationAppCodeSaveDTO dto) { + /** + * 获取试运行报告 + * @param appCode + * @return + */ + public String getReport(String appCode) { + String method = HttpMethod.GET.name(); + String appUrl = url + "?appCode=" + appCode; + + Map header = HmacAuthUtil.generateHeader(appUrl, method, appKey, appScret); + //请求头 + HttpHeaders headers = new HttpHeaders(); + + for(Map.Entry entry : header.entrySet()){ + headers.add(entry.getKey(), entry.getValue()); + } + //封装请求头 + HttpEntity> formEntity = new HttpEntity>(headers); + + RestTemplate restTemplate = new RestTemplate(); + ResponseEntity forEntity = restTemplate.exchange(url, HttpMethod.GET,formEntity, String.class); + + log.info("body:",forEntity.getBody()); + String body = forEntity.getBody(); return null; } diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/todocenter/manage/TodoCenterManage.java b/pmapi/src/main/java/com/ningdatech/pmapi/todocenter/manage/TodoCenterManage.java index ab6f75c..ca4f85b 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/todocenter/manage/TodoCenterManage.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/todocenter/manage/TodoCenterManage.java @@ -105,6 +105,7 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import sun.misc.BASE64Decoder; /** * @author ZPF @@ -495,10 +496,22 @@ public class TodoCenterManage { Integer signType = req.getSignType(); signReq.setSignType(signType); // 调用盖章接口,获取盖章后返回的pdf文件字符数组 - byte[] signPdf = IRSAPIRequest.createSignPdf(signReq); + String signPdf = IRSAPIRequest.createSignPdf(signReq); ByteArrayInputStream inputStream = null; if (Objects.nonNull(signPdf)) { - inputStream = new ByteArrayInputStream(signPdf); + BASE64Decoder decoder = new BASE64Decoder(); + try { + //转码 + byte[] b = decoder.decodeBuffer(signPdf); + for (int i = 0; i < b.length; ++i) { + if (b[i] < 0) {//调整异常数据 + b[i] += 256; + } + } + inputStream = new ByteArrayInputStream(b); + }catch (Exception e){ + + } } // 转换成MultipartFile MultipartFile multipartFile; diff --git a/pmapi/src/main/resources/application-dev.yml b/pmapi/src/main/resources/application-dev.yml index 6820c94..ccc0776 100644 --- a/pmapi/src/main/resources/application-dev.yml +++ b/pmapi/src/main/resources/application-dev.yml @@ -209,10 +209,14 @@ irs: access-key: 42bcb49bea174986a3bfdfba7d005566 secret-key: bebff29877d4443abd67fc4f8fb335d8 api-url: https://bcdsg.zj.gov.cn:8443/restapi/prod/IC33000020220309000004/seal-platform/seal/v1/rest/sign/signPdf - + app-report: + url: https://bcdsg.zj.gov.cn:8443/restapi/prod/IC33000020230427000001/irs-res-bill/report/pdfUrl + appScret: BCDSGS_4ab4235d26a9a357170a39f3a13fd68c + appKey: BCDSGA_d874c8e46b541eb4e8aac6510fd3351b hostname: iZbp13nwyvib53j4j1p2xoZ login: phone-verify-code: skip: true + diff --git a/pmapi/src/main/resources/application-prod.yml b/pmapi/src/main/resources/application-prod.yml index 27c5e85..cb0d660 100644 --- a/pmapi/src/main/resources/application-prod.yml +++ b/pmapi/src/main/resources/application-prod.yml @@ -208,7 +208,10 @@ irs: access-key: 42bcb49bea174986a3bfdfba7d005566 secret-key: bebff29877d4443abd67fc4f8fb335d8 api-url: https://bcdsg.zj.gov.cn:8443/restapi/prod/IC33000020220309000004/seal-platform/seal/v1/rest/sign/signPdf - + app-report: + url: https://bcdsg.zj.gov.cn:8443/restapi/prod/IC33000020230427000001/irs-res-bill/report/pdfUrl + appScret: BCDSGS_4ab4235d26a9a357170a39f3a13fd68c + appKey: BCDSGA_d874c8e46b541eb4e8aac6510fd3351b hostname: iZ6mx01gyeodd80imxd2gbZ login: phone-verify-code: diff --git a/pmapi/src/test/java/com/ningdatech/pmapi/irs/IrsTest.java b/pmapi/src/test/java/com/ningdatech/pmapi/irs/IrsTest.java new file mode 100644 index 0000000..7843725 --- /dev/null +++ b/pmapi/src/test/java/com/ningdatech/pmapi/irs/IrsTest.java @@ -0,0 +1,81 @@ +package com.ningdatech.pmapi.irs; + +import com.alibaba.fastjson.JSON; +import com.google.common.collect.Maps; +import com.ningdatech.pmapi.common.util.CryptUtils; +import com.ningdatech.pmapi.common.util.HmacAuthUtil; +import com.ningdatech.pmapi.common.util.RefreshKeyUtil; +import org.junit.Test; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestTemplate; + +import java.security.NoSuchAlgorithmException; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * @Classname IrsTest + * @Description + * @Date 2023/6/26 17:42 + * @Author PoffyZhang + */ +public class IrsTest { + + @Test + public void test1(){ + String method = "GET"; + String url = "https://bcdsg.zj.gov.cn:8443/restapi/prod/IC33000020230427000001/irs-res-bill/report/pdfUrl?appCode=A330000100000202105005790"; + String appScret = "BCDSGS_4ab4235d26a9a357170a39f3a13fd68c"; + String appKey = "BCDSGA_d874c8e46b541eb4e8aac6510fd3351b"; + + Map header = HmacAuthUtil.generateHeader(url, method, appKey, appScret); + //请求头 + HttpHeaders headers = new HttpHeaders(); + + for(Map.Entry entry : header.entrySet()){ + headers.add(entry.getKey(), entry.getValue()); + } + //封装请求头 + HttpEntity> formEntity = new HttpEntity>(headers); + + RestTemplate restTemplate = new RestTemplate(); + ResponseEntity forEntity = restTemplate.exchange(url, HttpMethod.GET,formEntity, String.class); + + System.out.println(JSON.toJSONString(forEntity)); + } + + @Test + public void test2() throws NoSuchAlgorithmException { + long timestamp = System.currentTimeMillis(); + String areaCode = "331121"; + String appKey = "A331101453557202109017383"; + String appScret = "496f0f2a19994f76b4fd9dae087366c7"; + + String requestSecret = RefreshKeyUtil.getRequestSecret(appKey, appScret); + String capCode = CryptUtils.MD5Encode(timestamp + areaCode); + String capTime = String.valueOf(timestamp); + String sign = CryptUtils.MD5Encode(appKey + requestSecret + timestamp); + String url = "https://interface.zjzwfw.gov.cn/gateway/api/proxy/001003001029/dataSharing/94wbaL1I1Pbz0648.htm?requestTime=" + timestamp + + "&sign=" + sign + "&appKey=" + appKey + "&capCode=" + capCode + "&capTime=" + capTime + + "&baseProjSys=测试应用&areaCode=331121&baseProjName=nsl-丽水演示项目&baseProjId=331100230130112233001" + + "&isEffective=1&baseProjSysCode=25083657"; + RestTemplate restTemplate = new RestTemplate(); + ResponseEntity forEntity = restTemplate.getForEntity(url, String.class); + + System.out.println(JSON.toJSONString(forEntity)); + } + + @Test + public void test3() throws NoSuchAlgorithmException { + long timestamp = System.currentTimeMillis(); + String areaCode = "331121"; + System.out.println(CryptUtils.MD5Encode(timestamp + areaCode)); + } +}