Browse Source

省局联审接口完成

tags/24080901
PoffyZhang 1 year ago
parent
commit
6e573aca4d
12 changed files with 633 additions and 15 deletions
  1. +109
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/common/config/BeanConfig.java
  2. +27
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/common/config/ProvincialProperties.java
  3. +8
    -9
      pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/utils/ReStartProcessMapUtil.java
  4. +38
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/provincial/controller/TestController.java
  5. +36
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/provincial/model/dto/ProcessCommentDTO.java
  6. +98
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/provincial/model/dto/ProvincialApplicationDTO.java
  7. +125
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/provincial/model/dto/ProvincialProjectDTO.java
  8. +25
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/provincial/service/IJoinReviewProvincialBureauService.java
  9. +114
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/provincial/service/impl/JoinReviewProvincialBureauServiceImpl.java
  10. +7
    -5
      pmapi/src/main/java/com/ningdatech/pmapi/staging/utils/ProjectStatusFlowMapUtil.java
  11. +9
    -1
      pmapi/src/main/resources/application-dev.yml
  12. +37
    -0
      pmapi/src/test/java/com/ningdatech/pmapi/provincial/Test.java

+ 109
- 0
pmapi/src/main/java/com/ningdatech/pmapi/common/config/BeanConfig.java View File

@@ -0,0 +1,109 @@
package com.ningdatech.pmapi.common.config;

import lombok.extern.slf4j.Slf4j;
import org.apache.http.Header;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy;
import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.message.BasicHeader;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;

import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.TimeUnit;

