Преглед изворни кода

feat: 增加2023新标准相关VO

huangzqa пре 2 година
родитељ
комит
94cf48184f
17 измењених фајлова са 813 додато и 1 уклоњено
  1. 54 0
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/enumresources/ZeroTrustApproveEndEnum.java
  2. 49 0
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/enumresources/ZeroTrustApproveManageEnum.java
  3. 82 0
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/enumresources/ZeroTrustBusinessRespEnum.java
  4. 45 0
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/enumresources/ZeroTrustEndFlagEnum.java
  5. 46 0
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/facade/api/IApiV3ApproveFacade.java
  6. 50 0
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/v3/ZeroTrustApproveCallbackReqV3VO.java
  7. 65 0
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/v3/ZeroTrustApproveCreateReqV3VO.java
  8. 38 0
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/v3/ZeroTrustApproveManagerReqV3VO.java
  9. 22 0
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/resp/v3/ZeroTrustApproveCreateV3RespVO.java
  10. 109 0
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/resp/v3/ZeroTrustMessageRespVO.java
  11. 60 0
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/resp/v3/ZeroTrustResultDataVO.java
  12. 5 0
      approve-core-service/pom.xml
  13. 32 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/INoticeBusiness.java
  14. 107 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/NoticeBusinessImpl.java
  15. 12 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/config/ApproveConfig.java
  16. 31 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/api/ApiV3ApproveFacade.java
  17. 6 0
      pom.xml

+ 54 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/enumresources/ZeroTrustApproveEndEnum.java

@@ -0,0 +1,54 @@
+package com.dragonsoft.dcuc.approve.enumresources;
+
+import com.dragonsoft.duceap.base.enums.ICodeEnum;
+
+/**
+ * <p>
+ * 审批流程结束类型
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/5/22
+ */
+public enum ZeroTrustApproveEndEnum implements ICodeEnum {
+    /**
+     * 结束
+     */
+    END("end", "结束"),
+
+    /**
+     * 撤销
+     */
+    CANCEL("cancel", "撤销"),
+
+    /**
+     * 挂起
+     */
+    HOLD("hold", "挂起"),
+
+    /**
+     * 终止
+     */
+    STOP("stop", "终止"),
+
+
+    ;
+    private final String value;
+
+    private final String label;
+
+    ZeroTrustApproveEndEnum(String value, String label) {
+        this.value = value;
+        this.label = label;
+    }
+
+    @Override
+    public String getValue() {
+        return this.value;
+    }
+
+    @Override
+    public String getLabel() {
+        return this.label;
+    }
+}

+ 49 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/enumresources/ZeroTrustApproveManageEnum.java

@@ -0,0 +1,49 @@
+package com.dragonsoft.dcuc.approve.enumresources;
+
+import com.dragonsoft.duceap.base.enums.ICodeEnum;
+
+/**
+ * <p>
+ * 审批管理类型
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/5/22
+ */
+public enum ZeroTrustApproveManageEnum implements ICodeEnum {
+    /**
+     * 撤销
+     */
+    CANCEL("01", "撤销"),
+
+    /**
+     * 挂起
+     */
+    HOLD("02", "挂起"),
+
+    /**
+     * 终止
+     */
+    STOP("03", "终止"),
+
+
+    ;
+    private final String value;
+
+    private final String label;
+
+    ZeroTrustApproveManageEnum(String value, String label) {
+        this.value = value;
+        this.label = label;
+    }
+
+    @Override
+    public String getValue() {
+        return this.value;
+    }
+
+    @Override
+    public String getLabel() {
+        return this.label;
+    }
+}

+ 82 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/enumresources/ZeroTrustBusinessRespEnum.java

@@ -0,0 +1,82 @@
+package com.dragonsoft.dcuc.approve.enumresources;
+
+import com.dragonsoft.duceap.base.enums.ICodeEnum;
+
+/**
+ * <p>
+ * 业务通用响应码
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/8/1
+ */
+public enum ZeroTrustBusinessRespEnum implements ICodeEnum {
+    /**
+     * 操作成功
+     */
+    SUCCESS("0000", "操作成功"),
+
+    /**
+     * 操作失败
+     */
+    OPERATE_FAIL("0001", "操作失败"),
+
+    /**
+     * 令牌失效
+     */
+    TOKEN_FAIL("0002", "令牌失效"),
+
+    /**
+     * 权限冻结
+     */
+    PERMISSION_FREEZE("0003", "权限冻结"),
+
+    /**
+     * 用户令牌解密失败
+     */
+    USER_TOKEN_DECODE_FAIL("1000", "用户令牌解密失败"),
+
+    /**
+     * 用户令牌不存在
+     */
+    USER_TOKEN_NOT_EXITS("1001", "用户令牌不存在"),
+
+    /**
+     * 应用令牌解密失败
+     */
+    APP_TOKEN_DECODE_FAIL("1002", "应用令牌解密失败"),
+    /**
+     * 应用令牌不存在
+     */
+    APP_TOKEN_NOT_EXITS("1003", "应用令牌不存在"),
+
+    /**
+     * 用户令牌不需要续期
+     */
+    USER_TOKEN_NO_RENEWAL("1004", "用户令牌不需要续期"),
+
+    /**
+     * 应用令牌不需要续期
+     */
+    APP_TOKEN_NO_RENEWAL("1005", "应用令牌不需要续期");
+
+    private final String value;
+
+    private final String label;
+
+
+    ZeroTrustBusinessRespEnum(String value, String label) {
+        this.value = value;
+        this.label = label;
+    }
+
+    @Override
+    public String getValue() {
+        return this.value;
+    }
+
+    @Override
+    public String getLabel() {
+        return this.label;
+    }
+}

+ 45 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/enumresources/ZeroTrustEndFlagEnum.java

@@ -0,0 +1,45 @@
+package com.dragonsoft.dcuc.approve.enumresources;
+
+import com.dragonsoft.duceap.base.enums.ICodeEnum;
+
+/**
+ * <p>
+ * 审批结果标识
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/8/1
+ */
+public enum ZeroTrustEndFlagEnum implements ICodeEnum {
+    /**
+     * 操作成功
+     */
+    COMPLETE_AGREE("1", "操作成功"),
+
+    /**
+     * 操作失败
+     */
+    COMPLETE_DISAGREE("2", "操作失败");
+
+
+
+    private final String value;
+
+    private final String label;
+
+
+    ZeroTrustEndFlagEnum(String value, String label) {
+        this.value = value;
+        this.label = label;
+    }
+
+    @Override
+    public String getValue() {
+        return this.value;
+    }
+
+    @Override
+    public String getLabel() {
+        return this.label;
+    }
+}

+ 46 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/facade/api/IApiV3ApproveFacade.java

@@ -0,0 +1,46 @@
+package com.dragonsoft.dcuc.approve.facade.api;
+
+import com.dragonsoft.dcuc.approve.model.req.v3.ZeroTrustApproveCreateReqV3VO;
+import com.dragonsoft.dcuc.approve.model.req.v3.ZeroTrustApproveManagerReqV3VO;
+import com.dragonsoft.dcuc.approve.model.resp.v3.ZeroTrustApproveCreateV3RespVO;
+import com.dragonsoft.dcuc.approve.model.resp.v3.ZeroTrustMessageRespVO;
+import com.dragonsoft.dcuc.approve.model.resp.v3.ZeroTrustResultDataVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/5/22
+ */
+@Api(tags = "审批服务接口V3")
+@FeignClient(name = "approve")
+public interface IApiV3ApproveFacade {
+
+    /**
+     * 流程发起
+     *
+     * @param zeroTrustApproveCreateReqV3VO 流程发起请求
+     * @return 流程发起返回
+     */
+    @ApiOperation(value = "审批请求推送接口", notes = "审批请求推送接口")
+    @RequestMapping(value = "api/v3/apply", method = RequestMethod.POST)
+    ZeroTrustResultDataVO<ZeroTrustApproveCreateV3RespVO> create(ZeroTrustApproveCreateReqV3VO zeroTrustApproveCreateReqV3VO);
+
+
+    /**
+     * 流程管理
+     *
+     * @param zeroTrustApproveManagerReqV3VO 流程管理请求
+     * @return 状态
+     */
+    @ApiOperation(value = "流程管理", notes = "流程管理")
+    @RequestMapping(value = "api/v3/manage", method = RequestMethod.POST)
+    ZeroTrustMessageRespVO manage(ZeroTrustApproveManagerReqV3VO zeroTrustApproveManagerReqV3VO);
+}