/**
* @Classname BeanConfig
* @Description
* @Date 2023/3/2 9:42
* @Created by PoffyZhang
*/
@Configuration
@Slf4j
public class BeanConfig {


@Bean
public RestTemplate restTemplate() {
// 添加内容转换器,使用默认的内容转换器
RestTemplate restTemplate = new RestTemplate(httpRequestFactory());
// 设置编码格式为UTF-8,解决中文乱码问题
List<HttpMessageConverter<?>> converterList = restTemplate.getMessageConverters();
HttpMessageConverter<?> converterTarget = null;
for (HttpMessageConverter<?> item : converterList) {
if (item.getClass() == StringHttpMessageConverter.class) {
converterTarget = item;
break;
}
}
if (converterTarget != null) {
converterList.remove(converterTarget);
}
HttpMessageConverter<?> converter = new StringHttpMessageConverter(StandardCharsets.UTF_8);
converterList.add(1,converter);

MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
mappingJackson2HttpMessageConverter.setSupportedMediaTypes(Arrays.asList(
MediaType.TEXT_HTML,
MediaType.TEXT_PLAIN));
restTemplate.getMessageConverters().add(mappingJackson2HttpMessageConverter);

log.info("-----restTemplate-----初始化完成");
return restTemplate;
}

@Bean
public ClientHttpRequestFactory httpRequestFactory() {
return new HttpComponentsClientHttpRequestFactory(httpClient());
}

@Bean
public HttpClient httpClient() {
// 长连接保持30秒
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(30, TimeUnit.SECONDS);
//设置整个连接池最大连接数 根据自己的场景决定
connectionManager.setMaxTotal(500);
//同路由的并发数,路由是对maxTotal的细分
connectionManager.setDefaultMaxPerRoute(500);

//requestConfig
RequestConfig requestConfig = RequestConfig.custom()
//服务器返回数据(response)的时间,超过该时间抛出read timeout
.setSocketTimeout(10000)
//连接上服务器(握手成功)的时间,超出该时间抛出connect timeout
.setConnectTimeout(5000)
//从连接池中获取连接的超时时间,超过该时间未拿到可用连接,会抛出org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool
.setConnectionRequestTimeout(500)
.build();
//headers
List<Header> headers = new ArrayList<>();
headers.add(new BasicHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.16 Safari/537.36"));
headers.add(new BasicHeader("Accept-Encoding", "gzip,deflate"));
headers.add(new BasicHeader("Accept-Language", "zh-CN"));
headers.add(new BasicHeader("Connection", "Keep-Alive"));
headers.add(new BasicHeader("Content-type", "application/json;charset=UTF-8"));

return HttpClientBuilder.create()
.setDefaultRequestConfig(requestConfig)
.setConnectionManager(connectionManager)
.setDefaultHeaders(headers)
// 保持长连接配置,需要在头添加Keep-Alive
.setKeepAliveStrategy(new DefaultConnectionKeepAliveStrategy())
//重试次数,默认是3次,没有开启
.setRetryHandler(new DefaultHttpRequestRetryHandler(2, true))
.build();
}
}

+ 27
- 0
pmapi/src/main/java/com/ningdatech/pmapi/common/config/ProvincialProperties.java View File

@@ -0,0 +1,27 @@
package com.ningdatech.pmapi.common.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import java.util.ArrayList;
import java.util.List;

/**
* @author zpf
* @date 2023/3/2 下午5:37
*/
@Data
@Configuration
@ConfigurationProperties(prefix = "provincial")
public class ProvincialProperties {
private String host;

private String pushUrl;

private String detailUrl;

private String key;

private String secret;
}

+ 8
- 9
pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/utils/ReStartProcessMapUtil.java View File

@@ -6,10 +6,8 @@ import com.ningdatech.pmapi.projectdeclared.manage.DeclaredProjectManage;
import com.ningdatech.pmapi.projectdeclared.manage.PrequalificationDeclaredProjectManage;
import com.ningdatech.pmapi.projectdeclared.model.dto.DefaultDeclaredDTO;
import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.Map;
import java.util.function.Function;

@@ -20,21 +18,22 @@ import java.util.function.Function;
* @Author PoffyZhang
*/
@Component
@RequiredArgsConstructor
public class ReStartProcessMapUtil {
private final DeclaredProjectManage declaredProjectManage;
@Autowired
private DeclaredProjectManage declaredProjectManage;

private final ConstructionPlanManage constructionPlanManage;
@Autowired
private ConstructionPlanManage constructionPlanManage;

private final PrequalificationDeclaredProjectManage prequalificationDeclaredProjectManage;
@Autowired
private PrequalificationDeclaredProjectManage prequalificationDeclaredProjectManage;
public Map<Integer, Function<DefaultDeclaredDTO,String>> reStartProcessMap = Maps.newHashMap();
/**
* 初始化业务分派逻辑,代替了if-else部分
* key: 枚举 状态值
* value: lambda表达式,最终会获取发起实例的函数
*/
@PostConstruct
public void reStartProcessInit(){
public ReStartProcessMapUtil(){
//重新项目申报
reStartProcessMap.put(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS.getCode(),
dto->declaredProjectManage.reStartTheProcess(dto));


+ 38
- 0
pmapi/src/main/java/com/ningdatech/pmapi/provincial/controller/TestController.java View File

@@ -0,0 +1,38 @@
package com.ningdatech.pmapi.provincial.controller;

import com.ningdatech.pmapi.provincial.model.dto.ProvincialProjectDTO;
import com.ningdatech.pmapi.provincial.service.IJoinReviewProvincialBureauService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

/**
* @Classname TestController
* @Description
* @Date 2023/3/2 15:08
* @Author PoffyZhang
*/
@RestController
@RequestMapping("/api/v1/test")
@Api(tags = "测试省局接口")
public class TestController {

@Autowired
private IJoinReviewProvincialBureauService joinReviewProvincialBureauService;

@PostMapping("/push")
@ApiOperation("测试推送")
private String push(@Valid @RequestBody ProvincialProjectDTO project){
return joinReviewProvincialBureauService.pushImportProject(project);
}

@GetMapping("/detail")
@ApiOperation("测试推送")
private String detail(@RequestParam String projectId){
return joinReviewProvincialBureauService.processInfo(projectId);
}
}

+ 36
- 0
pmapi/src/main/java/com/ningdatech/pmapi/provincial/model/dto/ProcessCommentDTO.java View File

@@ -0,0 +1,36 @@
package com.ningdatech.pmapi.provincial.model.dto;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;

/**
* @Classname ProcessCommentDTO
* @Description
* @Date 2023/3/2 15:25
* @Author PoffyZhang
*/
@Data
@Builder
@ApiModel(value = "ProcessCommentDTO", description = "省局返回流程审核详情")
public class ProcessCommentDTO {

@ApiModelProperty("任务id")
private String taskId;

@ApiModelProperty("comment")
private String comment;

@ApiModelProperty("流程步骤")
private String stepName;

@ApiModelProperty("审批状态")
private String status;

@ApiModelProperty("审批人")
private String label;

@ApiModelProperty("时间")
private String approverTime;
}

+ 98
- 0
pmapi/src/main/java/com/ningdatech/pmapi/provincial/model/dto/ProvincialApplicationDTO.java View File

@@ -0,0 +1,98 @@
package com.ningdatech.pmapi.provincial.model.dto;

import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
* @Classname ProvincialApplicationDTO
* @Description
* @Date 2023/3/2 10:06
* @Author PoffyZhang
*/
@Data
@Builder
@ApiModel(value = "ProvincialApplicationDTO", description = "")
public class ProvincialApplicationDTO {
//云 信息
private List<Cloud> clouds;
//是否初次建设 1是 2不是
private Integer isFirst;
//应用名称
private String applicationName;
//关联 关联的IRS应用code
private String applicationCode;
//关联的IRS应用name
private String relatedExistsApplication;
//1: '办公类系统',2: '业务应用类系统',3: '门户网站',4: '宣传微博/微信公众号',5: '硬件类系统',6: '工具类系统',99: '其他'
private Integer applicationType;
//建设层级 1:国家 2:省级 3:市级 4:县(市、区)
private Integer buildLevel;
//是否统建 0:否 1:是
private Integer isUniteBuild;
//统建类型 1:全省统建 2:全市统建
private Integer unionBuildKind;
//应用简介
private String applicationSummary;
//应用备注
private String applicationRemark;
//应用总投资测算明细
private String applicationEstimateFile;
//是否数改系统 0:否 1:是
private Integer isFiveDomain;
//1: '党政机关整体智治',2: '数字政府',3: '数字经济',4: '数字社会',7: '数字文化',5: '数字法治',6: '一体化智能化公共数据平台', 8: '基层智治' 多个用英文,分隔
private String fiveDomain;
//业务领域
private String bizDomain;
//否涉及业务协同 0:否 1:是
private Integer isBizCooperate;
//协同单位111111
private String cooperativeUnit;
//用户范围 0: '机关事业单位人员','0-1': '跨部门跨系统','0-2': '系统内地方各级','0-3': '本部门本级','0-4': '处室内部','0-6': '主管处室内部','0-5': '其他',1: '企业', 2: '社会公众',3: '其他' 多个用英文,分隔
private String userRange;
//是否使用政务云资源 1使用
private Integer useGovCloud;
//是否符合国家信息技术应用创新相关规范 0:否 1:是
private Integer nationalITSpec;
//网络环境 1:政务内网 2:政务外网 3:互联网 4:业务专网 5:单机
private String netEnv;
//等保级别 1:一级 2:二级 3:三级 4:四级 5:五级
private Integer secrecyGrade;
//密码测评级别 1:一级 2:二级 3:三级 4:四级 5:五级
private Integer passwordGrade;
//是否是S2 0:否 1:是
private Integer isS2;
//一本账应用名称
private String accountAppName;
//领域”大脑”一本帐名称
private String brainAccountAppName;
//是否使用公共数据
private Integer useCommonData;
//使用的公共数据名称
private String dataName;
//使用公共组件的名称
private String commonComponents;
//是否使用公共组件
private Integer useCommonComponent;
//是否产生公共组件
private Integer isProduceCommonComponent;
//产生的组件名称
private String produceCommonComponent;
//发布端 '浙里办','浙政钉','数字化改革门户','支付宝','微信','网页','PC客户端','APP端'
private String publishSide;

public static class Cloud {
//云资源台数 11
private Integer cloudNums;
//云资源类型 云服务器(ECS)
private String cloudType;
//云资源规格 1核8G
private String cloudBasicSpec;
//云资源描述
private String cloudUseDescription;
}
}

+ 125
- 0
pmapi/src/main/java/com/ningdatech/pmapi/provincial/model/dto/ProvincialProjectDTO.java View File

@@ -0,0 +1,125 @@
package com.ningdatech.pmapi.provincial.model.dto;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;
import java.util.List;

/**
* @Classname ProvincialProjectDTO
* @Description
* @Date 2023/3/2 10:06
* @Author PoffyZhang
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(value = "ProvincialProjectDTO", description = "")
public class ProvincialProjectDTO {

@ApiModelProperty("区域code")
private String regionCode;

@ApiModelProperty("区域名称")
private String regionName;

@ApiModelProperty("重大项目名称")
private String projectName;

@ApiModelProperty("重大项目code 21位")
private String projectId;

@ApiModelProperty("项目类型 1新建 2续建")
private Integer projectType;

@ApiModelProperty("项目总投资(万元)")
private BigDecimal totalMoney;

@ApiModelProperty("项目年度预算(万元)")
private BigDecimal yearBudget;

@ApiModelProperty("自有资金,政府投资-本级财政资金,政府投资-上级补助资金")
private String budgetFrom;

@ApiModelProperty("预算年度 2023")
private String year;

@ApiModelProperty("财政code 32")
private String financialCode;

@ApiModelProperty("发改code 23")
private String developCode;

@ApiModelProperty("开始时间 比如2022-11-18")
private String beginTime;

@ApiModelProperty("结束时间 比如2022-12-13")
private String endTime;

@ApiModelProperty("立项依据1111")
private String buildBasis;

@ApiModelProperty("立项依据材料 [{\"fileId\":\"\"}]")
private String buildBasisFile;

@ApiModelProperty("项目概述")
private String projectSummary;

@ApiModelProperty("负责人")
private String responsibleMan;

@ApiModelProperty("联系人联系方式")
private String responsibleManPhone;

@ApiModelProperty("联系人")
private String contactName;

@ApiModelProperty("联系人联系方式")
private String contactPhone;

@ApiModelProperty("建设单位 比如财政局")
private String buildUnit;

@ApiModelProperty("建设单位浙政钉code")
private String buildUnitCode;

@ApiModelProperty("主管单位")
private String superUnit;

@ApiModelProperty("主管单位浙政钉code")
private String superUnitCode;

@ApiModelProperty("可研报告文件")
private String researchReport;

@ApiModelProperty("项目申报书")
private String projectApplyFile;

@ApiModelProperty("项目总投资测算明细")
private String projectEstimateFile;

@ApiModelProperty("申报单位主要职责")
private String unitThreePlan;

@ApiModelProperty("其他附件")
private String otherFile;

@ApiModelProperty("项目备注111")
private String projectRemark;

@ApiModelProperty("是否有效 1有效 2无效 3撤回")
private String isEffective;

@ApiModelProperty("是否包含应用 1包含")
private String includeApplication;

@ApiModelProperty("app信息")
private List<ProvincialApplicationDTO> applicationInfo;

}

+ 25
- 0
pmapi/src/main/java/com/ningdatech/pmapi/provincial/service/IJoinReviewProvincialBureauService.java View File

@@ -0,0 +1,25 @@
package com.ningdatech.pmapi.provincial.service;

import com.ningdatech.pmapi.provincial.model.dto.ProvincialProjectDTO;

/**
* @Classname JointReviewProvincialBureauService
* @Description 省局联审接口
* @Date 2023/3/2 9:29
* @Author PoffyZhang
*/
public interface IJoinReviewProvincialBureauService {

/**
* 推送/保存 重大接口到 省局联审
* @return
*/
String pushImportProject(ProvincialProjectDTO project);


/**
* 查看 本区域 省局联审 的项目审核详情
* @return
*/
String processInfo(String projectId);
}

+ 114
- 0
pmapi/src/main/java/com/ningdatech/pmapi/provincial/service/impl/JoinReviewProvincialBureauServiceImpl.java View File

@@ -0,0 +1,114 @@
package com.ningdatech.pmapi.provincial.service.impl;

import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import com.ningdatech.pmapi.common.config.ProvincialProperties;
import com.ningdatech.pmapi.provincial.model.dto.ProvincialProjectDTO;
import com.ningdatech.pmapi.provincial.service.IJoinReviewProvincialBureauService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.RequestEntity;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

/**
* @Classname JointReviewProvincialBureauService
* @Description 省局联审接口
* @Date 2023/3/2 9:29
* @Author PoffyZhang
*/
@Service
@Slf4j
public class JoinReviewProvincialBureauServiceImpl implements IJoinReviewProvincialBureauService {

@Autowired
private ProvincialProperties provincialProperties;

@Autowired
private RestTemplate restTemplate;

/**
* 推送/保存 重大接口到 省局联审
* @return
*/
@Override
public String pushImportProject(ProvincialProjectDTO project){
Long timeStamp = System.currentTimeMillis()/1000;
String url = provincialProperties.getHost() + provincialProperties.getPushUrl()
+ "?timestamp=" + timeStamp;
log.info("省局推送联审url {}",url);
ResponseEntity<String> responseEntity = null;

String signature = getSha256(timeStamp,provincialProperties.getPushUrl(),
HttpMethod.POST.name());

//发送post请求
RequestEntity<ProvincialProjectDTO> requestEntity = RequestEntity
.post(url)
.header("Accept", MediaType.APPLICATION_JSON.toString())
.header("X-Hmac-Auth-Key",provincialProperties.getKey())
.header("X-Hmac-Auth-Signature",signature)
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON)
.body(project);

try {
responseEntity = restTemplate.exchange(requestEntity,String.class);
log.info("省局联审 响应 :{}",responseEntity);
} catch (Exception e) {
log.error("[省局联审] http request error", e);
}

return responseEntity.getBody();
}

/**
* 获取流程审批详情
* @param projectId
* @return
*/
@Override
public String processInfo(String projectId) {
Long timeStamp = System.currentTimeMillis()/1000;
String url = provincialProperties.getHost() + provincialProperties.getDetailUrl()
+ "?timestamp=" + timeStamp;

log.info("省局获取审核详情 url {}",url);
ResponseEntity<String> responseEntity = null;

String signature = getSha256(timeStamp,provincialProperties.getDetailUrl(),
HttpMethod.POST.name());

//发送post请求
RequestEntity<String> requestEntity = RequestEntity
.post(url)
.header("Accept", MediaType.APPLICATION_JSON.toString())
.header("X-Hmac-Auth-Key",provincialProperties.getKey())
.header("X-Hmac-Auth-Signature",signature)
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON)
.body(projectId); //也可以是DTO

try {
responseEntity = restTemplate.exchange(requestEntity,String.class);
log.info("获取审批详情 响应 :{}",responseEntity);
} catch (Exception e) {
log.error("[省局获取审核详情] http request error", e);
}

return responseEntity.getBody();
}

private String getSha256(Long timeStamp,String url,String method){
String secret = provincialProperties.getSecret();
String key = provincialProperties.getKey();
String bytesToSign = method + StrUtil.LF + url + StrUtil.LF + timeStamp + StrUtil.LF + key;
log.info("加密message :{}",bytesToSign);
String res = SecureUtil.hmacSha256(secret).digestBase64(bytesToSign,false);
log.info("加密结果 :{}",res);
return res;
}
}

+ 7
- 5
pmapi/src/main/java/com/ningdatech/pmapi/staging/utils/ProjectStatusFlowMapUtil.java View File

@@ -7,6 +7,7 @@ import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum;
import com.ningdatech.pmapi.projectlib.model.entity.Project;
import com.ningdatech.pmapi.staging.model.entity.ProjectStaging;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
@@ -20,11 +21,12 @@ import java.util.function.Function;
* @Author PoffyZhang
*/
@Component
@RequiredArgsConstructor
public class ProjectStatusFlowMapUtil {
private final ReviewByProvincialDeptManage provincialDeptManage;
@Autowired
private ReviewByProvincialDeptManage provincialDeptManage;

private final ReviewByDeptJointManage reviewByDeptJointManage;
@Autowired
private ReviewByDeptJointManage reviewByDeptJointManage;

public Map<Integer, Function<Project,Boolean>> statusFlowFunctionMap = Maps.newHashMap();
/**
@@ -37,8 +39,7 @@ public class ProjectStatusFlowMapUtil {
* key: 枚举 状态值
* value: lambda表达式,最终会获取发起实例的函数
*/
@PostConstruct
public void statusFlowFunctionInit(){
public ProjectStatusFlowMapUtil(){
//省级部门联审
statusFlowFunctionMap.put(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS.getCode(),
project->provincialDeptManage.startTheProcess(project));
@@ -47,6 +48,7 @@ public class ProjectStatusFlowMapUtil {
project->reviewByDeptJointManage.startTheProcess(project));
}


/**
* 扫描的间隔越来越长 秒数
*/


+ 9
- 1
pmapi/src/main/resources/application-dev.yml View File

@@ -184,4 +184,12 @@ yxt:
password: hzndkj@2021
#音信通开关
sms-enable: true
tel-enable: true
tel-enable: true

#省局联审 请求信息
provincial:
host: http://zj.ningdatech.com/prometheus-zhejiang_foreign
pushUrl: /api/v1/foreign/importantPro
detailUrl: /api/v1/foreign/importantProView
key: 7196317343a64e67895dc0375c098fe7
secret: 75152a97f20e4c4c854dc6301cf72ad4

+ 37
- 0
pmapi/src/test/java/com/ningdatech/pmapi/provincial/Test.java View File

@@ -0,0 +1,37 @@
package com.ningdatech.pmapi.provincial;

import cn.hutool.crypto.SecureUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

/**
* @Classname Test
* @Description
* @Date 2023/3/2 16:14
* @Author PoffyZhang
*/
@Slf4j
public class Test {

@org.junit.Test
public void test() throws NoSuchAlgorithmException, UnsupportedEncodingException, InvalidKeyException {
// Long timeStamp = System.currentTimeMillis()/1000;
Long timeStamp = 1677750055L;
String key = "7196317343a64e67895dc0375c098fe7";
String url = "/api/v1/foreign/importantProView";
String methed = "POST";
String bytesToSign = methed + "\n" + url + "\n" + timeStamp + "\n" + key;

log.info("" + bytesToSign);

String secret = "75152a97f20e4c4c854dc6301cf72ad4";
String str = SecureUtil.hmacSha256(secret).digestBase64(bytesToSign,false);
log.info("" + str);
}
}

Loading…
Cancel
Save