+ 50 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/v3/ZeroTrustApproveCallbackReqV3VO.java

@@ -0,0 +1,50 @@
+package com.dragonsoft.dcuc.approve.model.req.v3;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * <p>
+ * 审批结果回调
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/5/22
+ */
+@ApiModel("审批结果回调")
+@Data
+public class ZeroTrustApproveCallbackReqV3VO {
+
+    /**
+     * 流程结束类型
+     *
+     * @see com.dragonsoft.dcuc.approve.enumresources.ZeroTrustApproveEndEnum
+     */
+    @ApiModelProperty("流程结束类型")
+    private String type;
+
+    @ApiModelProperty("流程实例Id")
+    private String processInstId;
+
+    @ApiModelProperty("流程发起人")
+    private String openId;
+
+    @ApiModelProperty("发起人姓名")
+    private String userName;
+
+    /**
+     * End表示流程结束时传入。
+     * “1”表示审批通过;
+     * “2”表示审批不通过
+     *
+     * @see com.dragonsoft.dcuc.approve.enumresources.ZeroTrustEndFlagEnum
+     */
+    @ApiModelProperty("审批结果标识")
+    private String endFlag;
+
+    @ApiModelProperty("任务唯一标识")
+    private String taskId;
+
+
+}

+ 65 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/v3/ZeroTrustApproveCreateReqV3VO.java

@@ -0,0 +1,65 @@
+package com.dragonsoft.dcuc.approve.model.req.v3;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+/**
+ * <p>
+ * 创建审批请求
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/5/22
+ */
+@Data
+public class ZeroTrustApproveCreateReqV3VO {
+
+    /**
+     * 应用令牌标识符
+     */
+    private String appTokenId;
+
+    /**
+     * 调用审批服务需先注册流程,每个注册流程有唯一流程定义ID
+     */
+    private String processDefId;
+
+    /**
+     * 对应任务编号的任务名称
+     */
+    private String title;
+
+    /**
+     * 区分任务使用的业务应用场景
+     */
+    private String taskClass;
+
+    /**
+     * 审批流程所关联的任务唯一标识,任务id编码规则(共32位):
+     * RWBH+公安机关组织机构代码(符合GA/T 380-2012的要求)+日期(格式YYYYMMDD)+8位流水号
+     */
+    private String taskId;
+
+    /**
+     * 注册流程定义,用于采集数据信息,传递表单数据
+     */
+    @JsonProperty("Bo")
+    private String bo;
+
+    /**
+     * 应用接收审批结果地址
+     */
+    private String callbackUrl;
+
+    /**
+     * 应采用签名算法对接口入参进行签名
+     */
+    @JsonProperty("Signature")
+    private String signature;
+
+    /**
+     * 业务数据
+     */
+    private String bizData;
+
+}

+ 38 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/v3/ZeroTrustApproveManagerReqV3VO.java

@@ -0,0 +1,38 @@
+package com.dragonsoft.dcuc.approve.model.req.v3;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * <p>
+ *  审批流程管理请求
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/5/22
+ */
+@ApiModel("审批流程管理请求")
+@Data
+public class ZeroTrustApproveManagerReqV3VO {
+
+    /**
+     * 应用令牌标识
+     */
+    @ApiModelProperty("应用令牌标识")
+    private String appTokenId;
+
+    /**
+     * 流程实例Id
+     */
+    @ApiModelProperty("流程实例Id")
+    private String processInstId;
+
+    /**
+     * 操作类型
+     * @see com.dragonsoft.dcuc.approve.enumresources.ZeroTrustApproveManageEnum
+     */
+    @ApiModelProperty("操作类型")
+    private String actionType;
+
+}

+ 22 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/resp/v3/ZeroTrustApproveCreateV3RespVO.java

@@ -0,0 +1,22 @@
+package com.dragonsoft.dcuc.approve.model.resp.v3;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/5/22
+ */
+@Data
+public class ZeroTrustApproveCreateV3RespVO {
+
+    /**
+     * 流程实例Id
+     */
+    @ApiModelProperty("流程实例Id")
+    private String processInstId;
+}

+ 109 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/resp/v3/ZeroTrustMessageRespVO.java

@@ -0,0 +1,109 @@
+package com.dragonsoft.dcuc.approve.model.resp.v3;
+
+import com.dragonsoft.dcuc.approve.enumresources.ZeroTrustBusinessRespEnum;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import lombok.Data;
+
+/**
+ * <p>
+ * 用户令牌校验返回
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/8/1
+ */
+@JsonPropertyOrder({"statusCode", "message"})
+@Data
+public class ZeroTrustMessageRespVO {
+
+    /**
+     * “0000” 表示令牌有效;
+     * 其他值表示无效或接口调用出错
+     */
+    @JsonProperty("status_code")
+    private String statusCode;
+
+    /**
+     * 状态码对应的详细描述
+     */
+    private String message;
+
+    /**
+     * 设置业务枚举
+     *
+     * @param zeroTrustBusinessRespEnum 业务枚举
+     */
+    public void setBusinessRespEnum(ZeroTrustBusinessRespEnum zeroTrustBusinessRespEnum) {
+        setStatusCode(zeroTrustBusinessRespEnum.getValue());
+        setMessage(zeroTrustBusinessRespEnum.getLabel());
+    }
+
+
+    /**
+     * 设置业务枚举
+     *
+     * @param zeroTrustBusinessRespEnum 业务枚举
+     */
+    public static ZeroTrustMessageRespVO messageEnumMessage(ZeroTrustBusinessRespEnum zeroTrustBusinessRespEnum) {
+        ZeroTrustMessageRespVO zeroTrustMessageRespVO = new ZeroTrustMessageRespVO();
+        zeroTrustMessageRespVO.setBusinessRespEnum(zeroTrustBusinessRespEnum);
+        return zeroTrustMessageRespVO;
+    }
+
+    /**
+     * 设置请求参数异常
+     *
+     * @param message 异常信息
+     */
+    public static ZeroTrustMessageRespVO requestErrorMessage(String message) {
+        return messageEnumMessage(ZeroTrustBusinessRespEnum.OPERATE_FAIL, message);
+    }
+
+    /**
+     * 设置请求参数异常
+     *
+     * @param zeroTrustBusinessRespEnum 枚举
+     * @param message          异常信息
+     */
+    public static ZeroTrustMessageRespVO messageEnumMessage(ZeroTrustBusinessRespEnum zeroTrustBusinessRespEnum, String message) {
+        ZeroTrustMessageRespVO zeroTrustMessageRespVO = new ZeroTrustMessageRespVO();
+        zeroTrustMessageRespVO.setStatusCode(zeroTrustBusinessRespEnum.getValue());
+        zeroTrustMessageRespVO.setMessage(message);
+        return zeroTrustMessageRespVO;
+    }
+
+    /**
+     * 是否成功
+     *
+     * @return 是否成功
+     */
+    @JsonIgnore
+    public boolean isRespSuccess() {
+        return this.statusCode.equalsIgnoreCase(ZeroTrustBusinessRespEnum.SUCCESS.getValue());
+    }
+
+    /**
+     * 是否失败
+     *
+     * @return 是否失败
+     */
+    @JsonIgnore
+    public boolean isRespFail() {
+        return !isRespSuccess();
+    }
+
+    /**
+     * 转发Result返回
+     *
+     * @param <T> 泛型
+     * @return Result返回
+     */
+    public <T> ZeroTrustResultDataVO<T> toResultRespVO() {
+        ZeroTrustResultDataVO<T> objectZeroTrustResultDataVO = new ZeroTrustResultDataVO<>();
+        objectZeroTrustResultDataVO.setStatusCode(statusCode);
+        objectZeroTrustResultDataVO.setMessage(message);
+        return objectZeroTrustResultDataVO;
+    }
+}

+ 60 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/resp/v3/ZeroTrustResultDataVO.java

@@ -0,0 +1,60 @@
+package com.dragonsoft.dcuc.approve.model.resp.v3;
+
+import com.dragonsoft.dcuc.approve.enumresources.ZeroTrustBusinessRespEnum;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 返回数据
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/8/1
+ */
+@JsonPropertyOrder({"statusCode", "message", "data"})
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class ZeroTrustResultDataVO<T> extends ZeroTrustMessageRespVO {
+
+    /***
+     * 返回内容
+     */
+    private T data;
+
+    public static <T> ZeroTrustResultDataVO<T> success(T result) {
+        ZeroTrustResultDataVO<T> objectZeroTrustResultDataVO = new ZeroTrustResultDataVO<>();
+        objectZeroTrustResultDataVO.setBusinessRespEnum(ZeroTrustBusinessRespEnum.SUCCESS);
+        objectZeroTrustResultDataVO.setData(result);
+        return objectZeroTrustResultDataVO;
+    }
+
+    /**
+     * 设置枚举消息
+     *
+     * @param zeroTrustBusinessRespEnum 枚举类型
+     * @param <T>              泛型
+     * @return 消息
+     */
+    public static <T> ZeroTrustResultDataVO<T> resultEnumMessage(ZeroTrustBusinessRespEnum zeroTrustBusinessRespEnum) {
+        ZeroTrustResultDataVO<T> objectZeroTrustResultDataVO = new ZeroTrustResultDataVO<>();
+        objectZeroTrustResultDataVO.setBusinessRespEnum(zeroTrustBusinessRespEnum);
+        return objectZeroTrustResultDataVO;
+    }
+
+    /**
+     * 设置枚举消息和内容
+     *
+     * @param zeroTrustBusinessRespEnum 枚举类型
+     * @param data             内容
+     * @param <T>              泛型
+     * @return 消息
+     */
+    public static <T> ZeroTrustResultDataVO<T> resultEnumMessage(ZeroTrustBusinessRespEnum zeroTrustBusinessRespEnum, T data) {
+        ZeroTrustResultDataVO<T> objectZeroTrustResultDataVO = new ZeroTrustResultDataVO<>();
+        objectZeroTrustResultDataVO.setBusinessRespEnum(zeroTrustBusinessRespEnum);
+        objectZeroTrustResultDataVO.setData(data);
+        return objectZeroTrustResultDataVO;
+    }
+}

+ 5 - 0
approve-core-service/pom.xml

@@ -174,6 +174,11 @@
             <version>2.1.2-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>
+
+        <dependency>
+            <groupId>com.github.rholder</groupId>
+            <artifactId>guava-retrying</artifactId>
+        </dependency>
     </dependencies>
 
     <profiles>

+ 32 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/INoticeBusiness.java

@@ -0,0 +1,32 @@
+package com.dragonsoft.dcuc.approve.business;
+
+import com.dragonsoft.dcuc.approve.model.req.v3.ZeroTrustApproveCallbackReqV3VO;
+import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/3/8
+ */
+public interface INoticeBusiness {
+    /**
+     * 审批结果通知
+     *
+     * @param callbackUrl                     回调地址
+     * @param zeroTrustApproveCallbackReqV3VO 消息内容
+     * @return 状态
+     */
+    ResponseStatus retryApproveNotification(String callbackUrl, ZeroTrustApproveCallbackReqV3VO zeroTrustApproveCallbackReqV3VO);
+
+    /**
+     * 审批结果通知
+     *
+     * @param callbackUrl                     回调地址
+     * @param zeroTrustApproveCallbackReqV3VO 内容
+     * @return 状态
+     */
+    ResponseStatus baseApproveNotification(String callbackUrl, ZeroTrustApproveCallbackReqV3VO zeroTrustApproveCallbackReqV3VO);
+}

+ 107 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/NoticeBusinessImpl.java

@@ -0,0 +1,107 @@
+package com.dragonsoft.dcuc.approve.business.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.dragonsoft.dcuc.approve.business.INoticeBusiness;
+import com.dragonsoft.dcuc.approve.model.req.v3.ZeroTrustApproveCallbackReqV3VO;
+import com.dragonsoft.dcuc.approve.model.resp.v3.ZeroTrustMessageRespVO;
+import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
+import com.dragonsoft.duceap.commons.util.json.JsonUtils;
+import com.github.rholder.retry.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.RequestEntity;
+import org.springframework.http.ResponseEntity;
+import org.springframework.remoting.RemoteAccessException;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import java.net.URI;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @author hunagzqa
+ * @date 2022/11/16
+ */
+@Component
+public class NoticeBusinessImpl implements INoticeBusiness {
+
+    private RestTemplate restTemplate;
+
+    @Autowired
+    public void setRestTemplate(RestTemplate restTemplate) {
+        this.restTemplate = restTemplate;
+    }
+
+
+    private static final Logger logger = LoggerFactory.getLogger(NoticeBusinessImpl.class);
+
+    private static final Retryer<ResponseStatus> RESPONSE_STATUS_RETRYER =
+            RetryerBuilder.<ResponseStatus>newBuilder()
+                    .retryIfException()
+                    .retryIfResult(item -> !item.getStatusCode().equals(ResponseStatus.SUCCESS_CODE))
+                    .withAttemptTimeLimiter(AttemptTimeLimiters.fixedTimeLimit(5, TimeUnit.SECONDS))
+                    .withWaitStrategy(WaitStrategies.fixedWait(1, TimeUnit.SECONDS))
+                    .withStopStrategy(StopStrategies.stopAfterAttempt(5))
+                    .build();
+
+
+    @Override
+    public ResponseStatus retryApproveNotification(String callbackUrl, ZeroTrustApproveCallbackReqV3VO zeroTrustApproveCallbackReqV3VO) {
+        StringBuilder errorMessageBuilder = new StringBuilder();
+
+        ResponseStatus responseStatus;
+        try {
+            responseStatus = RESPONSE_STATUS_RETRYER.call(() -> baseApproveNotification(callbackUrl, zeroTrustApproveCallbackReqV3VO));
+        } catch (ExecutionException | RetryException e) {
+            logger.error("retry error", e);
+            responseStatus = ResponseStatus.fail(e.getMessage());
+        }
+        if (!responseStatus.getStatusCode().equals(ResponseStatus.SUCCESS_CODE)) {
+            errorMessageBuilder.append("URL: ").append(callbackUrl)
+                    .append(responseStatus.getMessage())
+                    .append(";");
+        }
+        String errorMessage = errorMessageBuilder.toString();
+        if (StrUtil.isNotBlank(errorMessage)) {
+            return ResponseStatus.fail(errorMessage);
+        }
+        return ResponseStatus.success();
+    }
+
+    @Override
+    public ResponseStatus baseApproveNotification(String callbackUrl, ZeroTrustApproveCallbackReqV3VO zeroTrustApproveCallbackReqV3VO) {
+
+        String resultMessage;
+        ResponseStatus responseStatus = ResponseStatus.success();
+        try {
+            logger.info("打印状态变更通知请求:{} 内容:{}", callbackUrl, JsonUtils.toJSONString(zeroTrustApproveCallbackReqV3VO));
+
+            RequestEntity<ZeroTrustApproveCallbackReqV3VO> requestEntity = new RequestEntity<>(zeroTrustApproveCallbackReqV3VO,
+                    HttpMethod.POST, URI.create(callbackUrl));
+            ResponseEntity<ZeroTrustMessageRespVO> responseEntity = restTemplate.exchange(requestEntity, ZeroTrustMessageRespVO.class);
+            logger.info("打印状态变更通知返回值:" + responseEntity);
+
+            if (responseEntity.getStatusCode().is2xxSuccessful()) {
+                ZeroTrustMessageRespVO zeroTrustMessageRespVO = responseEntity.getBody();
+                if (zeroTrustMessageRespVO == null) {
+                    logger.info("打印状态变更通知返回值:" + responseEntity);
+                    throw new RemoteAccessException(responseEntity.toString());
+
+                } else if (zeroTrustMessageRespVO.isRespFail()) {
+                    logger.info("打印状态变更通知返回值:" + responseEntity);
+                    throw new RemoteAccessException(zeroTrustMessageRespVO.getMessage());
+                }
+            }
+        } catch (Exception e) {
+            logger.error("状态变更通知接口调用失败", e);
+            resultMessage = "状态变更通知接口调用失败:" + e.getMessage();
+            responseStatus = ResponseStatus.fail(resultMessage);
+            throw new RemoteAccessException(responseStatus.getMessage());
+        }
+        return responseStatus;
+    }
+
+}

+ 12 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/config/ApproveConfig.java

@@ -1,11 +1,13 @@
 package com.dragonsoft.dcuc.approve.config;
 
+import com.dragoninfo.dcuc.common.http.SkipSslVerificationHttpRequestFactory;
 import com.dragonsoft.auditlog.collection.qmtj.provider.IRestTemplateProvider;
 import com.dragonsoft.dcuc.approve.componet.SkipSslRestTemplateProvider;
 import com.dragonsoft.dcuc.approve.filter.ProofsFilter;
 import org.springframework.boot.web.servlet.FilterRegistrationBean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.web.client.RestTemplate;
 
 /**
  * <p>
@@ -19,10 +21,19 @@ import org.springframework.context.annotation.Configuration;
 public class ApproveConfig {
 
     @Bean
-    IRestTemplateProvider restTemplateProvider() {
+    public IRestTemplateProvider restTemplateProvider() {
         return new SkipSslRestTemplateProvider();
     }
 
+    @Bean
+    public RestTemplate restTemplate() {
+        SkipSslVerificationHttpRequestFactory skipSslVerificationHttpRequestFactory
+                = new SkipSslVerificationHttpRequestFactory();
+        skipSslVerificationHttpRequestFactory.setReadTimeout(5000);
+        skipSslVerificationHttpRequestFactory.setConnectTimeout(5000);
+        return new RestTemplate(skipSslVerificationHttpRequestFactory);
+    }
+
     @Bean
     public ProofsFilter proofsFilter() {
         return new ProofsFilter();

+ 31 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/api/ApiV3ApproveFacade.java

@@ -0,0 +1,31 @@
+package com.dragonsoft.dcuc.approve.facade.api;
+
+import com.dragonsoft.dcuc.approve.model.req.v3.ZeroTrustApproveCreateReqV3VO;
+import com.dragonsoft.dcuc.approve.model.req.v3.ZeroTrustApproveManagerReqV3VO;
+import com.dragonsoft.dcuc.approve.model.resp.v3.ZeroTrustApproveCreateV3RespVO;
+import com.dragonsoft.dcuc.approve.model.resp.v3.ZeroTrustMessageRespVO;
+import com.dragonsoft.dcuc.approve.model.resp.v3.ZeroTrustResultDataVO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/5/22
+ */
+@Slf4j
+@RestController
+public class ApiV3ApproveFacade implements IApiV3ApproveFacade {
+    @Override
+    public ZeroTrustResultDataVO<ZeroTrustApproveCreateV3RespVO> create(ZeroTrustApproveCreateReqV3VO zeroTrustApproveCreateReqV3VO) {
+        return null;
+    }
+
+    @Override
+    public ZeroTrustMessageRespVO manage(ZeroTrustApproveManagerReqV3VO zeroTrustApproveManagerReqV3VO) {
+        return null;
+    }
+}

+ 6 - 0
pom.xml

@@ -18,6 +18,7 @@
         <oracle.version>11.2.0.1.0</oracle.version>
         <mysql.version>5.1.49</mysql.version>
         <lombok.version>1.18.8</lombok.version>
+        <guava.retry.version>2.0.0</guava.retry.version>
     </properties>
     <artifactId>approve-core</artifactId>
     <packaging>pom</packaging>
@@ -28,6 +29,11 @@
 
     <dependencyManagement>
         <dependencies>
+            <dependency>
+                <groupId>com.github.rholder</groupId>
+                <artifactId>guava-retrying</artifactId>
+                <version>${guava.retry.version}</version>
+            </dependency>
             <!-- 导入duceap-cloud 2.1 POM定义-->
             <dependency>
                 <groupId>com.dragonsoft</groupId>