Переглянути джерело

Merge branch 'huangzqa-add-20231116' into 'develop'

Huangzqa add 20231116

See merge request dcuc-tjdsj/approve-core!103
黄资权 1 рік тому
батько
коміт
c8af7a18cc
100 змінених файлів з 2007 додано та 933 видалено
  1. 2 2
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/enumresources/PermissionValidTypeEnum.java
  2. 2 2
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/enumresources/QmApproveTypeEnum.java
  3. 50 0
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/enumresources/ReqBizDataEnum.java
  4. 3 0
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/ApprovalInfoReqVO.java
  5. 13 5
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/v3/ZeroTrustApproveCreateReqV3VO.java
  6. 6 0
      approve-core-service/pom.xml
  7. 11 13
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/IApproveBusiness.java
  8. 3 3
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/IApproveCommonBusiness.java
  9. 5 5
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/IApproveLogBusiness.java
  10. 2 2
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/ICacheBusiness.java
  11. 53 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/ISecurityUserBusiness.java
  12. 36 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/api/IApiV3ApproveBusiness.java
  13. 2 2
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/api/IApproveApiBusiness.java
  14. 86 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/api/impl/ApiV3ApproveBusinessImpl.java
  15. 8 6
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/api/impl/ApproveApiBusinessImpl.java
  16. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/IBimBusiness.java
  17. 14 2
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/IBuSyncBusiness.java
  18. 3 2
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/IDcucAuthBusiness.java
  19. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/IDcucBusiness.java
  20. 10 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/INoticeBusiness.java
  21. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/IQmAuditBusiness.java
  22. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/IUserOrgSyncBusiness.java
  23. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/IZeroTrustTokenBusiness.java
  24. 2 3
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/impl/BimBusinessImpl.java
  25. 201 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/impl/BuSyncBusinessImpl.java
  26. 10 10
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/impl/DcucAuthBusinessImpl.java
  27. 22 16
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/impl/DcucBusinessImpl.java
  28. 104 4
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/impl/NoticeBusinessImpl.java
  29. 2 2
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/impl/QmAuditBusinessImpl.java
  30. 3 3
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/impl/UserOrgSyncBusinessImpl.java
  31. 7 6
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/impl/ZeroTrustTokenBusinessImpl.java
  32. 35 34
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/ApproveBusinessImpl.java
  33. 148 154
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/ApproveCommonBusinessImpl.java
  34. 34 39
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/ApproveLogBusinessImpl.java
  35. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/ApproveTaskBusinessImpl.java
  36. 0 243
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/BuSyncBusinessImpl.java
  37. 2 2
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/RedisCacheBusinessImpl.java
  38. 150 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/SecurityUserBusinessImpl.java
  39. 0 19
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/config/ApproveConfig.java
  40. 48 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/config/ProofConfiguration.java
  41. 3 3
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/event/ApproveEventPublish.java
  42. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/event/event/ApproveFinalResultEvent.java
  43. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/event/event/ApproveLogEvent.java
  44. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/event/event/AuditApproveOperateLogEvent.java
  45. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/event/listener/ApproveLogListener.java
  46. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/event/listener/ApproveOperateLogEventListener.java
  47. 3 3
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/event/listener/DcmsSendFinalResultListener.java
  48. 4 4
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/event/listener/HttpCallbackSendFinalResultListener.java
  49. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/event/listener/RzySyslogSendRiskInfoEventListener.java
  50. 46 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/event/listener/SyncToBuSendFinalResultListener.java
  51. 10 10
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/ApproveFacade.java
  52. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/ApproveOrgFacade.java
  53. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/ApproveUserFacade.java
  54. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/OpsFacade.java
  55. 42 14
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/api/ApiV1ApproveFacade.java
  56. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/api/ApiV1TokenFacade.java
  57. 83 46
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/api/ApiV2ApproveFacade.java
  58. 64 45
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/api/v3/ApiV3ApproveFacade.java
  59. 0 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/api/v3/ApiV3SecurityPolicyFacade.java
  60. 23 14
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/filter/CheckProofsFilter.java
  61. 25 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/filter/cache/ISecurityAppResolver.java
  62. 25 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/filter/cache/ISecurityUserResolver.java
  63. 50 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/filter/cache/SecurityAppCache.java
  64. 43 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/filter/cache/SecurityAppResolver.java
  65. 50 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/filter/cache/SecurityUserCache.java
  66. 47 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/filter/cache/SecurityUserResolver.java
  67. 2 2
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/mapper/ApprovalInfoMapper.java
  68. 17 16
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/ApproveRecordInfo.java
  69. 11 3
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/ApprovalInfoDTO.java
  70. 4 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/ApprovalInfoMsgItemDTO.java
  71. 1 2
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/ApproveLogDTO.java
  72. 27 14
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/ApproveMessageInfoDTO.java
  73. 2 4
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/BaseOperateReqDTO.java
  74. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/ContentRespDTO.java
  75. 3 3
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/LogDto.java
  76. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/LogInfoMetaDTO.java
  77. 1 2
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/OperateReqDTO.java
  78. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/ProcessInstanceInfoDTO.java
  79. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/QmOperateLogDTO.java
  80. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/ResourceInfoDTO.java
  81. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/RzyRiskLogDTO.java
  82. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/TaskRequestUserInfoDTO.java
  83. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/zerotrust/AppTokenInfoDTO.java
  84. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/zerotrust/UserTokenInfoDTO.java
  85. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/properties/ApproveBuProperties.java
  86. 5 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/properties/ApproveProperties.java
  87. 74 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/properties/ProofStarterProperties.java
  88. 3 4
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/service/IApproveRecordService.java
  89. 53 47
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/service/impl/ApproveRecordServiceImpl.java
  90. 0 31
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/threadlocal/ThreadLocalProofsHolder.java
  91. 67 5
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/utils/ProofsUtil.java
  92. 28 10
      approve-core-service/src/test/java/com/dragonsoft/dcuc/approve/business/external/impl/BimBusinessImplTest.java
  93. 17 0
      approve-core-service/src/test/java/com/dragonsoft/dcuc/approve/business/external/impl/BuSyncBusinessImplTest.java
  94. 2 4
      approve-core-service/src/test/java/com/dragonsoft/dcuc/approve/business/external/impl/DcucAuthBusinessImplTest.java
  95. 2 1
      approve-core-service/src/test/java/com/dragonsoft/dcuc/approve/business/external/impl/DcucBusinessImplTest.java
  96. 2 3
      approve-core-service/src/test/java/com/dragonsoft/dcuc/approve/business/external/impl/UserOrgSyncBusinessImplTest.java
  97. 8 0
      approve-core-service/src/test/java/com/dragonsoft/dcuc/approve/business/impl/ApproveApiBusinessImplTest.java
  98. 31 32
      approve-core-service/src/test/java/com/dragonsoft/dcuc/approve/business/impl/NoticeBusinessImplTest.java
  99. 3 3
      approve-core-service/src/test/java/com/dragonsoft/dcuc/approve/facade/api/ApiV3ApproveFacadeTest.java
  100. 23 0
      approve-core-service/src/test/resources/bim/testGetAppTokenInfo.json

+ 2 - 2
approve-api/src/main/java/com/dragonsoft/dcuc/approve/enumresources/PermissionValidTypeEnum.java

@@ -23,9 +23,9 @@ public enum PermissionValidTypeEnum implements ICodeEnum {
      */
     LONG("02", "长期");
 
-    private String value;
+    private final String value;
 
-    private String label;
+    private final String label;
 
     PermissionValidTypeEnum(String value, String label) {
         this.value = value;

+ 2 - 2
approve-api/src/main/java/com/dragonsoft/dcuc/approve/enumresources/QmApproveTypeEnum.java

@@ -24,9 +24,9 @@ public enum QmApproveTypeEnum implements ICodeEnum {
      */
     OPERATE("03", "审批操作处理");
 
-    private String value;
+    private final String value;
 
-    private String label;
+    private final String label;
 
     QmApproveTypeEnum(String value, String label) {
         this.value = value;

+ 50 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/enumresources/ReqBizDataEnum.java

@@ -0,0 +1,50 @@
+package com.dragonsoft.dcuc.approve.enumresources;
+
+import com.dragonsoft.duceap.base.enums.ICodeEnum;
+
+/**
+ * <p>
+ * 请求的时间枚举
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/11/13
+ */
+public enum ReqBizDataEnum implements ICodeEnum {
+
+    /**
+     * 任务有效时间开始
+     */
+    BIZ_TERM_START("bizTermStart", "任务有效时间开始", true),
+
+    /**
+     * 任务有效时间结束
+     */
+    BIZ_TERM_END("bizTermEnd", "任务有效时间结束", true);
+
+    private final String value;
+
+    private final String label;
+
+    private final boolean need;
+
+    ReqBizDataEnum(String value, String label, boolean need) {
+        this.value = value;
+        this.label = label;
+        this.need = need;
+    }
+
+    @Override
+    public String getValue() {
+        return this.value;
+    }
+
+    @Override
+    public String getLabel() {
+        return this.label;
+    }
+
+    public boolean isNeed() {
+        return need;
+    }
+}

+ 3 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/ApprovalInfoReqVO.java

@@ -141,4 +141,7 @@ public class ApprovalInfoReqVO implements Serializable {
     @ApiModelProperty(value = "申请人应用令牌")
     private String applicantAppToken;
 
+    @ApiModelProperty(value = "申请业务数据")
+    private String otherApplyContext;
+
 }

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

@@ -1,9 +1,14 @@
 package com.dragonsoft.dcuc.approve.model.req.v3;
 
+import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
 
 import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -15,8 +20,11 @@ import java.util.Map;
  * @author huangzqa
  * @date 2023/5/22
  */
-@Data
-public class ZeroTrustApproveCreateReqV3VO {
+@ApiModel("创建审批请求")
+@Setter
+@Getter
+@ToString
+public class ZeroTrustApproveCreateReqV3VO implements Serializable {
 
     /**
      * 应用令牌
@@ -62,7 +70,7 @@ public class ZeroTrustApproveCreateReqV3VO {
      * “表名”:[{"字段 1":"值","字段 2":"值"},{"字段 1":"值","字段2":"值"}]}
      */
     @ApiModelProperty("表单")
-    private Map<String, List<Map<String, String>>> bo;
+    private Map<String, List<Map<String, Object>>> bo;
 
     /**
      * 应用接收审批结果地址(应用开发的接收审批结果变动的地址)
@@ -76,7 +84,7 @@ public class ZeroTrustApproveCreateReqV3VO {
      * 扩展字段
      */
     @ApiModelProperty("业务数据")
-    private Map<String, String> bizData;
+    private Map<String, Object> bizData;
 
     /**
      * 签名

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

@@ -43,6 +43,12 @@
         <dependency>
             <groupId>com.dragoninfo</groupId>
             <artifactId>dcuc-duceap-api</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.dragonsoft.dyy</groupId>
+                    <artifactId>nosql-elasticsearch-api</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>com.dragonsoft</groupId>

+ 11 - 13
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/IApproveBusiness.java

@@ -1,22 +1,20 @@
 package com.dragonsoft.dcuc.approve.business;
 
-import com.dragonsoft.dcuc.approve.dto.ResourceInfoDTO;
+import com.dragonsoft.dcuc.approve.model.dto.ResourceInfoDTO;
 import com.dragonsoft.dcuc.approve.enumresources.ApproveWorkFlowOperationEnum;
 import com.dragonsoft.dcuc.approve.enumresources.FlowTypeEnum;
 import com.dragonsoft.dcuc.approve.enumresources.PageTypeEnum;
-import com.dragonsoft.dcuc.approve.model.ApprovalInfo;
+import com.dragonsoft.dcuc.approve.model.dto.ApprovalInfoDTO;
 import com.dragonsoft.dcuc.approve.model.ApproveActRunIdentityLink;
 import com.dragonsoft.dcuc.approve.model.ApproveRecordInfo;
 import com.dragonsoft.dcuc.approve.model.req.ResourceInfoReqVO;
 import com.dragonsoft.dcuc.approve.model.resp.ApprovalInfoRespVO;
 import com.dragonsoft.dcuc.approve.model.resp.BatchTaskOperateRespVO;
-import com.dragonsoft.dcuc.approve.dto.ContentRespDTO;
-import com.dragonsoft.dcuc.approve.model.vo.ApproveMessageInfoDTO;
+import com.dragonsoft.dcuc.approve.model.dto.ContentRespDTO;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.duwf.api.model.ProcessInstanceVO;
 import com.dragonsoft.duceap.duwf.api.model.TaskHistoryDetailVo;
 
-import java.util.Date;
 import java.util.List;
 
 /**
@@ -54,9 +52,9 @@ public interface IApproveBusiness {
      * 第一个节点提交的时候没有对应的已办事项
      *
      * @param processInstanceVO 实例信息
-     * @param approvalInfo      审批信息
+     * @param approvalInfoDTO      审批信息
      */
-    void createTodoAfterProcessStart(ProcessInstanceVO processInstanceVO, ApprovalInfo approvalInfo);
+    void createTodoAfterProcessStart(ProcessInstanceVO processInstanceVO, ApprovalInfoDTO approvalInfoDTO);
 
     /**
      * 检查资源
@@ -104,23 +102,23 @@ public interface IApproveBusiness {
     /**
      * 设置流程信息
      *
-     * @param approvalInfo 审批申请内容
+     * @param approvalInfoDTO 审批申请内容
      */
-    void setProcessInfo(ApprovalInfo approvalInfo);
+    void setProcessInfo(ApprovalInfoDTO approvalInfoDTO);
 
     /**
      * 设置我的请求当前结点和未操作者信息
      *
-     * @param approvalInfo 审批信息
+     * @param approvalInfoDTO 审批信息
      */
-    ApprovalInfoRespVO fillTaskInfoToApplyInfo(ApprovalInfo approvalInfo);
+    ApprovalInfoRespVO fillTaskInfoToApplyInfo(ApprovalInfoDTO approvalInfoDTO);
 
     /**
      * 更新当前结点任务
      *
-     * @param approvalInfo 审批信息
+     * @param approvalInfoDTO 审批信息
      */
-    void buildTaskInfoByProcessInstanceId(ApprovalInfo approvalInfo, List<TaskHistoryDetailVo> list);
+    void buildTaskInfoByProcessInstanceId(ApprovalInfoDTO approvalInfoDTO, List<TaskHistoryDetailVo> list);
 
     /**
      * 设置资源信息

+ 3 - 3
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/service/IApproveService.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/IApproveCommonBusiness.java

@@ -1,7 +1,7 @@
-package com.dragonsoft.dcuc.approve.service;
+package com.dragonsoft.dcuc.approve.business;
 
 import com.dragoninfo.dcuc.duceap.enums.ManageDisposeTypeEnum;
-import com.dragonsoft.dcuc.approve.dto.OperateReqDTO;
+import com.dragonsoft.dcuc.approve.model.dto.OperateReqDTO;
 import com.dragonsoft.dcuc.approve.model.ApproveRecordInfo;
 import com.dragonsoft.dcuc.approve.model.req.AgentReqVO;
 import com.dragonsoft.dcuc.approve.model.req.ApprovalInfoReqVO;
@@ -22,7 +22,7 @@ import java.util.List;
  * @version 1.0
  * @date 2021/2/3 19:43
  */
-public interface IApproveService {
+public interface IApproveCommonBusiness {
 
     /**
      * 待办/已办列表

+ 5 - 5
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/IApproveLogBusiness.java

@@ -1,13 +1,13 @@
 package com.dragonsoft.dcuc.approve.business;
 
 import com.dragoninfo.dcuc.duceap.enums.ManageDisposeTypeEnum;
-import com.dragonsoft.dcuc.approve.dto.ApproveLogDTO;
+import com.dragonsoft.dcuc.approve.model.dto.ApproveLogDTO;
 import com.dragonsoft.dcuc.approve.enumresources.ApproveResultEnum;
 import com.dragonsoft.dcuc.approve.enumresources.ApproveWorkFlowOperationEnum;
 import com.dragonsoft.dcuc.approve.enumresources.CommitTypeEnum;
-import com.dragonsoft.dcuc.approve.model.ApprovalInfo;
+import com.dragonsoft.dcuc.approve.model.dto.ApprovalInfoDTO;
 import com.dragonsoft.dcuc.approve.model.resp.OperateRespVO;
-import com.dragonsoft.dcuc.approve.model.vo.LogDto;
+import com.dragonsoft.dcuc.approve.model.dto.LogDto;
 import com.dragonsoft.duceap.duwf.api.model.ProcessInstanceVO;
 
 /**
@@ -62,12 +62,12 @@ public interface IApproveLogBusiness {
     /**
      * 构建日志Dto
      *
-     * @param approvalInfo      审批信息
+     * @param approvalInfoDTO      审批信息
      * @param vo                实例信息
      * @param approveResultEnum 返回信息
      * @param failMsg           错误消息
      * @return 日志信息
      */
-    LogDto buildLogDto(ApprovalInfo approvalInfo, ProcessInstanceVO vo, ApproveResultEnum approveResultEnum,
+    LogDto buildLogDto(ApprovalInfoDTO approvalInfoDTO, ProcessInstanceVO vo, ApproveResultEnum approveResultEnum,
                        String failMsg, boolean needSendRedListRisk, OperateRespVO operateRespVO);
 }

+ 2 - 2
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/ICacheBusiness.java

@@ -1,7 +1,7 @@
 package com.dragonsoft.dcuc.approve.business;
 
-import com.dragonsoft.dcuc.approve.dto.zerotrust.AppTokenInfoDTO;
-import com.dragonsoft.dcuc.approve.dto.zerotrust.UserTokenInfoDTO;
+import com.dragonsoft.dcuc.approve.model.dto.zerotrust.AppTokenInfoDTO;
+import com.dragonsoft.dcuc.approve.model.dto.zerotrust.UserTokenInfoDTO;
 
 import java.util.Date;
 

+ 53 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/ISecurityUserBusiness.java

@@ -0,0 +1,53 @@
+package com.dragonsoft.dcuc.approve.business;
+
+import com.dragoninfo.dcuc.common.entity.SecurityApp;
+import com.dragonsoft.dcuc.approve.model.resp.bim.ZeroTrustAppTokenInfoRespVO;
+import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
+import com.dragonsoft.duceap.base.entity.security.SecurityUser;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/11/15
+ */
+public interface ISecurityUserBusiness {
+
+    /**
+     * 获取应用信息
+     *
+     * @param appCode 应用代码
+     * @return 应用信息
+     */
+    SecurityApp getSecurityApp(String appCode);
+
+    /**
+     * 获取当前登陆人信息
+     *
+     * @param idcard  身份证号
+     * @param appCode 应用代码
+     * @return 当前用户
+     */
+    ResponseDTO<SecurityUser> getSecurityUser(String idcard, String appCode);
+
+    /**
+     * 设置用户额外信息
+     *
+     * @param securityUser 当前登陆人
+     * @param request      请求
+     */
+    void setUserExtInfo(SecurityUser securityUser, HttpServletRequest request);
+
+    /**
+     * 设置用户额外信息
+     *
+     * @param securityUser 当前登陆人
+     * @param appTokenInfo 应用令牌信息
+     */
+    void setUserExtInfo(SecurityUser securityUser, ZeroTrustAppTokenInfoRespVO appTokenInfo);
+
+}

+ 36 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/api/IApiV3ApproveBusiness.java

@@ -0,0 +1,36 @@
+package com.dragonsoft.dcuc.approve.business.api;
+
+import com.dragonsoft.dcuc.approve.enumresources.ReqBizDataEnum;
+import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/11/14
+ */
+public interface IApiV3ApproveBusiness {
+
+
+    /**
+     * 检查业务数据
+     *
+     * @param bizDataMap 业务数据
+     * @return 状态
+     */
+    ResponseStatus checkBizData(Map<String, Object> bizDataMap);
+
+    /**
+     * 获取业务数据
+     *
+     * @param bizDataMap     业务数据
+     * @param reqBizDataEnum 业务数据枚举
+     * @param <T>            泛型
+     * @return 值
+     */
+    <T> T getBizData(Map<String, Object> bizDataMap, ReqBizDataEnum reqBizDataEnum);
+}

+ 2 - 2
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/IApproveApiBusiness.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/api/IApproveApiBusiness.java

@@ -1,4 +1,4 @@
-package com.dragonsoft.dcuc.approve.business;
+package com.dragonsoft.dcuc.approve.business.api;
 
 import com.dragonsoft.dcuc.approve.model.req.v3.ZeroTrustApproveCreateReqV3VO;
 
@@ -26,5 +26,5 @@ public interface IApproveApiBusiness {
      * @param taskId taskId
      * @return 是否正确
      */
-    boolean checkTaskId(String taskId);
+    boolean isStanderTaskNo(String taskId);
 }

+ 86 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/api/impl/ApiV3ApproveBusinessImpl.java

@@ -0,0 +1,86 @@
+package com.dragonsoft.dcuc.approve.business.api.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.dragoninfo.dcuc.common.Constants;
+import com.dragoninfo.dcuc.common.utils.LangUtil;
+import com.dragonsoft.dcuc.approve.business.api.IApiV3ApproveBusiness;
+import com.dragonsoft.dcuc.approve.enumresources.ReqBizDataEnum;
+import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
+import com.dragonsoft.duceap.commons.util.date.DateConst;
+import com.dragonsoft.duceap.commons.util.date.DateUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.util.Collections;
+import java.util.Map;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/11/14
+ */
+@Slf4j
+@Component
+public class ApiV3ApproveBusinessImpl implements IApiV3ApproveBusiness {
+
+    @Override
+    public ResponseStatus checkBizData(Map<String, Object> bizDataMap) {
+        if (CollUtil.isEmpty(bizDataMap)) {
+            bizDataMap = Collections.emptyMap();
+        }
+
+        StringBuilder errorMessageBuilder = new StringBuilder();
+        for (ReqBizDataEnum reqBizDataEnum : ReqBizDataEnum.values()) {
+            String value = reqBizDataEnum.getValue();
+            boolean containsKey = bizDataMap.containsKey(value);
+            if (!containsKey) {
+                if (reqBizDataEnum.isNeed()) {
+                    String errorMessage = String.format("字段:%s 必填", value);
+                    errorMessageBuilder.append(errorMessage).append(Constants.CHINESE_COMMA);
+                }
+            }
+        }
+        String errorMessage = errorMessageBuilder.toString();
+        if (StrUtil.isNotBlank(errorMessage)) {
+            return ResponseStatus.fail(LangUtil.subLastSymbol(errorMessage, Constants.CHINESE_COMMA));
+        }
+
+        return ResponseStatus.success();
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public <T> T getBizData(Map<String, Object> bizDataMap, ReqBizDataEnum reqBizDataEnum) {
+        Assert.notEmpty(bizDataMap);
+        Assert.notNull(reqBizDataEnum);
+        Object object = bizDataMap.get(reqBizDataEnum.getValue());
+        switch (reqBizDataEnum) {
+            case BIZ_TERM_START:
+            case BIZ_TERM_END:
+                String temString = object.toString();
+                try {
+                    object = DateUtils.getDate(temString, DateConst.HYPHEN_DISPLAY_TIME);
+                } catch (ParseException e) {
+                    log.error("parse to date error :{}", temString, e);
+                    return null;
+                }
+                break;
+            default:
+                break;
+        }
+
+        if (ObjectUtil.isNull(object)) {
+            return null;
+        }
+
+        return (T) object;
+    }
+
+}

+ 8 - 6
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/ApproveApiBusinessImpl.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/api/impl/ApproveApiBusinessImpl.java

@@ -1,8 +1,8 @@
-package com.dragonsoft.dcuc.approve.business.impl;
+package com.dragonsoft.dcuc.approve.business.api.impl;
 
 import cn.hutool.core.lang.Assert;
 import cn.hutool.core.util.StrUtil;
-import com.dragonsoft.dcuc.approve.business.IApproveApiBusiness;
+import com.dragonsoft.dcuc.approve.business.api.IApproveApiBusiness;
 import com.dragonsoft.dcuc.approve.constants.ApproveConstants;
 import com.dragonsoft.dcuc.approve.model.req.v3.ZeroTrustApproveCreateReqV3VO;
 import com.dragonsoft.smtools.loader.SMFactory;
@@ -57,11 +57,13 @@ public class ApproveApiBusinessImpl implements IApproveApiBusiness {
     }
 
     @Override
-    public boolean checkTaskId(String taskId) {
-        if (StrUtil.isBlank(taskId)) {
+    public boolean isStanderTaskNo(String taskNo) {
+        if (StrUtil.isBlank(taskNo)) {
             return false;
         }
-        return taskId.startsWith(ApproveConstants.TASK_ID_PREFIX);
-
+        if (!taskNo.startsWith(ApproveConstants.TASK_ID_PREFIX)) {
+            return false;
+        }
+        return taskNo.length() == ApproveConstants.TAK_ID_LENGTH;
     }
 }

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/IBimBusiness.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/IBimBusiness.java

@@ -1,4 +1,4 @@
-package com.dragonsoft.dcuc.approve.business;
+package com.dragonsoft.dcuc.approve.business.external;
 
 import com.dragonsoft.dcuc.approve.model.resp.bim.ZeroTrustAppTokenInfoRespVO;
 import com.dragonsoft.dcuc.approve.model.resp.bim.ZeroTrustUserTokenInfoRespVO;

+ 14 - 2
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/IBuSyncBusiness.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/IBuSyncBusiness.java

@@ -1,7 +1,7 @@
-package com.dragonsoft.dcuc.approve.business;
+package com.dragonsoft.dcuc.approve.business.external;
 
 import com.dragonsoft.dcuc.approve.model.ApproveRecordInfo;
-import com.dragonsoft.dcuc.approve.model.resp.bu.BuApproveSyncReqVO;
+import com.dragonsoft.dcuc.approve.model.dto.ApproveMessageInfoDTO;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 
 /**
@@ -16,6 +16,8 @@ public interface IBuSyncBusiness {
 
     /**
      * 同步到BU
+     *
+     * @return 状态
      */
     ResponseStatus syncTuBu();
 
@@ -26,4 +28,14 @@ public interface IBuSyncBusiness {
      * @return 状态
      */
     ResponseStatus syncToBu(ApproveRecordInfo approveRecordInfo);
+
+
+    /**
+     * 同步到BU
+     *
+     * @param approveMessageInfoDTO 请求同步请求
+     * @return 状态
+     */
+    ResponseStatus syncToBu(ApproveMessageInfoDTO approveMessageInfoDTO);
+
 }

+ 3 - 2
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/IDcucAuthBusiness.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/IDcucAuthBusiness.java

@@ -1,6 +1,6 @@
-package com.dragonsoft.dcuc.approve.business;
+package com.dragonsoft.dcuc.approve.business.external;
 
-import com.dragonsoft.dcuc.approve.dto.ResourceInfoDTO;
+import com.dragonsoft.dcuc.approve.model.dto.ResourceInfoDTO;
 import com.dragonsoft.dcuc.approve.enumresources.FlowTypeEnum;
 import com.dragonsoft.dcuc.approve.enumresources.ListLevelEnum;
 import com.dragonsoft.dcuc.approve.model.resp.OperateRespVO;
@@ -40,6 +40,7 @@ public interface IDcucAuthBusiness {
     /**
      * 判断是否命中红名单
      *
+     * @param checkIdcard     检查身份证号
      * @param flowTypeEnum    流程类型
      * @param resourceInfoDTO 资源列表
      * @return 命中状态

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/IDcucBusiness.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/IDcucBusiness.java

@@ -1,4 +1,4 @@
-package com.dragonsoft.dcuc.approve.business;
+package com.dragonsoft.dcuc.approve.business.external;
 
 import com.dragoninfo.dcuc.common.entity.ApiResultPage;
 import com.dragoninfo.dcuc.common.entity.ApiSearchReq;

+ 10 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/INoticeBusiness.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/INoticeBusiness.java

@@ -1,6 +1,7 @@
-package com.dragonsoft.dcuc.approve.business;
+package com.dragonsoft.dcuc.approve.business.external;
 
 import com.dragonsoft.dcuc.approve.model.req.v3.ZeroTrustApproveCallbackReqV3VO;
+import com.dragonsoft.dcuc.approve.model.resp.bu.BuApproveSyncReqVO;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 
 /**
@@ -29,4 +30,12 @@ public interface INoticeBusiness {
      * @return 状态
      */
     ResponseStatus baseApproveNotification(String callbackUrl, ZeroTrustApproveCallbackReqV3VO zeroTrustApproveCallbackReqV3VO);
+
+    /**
+     * 请求同步到 BU
+     *
+     * @param buApproveSyncReqVO 同步请求
+     * @return 状态
+     */
+     ResponseStatus retryRequestSyncToBu(BuApproveSyncReqVO buApproveSyncReqVO);
 }

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/IQmAuditBusiness.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/IQmAuditBusiness.java

@@ -1,4 +1,4 @@
-package com.dragonsoft.dcuc.approve.business;
+package com.dragonsoft.dcuc.approve.business.external;
 
 import com.dragonsoft.auditlog.collection.qmtj.pojo.req.ApproveRegisterLog;
 import com.dragonsoft.auditlog.collection.qmtj.pojo.resp.BaseResponse;

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/IUserOrgSyncBusiness.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/IUserOrgSyncBusiness.java

@@ -1,4 +1,4 @@
-package com.dragonsoft.dcuc.approve.business;
+package com.dragonsoft.dcuc.approve.business.external;
 
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/IZeroTrustTokenBusiness.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/IZeroTrustTokenBusiness.java

@@ -1,4 +1,4 @@
-package com.dragonsoft.dcuc.approve.business;
+package com.dragonsoft.dcuc.approve.business.external;
 
 import com.dragonsoft.dcuc.approve.model.req.v1.token.TokenReceiveVO;
 import com.dragonsoft.dcuc.approve.model.resp.v3.ZeroTrustMessageRespVO;

+ 2 - 3
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/BimBusinessImpl.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/impl/BimBusinessImpl.java

@@ -1,11 +1,10 @@
-package com.dragonsoft.dcuc.approve.business.impl;
+package com.dragonsoft.dcuc.approve.business.external.impl;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.lang.Assert;
 import cn.hutool.core.util.StrUtil;
 import com.dragoninfo.dcuc.common.utils.LangUtil;
-import com.dragonsoft.dcuc.approve.business.IBimBusiness;
-import com.dragonsoft.dcuc.approve.config.ApproveConfig;
+import com.dragonsoft.dcuc.approve.business.external.IBimBusiness;
 import com.dragonsoft.dcuc.approve.constants.ApproveBeanConstants;
 import com.dragonsoft.dcuc.approve.enumresources.ZeroTrustBusinessRespEnum;
 import com.dragonsoft.dcuc.approve.model.req.bim.ZeroTrustAppTokenInfoReqVO;

+ 201 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/impl/BuSyncBusinessImpl.java

@@ -0,0 +1,201 @@
+package com.dragonsoft.dcuc.approve.business.external.impl;
+
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.ObjectUtil;
+import com.dragoninfo.dcuc.common.annotation.CacheLock;
+import com.dragoninfo.dcuc.common.utils.ResponseUtil;
+import com.dragonsoft.dcuc.approve.business.api.IApproveApiBusiness;
+import com.dragonsoft.dcuc.approve.business.external.IBuSyncBusiness;
+import com.dragonsoft.dcuc.approve.business.external.INoticeBusiness;
+import com.dragonsoft.dcuc.approve.enumresources.bu.ApproveModeEnum;
+import com.dragonsoft.dcuc.approve.model.ApproveCirculationInfo;
+import com.dragonsoft.dcuc.approve.model.ApproveRecordInfo;
+import com.dragonsoft.dcuc.approve.model.dto.ApprovalInfoDTO;
+import com.dragonsoft.dcuc.approve.model.dto.ApproveMessageInfoDTO;
+import com.dragonsoft.dcuc.approve.model.resp.bu.BuApproveSyncBizApproveReqVO;
+import com.dragonsoft.dcuc.approve.model.resp.bu.BuApproveSyncBizDataReqVO;
+import com.dragonsoft.dcuc.approve.model.resp.bu.BuApproveSyncReqVO;
+import com.dragonsoft.dcuc.approve.service.IApproveCirculationService;
+import com.dragonsoft.dcuc.approve.service.IApproveRecordService;
+import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
+import com.dragonsoft.duceap.base.entity.security.SecurityUser;
+import com.dragonsoft.duceap.base.enums.BooleanEnum;
+import com.dragonsoft.duceap.core.persistent.transaction.TransactionSupport;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/11/7
+ */
+@Slf4j
+@Component
+public class BuSyncBusinessImpl implements IBuSyncBusiness {
+
+    private IApproveRecordService approveRecordService;
+
+    private IApproveCirculationService approveCirculationService;
+
+    private INoticeBusiness noticeBusiness;
+
+    private IApproveApiBusiness approveApiBusiness;
+
+    @Autowired
+    public void setApproveApiBusiness(IApproveApiBusiness approveApiBusiness) {
+        this.approveApiBusiness = approveApiBusiness;
+    }
+
+    @Autowired
+    public void setNoticeBusiness(INoticeBusiness noticeBusiness) {
+        this.noticeBusiness = noticeBusiness;
+    }
+
+    @Autowired
+    public void setApproveCirculationService(IApproveCirculationService approveCirculationService) {
+        this.approveCirculationService = approveCirculationService;
+    }
+
+    @Autowired
+    public void setApproveRecordService(IApproveRecordService approveRecordService) {
+        this.approveRecordService = approveRecordService;
+    }
+
+    @Override
+    @CacheLock
+    public ResponseStatus syncTuBu() {
+        List<ApproveRecordInfo> unSyncList = approveRecordService.getUnSyncList();
+        TransactionSupport.execute(() -> {
+            for (ApproveRecordInfo approveRecordInfo : unSyncList) {
+                String id = approveRecordInfo.getId();
+                String approveNo = approveRecordInfo.getApproveNo();
+                Date startTime = approveRecordInfo.getStartTime();
+                Date endTime = approveRecordInfo.getEndTime();
+
+                //  检查任务编号是否正确,且开始、结束时间不为空
+                boolean isNeedSync = approveApiBusiness.isStanderTaskNo(approveNo)
+                        && ObjectUtil.isNotNull(startTime) && ObjectUtil.isNotNull(endTime);
+
+                if (isNeedSync) {
+                    ResponseStatus responseStatus = syncToBu(approveRecordInfo);
+                    BooleanEnum booleanEnum = BooleanEnum.TRUE;
+                    if (ResponseUtil.isFail(responseStatus)) {
+                        log.error("同步到BU出错:{}", responseStatus.getMessage());
+                        booleanEnum = BooleanEnum.FALSE;
+                    }
+                    approveRecordService.updateSyncFlag(id, booleanEnum);
+
+                } else {
+                    // 非标准的任务ID默认设置为成功
+                    approveRecordService.updateSyncFlag(id, BooleanEnum.TRUE);
+                }
+            }
+        });
+        return ResponseStatus.success();
+    }
+
+    /**
+     * 同步到BU
+     *
+     * @param approveRecordInfo 请求同步请求
+     * @return 状态
+     */
+    @Transactional(rollbackFor = Throwable.class)
+    @Override
+    public ResponseStatus syncToBu(ApproveRecordInfo approveRecordInfo) {
+        Assert.notNull(approveRecordInfo);
+        ApprovalInfoDTO approvalInfoDTO = approveRecordInfo.toApprovalInfo();
+
+        String id = approveRecordInfo.getId();
+
+        BuApproveSyncReqVO buApproveSyncReqVO = new BuApproveSyncReqVO();
+
+        ApproveCirculationInfo approveCirculationInfo = approveCirculationService.getListByApproveRecordLastAgree(id);
+        Assert.notNull(approveCirculationInfo);
+        // 设置最终审批人信息
+        buApproveSyncReqVO.setLastReviewerIdCard(approveCirculationInfo.getOperateUserId());
+        buApproveSyncReqVO.setLastReviewerName(approveCirculationInfo.getOperateUserName());
+        buApproveSyncReqVO.setLastReviewerUnitCode(approveCirculationInfo.getOperateUserOrgId());
+        buApproveSyncReqVO.setLastReviewerUnit(approveCirculationInfo.getOperateUserOrg());
+
+        return syncToBu(id, buApproveSyncReqVO, approvalInfoDTO);
+    }
+
+    @Transactional(rollbackFor = Throwable.class)
+    @Override
+    public ResponseStatus syncToBu(ApproveMessageInfoDTO approveMessageInfoDTO) {
+        ApprovalInfoDTO approvalInfoDTO = approveMessageInfoDTO.getApprovalInfoDTO();
+        String id = approvalInfoDTO.getId();
+
+        BuApproveSyncReqVO buApproveSyncReqVO = new BuApproveSyncReqVO();
+
+        SecurityUser securityUser = approveMessageInfoDTO.getSecurityUser();
+
+        Assert.notNull(securityUser);
+        // 设置最终审批人信息
+        buApproveSyncReqVO.setLastReviewerIdCard(securityUser.getIdcard());
+        buApproveSyncReqVO.setLastReviewerName(securityUser.getName());
+        buApproveSyncReqVO.setLastReviewerUnitCode(securityUser.getSecurityOrg());
+        buApproveSyncReqVO.setLastReviewerUnit(securityUser.getSecurityOrgName());
+
+        return syncToBu(id, buApproveSyncReqVO, approvalInfoDTO);
+    }
+
+    /**
+     * 同步到 BU
+     *
+     * @param id                 审批单ID
+     * @param buApproveSyncReqVO 请求
+     * @param approvalInfoDTO    审批单信息
+     * @return 状态
+     */
+    protected ResponseStatus syncToBu(String id, BuApproveSyncReqVO buApproveSyncReqVO, ApprovalInfoDTO approvalInfoDTO) {
+        buApproveSyncReqVO.setAppId(approvalInfoDTO.getAppCode());
+        buApproveSyncReqVO.setAppName(approvalInfoDTO.getAppName());
+        buApproveSyncReqVO.setCreateTime(approvalInfoDTO.getCreateTime());
+        buApproveSyncReqVO.setFinishTime(approvalInfoDTO.getUpdateTime());
+        buApproveSyncReqVO.setPid(approvalInfoDTO.getApplicantIdcard());
+
+        BuApproveSyncBizApproveReqVO buApproveSyncBizApproveReqVO = parseApprovalInfoDTO(approvalInfoDTO);
+
+        BuApproveSyncBizDataReqVO buApproveSyncBizDataReqVO = new BuApproveSyncBizDataReqVO();
+        buApproveSyncBizDataReqVO.setBizApprove(buApproveSyncBizApproveReqVO);
+        buApproveSyncReqVO.setBizData(buApproveSyncBizDataReqVO);
+
+
+        ResponseStatus responseStatus = noticeBusiness.retryRequestSyncToBu(buApproveSyncReqVO);
+        if (ResponseUtil.isSuccess(responseStatus)) {
+            approveRecordService.updateSyncFlag(id, BooleanEnum.TRUE);
+            return ResponseStatus.success();
+        }
+        approveRecordService.updateSyncFlag(id, BooleanEnum.FALSE);
+        return ResponseStatus.fail();
+    }
+
+    /**
+     * 转换
+     *
+     * @param approvalInfoDTO 审批单信息
+     * @return 流程业务数据
+     */
+    protected BuApproveSyncBizApproveReqVO parseApprovalInfoDTO(ApprovalInfoDTO approvalInfoDTO) {
+        BuApproveSyncBizApproveReqVO buApproveSyncBizApproveReqVO = new BuApproveSyncBizApproveReqVO();
+        buApproveSyncBizApproveReqVO.setBizId(approvalInfoDTO.getApproveNo());
+        buApproveSyncBizApproveReqVO.setBizTitle(approvalInfoDTO.getProcessTitle());
+        buApproveSyncBizApproveReqVO.setTaskClass(approvalInfoDTO.getApproveTaskClass());
+        buApproveSyncBizApproveReqVO.setApproveMode(ApproveModeEnum.NORMAL.value);
+        buApproveSyncBizApproveReqVO.setBizTermStart(approvalInfoDTO.getStartTime());
+        buApproveSyncBizApproveReqVO.setBizTermEnd(approvalInfoDTO.getEndTime());
+        return buApproveSyncBizApproveReqVO;
+    }
+
+
+}

+ 10 - 10
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/DcucAuthBusinessImpl.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/impl/DcucAuthBusinessImpl.java

@@ -1,21 +1,22 @@
-package com.dragonsoft.dcuc.approve.business.impl;
+package com.dragonsoft.dcuc.approve.business.external.impl;
 
 import cn.hutool.core.util.StrUtil;
 import com.dragoninfo.dcuc.common.entity.*;
 import com.dragonsoft.auditlog.collection.qmtj.provider.IRestTemplateProvider;
-import com.dragonsoft.dcuc.approve.business.IDcucAuthBusiness;
+import com.dragonsoft.dcuc.approve.business.external.IDcucAuthBusiness;
 import com.dragonsoft.dcuc.approve.constants.ApproveConstants;
-import com.dragonsoft.dcuc.approve.dto.ResourceInfoDTO;
 import com.dragonsoft.dcuc.approve.enumresources.FlowTypeEnum;
 import com.dragonsoft.dcuc.approve.enumresources.ListLevelEnum;
 import com.dragonsoft.dcuc.approve.enumresources.ListResourceTypeEnum;
+import com.dragonsoft.dcuc.approve.model.dto.ResourceInfoDTO;
 import com.dragonsoft.dcuc.approve.model.req.AppFunctionResourceReqVO;
 import com.dragonsoft.dcuc.approve.model.resp.OperateRespVO;
 import com.dragonsoft.dcuc.approve.model.vo.AppFunRedListVo;
 import com.dragonsoft.dcuc.approve.model.vo.AuthAppFunApiVO;
 import com.dragonsoft.dcuc.approve.model.vo.WhiteListUserApiVo;
 import com.dragonsoft.dcuc.approve.properties.ApproveProperties;
-import com.dragonsoft.dcuc.approve.threadlocal.ThreadLocalProofsHolder;
+
+import com.dragonsoft.dcuc.approve.utils.ProofsUtil;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.commons.util.json.JsonUtils;
 import com.dragonsoft.duceap.core.search.enums.SearchOperator;
@@ -111,8 +112,7 @@ public class DcucAuthBusinessImpl implements IDcucAuthBusiness {
 
     @SneakyThrows(JsonProcessingException.class)
     private Set<ListLevelEnum> getFunctionLevel(String appCode, List<String> functionCodeArray) {
-        Proofs proofs = ThreadLocalProofsHolder.getProofs();
-        HttpHeaders httpHeaders = proofs.buildHttpHeaders();
+        HttpHeaders httpHeaders = ProofsUtil.buildHttpHeaders();
         log.debug("header:{}", httpHeaders);
 
         Map<String, SearchParam> filters = new HashMap<>(1);
@@ -164,8 +164,8 @@ public class DcucAuthBusinessImpl implements IDcucAuthBusiness {
     @Override
     @SneakyThrows(JsonProcessingException.class)
     public List<AuthAppFunApiVO> getFunctionList(String appCode, List<String> functionCodList) {
-        Proofs proofs = ThreadLocalProofsHolder.getProofs();
-        HttpHeaders httpHeaders = proofs.buildHttpHeaders();
+        
+        HttpHeaders httpHeaders = ProofsUtil.buildHttpHeaders();
         log.debug("header:{}", httpHeaders);
 
         Map<String, SearchParam> filters = new HashMap<>(1);
@@ -223,8 +223,8 @@ public class DcucAuthBusinessImpl implements IDcucAuthBusiness {
     @Override
     @SneakyThrows(JsonProcessingException.class)
     public Optional<ListLevelEnum> getWhiteListLevel(String resourceCode) {
-        Proofs proofs = ThreadLocalProofsHolder.getProofs();
-        HttpHeaders httpHeaders = proofs.buildHttpHeaders();
+        
+        HttpHeaders httpHeaders = ProofsUtil.buildHttpHeaders();
         log.debug("header:{}", httpHeaders);
 
         Map<String, SearchParam> filters = new HashMap<>(1);

+ 22 - 16
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/DcucBusinessImpl.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/impl/DcucBusinessImpl.java

@@ -1,4 +1,4 @@
-package com.dragonsoft.dcuc.approve.business.impl;
+package com.dragonsoft.dcuc.approve.business.external.impl;
 
 import cn.hutool.core.lang.Assert;
 import cn.hutool.core.util.ObjectUtil;
@@ -7,17 +7,18 @@ import com.alibaba.fastjson.JSONObject;
 import com.dragoninfo.dcuc.common.entity.ApiResult;
 import com.dragoninfo.dcuc.common.entity.ApiResultPage;
 import com.dragoninfo.dcuc.common.entity.ApiSearchReq;
-import com.dragoninfo.dcuc.common.entity.Proofs;
 import com.dragoninfo.dcuc.common.utils.ResponseUtil;
-import com.dragonsoft.dcuc.approve.business.IDcucBusiness;
+import com.dragonsoft.dcuc.approve.business.external.IDcucBusiness;
 import com.dragonsoft.dcuc.approve.constants.ApproveBeanConstants;
 import com.dragonsoft.dcuc.approve.model.vo.dcuc.ApiOrgResultVo;
 import com.dragonsoft.dcuc.approve.model.vo.dcuc.ApiPoliceResultVo;
 import com.dragonsoft.dcuc.approve.model.vo.dcuc.OauthUserVO;
 import com.dragonsoft.dcuc.approve.properties.ApproveProperties;
-import com.dragonsoft.dcuc.approve.threadlocal.ThreadLocalProofsHolder;
+import com.dragonsoft.dcuc.approve.utils.ProofsUtil;
 import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
+import com.dragonsoft.duceap.base.entity.security.SecurityUser;
+import com.dragonsoft.duceap.base.utils.UserContextUtils;
 import com.dragonsoft.duceap.commons.util.json.JsonUtils;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.type.TypeReference;
@@ -82,10 +83,12 @@ public class DcucBusinessImpl implements IDcucBusiness {
     public OauthUserVO getOauthUserInfoByIdcard(String searchIdcard) {
         Assert.notBlank(searchIdcard);
         //构建请求头
-        Proofs proofs = ThreadLocalProofsHolder.getProofs();
+
         HttpEntity<Map<String, Object>> requestEntity;
-        if (ObjectUtil.isNotNull(proofs)) {
-            HttpHeaders headers = proofs.buildHttpHeaders();
+        
+        SecurityUser currentUser = UserContextUtils.getCurrentUser();
+        if (ObjectUtil.isNotNull(currentUser)) {
+            HttpHeaders headers = ProofsUtil.buildHttpHeaders(currentUser);
             requestEntity = new HttpEntity<>(headers);
         } else {
             requestEntity = new HttpEntity<>(Collections.emptyMap());
@@ -113,10 +116,11 @@ public class DcucBusinessImpl implements IDcucBusiness {
     @Override
     public ApiOrgResultVo orgInfo(String orgCode) {
         //构建请求头
-        Proofs proofs = ThreadLocalProofsHolder.getProofs();
+        
         HttpEntity<Map<String, Object>> requestEntity;
-        if (ObjectUtil.isNotNull(proofs)) {
-            HttpHeaders headers = proofs.buildHttpHeaders();
+        SecurityUser currentUser = UserContextUtils.getCurrentUser();
+        if (ObjectUtil.isNotNull(currentUser)) {
+            HttpHeaders headers = ProofsUtil.buildHttpHeaders(currentUser);
             requestEntity = new HttpEntity<>(headers);
         } else {
             requestEntity = new HttpEntity<>(Collections.emptyMap());
@@ -148,10 +152,11 @@ public class DcucBusinessImpl implements IDcucBusiness {
 
         String userServiceUrl = approveProperties.getUserServiceUrl();
         String url = userServiceUrl + ORG_SYNC_API;
-        Proofs proofs = ThreadLocalProofsHolder.getProofs();
+        
         HttpHeaders httpHeaders = HttpHeaders.EMPTY;
-        if (ObjectUtil.isNotNull(proofs)) {
-            httpHeaders = proofs.buildHttpHeaders();
+        SecurityUser currentUser = UserContextUtils.getCurrentUser();
+        if (ObjectUtil.isNotNull(currentUser)) {
+            httpHeaders = ProofsUtil.buildHttpHeaders(currentUser);
         }
 
         RequestEntity<ApiSearchReq> apiSearchReqRequestEntity = new RequestEntity<>(apiSearchReq, httpHeaders, HttpMethod.POST, URI.create(url));
@@ -190,10 +195,11 @@ public class DcucBusinessImpl implements IDcucBusiness {
 
         String userServiceUrl = approveProperties.getUserServiceUrl();
         String url = userServiceUrl + POLICE_SYNC_API;
-        Proofs proofs = ThreadLocalProofsHolder.getProofs();
+
         HttpHeaders httpHeaders = HttpHeaders.EMPTY;
-        if (ObjectUtil.isNotNull(proofs)) {
-            httpHeaders = proofs.buildHttpHeaders();
+        SecurityUser currentUser = UserContextUtils.getCurrentUser();
+        if (ObjectUtil.isNotNull(currentUser)) {
+            httpHeaders = ProofsUtil.buildHttpHeaders(currentUser);
         }
 
         RequestEntity<ApiSearchReq> apiSearchReqRequestEntity = new RequestEntity<>(apiSearchReq, httpHeaders, HttpMethod.POST, URI.create(url));

+ 104 - 4
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/NoticeBusinessImpl.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/impl/NoticeBusinessImpl.java

@@ -1,18 +1,29 @@
-package com.dragonsoft.dcuc.approve.business.impl;
+package com.dragonsoft.dcuc.approve.business.external.impl;
 
 import cn.hutool.core.util.StrUtil;
-import com.dragonsoft.dcuc.approve.business.INoticeBusiness;
+import com.dragoninfo.dcuc.common.utils.ResponseUtil;
+import com.dragoninfo.dcuc.common.utils.ValidUtil;
+import com.dragonsoft.dcuc.approve.business.external.INoticeBusiness;
 import com.dragonsoft.dcuc.approve.constants.ApproveBeanConstants;
+import com.dragonsoft.dcuc.approve.enumresources.bu.BuErrorCodeEnum;
 import com.dragonsoft.dcuc.approve.model.req.v3.ZeroTrustApproveCallbackReqV3VO;
+import com.dragonsoft.dcuc.approve.model.resp.bu.BuApproveSyncReqVO;
 import com.dragonsoft.dcuc.approve.model.resp.v3.ZeroTrustMessageRespVO;
+import com.dragonsoft.dcuc.approve.model.resp.v3.ZeroTrustResultDataVO;
+import com.dragonsoft.dcuc.approve.properties.ApproveBuProperties;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.commons.util.json.JsonUtils;
+import com.dragonsoft.duceap.commons.util.string.StringUtils;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.github.rholder.retry.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpMethod;
 import org.springframework.http.RequestEntity;
 import org.springframework.http.ResponseEntity;
@@ -33,12 +44,27 @@ public class NoticeBusinessImpl implements INoticeBusiness {
 
     private RestTemplate restTemplate;
 
+    private ObjectMapper dragonObjectMapper;
+
+    private ApproveBuProperties approveBuProperties;
+
+
     @Qualifier(ApproveBeanConstants.SKIP_SSL_REST_TEMPLATE)
     @Autowired
     public void setRestTemplate(RestTemplate restTemplate) {
         this.restTemplate = restTemplate;
     }
 
+    @Qualifier(ApproveBeanConstants.DRAGON_OBJECT_MAPPER)
+    @Autowired
+    public void setDragonObjectMapper(ObjectMapper dragonObjectMapper) {
+        this.dragonObjectMapper = dragonObjectMapper;
+    }
+
+    @Autowired
+    public void setApproveBuProperties(ApproveBuProperties approveBuProperties) {
+        this.approveBuProperties = approveBuProperties;
+    }
 
     private static final Logger logger = LoggerFactory.getLogger(NoticeBusinessImpl.class);
 
@@ -91,8 +117,7 @@ public class NoticeBusinessImpl implements INoticeBusiness {
 
             if (responseEntity.getStatusCode().is2xxSuccessful()) {
                 String responseEntityBody = responseEntity.getBody();
-                ObjectMapper objectMapper = new ObjectMapper();
-                ZeroTrustMessageRespVO zeroTrustMessageRespVO = objectMapper.readValue(responseEntityBody, ZeroTrustMessageRespVO.class);
+                ZeroTrustMessageRespVO zeroTrustMessageRespVO = dragonObjectMapper.readValue(responseEntityBody, ZeroTrustMessageRespVO.class);
                 if (zeroTrustMessageRespVO == null) {
                     logger.info("打印状态变更通知返回值:" + responseEntity);
                     throw new RemoteAccessException(responseEntity.toString());
@@ -111,4 +136,79 @@ public class NoticeBusinessImpl implements INoticeBusiness {
         return responseStatus;
     }
 
+    /**
+     * 请求同步到 BU
+     *
+     * @param buApproveSyncReqVO 同步请求
+     * @return 状态
+     */
+    @Override
+    public ResponseStatus retryRequestSyncToBu(BuApproveSyncReqVO buApproveSyncReqVO) {
+        if (!approveBuProperties.isEnable()) {
+            return ResponseStatus.success();
+        }
+        String syncTaskUrl = approveBuProperties.getSyncTaskUrl();
+
+        ResponseStatus responseStatus;
+        try {
+            responseStatus = RESPONSE_STATUS_RETRYER.call(() -> syncToBuBaseReq(syncTaskUrl, buApproveSyncReqVO, "同步任务信息到BU"));
+        } catch (ExecutionException | RetryException e) {
+            logger.error("retry error", e);
+            responseStatus = ResponseStatus.fail(e.getMessage());
+        }
+
+        return responseStatus;
+    }
+
+    /**
+     * 流程详情
+     *
+     * @param url                路径
+     * @param buApproveSyncReqVO 请求参数
+     * @return 返回内容
+     */
+    protected ResponseStatus syncToBuBaseReq(String url, BuApproveSyncReqVO buApproveSyncReqVO, String requestName) {
+        // 打印请求参数
+        logger.info(requestName + " 请求路径:{} 请求参数:{}", url, JsonUtils.toJSONString(buApproveSyncReqVO));
+        String errorTip = requestName + "失败";
+        ResponseStatus responseStatus = ValidUtil.validReqVo(buApproveSyncReqVO);
+        if (ResponseUtil.isFail(responseStatus)) {
+            logger.error("request vo valid error:{}", responseStatus.getMessage());
+            return ResponseUtil.dtoFail(responseStatus.getMessage());
+        }
+
+        HttpEntity<BuApproveSyncReqVO> entity = new HttpEntity<>(buApproveSyncReqVO);
+        ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
+
+        if (!exchange.getStatusCode().is2xxSuccessful()) {
+            logger.error("{} error. resp: {}", requestName, JsonUtils.toJSONString(exchange));
+            return ResponseUtil.dtoFail(errorTip);
+        }
+        String body = exchange.getBody();
+        if (StringUtils.isBlank(body)) {
+            logger.error("{} error. resp: {}", requestName, JsonUtils.toJSONString(exchange));
+            return ResponseUtil.dtoFail(errorTip);
+        }
+
+        logger.info("baseReq resp :{}", JsonUtils.toJSONString(exchange));
+        TypeReference<ZeroTrustResultDataVO<Object>> typeReference = new TypeReference<ZeroTrustResultDataVO<Object>>() {
+        };
+
+        ZeroTrustResultDataVO<Object> respDto;
+        try {
+            JsonNode jsonNode = dragonObjectMapper.readTree(body);
+            String statusCode = jsonNode.get("status_code").asText();
+            String message = jsonNode.get("message").asText();
+            if (BuErrorCodeEnum.SUCCESS.getValue().equals(statusCode)) {
+                respDto = dragonObjectMapper.readValue(body, typeReference);
+            } else {
+                return ResponseUtil.dtoFail(message);
+            }
+        } catch (JsonProcessingException e) {
+            logger.error("parse error.", e);
+            return ResponseUtil.dtoFail("返回值解析失败");
+        }
+
+        return ResponseUtil.newInstance(respDto.getData());
+    }
 }

+ 2 - 2
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/QmAuditBusinessImpl.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/impl/QmAuditBusinessImpl.java

@@ -1,4 +1,4 @@
-package com.dragonsoft.dcuc.approve.business.impl;
+package com.dragonsoft.dcuc.approve.business.external.impl;
 
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.crypto.digest.DigestUtil;
@@ -6,7 +6,7 @@ import com.dragoninfo.dcuc.common.utils.ResponseUtil;
 import com.dragonsoft.auditlog.collection.qmtj.LogSendComponent;
 import com.dragonsoft.auditlog.collection.qmtj.pojo.req.ApproveRegisterLog;
 import com.dragonsoft.auditlog.collection.qmtj.pojo.resp.BaseResponse;
-import com.dragonsoft.dcuc.approve.business.IQmAuditBusiness;
+import com.dragonsoft.dcuc.approve.business.external.IQmAuditBusiness;
 import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
 import com.dragonsoft.duceap.commons.util.json.JsonUtils;
 import lombok.extern.slf4j.Slf4j;

+ 3 - 3
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/UserOrgSyncBusinessImpl.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/impl/UserOrgSyncBusinessImpl.java

@@ -1,4 +1,4 @@
-package com.dragonsoft.dcuc.approve.business.impl;
+package com.dragonsoft.dcuc.approve.business.external.impl;
 
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
@@ -9,8 +9,8 @@ import com.dragoninfo.dcuc.common.entity.ApiResultPage;
 import com.dragoninfo.dcuc.common.entity.ApiSearchReq;
 import com.dragoninfo.dcuc.common.entity.SearchParam;
 import com.dragonsoft.dcuc.approve.business.ICacheBusiness;
-import com.dragonsoft.dcuc.approve.business.IDcucBusiness;
-import com.dragonsoft.dcuc.approve.business.IUserOrgSyncBusiness;
+import com.dragonsoft.dcuc.approve.business.external.IDcucBusiness;
+import com.dragonsoft.dcuc.approve.business.external.IUserOrgSyncBusiness;
 import com.dragonsoft.dcuc.approve.constants.ApproveLockConstants;
 import com.dragonsoft.dcuc.approve.model.ApproveOrgInfo;
 import com.dragonsoft.dcuc.approve.model.ApproveUserInfo;

+ 7 - 6
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/ZeroTrustTokenBusinessiImpl.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/impl/ZeroTrustTokenBusinessImpl.java

@@ -1,14 +1,15 @@
-package com.dragonsoft.dcuc.approve.business.impl;
+package com.dragonsoft.dcuc.approve.business.external.impl;
 
 import com.dragonsoft.dcuc.approve.business.ICacheBusiness;
-import com.dragonsoft.dcuc.approve.business.IZeroTrustTokenBusiness;
-import com.dragonsoft.dcuc.approve.dto.zerotrust.AppTokenInfoDTO;
-import com.dragonsoft.dcuc.approve.dto.zerotrust.UserTokenInfoDTO;
+import com.dragonsoft.dcuc.approve.business.external.IZeroTrustTokenBusiness;
+import com.dragonsoft.dcuc.approve.model.dto.zerotrust.AppTokenInfoDTO;
+import com.dragonsoft.dcuc.approve.model.dto.zerotrust.UserTokenInfoDTO;
 import com.dragonsoft.dcuc.approve.enumresources.ZeroTrustBusinessRespEnum;
 import com.dragonsoft.dcuc.approve.enumresources.ZeroTrustTokenTypeEnum;
 import com.dragonsoft.dcuc.approve.model.req.v1.token.TokenReceiveVO;
 import com.dragonsoft.dcuc.approve.model.resp.v3.ZeroTrustMessageRespVO;
 import com.dragonsoft.smtools.loader.SMFactory;
+import com.fasterxml.jackson.core.JsonParseException;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.SneakyThrows;
@@ -22,7 +23,7 @@ import org.springframework.stereotype.Service;
  */
 @Slf4j
 @Service
-public class ZeroTrustTokenBusinessiImpl implements IZeroTrustTokenBusiness {
+public class ZeroTrustTokenBusinessImpl implements IZeroTrustTokenBusiness {
 
     private ICacheBusiness cacheBusiness;
 
@@ -38,7 +39,7 @@ public class ZeroTrustTokenBusinessiImpl implements IZeroTrustTokenBusiness {
         this.cacheBusiness = cacheBusiness;
     }
 
-    @SneakyThrows
+    @SneakyThrows({JsonParseException.class, JsonProcessingException.class})
     @Override
     public ZeroTrustMessageRespVO tokenReceive(TokenReceiveVO receiveVo) {
         // 校验请求签名

+ 35 - 34
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/ApproveBusinessImpl.java

@@ -11,11 +11,12 @@ import com.dragoninfo.dcuc.common.utils.ResponseUtil;
 import com.dragonsoft.approve.common.ErrorCode;
 import com.dragonsoft.dcuc.approve.business.IApproveBaseBusiness;
 import com.dragonsoft.dcuc.approve.business.IApproveBusiness;
-import com.dragonsoft.dcuc.approve.business.IDcucAuthBusiness;
+import com.dragonsoft.dcuc.approve.business.external.IDcucAuthBusiness;
 import com.dragonsoft.dcuc.approve.business.IWorkFlowBusiness;
 import com.dragonsoft.dcuc.approve.constants.ApproveConstants;
-import com.dragonsoft.dcuc.approve.dto.ContentRespDTO;
-import com.dragonsoft.dcuc.approve.dto.ResourceInfoDTO;
+import com.dragonsoft.dcuc.approve.model.dto.ApprovalInfoDTO;
+import com.dragonsoft.dcuc.approve.model.dto.ContentRespDTO;
+import com.dragonsoft.dcuc.approve.model.dto.ResourceInfoDTO;
 import com.dragonsoft.dcuc.approve.enumresources.ApproveWorkFlowOperationEnum;
 import com.dragonsoft.dcuc.approve.enumresources.CandidateTypeEnum;
 import com.dragonsoft.dcuc.approve.enumresources.FlowTypeEnum;
@@ -243,26 +244,26 @@ public class ApproveBusinessImpl implements IApproveBusiness {
      * 第一个节点提交的时候没有对应的已办事项
      *
      * @param processInstanceVO 实例信息
-     * @param approvalInfo      审批信息
+     * @param approvalInfoDTO      审批信息
      */
     @Override
-    public void createTodoAfterProcessStart(ProcessInstanceVO processInstanceVO, ApprovalInfo approvalInfo) {
+    public void createTodoAfterProcessStart(ProcessInstanceVO processInstanceVO, ApprovalInfoDTO approvalInfoDTO) {
         Date now = new Date();
         List<TaskHistoryDetailVo> taskRunDetailVos = processInstanceVO.getTaskRunDetailVos();
         for (TaskHistoryDetailVo taskHistoryDetailVo : taskRunDetailVos) {
             //待办
             ApproveActRunTask approveActRunTask = new ApproveActRunTask();
             approveActRunTask.setTaskId(taskHistoryDetailVo.getId());
-            approveActRunTask.setApplyRecordId(approvalInfo.getId());
-            approveActRunTask.setBusinessCode(approvalInfo.getBusinessCode());
-            approveActRunTask.setBusinessName(approvalInfo.getProcessName());
+            approveActRunTask.setApplyRecordId(approvalInfoDTO.getId());
+            approveActRunTask.setBusinessCode(approvalInfoDTO.getBusinessCode());
+            approveActRunTask.setBusinessName(approvalInfoDTO.getProcessName());
             approveActRunTask.setDeleted(BooleanEnum.FALSE.getValue());
             approveActRunTask.setGenerateTime(now);
             approveActRunTask.setOperateType(WorkFlowOprationEnum.COMPLETE_AGREE.getValue());
             approveActRunTask.setProcessInstanceId(processInstanceVO.getProcessInstanceId());
             approveActRunTask.setTaskCode(taskHistoryDetailVo.getTaskCode());
             approveActRunTask.setTaskName(taskHistoryDetailVo.getName());
-            approveActRunTask.setProcessTitle(approvalInfo.getProcessTitle());
+            approveActRunTask.setProcessTitle(approvalInfoDTO.getProcessTitle());
             approveActRunTaskService.save(approveActRunTask);
             //联系人
             List<ApproveActRunIdentityLink> links = this.buildActIdentityLink(taskHistoryDetailVo);
@@ -588,42 +589,42 @@ public class ApproveBusinessImpl implements IApproveBusiness {
     /**
      * 设置流程信息
      *
-     * @param approvalInfo 审批申请内容
+     * @param approvalInfoDTO 审批申请内容
      */
     @Override
-    public void setProcessInfo(ApprovalInfo approvalInfo) {
+    public void setProcessInfo(ApprovalInfoDTO approvalInfoDTO) {
         // 处理结束时间
-        approvalInfo.setEndTime(approveBaseBusiness.parseEndTime(approvalInfo.getEndTime()));
+        approvalInfoDTO.setEndTime(approveBaseBusiness.parseEndTime(approvalInfoDTO.getEndTime()));
         //获取流程类型详情
         WorkflowProcesstypeVo workflowProcesstypeVo;
         try {
             //调用工作流获取流程类型详情
-            workflowProcesstypeVo = workFlowBusiness.queryProcessType(approvalInfo.getProcessType());
+            workflowProcesstypeVo = workFlowBusiness.queryProcessType(approvalInfoDTO.getProcessType());
         } catch (ApplicationException e) {
-            log.info("流程类型标识码-Exception:【{}】", approvalInfo.getProcessType());
+            log.info("流程类型标识码-Exception:【{}】", approvalInfoDTO.getProcessType());
             throw new ApplicationException(ErrorCode.WORKFLOW_EXCEPTION.getCode(), ErrorCode.WORKFLOW_EXCEPTION.getMsg());
         }
         if (null == workflowProcesstypeVo) {
-            log.info("流程类型标识码:【{}】", approvalInfo.getProcessType());
+            log.info("流程类型标识码:【{}】", approvalInfoDTO.getProcessType());
             throw new ApplicationException(ErrorCode.WORKFLOW_TYPE_NOT_EXIST.getCode(), ErrorCode.WORKFLOW_TYPE_NOT_EXIST.getMsg());
         }
-        approvalInfo.setProcessTypeName(workflowProcesstypeVo.getName());
+        approvalInfoDTO.setProcessTypeName(workflowProcesstypeVo.getName());
         //获取流程信息
-        @NotBlank String businessCode = approvalInfo.getBusinessCode();
+        @NotBlank String businessCode = approvalInfoDTO.getBusinessCode();
         WorkflowProcessVo workflowProcessVo = workFlowBusiness.queryWorkflowProcessByBusinessCode(businessCode);
         if (null == workflowProcessVo) {
             log.info("流程标识码:【{}】", businessCode);
             throw new ApplicationException(ErrorCode.WORKFLOW_NOT_EXIST.getCode(), ErrorCode.WORKFLOW_NOT_EXIST.getMsg());
         }
-        approvalInfo.setProcessName(workflowProcessVo.getName());
+        approvalInfoDTO.setProcessName(workflowProcessVo.getName());
 
-        String processTitle = approvalInfo.getProcessTitle();
+        String processTitle = approvalInfoDTO.getProcessTitle();
         // 判断是否有流程标题,否则生成新的标题
         if (StrUtil.isBlank(processTitle)) {
             //流程标题
-            processTitle = approvalInfo.getProcessName() + "-" + approvalInfo.getApplicantName() +
-                    "-" + DateUtils.getTimeStr(approvalInfo.getCreateTime(), DateConst.HYPHEN_DISPLAY_DATE);
-            approvalInfo.setProcessTitle(processTitle);
+            processTitle = approvalInfoDTO.getProcessName() + "-" + approvalInfoDTO.getApplicantName() +
+                    "-" + DateUtils.getTimeStr(approvalInfoDTO.getCreateTime(), DateConst.HYPHEN_DISPLAY_DATE);
+            approvalInfoDTO.setProcessTitle(processTitle);
         }
 
     }
@@ -631,16 +632,16 @@ public class ApproveBusinessImpl implements IApproveBusiness {
     /**
      * 设置我的请求当前结点和未操作者信息
      *
-     * @param approvalInfo 审批信息
+     * @param approvalInfoDTO 审批信息
      */
     @Override
-    public ApprovalInfoRespVO fillTaskInfoToApplyInfo(ApprovalInfo approvalInfo) {
+    public ApprovalInfoRespVO fillTaskInfoToApplyInfo(ApprovalInfoDTO approvalInfoDTO) {
         ApprovalInfoRespVO approvalInfoRespVo = new ApprovalInfoRespVO();
-        BeanUtil.copyProperties(approvalInfo, approvalInfoRespVo);
-        approvalInfoRespVo.setResourceInfoVo(approvalInfo.getResourceInfoVo().toResourceInfoRespVO());
+        BeanUtil.copyProperties(approvalInfoDTO, approvalInfoRespVo);
+        approvalInfoRespVo.setResourceInfoVo(approvalInfoDTO.getResourceInfoVo().toResourceInfoRespVO());
 
         try {
-            String taskId = approvalInfo.getTaskId();
+            String taskId = approvalInfoDTO.getTaskId();
             if (ApproveConstants.END_STR.equalsIgnoreCase(taskId)) {
                 return approvalInfoRespVo;
             }
@@ -696,10 +697,10 @@ public class ApproveBusinessImpl implements IApproveBusiness {
     /**
      * 更新当前结点任务
      *
-     * @param approvalInfo 审批信息
+     * @param approvalInfoDTO 审批信息
      */
     @Override
-    public void buildTaskInfoByProcessInstanceId(ApprovalInfo approvalInfo, List<TaskHistoryDetailVo> list) {
+    public void buildTaskInfoByProcessInstanceId(ApprovalInfoDTO approvalInfoDTO, List<TaskHistoryDetailVo> list) {
         StringBuilder taskId = new StringBuilder();
         StringBuilder taskCode = new StringBuilder();
         StringBuilder taskName = new StringBuilder();
@@ -732,11 +733,11 @@ public class ApproveBusinessImpl implements IApproveBusiness {
             taskId = new StringBuilder(ApproveConstants.END_STR);
             taskName = new StringBuilder("结束");
         }
-        approvalInfo.setTaskId(taskId.toString());
-        approvalInfo.setTaskName(taskName.toString());
-        approvalInfo.setApproveTaskIdentifier(taskCode.toString());
-        approvalInfo.setUpdateTime(new Date());
-        approvalInfo.setUpdateUser(ProofsUtil.getIdcard());
+        approvalInfoDTO.setTaskId(taskId.toString());
+        approvalInfoDTO.setTaskName(taskName.toString());
+        approvalInfoDTO.setApproveTaskIdentifier(taskCode.toString());
+        approvalInfoDTO.setUpdateTime(new Date());
+        approvalInfoDTO.setUpdateUser(ProofsUtil.getIdcard());
     }
 
 

+ 148 - 154
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/service/impl/ApproveServiceImpl.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/ApproveCommonBusinessImpl.java

@@ -1,4 +1,4 @@
-package com.dragonsoft.dcuc.approve.service.impl;
+package com.dragonsoft.dcuc.approve.business.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.date.DateUnit;
@@ -12,26 +12,20 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.dragoninfo.dcuc.common.utils.ResponseUtil;
 import com.dragoninfo.dcuc.duceap.enums.ManageDisposeTypeEnum;
 import com.dragonsoft.dcuc.approve.business.*;
+import com.dragonsoft.dcuc.approve.business.external.IDcucAuthBusiness;
 import com.dragonsoft.dcuc.approve.constants.ApproveConstants;
-import com.dragonsoft.dcuc.approve.dto.BaseOperateReqDTO;
-import com.dragonsoft.dcuc.approve.dto.ContentRespDTO;
-import com.dragonsoft.dcuc.approve.dto.OperateReqDTO;
-import com.dragonsoft.dcuc.approve.dto.ResourceInfoDTO;
 import com.dragonsoft.dcuc.approve.enumresources.*;
 import com.dragonsoft.dcuc.approve.event.ApproveEventPublish;
-import com.dragonsoft.dcuc.approve.model.ApprovalInfo;
 import com.dragonsoft.dcuc.approve.model.ApproveCirculationInfo;
 import com.dragonsoft.dcuc.approve.model.ApproveRecordInfo;
 import com.dragonsoft.dcuc.approve.model.TaskAssignRecord;
+import com.dragonsoft.dcuc.approve.model.dto.*;
 import com.dragonsoft.dcuc.approve.model.req.AgentReqVO;
 import com.dragonsoft.dcuc.approve.model.req.ApprovalInfoReqVO;
 import com.dragonsoft.dcuc.approve.model.req.ApprovalInfoUpdateReqVO;
 import com.dragonsoft.dcuc.approve.model.req.ResourceInfoReqVO;
 import com.dragonsoft.dcuc.approve.model.resp.*;
-import com.dragonsoft.dcuc.approve.model.vo.ApproveMessageInfoDTO;
 import com.dragonsoft.dcuc.approve.model.vo.ApproveTaskRequestVo;
-import com.dragonsoft.dcuc.approve.model.vo.LogDto;
-import com.dragonsoft.dcuc.approve.model.vo.TaskRequestUserInfoDTO;
 import com.dragonsoft.dcuc.approve.properties.ApproveProperties;
 import com.dragonsoft.dcuc.approve.service.*;
 import com.dragonsoft.dcuc.approve.utils.ProofsUtil;
@@ -72,9 +66,9 @@ import java.util.stream.Collectors;
  * @date 2021/2/3 19:43
  */
 @Service
-public class ApproveServiceImpl implements IApproveService {
+public class ApproveCommonBusinessImpl implements IApproveCommonBusiness {
 
-    private static final Logger logger = LoggerFactory.getLogger(ApproveServiceImpl.class);
+    private static final Logger logger = LoggerFactory.getLogger(ApproveCommonBusinessImpl.class);
 
     private ApproveProperties approveProperties;
 
@@ -82,7 +76,7 @@ public class ApproveServiceImpl implements IApproveService {
 
     private IApproveLogBusiness approveLogBusiness;
 
-    private ApproveServiceImpl approveService;
+    private ApproveCommonBusinessImpl approveService;
 
     private IApproveRecordService approveRecordService;
 
@@ -125,7 +119,7 @@ public class ApproveServiceImpl implements IApproveService {
     }
 
     @Autowired
-    public void setApproveService(ApproveServiceImpl approveService) {
+    public void setApproveService(ApproveCommonBusinessImpl approveService) {
         this.approveService = approveService;
     }
 
@@ -200,7 +194,7 @@ public class ApproveServiceImpl implements IApproveService {
     @Override
     public ApproveRecordInfo saveBase(ApprovalInfoReqVO approvalInfoReqVO, ManageDisposeTypeEnum manageDisposeTypeEnum, Date oldCreateTime) {
         ApproveRecordInfo approveRecordInfo = null;
-        ApprovalInfo approvalInfo = null;
+        ApprovalInfoDTO approvalInfoDTO = null;
         ProcessInstanceVO processInstanceVO = null;
         ApproveResultEnum approveResultEnum = ApproveResultEnum.SUCCESS;
         String failMsg = "";
@@ -209,20 +203,20 @@ public class ApproveServiceImpl implements IApproveService {
             logger.info("====开始处理表单提交,data:{}====", JSONObject.toJSONString(approvalInfoReqVO));
 
             //构建ApprovalInfo对象
-            approvalInfo = buildApprovalInfo(approvalInfoReqVO);
+            approvalInfoDTO = buildApprovalInfo(approvalInfoReqVO);
             // 设置流程相关信息
-            approveBusiness.setProcessInfo(approvalInfo);
+            approveBusiness.setProcessInfo(approvalInfoDTO);
 
             logger.info("构建申请单信息");
             // 无审批内容,默认填充数据
-            String applyContent = approvalInfo.getApplyContent();
+            String applyContent = approvalInfoDTO.getApplyContent();
             if (StrUtil.isBlank(applyContent)) {
-                String flowType = approvalInfo.getFlowType();
+                String flowType = approvalInfoDTO.getFlowType();
                 FlowTypeEnum flowTypeEnum = EnumUtils.enumOf(FlowTypeEnum.class, flowType);
-                @Valid @NotNull ResourceInfoReqVO resourceInfoReqVO = approvalInfoReqVO.getResourceInfoDTO();
+                ResourceInfoReqVO resourceInfoReqVO = approvalInfoReqVO.getResourceInfoDTO();
                 ResourceInfoDTO resourceInfoDTO = ResourceInfoDTO.parseResourceInfoReqVO(resourceInfoReqVO);
                 ContentRespDTO contentRespDTO = approveBusiness.generalContentRespVO(flowTypeEnum, resourceInfoDTO);
-                approvalInfo.setApplyContent(JSON.toJSONString(contentRespDTO));
+                approvalInfoDTO.setApplyContent(JSON.toJSONString(contentRespDTO));
             }
             //构建ApprovalResourceInfo资源对象
             // 生成审批单号
@@ -234,20 +228,20 @@ public class ApproveServiceImpl implements IApproveService {
             }
 
             //判断是否需要提交,创建流程
-            @NotBlank String operateType = approvalInfoReqVO.getOperateType();
+            String operateType = approvalInfoReqVO.getOperateType();
             CommitTypeEnum commitTypeEnum = EnumUtils.enumOf(CommitTypeEnum.class, operateType);
             if (CommitTypeEnum.APPLY_COMMIT.equals(commitTypeEnum)) {
                 //创建流程
                 logger.info("===开始提交=====");
                 //构建ApproveTaskRequestVo,用于工作流给待办中心发送消息,需设置业务类型和业务id,因工作流对接多方应用且都需要给待办发消息
-                ApproveTaskRequestVo approveTaskRequestVo = this.buildTaskRequestVo(approvalInfo);
+                ApproveTaskRequestVo approveTaskRequestVo = this.buildTaskRequestVo(approvalInfoDTO);
                 String flowType = approvalInfoReqVO.getFlowType();
                 approveTaskRequestVo.setFlowType(flowType);
                 //构建工作流申请的taskRequest对象
                 TaskRequest<ApproveTaskRequestVo> taskRequest = new TaskRequest<>();
                 //设置自定义对象ApproveTaskRequestVo
                 taskRequest.setData(approveTaskRequestVo);
-                String userId = approvalInfo.getApplicantIdcard();
+                String userId = approvalInfoDTO.getApplicantIdcard();
                 logger.info("===提交的用户是:{}===", userId);
                 //调用工作流创建流程
                 processInstanceVO = workflowClientFactory.getWorkflowTaskClient().startTaskByCode(approvalInfoReqVO.getBusinessCode(),
@@ -255,16 +249,16 @@ public class ApproveServiceImpl implements IApproveService {
                 String processInstanceId = processInstanceVO.getProcessInstanceId();
                 List<TaskHistoryDetailVo> taskRunDetailVos = processInstanceVO.getTaskRunDetailVos();
 
-                approvalInfo.setProcessInstanceId(processInstanceId);
+                approvalInfoDTO.setProcessInstanceId(processInstanceId);
 
                 //流程开启后生成待办(刚开启的节点没有已办事宜)
-                approveBusiness.createTodoAfterProcessStart(processInstanceVO, approvalInfo);
+                approveBusiness.createTodoAfterProcessStart(processInstanceVO, approvalInfoDTO);
 
                 TaskRequestUserInfoDTO taskRequestUserInfoDTO = new TaskRequestUserInfoDTO();
                 taskRequestUserInfoDTO.setIdCard(approvalInfoReqVO.getApplicantIdcard());
                 taskRequestUserInfoDTO.setUserName(approvalInfoReqVO.getApplicantName());
                 String applicantIdcard = approvalInfoReqVO.getApplicantIdcard();
-                @Valid @NotNull ResourceInfoReqVO resourceInfoReqVO = approvalInfoReqVO.getResourceInfoDTO();
+                ResourceInfoReqVO resourceInfoReqVO = approvalInfoReqVO.getResourceInfoDTO();
                 FlowTypeEnum flowTypeEnum = EnumUtils.enumOf(FlowTypeEnum.class, flowType);
                 ResourceInfoDTO resourceInfoDTO = ResourceInfoDTO.parseResourceInfoReqVO(resourceInfoReqVO);
                 OperateRespVO operateRespVO = dcucAuthBusiness.checkHitRedList(applicantIdcard, flowTypeEnum, resourceInfoDTO);
@@ -272,7 +266,7 @@ public class ApproveServiceImpl implements IApproveService {
                 //构建流转的taskRequest
                 TaskRequest<ApproveTaskRequestVo> commitTaskRequest = new TaskRequest<>();
                 //再次构建taskRequest
-                this.buildTaskRequest(commitTaskRequest, approvalInfo, taskRequestUserInfoDTO, approvalInfoReqVO.getActivitiHolderList(),
+                this.buildTaskRequest(commitTaskRequest, approvalInfoDTO, taskRequestUserInfoDTO, approvalInfoReqVO.getActivitiHolderList(),
                         processInstanceVO.getTaskRunDetailVos().get(0).getId(), operateRespVO.getHitRedList());
 
                 ApproveResultEnum approveResult = ApproveResultEnum.APPROVE_ING;
@@ -284,11 +278,11 @@ public class ApproveServiceImpl implements IApproveService {
                                 .taskId(taskDetailVo.getId())
                                 .operationEnum(ApproveWorkFlowOperationEnum.COMPLETE_AGREE)
                                 .taskRequest(commitTaskRequest)
-                                .approvalInfo(approvalInfo)
+                                .approvalInfoDTO(approvalInfoDTO)
                                 .taskRequestUserInfoDTO(taskRequestUserInfoDTO)
                                 .approveNo(approveNo)
-                                .processNo(approvalInfo.getBusinessCode())
-                                .approveRecordId(approvalInfo.getId())
+                                .processNo(approvalInfoDTO.getBusinessCode())
+                                .approveRecordId(approvalInfoDTO.getId())
                                 .hitRedList(operateRespVO.getHitRedList())
                                 .build();
 
@@ -302,30 +296,30 @@ public class ApproveServiceImpl implements IApproveService {
                         logger.info("====开始执行提交后续动作====");
                         List<TaskHistoryDetailVo> afterTaskRunDetailVos = processInstanceVO.getTaskRunDetailVos();
                         approveBusiness.afterTaskCommitTask(taskDetailVo.getId(), ApproveWorkFlowOperationEnum.COMPLETE_AGREE,
-                                approvalInfo.getApplicantIdcard(), approvalInfo.getApplicantName(), afterTaskRunDetailVos);
+                                approvalInfoDTO.getApplicantIdcard(), approvalInfoDTO.getApplicantName(), afterTaskRunDetailVos);
                     }
                     logger.info("===发送消息标志:{}====", sendMessageFlag);
                     if (sendMessageFlag) {
-                        ApproveMessageInfoDTO approveMessageInfoDTO = ApproveMessageInfoDTO.newInstance(approvalInfo, ApproveWorkFlowOperationEnum.COMPLETE_AGREE, "");
+                        ApproveMessageInfoDTO approveMessageInfoDTO = ApproveMessageInfoDTO.newInstance(approvalInfoDTO, ApproveWorkFlowOperationEnum.COMPLETE_AGREE, "");
                         //发送消息
                         approveEventPublish.publishApproveFinalResultEvent(approveMessageInfoDTO);
                         approveResult = ApproveResultEnum.SUCCESS;
                     }
                 }
-                approvalInfo.setApproveResult(approveResult.value);
+                approvalInfoDTO.setApproveResult(approveResult.value);
                 //构建任务id、任务标识码、任务名称字段,多个均以,相隔
                 //需使用最新的processInstanceVO
-                approveBusiness.buildTaskInfoByProcessInstanceId(approvalInfo, processInstanceVO.getTaskRunDetailVos());
+                approveBusiness.buildTaskInfoByProcessInstanceId(approvalInfoDTO, processInstanceVO.getTaskRunDetailVos());
                 logger.info("===保存表单信息====");
                 //将原本的旧表对象构建成模式3的新表对象
             } else {
                 logger.info("===保存表单信息====");
-                approvalInfo.setUpdateTime(new Date());
-                approvalInfo.setUpdateUser(ProofsUtil.getIdcard());
+                approvalInfoDTO.setUpdateTime(new Date());
+                approvalInfoDTO.setUpdateUser(ProofsUtil.getIdcard());
             }
 
             //将原本的旧表对象构建成模式3的新表对象
-            approveRecordInfo = approveRecordService.buildApproveRecordInfo(approvalInfo, approveNo);
+            approveRecordInfo = approveRecordService.buildApproveRecordInfo(approvalInfoDTO, approveNo);
             approveRecordInfo.setCreateTime(oldCreateTime);
             //保存数据
             approveRecordService.save(approveRecordInfo);
@@ -337,9 +331,9 @@ public class ApproveServiceImpl implements IApproveService {
         } finally {
             // 获取最新的
             if (approveRecordInfo != null) {
-                approvalInfo = approveRecordInfo.toApprovalInfo();
+                approvalInfoDTO = approveRecordInfo.toApprovalInfo();
             }
-            LogDto logDto = approveLogBusiness.buildLogDto(approvalInfo, processInstanceVO, approveResultEnum, failMsg, false, null);
+            LogDto logDto = approveLogBusiness.buildLogDto(approvalInfoDTO, processInstanceVO, approveResultEnum, failMsg, false, null);
             CommitTypeEnum commitTypeEnum = EnumUtils.enumOf(CommitTypeEnum.class, approvalInfoReqVO.getOperateType());
             approveLogBusiness.buildFlowManageLogInsert(logDto, commitTypeEnum, manageDisposeTypeEnum, sendMessageFlag);
         }
@@ -352,7 +346,7 @@ public class ApproveServiceImpl implements IApproveService {
         logger.info("=======" + JSONObject.toJSONString(approvalInfoUpdateReqVO) + "========");
         ApproveRecordInfo approveRecordInfo;
         String approvalId = approvalInfoUpdateReqVO.getId();
-        ApprovalInfo approvalInfo = getApproveRecord(approvalId);
+        ApprovalInfoDTO approvalInfoDTO = getApproveRecord(approvalId);
         ProcessInstanceVO processInstanceVO = null;
         ApproveResultEnum approveResultEnum = ApproveResultEnum.SUCCESS;
         String failMsg = "";
@@ -379,45 +373,45 @@ public class ApproveServiceImpl implements IApproveService {
                 }
                 needSaveUpdateLog = false;
                 //调用保存接口
-                ApproveRecordInfo result = approveService.saveBase(approvalInfoReqVO, ManageDisposeTypeEnum.UPDATE, approvalInfo.getCreateTime());
+                ApproveRecordInfo result = approveService.saveBase(approvalInfoReqVO, ManageDisposeTypeEnum.UPDATE, approvalInfoDTO.getCreateTime());
                 return ResponseUtil.newInstance(result.getProcessInstanceId());
             } else {
                 String processTitle = approvalInfoUpdateReqVO.getProcessTitle();
                 if (StrUtil.isBlank(processTitle)) {
-                    approvalInfoUpdateReqVO.setProcessTitle(approvalInfo.getProcessTitle());
+                    approvalInfoUpdateReqVO.setProcessTitle(approvalInfoDTO.getProcessTitle());
                 }
 
                 if (StrUtil.isBlank(approvalInfoUpdateReqVO.getAppCode())) {
-                    approvalInfoUpdateReqVO.setAppCode(approvalInfo.getAppCode());
+                    approvalInfoUpdateReqVO.setAppCode(approvalInfoDTO.getAppCode());
                 }
                 if (StrUtil.isBlank(approvalInfoUpdateReqVO.getFlowType())) {
-                    approvalInfoUpdateReqVO.setFlowType(approvalInfo.getFlowType());
+                    approvalInfoUpdateReqVO.setFlowType(approvalInfoDTO.getFlowType());
                 }
                 ResourceInfoReqVO resourceInfoReqVO = approvalInfoUpdateReqVO.getResourceInfoDTO();
                 ResourceInfoDTO resourceInfoDTO = ResourceInfoDTO.parseResourceInfoReqVO(resourceInfoReqVO);
-                approvalInfo.setResourceInfoVo(resourceInfoDTO);
-                BeanUtils.copyProperties(approvalInfoUpdateReqVO, approvalInfo);
+                approvalInfoDTO.setResourceInfoVo(resourceInfoDTO);
+                BeanUtils.copyProperties(approvalInfoUpdateReqVO, approvalInfoDTO);
                 //判断有效期类型
                 String permissionValidType = approvalInfoUpdateReqVO.getPermissionValidType();
                 PermissionValidTypeEnum permissionValidTypeEnum = EnumUtils.enumOf(PermissionValidTypeEnum.class, permissionValidType);
                 if (permissionValidTypeEnum.equals(PermissionValidTypeEnum.CUSTOM)) {
                     //自定义类型,需设置开始、结束时间
-                    approvalInfo.setStartTime(approvalInfoUpdateReqVO.getStartTime());
-                    approvalInfo.setEndTime(approveBaseBusiness.parseEndTime(approvalInfoUpdateReqVO.getEndTime()));
+                    approvalInfoDTO.setStartTime(approvalInfoUpdateReqVO.getStartTime());
+                    approvalInfoDTO.setEndTime(approveBaseBusiness.parseEndTime(approvalInfoUpdateReqVO.getEndTime()));
                 } else {
                     //长期类型,开始、结束时间设置为空
-                    approvalInfo.setStartTime(null);
-                    approvalInfo.setEndTime(null);
+                    approvalInfoDTO.setStartTime(null);
+                    approvalInfoDTO.setEndTime(null);
                 }
-                approvalInfo.setUpdateTime(new Date());
-                approvalInfo.setUpdateUser(ProofsUtil.getIdcard());
-                String flowType = approvalInfo.getFlowType();
+                approvalInfoDTO.setUpdateTime(new Date());
+                approvalInfoDTO.setUpdateUser(ProofsUtil.getIdcard());
+                String flowType = approvalInfoDTO.getFlowType();
                 FlowTypeEnum flowTypeEnum = EnumUtils.enumOf(FlowTypeEnum.class, flowType);
-                @Valid @NotNull ResourceInfoDTO resourceInfoRespVO = approvalInfo.getResourceInfoVo();
+                @Valid @NotNull ResourceInfoDTO resourceInfoRespVO = approvalInfoDTO.getResourceInfoVo();
                 ContentRespDTO contentRespDTO = approveBusiness.generalContentRespVO(flowTypeEnum, resourceInfoRespVO);
-                approvalInfo.setApplyContent(JSON.toJSONString(contentRespDTO));
+                approvalInfoDTO.setApplyContent(JSON.toJSONString(contentRespDTO));
                 //构建模式3新表单表对象
-                approveRecordInfo = approveRecordService.buildApproveRecordInfo(approvalInfo, approvalInfo.getApproveNo());
+                approveRecordInfo = approveRecordService.buildApproveRecordInfo(approvalInfoDTO, approvalInfoDTO.getApproveNo());
                 approveRecordInfo.setAlreadyRedListApprove(BooleanEnum.FALSE.value);
                 //修改模式3新表单表
                 approveRecordService.updateById(approveRecordInfo);
@@ -429,7 +423,7 @@ public class ApproveServiceImpl implements IApproveService {
                 if (CommitTypeEnum.APPLY_COMMIT.equals(commitTypeEnum)) {
                     //根据实例id获取流程当前待办数组
                     List<TaskHistoryDetailVo> list = workflowClientFactory.getWorkflowProcessClient()
-                            .queryTaskDetailByProcessInstanceId(approvalInfo.getProcessInstanceId());
+                            .queryTaskDetailByProcessInstanceId(approvalInfoDTO.getProcessInstanceId());
                     TaskRequest<ApproveTaskRequestVo> taskRequest = new TaskRequest<>();
                     String applicantIdcard = approvalInfoUpdateReqVO.getApplicantIdcard();
                     TaskRequestUserInfoDTO taskRequestUserInfoDTO = new TaskRequestUserInfoDTO();
@@ -441,7 +435,7 @@ public class ApproveServiceImpl implements IApproveService {
                     OperateRespVO operateRespVO = dcucAuthBusiness.checkHitRedList(applicantIdcard, flowTypeEnum, resourceInfoRespVO);
 
                     //构建工作流请求体
-                    this.buildTaskRequest(taskRequest, approvalInfo, taskRequestUserInfoDTO, approvalInfoUpdateReqVO.getActivitiHolderList(), null, operateRespVO.getHitRedList());
+                    this.buildTaskRequest(taskRequest, approvalInfoDTO, taskRequestUserInfoDTO, approvalInfoUpdateReqVO.getActivitiHolderList(), null, operateRespVO.getHitRedList());
 
                     for (TaskHistoryDetailVo taskDetailVo : list) {
                         String taskDetailVoId = taskDetailVo.getId();
@@ -450,11 +444,11 @@ public class ApproveServiceImpl implements IApproveService {
                                 .taskId(taskDetailVoId)
                                 .operationEnum(ApproveWorkFlowOperationEnum.COMPLETE_AGREE)
                                 .taskRequest(taskRequest)
-                                .approvalInfo(approvalInfo)
+                                .approvalInfoDTO(approvalInfoDTO)
                                 .taskRequestUserInfoDTO(taskRequestUserInfoDTO)
                                 .approveNo(approveRecordInfo.getApproveNo())
-                                .processNo(approvalInfo.getBusinessCode())
-                                .approveRecordId(approvalInfo.getId())
+                                .processNo(approvalInfoDTO.getBusinessCode())
+                                .approveRecordId(approvalInfoDTO.getId())
                                 .hitRedList(operateRespVO.getHitRedList())
                                 .build();
 
@@ -467,7 +461,7 @@ public class ApproveServiceImpl implements IApproveService {
                         }
                         logger.info("工作流申请流程:【{}】,taskId:【{}】", JSON.toJSONString(processInstanceVO), taskDetailVoId);
                         //构建任务id、任务标识码、任务名称字段,多个均以,相隔
-                        approveBusiness.buildTaskInfoByProcessInstanceId(approvalInfo, taskRunDetailVos);
+                        approveBusiness.buildTaskInfoByProcessInstanceId(approvalInfoDTO, taskRunDetailVos);
 
                         //生成待办&已办
                         logger.info("=====节点提交后开始生成待办和已办=====");
@@ -477,14 +471,14 @@ public class ApproveServiceImpl implements IApproveService {
                     logger.info("====发送结果标志:{}", sendMessageFlag);
                     if (sendMessageFlag) {
                         //构建消息体并发送到kafka
-                        ApproveMessageInfoDTO approveMessageInfoDTO = ApproveMessageInfoDTO.newInstance(approvalInfo, ApproveWorkFlowOperationEnum.COMPLETE_AGREE, "");
+                        ApproveMessageInfoDTO approveMessageInfoDTO = ApproveMessageInfoDTO.newInstance(approvalInfoDTO, ApproveWorkFlowOperationEnum.COMPLETE_AGREE, "");
 
                         approveEventPublish.publishApproveFinalResultEvent(approveMessageInfoDTO);
                         approveRecordInfo.setFinalApprovalResult(ApproveResultEnum.SUCCESS.getValue());
                     }
                     logger.info("===保存表单信息====");
                     //构建任务id、任务标识码、任务名称字段,多个均以,相隔
-                    buildUpdateInfo(approveRecordInfo, approvalInfo);
+                    buildUpdateInfo(approveRecordInfo, approvalInfoDTO);
                     //修改
                     approveRecordService.updateById(approveRecordInfo);
                     needSaveOperateLog = true;
@@ -496,7 +490,7 @@ public class ApproveServiceImpl implements IApproveService {
             throw e;
         } finally {
             if (needSaveUpdateLog) {
-                LogDto logDto = approveLogBusiness.buildLogDto(approvalInfo, processInstanceVO, approveResultEnum, failMsg, false, null);
+                LogDto logDto = approveLogBusiness.buildLogDto(approvalInfoDTO, processInstanceVO, approveResultEnum, failMsg, false, null);
                 approveLogBusiness.buildFlowManageLogUpdate(logDto, needSaveOperateLog, sendMessageFlag);
             }
         }
@@ -509,22 +503,22 @@ public class ApproveServiceImpl implements IApproveService {
      * 构建工作流请求体
      *
      * @param taskRequest            任务请求
-     * @param approvalInfo           审批信息
+     * @param approvalInfoDTO        审批信息
      * @param taskRequestUserInfoDTO 用户数据
      * @param activitiHolderList     任务信息
      * @param taskId                 任务id,新增时需要手动传(因为新增的时候没有任务id可以查询)
      * @param needRedListApprove     是否需要红名单审批
      * @return 请求
      */
-    private TaskRequest<ApproveTaskRequestVo> buildTaskRequest(TaskRequest<ApproveTaskRequestVo> taskRequest, ApprovalInfo approvalInfo,
+    private TaskRequest<ApproveTaskRequestVo> buildTaskRequest(TaskRequest<ApproveTaskRequestVo> taskRequest, ApprovalInfoDTO approvalInfoDTO,
                                                                TaskRequestUserInfoDTO taskRequestUserInfoDTO, List<ActivitiHolder> activitiHolderList, String taskId,
                                                                boolean needRedListApprove) {
-        if (null == approvalInfo) {
+        if (null == approvalInfoDTO) {
             throw new IllegalArgumentException("approvalInfo is null");
         }
         String idCard;
-        if (StringUtils.isNotEmpty(approvalInfo.getApplicantIdcard())) {
-            idCard = approvalInfo.getApplicantIdcard();
+        if (StringUtils.isNotEmpty(approvalInfoDTO.getApplicantIdcard())) {
+            idCard = approvalInfoDTO.getApplicantIdcard();
         } else {
             idCard = ProofsUtil.getIdcard();
         }
@@ -542,12 +536,12 @@ public class ApproveServiceImpl implements IApproveService {
         // 判断是否需要红名单审批
         approveTaskRequestVo.setRedList(needRedListApprove);
         //设置业务表单信息
-        approveTaskRequestVo.setBusinessKey(approvalInfo.getId());
-        approveTaskRequestVo.setApplyTitle(approvalInfo.getProcessTitle());
-        approveTaskRequestVo.setApplyContent(approvalInfo.getApplyContent());
+        approveTaskRequestVo.setBusinessKey(approvalInfoDTO.getId());
+        approveTaskRequestVo.setApplyTitle(approvalInfoDTO.getProcessTitle());
+        approveTaskRequestVo.setApplyContent(approvalInfoDTO.getApplyContent());
         String appCode = approveProperties.getAppCode();
         approveTaskRequestVo.setBusinessSystem(appCode);
-        approveTaskRequestVo.setBusinessType(approvalInfo.getBusinessCode());
+        approveTaskRequestVo.setBusinessType(approvalInfoDTO.getBusinessCode());
         BaseSecurityUser userInfo = UserContextUtils.getCurrentUser();
         approveTaskRequestVo.setHandleUser(userInfo == null ? taskRequestUserInfoDTO.getIdCard() : userInfo.getIdcard());
         approveTaskRequestVo.setHandleUserName(userInfo == null ? taskRequestUserInfoDTO.getUserName() : userInfo.getUserName());
@@ -583,7 +577,7 @@ public class ApproveServiceImpl implements IApproveService {
         List<ActivitiHolder> activitiHolderList = operateReqDTO.getActivitiHolderList();
         Boolean needCheckRedList = operateReqDTO.getNeedCheckRedList();
 
-        ApprovalInfo approvalInfo = null;
+        ApprovalInfoDTO approvalInfoDTO = null;
         ProcessInstanceVO processInstanceVO = null;
         ApproveResultEnum approveResultEnum = ApproveResultEnum.SUCCESS;
         String failMsg = "";
@@ -595,32 +589,32 @@ public class ApproveServiceImpl implements IApproveService {
         try {
             //根据实例id或任务id获取申请表单并构建成旧ApprovalInfo对象
             ApproveRecordInfo approveRecordInfo = approveRecordService.findByProcessInstanceId(processInstanceId);
-            approvalInfo = approveRecordInfo.toApprovalInfo();
-            if (approvalInfo == null) {
+            approvalInfoDTO = approveRecordInfo.toApprovalInfo();
+            if (approvalInfoDTO == null) {
                 approveResultEnum = ApproveResultEnum.FAIL;
                 failMsg = "审批单不存在";
                 return ResponseUtil.dtoFail("审批单不存在");
             }
 
             // 更新审批操作设置的资源信息
-            ResourceInfoDTO resourceInfoVo = updateResourceInfo(operateReqDTO, approvalInfo.getResourceInfoVo());
-            approvalInfo.setResourceInfoVo(resourceInfoVo);
+            ResourceInfoDTO resourceInfoVo = updateResourceInfo(operateReqDTO, approvalInfoDTO.getResourceInfoVo());
+            approvalInfoDTO.setResourceInfoVo(resourceInfoVo);
 
-            String flowType = approvalInfo.getFlowType();
+            String flowType = approvalInfoDTO.getFlowType();
             FlowTypeEnum flowTypeEnum = EnumUtils.enumOf(FlowTypeEnum.class, flowType);
             ContentRespDTO contentRespDTO = approveBusiness.generalContentRespVO(flowTypeEnum, resourceInfoVo);
-            approvalInfo.setApplyContent(JSON.toJSONString(contentRespDTO));
+            approvalInfoDTO.setApplyContent(JSON.toJSONString(contentRespDTO));
 
-            String alreadyRedListApprove = approvalInfo.getAlreadyRedListApprove();
+            String alreadyRedListApprove = approvalInfoDTO.getAlreadyRedListApprove();
             TaskHistoryDetailVo taskHistoryDetailVo = workflowClientFactory.getWorkflowTaskClient().queryTaskDetail(taskId);
             String taskHistoryDetailVoName = taskHistoryDetailVo.getName();
             String taskCode = taskHistoryDetailVo.getTaskCode();
 
-            String approvalInfoTaskId = approvalInfo.getTaskId();
-            String approvalInfoId = approvalInfo.getId();
-            String approveNo = approvalInfo.getApproveNo();
-            String businessCode = approvalInfo.getBusinessCode();
-            String applicantIdcard = approvalInfo.getApplicantIdcard();
+            String approvalInfoTaskId = approvalInfoDTO.getTaskId();
+            String approvalInfoId = approvalInfoDTO.getId();
+            String approveNo = approvalInfoDTO.getApproveNo();
+            String businessCode = approvalInfoDTO.getBusinessCode();
+            String applicantIdcard = approvalInfoDTO.getApplicantIdcard();
 
             //判断操作类型是否支持
 
@@ -654,19 +648,19 @@ public class ApproveServiceImpl implements IApproveService {
                 // 1、不需要检查红名单审批,(检查红名单完调用通过的接口,不需要红名单检查)
                 // 2、还未进行红名单审批
                 // 3、不是红名单这个节点
-                String taskName = approvalInfo.getTaskName();
+                String taskName = approvalInfoDTO.getTaskName();
                 needSendRedListRisk = (!needCheckRedList) && (!alreadyRedListApproveBoolean) && (!taskName.contains(ApproveConstants.RED_LIST));
             }
 
             //构建工作流请求体
-            this.buildTaskRequest(taskRequest, approvalInfo, taskRequestUserInfoDTO, activitiHolderList, null, operateRespVO.getHitRedList());
+            this.buildTaskRequest(taskRequest, approvalInfoDTO, taskRequestUserInfoDTO, activitiHolderList, null, operateRespVO.getHitRedList());
             //节点提交
             BaseOperateReqDTO baseOperateReqDTO = BaseOperateReqDTO.builder()
                     .operateIdcard(ProofsUtil.getIdcard())
                     .taskId(taskId)
                     .operationEnum(approveWorkFlowOperationEnum)
                     .taskRequest(taskRequest)
-                    .approvalInfo(approvalInfo)
+                    .approvalInfoDTO(approvalInfoDTO)
                     .taskRequestUserInfoDTO(taskRequestUserInfoDTO)
                     .approveNo(approveNo)
                     .processNo(businessCode)
@@ -686,7 +680,7 @@ public class ApproveServiceImpl implements IApproveService {
             // 规则,不需要检查红名单、任务节点名字包含红名单、审批结果是通过
             if ((!needCheckRedList) && taskHistoryDetailVoName.contains(ApproveConstants.RED_LIST) &&
                     approveWorkFlowOperationEnum.equals(ApproveWorkFlowOperationEnum.COMPLETE_AGREE)) {
-                approvalInfo.setAlreadyRedListApprove(BooleanEnum.TRUE.value);
+                approvalInfoDTO.setAlreadyRedListApprove(BooleanEnum.TRUE.value);
             }
 
             //生成待办&已办
@@ -699,26 +693,26 @@ public class ApproveServiceImpl implements IApproveService {
                 ApproveMessage approveMessage = taskRequest.getApproveMessage();
                 String message = approveMessage.getMessage();
                 //构建消息体并发送
-                sendMessage(approveWorkFlowOperationEnum, approvalInfo, message);
+                sendMessage(approveWorkFlowOperationEnum, approvalInfoDTO, message);
                 //设置流程状态结果
                 switch (approveWorkFlowOperationEnum) {
                     case COMPLETE_AGREE:
-                        approvalInfo.setApproveResult(ApproveResultEnum.SUCCESS.getValue());
+                        approvalInfoDTO.setApproveResult(ApproveResultEnum.SUCCESS.getValue());
                         break;
                     case COMPLETE_DISAGREE:
-                        approvalInfo.setApproveResult(ApproveResultEnum.FAIL.getValue());
+                        approvalInfoDTO.setApproveResult(ApproveResultEnum.FAIL.getValue());
                         break;
                     default:
                         break;
                 }
+                approveRecordInfo.setFinalApprovalResult(approvalInfoDTO.getApproveResult());
             }
             //构建任务id、任务标识码、任务名称字段,多个均以,相隔
-            approveBusiness.buildTaskInfoByProcessInstanceId(approvalInfo, afterTaskRunDetailVos);
+            approveBusiness.buildTaskInfoByProcessInstanceId(approvalInfoDTO, afterTaskRunDetailVos);
             logger.info("====当前任务详情:{}====", JSONObject.toJSON(afterTaskRunDetailVos));
             logger.info("====开始更新审批单信息====");
             //设置表单信息
-
-            buildUpdateInfo(approveRecordInfo, approvalInfo);
+            buildUpdateInfo(approveRecordInfo, approvalInfoDTO);
             //修改表单
             approveRecordService.updateById(approveRecordInfo);
         } catch (Exception e) {
@@ -728,8 +722,8 @@ public class ApproveServiceImpl implements IApproveService {
             return ResponseUtil.dtoFail(failMsg);
         } finally {
             // 有审批信息,有进行审批操作才记录日志
-            if ((approvalInfo != null) && (processInstanceVO != null)) {
-                LogDto logDto = approveLogBusiness.buildLogDto(approvalInfo, processInstanceVO,
+            if ((approvalInfoDTO != null) && (processInstanceVO != null)) {
+                LogDto logDto = approveLogBusiness.buildLogDto(approvalInfoDTO, processInstanceVO,
                         approveResultEnum, failMsg, needSendRedListRisk, operateRespVO);
                 approveLogBusiness.buildOperateLog(logDto, approveWorkFlowOperationEnum, sendMessageFlag);
             }
@@ -743,17 +737,17 @@ public class ApproveServiceImpl implements IApproveService {
      * 设置字段值
      *
      * @param approveRecordInfo 审批记录信息
-     * @param approvalInfo      审批信息
+     * @param approvalInfoDTO   审批信息
      */
-    private void buildUpdateInfo(ApproveRecordInfo approveRecordInfo, ApprovalInfo approvalInfo) {
-        approveRecordInfo.setTaskName(approvalInfo.getTaskName());
-        approveRecordInfo.setTaskId(approvalInfo.getTaskId());
-        approveRecordInfo.setTaskCode(approvalInfo.getApproveTaskIdentifier());
-        approveRecordInfo.setAlreadyRedListApprove(approvalInfo.getAlreadyRedListApprove());
+    private void buildUpdateInfo(ApproveRecordInfo approveRecordInfo, ApprovalInfoDTO approvalInfoDTO) {
+        approveRecordInfo.setTaskName(approvalInfoDTO.getTaskName());
+        approveRecordInfo.setTaskId(approvalInfoDTO.getTaskId());
+        approveRecordInfo.setTaskCode(approvalInfoDTO.getApproveTaskIdentifier());
+        approveRecordInfo.setAlreadyRedListApprove(approvalInfoDTO.getAlreadyRedListApprove());
         approveRecordInfo.setUpdateTime(new Date());
         approveRecordInfo.setUpdateUser(ProofsUtil.getIdcard());
 
-        ResourceInfoDTO resourceInfoVo = approvalInfo.getResourceInfoVo();
+        ResourceInfoDTO resourceInfoVo = approvalInfoDTO.getResourceInfoVo();
         approveBusiness.setResourceInfoData(approveRecordInfo, resourceInfoVo);
 
     }
@@ -771,14 +765,14 @@ public class ApproveServiceImpl implements IApproveService {
         String taskId = baseOperateReqDTO.getTaskId();
         ApproveWorkFlowOperationEnum approveWorkFlowOperationEnum = baseOperateReqDTO.getOperationEnum();
         TaskRequest<ApproveTaskRequestVo> taskRequest = baseOperateReqDTO.getTaskRequest();
-        ApprovalInfo approvalInfo = baseOperateReqDTO.getApprovalInfo();
+        ApprovalInfoDTO approvalInfoDTO = baseOperateReqDTO.getApprovalInfoDTO();
         TaskRequestUserInfoDTO taskRequestUserInfoDTO = baseOperateReqDTO.getTaskRequestUserInfoDTO();
         String approveNo = baseOperateReqDTO.getApproveNo();
         String processNo = baseOperateReqDTO.getProcessNo();
         String approveRecordId = baseOperateReqDTO.getApproveRecordId();
         boolean hitRedList = baseOperateReqDTO.getHitRedList();
 
-        taskRequest = buildTaskRequest(taskRequest, approvalInfo, taskRequestUserInfoDTO, null, null, hitRedList);
+        taskRequest = buildTaskRequest(taskRequest, approvalInfoDTO, taskRequestUserInfoDTO, null, null, hitRedList);
         //判断是否有审批信息,若无,默认设置
         if (null == taskRequest.getApproveMessage()) {
             ApproveMessage approveMessage = new ApproveMessage();
@@ -788,7 +782,7 @@ public class ApproveServiceImpl implements IApproveService {
         }
 
         ProcessInstanceVO vo = null;
-        logger.info("=====approveInfo->applicantIdCard:{},传入的idCard是:{}=====", approvalInfo.getApplicantIdcard(), operateIdcard);
+        logger.info("=====approveInfo->applicantIdCard:{},传入的idCard是:{}=====", approvalInfoDTO.getApplicantIdcard(), operateIdcard);
 
         logger.info("=====approveInfo->workflowClientFactory taskRequest:{}", JsonUtils.toJSONString(taskRequest));
 
@@ -922,20 +916,20 @@ public class ApproveServiceImpl implements IApproveService {
     @Transactional(rollbackFor = Exception.class)
     @Override
     public ResponseStatus deleteProcessInstance(String id) {
-        ApprovalInfo approvalInfo = null;
+        ApprovalInfoDTO approvalInfoDTO = null;
         ApproveResultEnum approveResultEnum = ApproveResultEnum.SUCCESS;
         String failMsg = "";
         try {
             //获取表单信息
-            approvalInfo = getApproveRecord(id);
-            if (approvalInfo == null) {
+            approvalInfoDTO = getApproveRecord(id);
+            if (approvalInfoDTO == null) {
                 approveResultEnum = ApproveResultEnum.FAIL;
                 failMsg = "申请单不存在";
                 return ResponseStatus.fail("申请单不存在");
             }
 
-            if (StringUtils.isNotEmpty(approvalInfo.getTaskId())) {
-                if (approvalInfo.getTaskId().equalsIgnoreCase(ApproveConstants.END_STR)) {
+            if (StringUtils.isNotEmpty(approvalInfoDTO.getTaskId())) {
+                if (approvalInfoDTO.getTaskId().equalsIgnoreCase(ApproveConstants.END_STR)) {
                     approveResultEnum = ApproveResultEnum.FAIL;
                     failMsg = "流程已结束,不允许删除";
                     return ResponseDTO.fail("流程已结束,不允许删除");
@@ -944,19 +938,19 @@ public class ApproveServiceImpl implements IApproveService {
 
             boolean callBackEnableFlag = false;
             //判断是否是草稿状态
-            if (StringUtils.isNotEmpty(approvalInfo.getProcessInstanceId())) {
+            if (StringUtils.isNotEmpty(approvalInfoDTO.getProcessInstanceId())) {
                 //1. 获取当前结点可以操作的类型
                 //2. 判断是否可以执行撤销操作,若可以执行撤销,否则返回错误信息
                 //3. 将流程实例信息(审批端)的删除标志置1
 
-                String taskIds = approvalInfo.getTaskId();
-                String taskCodes = approvalInfo.getApproveTaskIdentifier();
+                String taskIds = approvalInfoDTO.getTaskId();
+                String taskCodes = approvalInfoDTO.getApproveTaskIdentifier();
                 String[] arrTaskId = taskIds.split(",");
                 String[] arrTaskCode = taskCodes.split(",");
                 int index = 0;
                 for (String taskId : arrTaskId) {
                     logger.info("====检验当前结点是否支持撤销操作====");
-                    callBackEnableFlag = workFlowBusiness.checkOperateOptionOfCurrentStep(taskId, approvalInfo.getProcessInstanceId(), arrTaskCode[index++], OperateOptionEnum._BTN_REDO_COMMIT);
+                    callBackEnableFlag = workFlowBusiness.checkOperateOptionOfCurrentStep(taskId, approvalInfoDTO.getProcessInstanceId(), arrTaskCode[index++], OperateOptionEnum._BTN_REDO_COMMIT);
                     if (callBackEnableFlag) {
                         break;
                     }
@@ -975,7 +969,7 @@ public class ApproveServiceImpl implements IApproveService {
             }
             //执行表单表逻辑删除
             approveRecordService.deleteById(id);
-            ApproveMessageInfoDTO approveMessageInfoDTO = ApproveMessageInfoDTO.newInstance(approvalInfo, ApproveWorkFlowOperationEnum.RECALL, "");
+            ApproveMessageInfoDTO approveMessageInfoDTO = ApproveMessageInfoDTO.newInstance(approvalInfoDTO, ApproveWorkFlowOperationEnum.RECALL, "");
             approveEventPublish.publishApproveFinalResultEvent(approveMessageInfoDTO);
 
             //删除所有已办
@@ -987,7 +981,7 @@ public class ApproveServiceImpl implements IApproveService {
             approveResultEnum = ApproveResultEnum.FAIL;
             failMsg = "";
         } finally {
-            LogDto logDto = approveLogBusiness.buildLogDto(approvalInfo, null, approveResultEnum,
+            LogDto logDto = approveLogBusiness.buildLogDto(approvalInfoDTO, null, approveResultEnum,
                     failMsg, false, null);
             approveLogBusiness.buildFlowManageLogDelete(logDto);
         }
@@ -998,11 +992,11 @@ public class ApproveServiceImpl implements IApproveService {
     @Override
     public ResponseDTO<ApprovalInfoRespVO> queryApproveDetail(String id) {
         //获取表单信息
-        ApprovalInfo approvalInfo = getApproveRecord(id);
-        if (approvalInfo == null) {
+        ApprovalInfoDTO approvalInfoDTO = getApproveRecord(id);
+        if (approvalInfoDTO == null) {
             return ResponseUtil.dtoFail("申请表单不存在");
         }
-        ApprovalInfoRespVO approvalInfoRespVO = approveBusiness.fillTaskInfoToApplyInfo(approvalInfo);
+        ApprovalInfoRespVO approvalInfoRespVO = approveBusiness.fillTaskInfoToApplyInfo(approvalInfoDTO);
         return ResponseUtil.newInstance(approvalInfoRespVO);
     }
 
@@ -1011,11 +1005,11 @@ public class ApproveServiceImpl implements IApproveService {
     public ResponseDTO<List<ProcessStatusVo>> approveStatus(String processInstanceId) {
         //获取表单信息
         ApproveRecordInfo approveRecordInfo = approveRecordService.findByProcessInstanceId(processInstanceId);
-        ApprovalInfo approvalInfo = approveRecordInfo.toApprovalInfo();
-        if (approvalInfo == null) {
+        ApprovalInfoDTO approvalInfoDTO = approveRecordInfo.toApprovalInfo();
+        if (approvalInfoDTO == null) {
             return ResponseUtil.dtoFail("无法获取审批单信息");
         }
-        String approvalInfoId = approvalInfo.getId();
+        String approvalInfoId = approvalInfoDTO.getId();
         return approveStatusByBusinessId(approvalInfoId);
     }
 
@@ -1096,22 +1090,22 @@ public class ApproveServiceImpl implements IApproveService {
     /**
      * 构建任务请求VO
      *
-     * @param approvalInfo 审批信息
+     * @param approvalInfoDTO 审批信息
      * @return 任务请求
      */
-    private ApproveTaskRequestVo buildTaskRequestVo(ApprovalInfo approvalInfo) {
+    private ApproveTaskRequestVo buildTaskRequestVo(ApprovalInfoDTO approvalInfoDTO) {
         String appCode = approveProperties.getAppCode();
         ApproveTaskRequestVo taskRequestVo = new ApproveTaskRequestVo();
-        taskRequestVo.setApplyTitle(approvalInfo.getProcessTitle());
-        taskRequestVo.setApplyContent(approvalInfo.getApplyContent());
-        taskRequestVo.setBusinessId(approvalInfo.getId());
-        taskRequestVo.setBusinessKey(approvalInfo.getId());
+        taskRequestVo.setApplyTitle(approvalInfoDTO.getProcessTitle());
+        taskRequestVo.setApplyContent(approvalInfoDTO.getApplyContent());
+        taskRequestVo.setBusinessId(approvalInfoDTO.getId());
+        taskRequestVo.setBusinessKey(approvalInfoDTO.getId());
         taskRequestVo.setBusinessSystem(appCode);
-        taskRequestVo.setBusinessType(approvalInfo.getBusinessCode());
-        taskRequestVo.setApplyUser(approvalInfo.getApplicantIdcard());
-        taskRequestVo.setApplyUserName(approvalInfo.getApplicantName());
-        taskRequestVo.setApplicantOrgCode(approvalInfo.getApplicantOrgCode());
-        taskRequestVo.setApplicantOrgName(approvalInfo.getApplicantOrgName());
+        taskRequestVo.setBusinessType(approvalInfoDTO.getBusinessCode());
+        taskRequestVo.setApplyUser(approvalInfoDTO.getApplicantIdcard());
+        taskRequestVo.setApplyUserName(approvalInfoDTO.getApplicantName());
+        taskRequestVo.setApplicantOrgCode(approvalInfoDTO.getApplicantOrgCode());
+        taskRequestVo.setApplicantOrgName(approvalInfoDTO.getApplicantOrgName());
         return taskRequestVo;
     }
 
@@ -1122,7 +1116,7 @@ public class ApproveServiceImpl implements IApproveService {
      * @param id 审批记录id
      * @return 审批信息
      */
-    public ApprovalInfo getApproveRecord(String id) {
+    public ApprovalInfoDTO getApproveRecord(String id) {
         //表单查询
         ApproveRecordInfo approveRecordInfo = approveRecordService.selectOne(id);
         if (approveRecordInfo != null) {
@@ -1137,26 +1131,26 @@ public class ApproveServiceImpl implements IApproveService {
      * @param approvalInfoReqVO 审批信息
      * @return 审批信息
      */
-    private ApprovalInfo buildApprovalInfo(ApprovalInfoReqVO approvalInfoReqVO) {
-        ApprovalInfo approvalInfo = new ApprovalInfo();
-        BeanUtil.copyProperties(approvalInfoReqVO, approvalInfo);
-        approvalInfo.setIsDeleted(BooleanEnum.FALSE.getValue());
-        approvalInfo.setCreateUser(StringUtils.isNotEmpty(approvalInfoReqVO.getApplicantIdcard()) ? approvalInfoReqVO.getApplicantIdcard()
+    private ApprovalInfoDTO buildApprovalInfo(ApprovalInfoReqVO approvalInfoReqVO) {
+        ApprovalInfoDTO approvalInfoDTO = new ApprovalInfoDTO();
+        BeanUtil.copyProperties(approvalInfoReqVO, approvalInfoDTO);
+        approvalInfoDTO.setIsDeleted(BooleanEnum.FALSE.getValue());
+        approvalInfoDTO.setCreateUser(StringUtils.isNotEmpty(approvalInfoReqVO.getApplicantIdcard()) ? approvalInfoReqVO.getApplicantIdcard()
                 : ProofsUtil.getIdcard());
-        approvalInfo.setId(UUIDUtils.getUUID());
-        approvalInfo.setCreateTime(new Date());
+        approvalInfoDTO.setId(UUIDUtils.getUUID());
+        approvalInfoDTO.setCreateTime(new Date());
 
         @Valid @NotNull ResourceInfoReqVO resourceInfoRespVO = approvalInfoReqVO.getResourceInfoDTO();
 
         ResourceInfoDTO resourceInfoDTO = ResourceInfoDTO.parseResourceInfoReqVO(resourceInfoRespVO);
-        approvalInfo.setResourceInfoVo(resourceInfoDTO);
+        approvalInfoDTO.setResourceInfoVo(resourceInfoDTO);
 
-        approvalInfo.setCallbackUrl(approvalInfoReqVO.getCallbackUrl());
-        approvalInfo.setApproveTaskClass(approvalInfoReqVO.getApproveTaskClass());
-        approvalInfo.setApplicantIp(approvalInfoReqVO.getApplicantIp());
-        approvalInfo.setApplicantAppToken(approvalInfoReqVO.getApplicantAppToken());
+        approvalInfoDTO.setCallbackUrl(approvalInfoReqVO.getCallbackUrl());
+        approvalInfoDTO.setApproveTaskClass(approvalInfoReqVO.getApproveTaskClass());
+        approvalInfoDTO.setApplicantIp(approvalInfoReqVO.getApplicantIp());
+        approvalInfoDTO.setApplicantAppToken(approvalInfoReqVO.getApplicantAppToken());
 
-        return approvalInfo;
+        return approvalInfoDTO;
     }
 
 
@@ -1193,11 +1187,11 @@ public class ApproveServiceImpl implements IApproveService {
      * 发送消息
      *
      * @param approveWorkFlowOperationEnum 操作类型
-     * @param approvalInfo                 审批信息
+     * @param approvalInfoDTO              审批信息
      */
-    protected void sendMessage(ApproveWorkFlowOperationEnum approveWorkFlowOperationEnum, ApprovalInfo approvalInfo, String approveMessage) {
+    protected void sendMessage(ApproveWorkFlowOperationEnum approveWorkFlowOperationEnum, ApprovalInfoDTO approvalInfoDTO, String approveMessage) {
         //构建消息体并发送
-        ApproveMessageInfoDTO approveMessageInfoDTO = ApproveMessageInfoDTO.newInstance(approvalInfo, approveWorkFlowOperationEnum, approveMessage);
+        ApproveMessageInfoDTO approveMessageInfoDTO = ApproveMessageInfoDTO.newInstance(approvalInfoDTO, approveWorkFlowOperationEnum, approveMessage);
         approveEventPublish.publishApproveFinalResultEvent(approveMessageInfoDTO);
     }
 

+ 34 - 39
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/ApproveLogBusinessImpl.java

@@ -12,18 +12,19 @@ import com.dragoninfo.dcuc.duceap.enums.OperateDisposeTypeEnum;
 import com.dragoninfo.dcuc.duceap.enums.RequestDisposeTypeEnum;
 import com.dragoninfo.dcuc.duceap.enums.SchemeTypeEnum;
 import com.dragonsoft.dcuc.approve.business.IApproveLogBusiness;
-import com.dragonsoft.dcuc.approve.business.IDcucBusiness;
 import com.dragonsoft.dcuc.approve.business.IRiskBusiness;
+import com.dragonsoft.dcuc.approve.business.external.IDcucBusiness;
 import com.dragonsoft.dcuc.approve.constants.ApproveConstants;
-import com.dragonsoft.dcuc.approve.dto.ApproveLogDTO;
+import com.dragonsoft.dcuc.approve.model.dto.ApprovalInfoDTO;
+import com.dragonsoft.dcuc.approve.model.dto.ApproveLogDTO;
 import com.dragonsoft.dcuc.approve.enumresources.*;
 import com.dragonsoft.dcuc.approve.event.ApproveEventPublish;
 import com.dragonsoft.dcuc.approve.model.*;
 import com.dragonsoft.dcuc.approve.model.resp.OperateRespVO;
-import com.dragonsoft.dcuc.approve.model.vo.LogDto;
-import com.dragonsoft.dcuc.approve.model.vo.LogInfoMetaDTO;
-import com.dragonsoft.dcuc.approve.model.vo.ProcessInstanceInfoDTO;
-import com.dragonsoft.dcuc.approve.model.vo.QmOperateLogDTO;
+import com.dragonsoft.dcuc.approve.model.dto.LogDto;
+import com.dragonsoft.dcuc.approve.model.dto.LogInfoMetaDTO;
+import com.dragonsoft.dcuc.approve.model.dto.ProcessInstanceInfoDTO;
+import com.dragonsoft.dcuc.approve.model.dto.QmOperateLogDTO;
 import com.dragonsoft.dcuc.approve.model.vo.dcuc.OauthUserVO;
 import com.dragonsoft.dcuc.approve.properties.ApproveProperties;
 import com.dragonsoft.dcuc.approve.service.*;
@@ -73,8 +74,6 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
 
     private IRiskLogService riskLogService;
 
-    private IApproveCirculationService approveCirculationService;
-
     private ApproveEventPublish approveEventPublish;
 
     private IRiskSchemeService riskSchemeService;
@@ -118,10 +117,6 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
         this.riskLogService = riskLogService;
     }
 
-    @Autowired
-    public void setApproveCirculationService(IApproveCirculationService approveCirculationService) {
-        this.approveCirculationService = approveCirculationService;
-    }
 
     @Autowired
     public void setApproveEventPublish(ApproveEventPublish approveEventPublish) {
@@ -189,13 +184,13 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
     private void buildRequestLog(String disposeType, LogDto logDto, String flowNodeCode, String flowNodeName,
                                  String taskKey, String flowKey, String processInstanceId, String businessCode) {
 
-        ApprovalInfo approvalInfo = logDto.getApprovalInfo();
+        ApprovalInfoDTO approvalInfoDTO = logDto.getApprovalInfoDTO();
         RequestLog requestLog = new RequestLog();
-        requestLog.setIdcard(approvalInfo.getApplicantIdcard());
-        requestLog.setOrgName(approvalInfo.getApplicantOrgName());
-        requestLog.setOrgCode(approvalInfo.getApplicantOrgCode());
-        requestLog.setBusinessCode(approvalInfo.getBusinessCode());
-        requestLog.setTitle(approvalInfo.getProcessTitle());
+        requestLog.setIdcard(approvalInfoDTO.getApplicantIdcard());
+        requestLog.setOrgName(approvalInfoDTO.getApplicantOrgName());
+        requestLog.setOrgCode(approvalInfoDTO.getApplicantOrgCode());
+        requestLog.setBusinessCode(approvalInfoDTO.getBusinessCode());
+        requestLog.setTitle(approvalInfoDTO.getProcessTitle());
         requestLog.setDisposeType(disposeType);
         requestLog.setResult(logDto.getResult());
         requestLog.setFailMsg(logDto.getFailMsg());
@@ -207,9 +202,9 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
         requestLog.setCreateTime(new Date());
         requestLog.setFlowNodeCode(flowNodeCode);
         requestLog.setFlowNodeName(flowNodeName);
-        requestLog.setApproveRecordId(approvalInfo.getId());
+        requestLog.setApproveRecordId(approvalInfoDTO.getId());
         requestLog.setProcessInstanceId(processInstanceId);
-        requestLog.setApproveNo(approvalInfo.getApproveNo());
+        requestLog.setApproveNo(approvalInfoDTO.getApproveNo());
         //发送审批请求日志到消息中心
         logger.info("=====发送审批申请请求日志-发起消息,消息体为:{}====", JSON.toJSONString(requestLog));
         LogInfoMetaDTO logInfoMetaDTO = new LogInfoMetaDTO();
@@ -233,7 +228,7 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
      */
     private void buildOperateLogAndSend(LogDto dto, OperateDisposeTypeEnum operateDisposeTypeEnum,
                                         ProcessInstanceInfoDTO processInstanceInfoDTO, Boolean flowFinish) {
-        ApprovalInfo approvalInfo = dto.getApprovalInfo();
+        ApprovalInfoDTO approvalInfoDTO = dto.getApprovalInfoDTO();
 
         String failMsg = dto.getFailMsg();
         if (failMsg.length() > 1000) {
@@ -241,11 +236,11 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
         }
 
         OperateLog operateLog = new OperateLog();
-        operateLog.setIdcard(approvalInfo.getApplicantIdcard());
-        operateLog.setOrgName(approvalInfo.getApplicantOrgName());
-        operateLog.setOrgCode(approvalInfo.getApplicantOrgCode());
-        operateLog.setBusinessCode(approvalInfo.getBusinessCode());
-        operateLog.setTitle(approvalInfo.getProcessTitle());
+        operateLog.setIdcard(approvalInfoDTO.getApplicantIdcard());
+        operateLog.setOrgName(approvalInfoDTO.getApplicantOrgName());
+        operateLog.setOrgCode(approvalInfoDTO.getApplicantOrgCode());
+        operateLog.setBusinessCode(approvalInfoDTO.getBusinessCode());
+        operateLog.setTitle(approvalInfoDTO.getProcessTitle());
         operateLog.setDisposeType(operateDisposeTypeEnum.value);
         operateLog.setResult(dto.getResult());
         operateLog.setFailMsg(failMsg);
@@ -257,9 +252,9 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
         operateLog.setCreateTime(dto.getCreateTime());
         operateLog.setFlowNodeCode(processInstanceInfoDTO.getFlowNodeCode());
         operateLog.setFlowNodeName(processInstanceInfoDTO.getFlowNodeName());
-        operateLog.setApproveRecordId(approvalInfo.getId());
+        operateLog.setApproveRecordId(approvalInfoDTO.getId());
         operateLog.setProcessInstanceId(processInstanceInfoDTO.getProcessInstanceId());
-        operateLog.setApproveNo(approvalInfo.getApproveNo());
+        operateLog.setApproveNo(approvalInfoDTO.getApproveNo());
 
         LogInfoMetaDTO logInfoMetaDTO = new LogInfoMetaDTO();
         logInfoMetaDTO.setLogType(LogTypeEnum.OPERATE_LOG.getValue());
@@ -694,20 +689,20 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
             taskDefinitionKey = processInstanceVO.getTaskHistoryDetailVo().getTaskDefinitionKey();
         }
 
-        ApprovalInfo approvalInfo = logDto.getApprovalInfo();
+        ApprovalInfoDTO approvalInfoDTO = logDto.getApprovalInfoDTO();
 
         FlowManageLog flowManageLog = new FlowManageLog();
         BeanUtils.copyProperties(logDto, flowManageLog);
-        flowManageLog.setIdcard(approvalInfo.getApplicantIdcard());
-        flowManageLog.setOrgName(approvalInfo.getApplicantOrgName());
-        flowManageLog.setOrgCode(approvalInfo.getApplicantOrgCode());
-        flowManageLog.setBusinessCode(approvalInfo.getBusinessCode());
-        flowManageLog.setTitle(approvalInfo.getProcessTitle());
+        flowManageLog.setIdcard(approvalInfoDTO.getApplicantIdcard());
+        flowManageLog.setOrgName(approvalInfoDTO.getApplicantOrgName());
+        flowManageLog.setOrgCode(approvalInfoDTO.getApplicantOrgCode());
+        flowManageLog.setBusinessCode(approvalInfoDTO.getBusinessCode());
+        flowManageLog.setTitle(approvalInfoDTO.getProcessTitle());
         flowManageLog.setDisposeType(manageDisposeTypeEnum.value);
         //操作内容策划不知道要存什么,暂时放空
 //        flowManageLog.setOperateContent(JSON.toJSONString(logDto.getApprovalInfo()));
-        flowManageLog.setApproveRecordId(approvalInfo.getId());
-        flowManageLog.setApproveNo(approvalInfo.getApproveNo());
+        flowManageLog.setApproveRecordId(approvalInfoDTO.getId());
+        flowManageLog.setApproveNo(approvalInfoDTO.getApproveNo());
         flowManageLog.setProcessInstanceId(processInstanceId);
         //发送审批流程管理日志到消息中心
         logger.info("=====发送审批流程管理日志消息,消息体为:{}====", JSON.toJSONString(flowManageLog));
@@ -753,14 +748,14 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
     /**
      * 构建日志Dto
      *
-     * @param approvalInfo      审批信息
+     * @param approvalInfoDTO      审批信息
      * @param vo                实例信息
      * @param approveResultEnum 返回信息
      * @param failMsg           错误消息
      * @return 日志信息
      */
     @Override
-    public LogDto buildLogDto(ApprovalInfo approvalInfo, ProcessInstanceVO vo, ApproveResultEnum approveResultEnum,
+    public LogDto buildLogDto(ApprovalInfoDTO approvalInfoDTO, ProcessInstanceVO vo, ApproveResultEnum approveResultEnum,
                               String failMsg, boolean needSendRedListRisk, OperateRespVO operateRespVO) {
         ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
         assert servletRequestAttributes != null;
@@ -788,7 +783,7 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
         logDto.setOperateContent("");
         logDto.setCreateUser(createUser);
         logDto.setCreateUserName(createUserName);
-        logDto.setApprovalInfo(approvalInfo);
+        logDto.setApprovalInfoDTO(approvalInfoDTO);
         logDto.setProcessInstanceVO(vo);
         logDto.setFailMsg(failMsg);
         logDto.setResult(approveResultEnum.value);

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/ApproveTaskBusinessImpl.java

@@ -4,7 +4,7 @@ import cn.hutool.core.util.ObjectUtil;
 import com.dragoninfo.dcuc.common.utils.DcucBeanUtil;
 import com.dragoninfo.dcuc.common.utils.ResponseUtil;
 import com.dragonsoft.dcuc.approve.business.IApproveTaskBusiness;
-import com.dragonsoft.dcuc.approve.business.IBimBusiness;
+import com.dragonsoft.dcuc.approve.business.external.IBimBusiness;
 import com.dragonsoft.dcuc.approve.model.ApproveRecordInfo;
 import com.dragonsoft.dcuc.approve.model.ApproveTaskClass;
 import com.dragonsoft.dcuc.approve.model.resp.bim.ZeroTrustUserTokenInfoRespVO;

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

@@ -1,243 +0,0 @@
-package com.dragonsoft.dcuc.approve.business.impl;
-
-import cn.hutool.core.lang.Assert;
-import cn.hutool.core.util.StrUtil;
-import com.dragoninfo.dcuc.common.annotation.CacheLock;
-import com.dragoninfo.dcuc.common.utils.ResponseUtil;
-import com.dragonsoft.dcuc.approve.business.IBuSyncBusiness;
-import com.dragonsoft.dcuc.approve.constants.ApproveBeanConstants;
-import com.dragonsoft.dcuc.approve.constants.ApproveConstants;
-import com.dragonsoft.dcuc.approve.enumresources.bu.ApproveModeEnum;
-import com.dragonsoft.dcuc.approve.enumresources.bu.BuErrorCodeEnum;
-import com.dragonsoft.dcuc.approve.model.ApproveCirculationInfo;
-import com.dragonsoft.dcuc.approve.model.ApproveRecordInfo;
-import com.dragonsoft.dcuc.approve.model.resp.bu.BuApproveSyncBizApproveReqVO;
-import com.dragonsoft.dcuc.approve.model.resp.bu.BuApproveSyncBizDataReqVO;
-import com.dragonsoft.dcuc.approve.model.resp.bu.BuApproveSyncReqVO;
-import com.dragonsoft.dcuc.approve.model.resp.v3.ZeroTrustResultDataVO;
-import com.dragoninfo.dcuc.common.utils.ValidUtil;
-import com.dragonsoft.dcuc.approve.properties.ApproveBuProperties;
-import com.dragonsoft.dcuc.approve.service.IApproveCirculationService;
-import com.dragonsoft.dcuc.approve.service.IApproveRecordService;
-import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
-import com.dragonsoft.duceap.base.enums.BooleanEnum;
-import com.dragonsoft.duceap.commons.util.json.JsonUtils;
-import com.dragonsoft.duceap.commons.util.string.StringUtils;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.ResponseEntity;
-import org.springframework.stereotype.Component;
-import org.springframework.web.client.RestTemplate;
-
-import java.util.List;
-
-/**
- * <p>
- *
- * </p>
- *
- * @author huangzqa
- * @date 2023/11/7
- */
-@Slf4j
-@Component
-public class BuSyncBusinessImpl implements IBuSyncBusiness {
-
-    private RestTemplate restTemplate;
-
-    private ObjectMapper dragonObjectMapper;
-
-    private ApproveBuProperties approveBuProperties;
-
-    private IApproveRecordService approveRecordService;
-
-    private IApproveCirculationService approveCirculationService;
-
-    @Autowired
-    public void setApproveCirculationService(IApproveCirculationService approveCirculationService) {
-        this.approveCirculationService = approveCirculationService;
-    }
-
-    @Autowired
-    public void setApproveRecordService(IApproveRecordService approveRecordService) {
-        this.approveRecordService = approveRecordService;
-    }
-
-    @Autowired
-    public void setApproveBuProperties(ApproveBuProperties approveBuProperties) {
-        this.approveBuProperties = approveBuProperties;
-    }
-
-    @Qualifier(ApproveBeanConstants.DRAGON_OBJECT_MAPPER)
-    @Autowired
-    public void setDragonObjectMapper(ObjectMapper dragonObjectMapper) {
-        this.dragonObjectMapper = dragonObjectMapper;
-    }
-
-    @Qualifier(ApproveBeanConstants.SKIP_SSL_REST_TEMPLATE)
-    @Autowired
-    public void setRestTemplate(RestTemplate restTemplate) {
-        this.restTemplate = restTemplate;
-    }
-
-    @CacheLock
-    public ResponseStatus syncTuBu() {
-        List<ApproveRecordInfo> unSyncList = approveRecordService.getUnSyncList();
-        for (ApproveRecordInfo approveRecordInfo : unSyncList) {
-            String id = approveRecordInfo.getId();
-            String approveNo = approveRecordInfo.getApproveNo();
-            //  检查任务编号是否正确?,还是初始化脚本就处理
-            if (isStanderTaskNo(approveNo)) {
-                ResponseStatus responseStatus = syncToBu(approveRecordInfo);
-                BooleanEnum booleanEnum = BooleanEnum.TRUE;
-                if (ResponseUtil.isFail(responseStatus)) {
-                    log.error("同步到BU出错:{}", responseStatus.getMessage());
-                    booleanEnum = BooleanEnum.FALSE;
-                }
-                approveRecordService.updateSyncFlag(id, booleanEnum);
-
-            } else {
-                // 非标准的任务ID默认设置为成功
-                approveRecordService.updateSyncFlag(id, BooleanEnum.TRUE);
-            }
-        }
-        return ResponseStatus.success();
-    }
-
-    /**
-     * 是否是标准的任务编号
-     *
-     * @param taskNo 任务编号
-     * @return 是否是
-     */
-    protected boolean isStanderTaskNo(String taskNo) {
-        if (StrUtil.isBlank(taskNo)) {
-            return false;
-        }
-        if (!taskNo.startsWith(ApproveConstants.TASK_ID_PREFIX)) {
-            return false;
-        }
-        return taskNo.length() == 38;
-    }
-
-    /**
-     * 同步到BU
-     *
-     * @param approveRecordInfo 请求同步请求
-     * @return 状态
-     */
-    public ResponseStatus syncToBu(ApproveRecordInfo approveRecordInfo) {
-        Assert.notNull(approveRecordInfo);
-
-        String id = approveRecordInfo.getId();
-
-        BuApproveSyncReqVO buApproveSyncReqVO = new BuApproveSyncReqVO();
-        buApproveSyncReqVO.setAppId(approveRecordInfo.getAppCode());
-        buApproveSyncReqVO.setAppName(approveRecordInfo.getAppName());
-        buApproveSyncReqVO.setCreateTime(approveRecordInfo.getCreateTime());
-        buApproveSyncReqVO.setFinishTime(approveRecordInfo.getUpdateTime());
-        buApproveSyncReqVO.setPid(approveRecordInfo.getApplicantIdcard());
-
-        ApproveCirculationInfo approveCirculationInfo = approveCirculationService.getListByApproveRecordLastAgree(id);
-        Assert.notNull(approveCirculationInfo);
-        // 设置最终审批人信息
-        buApproveSyncReqVO.setLastReviewerIdCard(approveCirculationInfo.getOperateUserId());
-        buApproveSyncReqVO.setLastReviewerName(approveCirculationInfo.getOperateUserName());
-        buApproveSyncReqVO.setLastReviewerUnitCode(approveCirculationInfo.getOperateUserOrgId());
-        buApproveSyncReqVO.setLastReviewerUnit(approveCirculationInfo.getOperateUserOrg());
-
-        BuApproveSyncBizApproveReqVO buApproveSyncBizApproveReqVO = new BuApproveSyncBizApproveReqVO();
-        buApproveSyncBizApproveReqVO.setBizId(approveRecordInfo.getApproveNo());
-        buApproveSyncBizApproveReqVO.setBizTitle(approveRecordInfo.getProcessTitle());
-        buApproveSyncBizApproveReqVO.setTaskClass(approveRecordInfo.getApproveTaskClass());
-        buApproveSyncBizApproveReqVO.setApproveMode(ApproveModeEnum.NORMAL.value);
-        buApproveSyncBizApproveReqVO.setBizTermStart(approveRecordInfo.getStartTime());
-        buApproveSyncBizApproveReqVO.setBizTermEnd(approveRecordInfo.getEndTime());
-
-        BuApproveSyncBizDataReqVO buApproveSyncBizDataReqVO = new BuApproveSyncBizDataReqVO();
-        buApproveSyncBizDataReqVO.setBizApprove(buApproveSyncBizApproveReqVO);
-        buApproveSyncReqVO.setBizData(buApproveSyncBizDataReqVO);
-
-        ResponseStatus responseStatus = requestSyncToBu(buApproveSyncReqVO);
-        if (ResponseUtil.isSuccess(responseStatus)) {
-            approveRecordService.updateSyncFlag(id, BooleanEnum.TRUE);
-            return ResponseStatus.success();
-        }
-        approveRecordService.updateSyncFlag(id, BooleanEnum.FALSE);
-        return ResponseStatus.fail();
-    }
-
-    /**
-     * 请求同步到 BU
-     *
-     * @param buApproveSyncReqVO 同步请求
-     * @return 状态
-     */
-    public ResponseStatus requestSyncToBu(BuApproveSyncReqVO buApproveSyncReqVO) {
-        if (!approveBuProperties.isEnable()) {
-            return ResponseStatus.success();
-        }
-        String syncTaskUrl = approveBuProperties.getSyncTaskUrl();
-
-        return baseReq(syncTaskUrl, buApproveSyncReqVO, "同步任务信息到BU");
-    }
-
-    /**
-     * 流程详情
-     *
-     * @param url                路径
-     * @param buApproveSyncReqVO 请求参数
-     * @return 返回内容
-     */
-    protected ResponseStatus baseReq(String url, BuApproveSyncReqVO buApproveSyncReqVO, String requestName) {
-        // 打印请求参数
-        log.info(requestName + " 请求路径:{} 请求参数:{}", url, JsonUtils.toJSONString(buApproveSyncReqVO));
-        String errorTip = requestName + "失败";
-        ResponseStatus responseStatus = ValidUtil.validReqVo(buApproveSyncReqVO);
-        if (ResponseUtil.isFail(responseStatus)) {
-            log.error("request vo valid error:{}", responseStatus.getMessage());
-            return ResponseUtil.dtoFail(responseStatus.getMessage());
-        }
-
-        HttpEntity<BuApproveSyncReqVO> entity = new HttpEntity<>(buApproveSyncReqVO);
-        ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
-
-        if (!exchange.getStatusCode().is2xxSuccessful()) {
-            log.error("{} error. resp: {}", requestName, JsonUtils.toJSONString(exchange));
-            return ResponseUtil.dtoFail(errorTip);
-        }
-        String body = exchange.getBody();
-        if (StringUtils.isBlank(body)) {
-            log.error("{} error. resp: {}", requestName, JsonUtils.toJSONString(exchange));
-            return ResponseUtil.dtoFail(errorTip);
-        }
-
-        log.info("baseReq resp :{}", JsonUtils.toJSONString(exchange));
-        TypeReference<ZeroTrustResultDataVO<Object>> typeReference = new TypeReference<ZeroTrustResultDataVO<Object>>() {
-        };
-
-        ZeroTrustResultDataVO<Object> respDto;
-        try {
-            JsonNode jsonNode = dragonObjectMapper.readTree(body);
-            String statusCode = jsonNode.get("status_code").asText();
-            String message = jsonNode.get("message").asText();
-            if (BuErrorCodeEnum.SUCCESS.getValue().equals(statusCode)) {
-                respDto = dragonObjectMapper.readValue(body, typeReference);
-            } else {
-                return ResponseUtil.dtoFail(message);
-            }
-        } catch (JsonProcessingException e) {
-            log.error("parse error.", e);
-            return ResponseUtil.dtoFail("返回值解析失败");
-        }
-
-        return ResponseUtil.newInstance(respDto.getData());
-    }
-}

+ 2 - 2
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/RedisCacheBusinessImpl.java

@@ -4,8 +4,8 @@ import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.dragonsoft.dcuc.approve.business.ICacheBusiness;
 import com.dragonsoft.dcuc.approve.constants.ApproveRedisConstants;
-import com.dragonsoft.dcuc.approve.dto.zerotrust.AppTokenInfoDTO;
-import com.dragonsoft.dcuc.approve.dto.zerotrust.UserTokenInfoDTO;
+import com.dragonsoft.dcuc.approve.model.dto.zerotrust.AppTokenInfoDTO;
+import com.dragonsoft.dcuc.approve.model.dto.zerotrust.UserTokenInfoDTO;
 import com.dragonsoft.dcuc.approve.enumresources.ZeroTrustTokenActionEnum;
 import com.dragonsoft.duceap.commons.util.date.DateConst;
 import com.dragonsoft.duceap.commons.util.date.DateUtils;

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

@@ -0,0 +1,150 @@
+package com.dragonsoft.dcuc.approve.business.impl;
+
+import cn.hutool.core.map.MapUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.dragoninfo.dcuc.common.entity.SecurityApp;
+import com.dragoninfo.dcuc.common.enums.UserExtInfoEnum;
+import com.dragoninfo.dcuc.common.utils.ResponseUtil;
+import com.dragonsoft.dcuc.approve.business.ISecurityUserBusiness;
+import com.dragonsoft.dcuc.approve.filter.cache.ISecurityAppResolver;
+import com.dragonsoft.dcuc.approve.filter.cache.ISecurityUserResolver;
+import com.dragonsoft.dcuc.approve.filter.cache.SecurityAppCache;
+import com.dragonsoft.dcuc.approve.filter.cache.SecurityUserCache;
+import com.dragonsoft.dcuc.approve.model.resp.bim.ZeroTrustAppItemUserTokenInfoRespVO;
+import com.dragonsoft.dcuc.approve.model.resp.bim.ZeroTrustAppTokenInfoRespVO;
+import com.dragonsoft.dcuc.approve.utils.ProofsUtil;
+import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
+import com.dragonsoft.duceap.base.entity.security.SecurityUser;
+import com.dragonsoft.duceap.commons.util.ip.IpUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/11/15
+ */
+@Slf4j
+@Component
+public class SecurityUserBusinessImpl implements ISecurityUserBusiness {
+
+    private SecurityAppCache securityAppCache;
+
+    private ISecurityAppResolver securityAppResolver;
+
+    private SecurityUserCache securityUserCache;
+
+    private ISecurityUserResolver securityAccessResolver;
+
+    @Autowired
+    public void setSecurityAppCache(SecurityAppCache securityAppCache) {
+        this.securityAppCache = securityAppCache;
+    }
+
+    @Autowired
+    public void setSecurityAppResolver(ISecurityAppResolver securityAppResolver) {
+        this.securityAppResolver = securityAppResolver;
+    }
+
+    @Autowired
+    public void setSecurityUserCache(SecurityUserCache securityUserCache) {
+        this.securityUserCache = securityUserCache;
+    }
+
+    @Autowired
+    public void setSecurityAccessResolver(ISecurityUserResolver securityAccessResolver) {
+        this.securityAccessResolver = securityAccessResolver;
+    }
+
+    @Override
+    public SecurityApp getSecurityApp(String appCode) {
+        SecurityApp securityApp = securityAppCache.getIfPresent(appCode);
+        if (ObjectUtil.isNull(securityApp)) {
+            securityApp = securityAppResolver.resolve(appCode).orElse(null);
+            if (ObjectUtil.isNotNull(securityApp)) {
+                securityAppCache.put(appCode, securityApp);
+            }
+        }
+        return securityApp;
+    }
+
+    @Override
+    public ResponseDTO<SecurityUser> getSecurityUser(String idcard, String appCode) {
+        SecurityApp securityApp = getSecurityApp(appCode);
+        if (ObjectUtil.isNull(securityApp)) {
+            String format = String.format("无法获取到应用:%s", appCode);
+            log.error(format);
+            return ResponseUtil.dtoFail("应用凭据信息无效");
+        }
+
+        SecurityUser securityUser = securityUserCache.getIfPresent(idcard);
+        if (ObjectUtil.isNull(securityUser)) {
+            securityUser = securityAccessResolver.resolve(idcard).orElse(null);
+            if (ObjectUtil.isNotNull(securityUser)) {
+                securityUserCache.put(idcard, securityUser);
+            }
+        }
+
+        if (ObjectUtil.isNull(securityUser)) {
+            String format = String.format("无法获取到用户:%s", appCode);
+            log.error(format);
+            return ResponseUtil.dtoFail("用户凭据信息无效");
+        }
+
+        Map<String, Object> extendtionsMap = securityUser.getExtendtions();
+        if (MapUtil.isEmpty(extendtionsMap)) {
+            extendtionsMap = new HashMap<>(UserExtInfoEnum.values().length);
+        }
+        extendtionsMap.put(UserExtInfoEnum.SECURITY_APP.getValue(), securityApp);
+
+        securityUser.setExtendtions(extendtionsMap);
+
+        return ResponseUtil.newInstance(securityUser);
+    }
+
+    @Override
+    public void setUserExtInfo(SecurityUser securityUser, HttpServletRequest request) {
+
+        Map<String, Object> extendtionsMap = securityUser.getExtendtions();
+        if (MapUtil.isEmpty(extendtionsMap)) {
+            extendtionsMap = new HashMap<>(UserExtInfoEnum.values().length);
+        }
+
+        String realIpAdrress = IpUtils.getRealIpAdrress(request);
+        String userToken = ProofsUtil.getUserToken(request);
+        String appToken = ProofsUtil.getAppToken(request);
+        extendtionsMap.put(UserExtInfoEnum.USER_TOKEN_ID.getValue(), userToken);
+        extendtionsMap.put(UserExtInfoEnum.APP_TOKEN_ID.getValue(), appToken);
+        extendtionsMap.put(UserExtInfoEnum.REQUEST_IP.getValue(), realIpAdrress);
+
+        securityUser.setExtendtions(extendtionsMap);
+    }
+
+    @Override
+    public void setUserExtInfo(SecurityUser securityUser, ZeroTrustAppTokenInfoRespVO appTokenInfo) {
+
+        Map<String, Object> extendtionsMap = securityUser.getExtendtions();
+        if (MapUtil.isEmpty(extendtionsMap)) {
+            extendtionsMap = new HashMap<>(UserExtInfoEnum.values().length);
+        }
+        ZeroTrustAppItemUserTokenInfoRespVO userToken = appTokenInfo.getUserToken();
+        String userTokenId = userToken.getUserTokenId();
+        String requestIp = userToken.getIp();
+        String appTokenId = appTokenInfo.getAppTokenId();
+
+        extendtionsMap.put(UserExtInfoEnum.USER_TOKEN_ID.getValue(), userTokenId);
+        extendtionsMap.put(UserExtInfoEnum.APP_TOKEN_ID.getValue(), appTokenId);
+        extendtionsMap.put(UserExtInfoEnum.REQUEST_IP.getValue(), requestIp);
+
+        securityUser.setExtendtions(extendtionsMap);
+    }
+
+}

+ 0 - 19
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/config/ApproveConfig.java

@@ -3,7 +3,6 @@ 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.constants.ApproveBeanConstants;
-import com.dragonsoft.dcuc.approve.filter.ProofsFilter;
 import com.dragonsoft.dcuc.approve.properties.ApproveProperties;
 import com.dragonsoft.duceap.base.exception.ApplicationException;
 import com.dragonsoft.smtools.loader.SMFactory;
@@ -11,7 +10,6 @@ import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-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;
@@ -81,21 +79,4 @@ public class ApproveConfig {
         }
     }
 
-
-    @Bean
-    public ProofsFilter proofsFilter() {
-        return new ProofsFilter();
-    }
-
-    @Bean
-    public FilterRegistrationBean<ProofsFilter> filterRegistrationBean() {
-        FilterRegistrationBean<ProofsFilter> filterRegistrationBean = new FilterRegistrationBean<>();
-        filterRegistrationBean.setFilter(proofsFilter());
-        filterRegistrationBean.addUrlPatterns("/api/v1/*");
-        filterRegistrationBean.addUrlPatterns("/api/v2/*");
-        filterRegistrationBean.addUrlPatterns("/v1/*");
-        filterRegistrationBean.setName("proofsFilter");
-        return filterRegistrationBean;
-    }
-
 }

+ 48 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/config/ProofConfiguration.java

@@ -0,0 +1,48 @@
+package com.dragonsoft.dcuc.approve.config;
+
+import com.dragonsoft.dcuc.approve.filter.CheckProofsFilter;
+import com.dragonsoft.dcuc.approve.filter.cache.SecurityAppCache;
+import com.dragonsoft.dcuc.approve.filter.cache.SecurityUserCache;
+import com.dragonsoft.dcuc.approve.properties.ProofStarterProperties;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * <p>
+ * DCUC配置类
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2021/9/3
+ */
+@Configuration
+public class ProofConfiguration {
+
+    @Bean
+    public SecurityUserCache securityUserCache(ProofStarterProperties proofStarterProperties) {
+        return new SecurityUserCache(proofStarterProperties);
+    }
+
+    @Bean
+    public SecurityAppCache appCache(ProofStarterProperties proofStarterProperties) {
+        return new SecurityAppCache(proofStarterProperties);
+    }
+
+    @Bean
+    public CheckProofsFilter proofsFilter() {
+        return new CheckProofsFilter();
+    }
+
+    @Bean
+    public FilterRegistrationBean<CheckProofsFilter> filterRegistrationBean() {
+        FilterRegistrationBean<CheckProofsFilter> filterRegistrationBean = new FilterRegistrationBean<>();
+        filterRegistrationBean.setFilter(proofsFilter());
+        filterRegistrationBean.addUrlPatterns("/api/v1/*");
+        filterRegistrationBean.addUrlPatterns("/api/v2/*");
+        filterRegistrationBean.addUrlPatterns("/v1/*");
+        filterRegistrationBean.setName("proofsFilter");
+        return filterRegistrationBean;
+    }
+
+}

+ 3 - 3
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/event/ApproveEventPublish.java

@@ -1,13 +1,13 @@
 package com.dragonsoft.dcuc.approve.event;
 
-import com.dragonsoft.dcuc.approve.dto.ApproveLogDTO;
+import com.dragonsoft.dcuc.approve.model.dto.ApproveLogDTO;
 import com.dragonsoft.dcuc.approve.event.event.ApproveFinalResultEvent;
 import com.dragonsoft.dcuc.approve.event.event.ApproveLogEvent;
 import com.dragonsoft.dcuc.approve.event.event.ApproveRiskLogEvent;
 import com.dragonsoft.dcuc.approve.event.event.AuditApproveOperateLogEvent;
 import com.dragonsoft.dcuc.approve.model.RiskLog;
-import com.dragonsoft.dcuc.approve.model.vo.ApproveMessageInfoDTO;
-import com.dragonsoft.dcuc.approve.model.vo.QmOperateLogDTO;
+import com.dragonsoft.dcuc.approve.model.dto.ApproveMessageInfoDTO;
+import com.dragonsoft.dcuc.approve.model.dto.QmOperateLogDTO;
 import org.springframework.beans.BeansException;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContextAware;

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/event/event/ApproveFinalResultEvent.java

@@ -1,6 +1,6 @@
 package com.dragonsoft.dcuc.approve.event.event;
 
-import com.dragonsoft.dcuc.approve.model.vo.ApproveMessageInfoDTO;
+import com.dragonsoft.dcuc.approve.model.dto.ApproveMessageInfoDTO;
 import org.springframework.context.ApplicationEvent;
 
 /**

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/event/event/ApproveLogEvent.java

@@ -1,6 +1,6 @@
 package com.dragonsoft.dcuc.approve.event.event;
 
-import com.dragonsoft.dcuc.approve.dto.ApproveLogDTO;
+import com.dragonsoft.dcuc.approve.model.dto.ApproveLogDTO;
 import org.springframework.context.ApplicationEvent;
 
 /**

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/event/event/AuditApproveOperateLogEvent.java

@@ -1,6 +1,6 @@
 package com.dragonsoft.dcuc.approve.event.event;
 
-import com.dragonsoft.dcuc.approve.model.vo.QmOperateLogDTO;
+import com.dragonsoft.dcuc.approve.model.dto.QmOperateLogDTO;
 import org.springframework.context.ApplicationEvent;
 
 /**

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/event/listener/ApproveLogListener.java

@@ -1,7 +1,7 @@
 package com.dragonsoft.dcuc.approve.event.listener;
 
 import com.dragonsoft.dcuc.approve.business.IApproveLogBusiness;
-import com.dragonsoft.dcuc.approve.dto.ApproveLogDTO;
+import com.dragonsoft.dcuc.approve.model.dto.ApproveLogDTO;
 import com.dragonsoft.dcuc.approve.event.event.ApproveLogEvent;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationListener;

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/event/listener/ApproveOperateLogEventListener.java

@@ -5,7 +5,7 @@ import com.dragonsoft.auditlog.collection.qmtj.LogSendComponent;
 import com.dragonsoft.auditlog.collection.qmtj.pojo.req.ApproveBusLog;
 import com.dragonsoft.dcuc.approve.enumresources.QmApproveTypeEnum;
 import com.dragonsoft.dcuc.approve.event.event.AuditApproveOperateLogEvent;
-import com.dragonsoft.dcuc.approve.model.vo.QmOperateLogDTO;
+import com.dragonsoft.dcuc.approve.model.dto.QmOperateLogDTO;
 import com.dragonsoft.dcuc.approve.properties.ApproveProperties;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationListener;

+ 3 - 3
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/event/listener/DcmsSendFinalResultListener.java

@@ -4,8 +4,8 @@ import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.dragoninfo.duceap.commons.util.kafka.KafkaServer;
 import com.dragonsoft.dcuc.approve.event.event.ApproveFinalResultEvent;
-import com.dragonsoft.dcuc.approve.model.vo.ApprovalInfoMsgItemDTO;
-import com.dragonsoft.dcuc.approve.model.vo.ApproveMessageInfoDTO;
+import com.dragonsoft.dcuc.approve.model.dto.ApprovalInfoMsgItemDTO;
+import com.dragonsoft.dcuc.approve.model.dto.ApproveMessageInfoDTO;
 import com.dragonsoft.dcuc.approve.properties.ApproveProperties;
 import com.dragonsoft.dcuc.approve.properties.KafkaProperties;
 import com.dragonsoft.duceap.commons.util.UUIDUtils;
@@ -72,7 +72,7 @@ public class DcmsSendFinalResultListener implements ApplicationListener<ApproveF
         String processInstanceId = approveMessageInfoDTO.getProcessInstanceId();
         String approveNo = approveMessageInfoDTO.getApproveNo();
         String sourceAppCode = approveMessageInfoDTO.getSourceAppCode();
-        ApprovalInfoMsgItemDTO approvalInfoMsgItemDTO = approveMessageInfoDTO.getApproveInfo();
+        ApprovalInfoMsgItemDTO approvalInfoMsgItemDTO = approveMessageInfoDTO.getApprovalInfoMsgItemDTO();
 
         if (StrUtil.isNotBlank(callbackUrl)) {
             log.info("审批单:{} 有设置回调地址,不发送审批结果回调消息", approveNo);

+ 4 - 4
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/event/listener/HttpCallbackSendFinalResultListener.java

@@ -2,14 +2,14 @@ package com.dragonsoft.dcuc.approve.event.listener;
 
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
-import com.dragonsoft.dcuc.approve.business.INoticeBusiness;
+import com.dragonsoft.dcuc.approve.business.external.INoticeBusiness;
 import com.dragonsoft.dcuc.approve.enumresources.ApproveWorkFlowOperationEnum;
 import com.dragonsoft.dcuc.approve.enumresources.ZeroTrustApproveEndEnum;
 import com.dragonsoft.dcuc.approve.enumresources.ZeroTrustEndFlagEnum;
 import com.dragonsoft.dcuc.approve.event.event.ApproveFinalResultEvent;
 import com.dragonsoft.dcuc.approve.model.req.v3.ZeroTrustApproveCallbackReqV3VO;
-import com.dragonsoft.dcuc.approve.model.vo.ApprovalInfoMsgItemDTO;
-import com.dragonsoft.dcuc.approve.model.vo.ApproveMessageInfoDTO;
+import com.dragonsoft.dcuc.approve.model.dto.ApprovalInfoMsgItemDTO;
+import com.dragonsoft.dcuc.approve.model.dto.ApproveMessageInfoDTO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationListener;
@@ -39,7 +39,7 @@ public class HttpCallbackSendFinalResultListener implements ApplicationListener<
 
         ApproveMessageInfoDTO approveMessageInfoDTO = event.getApproveMessageInfoDTO();
         String processInstanceId = approveMessageInfoDTO.getProcessInstanceId();
-        ApprovalInfoMsgItemDTO approvalInfoMsgItemDTO = approveMessageInfoDTO.getApproveInfo();
+        ApprovalInfoMsgItemDTO approvalInfoMsgItemDTO = approveMessageInfoDTO.getApprovalInfoMsgItemDTO();
         ApproveWorkFlowOperationEnum approveResult = approveMessageInfoDTO.getApproveResult();
         String approveNo = approveMessageInfoDTO.getApproveNo();
 

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/event/listener/RzySyslogSendRiskInfoEventListener.java

@@ -2,7 +2,7 @@ package com.dragonsoft.dcuc.approve.event.listener;
 
 import com.dragonsoft.dcuc.approve.constants.ApproveBeanConstants;
 import com.dragonsoft.dcuc.approve.constants.ApproveConstants;
-import com.dragonsoft.dcuc.approve.dto.RzyRiskLogDTO;
+import com.dragonsoft.dcuc.approve.model.dto.RzyRiskLogDTO;
 import com.dragonsoft.dcuc.approve.event.event.ApproveRiskLogEvent;
 import com.dragonsoft.dcuc.approve.model.RiskLog;
 import com.fasterxml.jackson.core.JsonProcessingException;

+ 46 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/event/listener/SyncToBuSendFinalResultListener.java

@@ -0,0 +1,46 @@
+package com.dragonsoft.dcuc.approve.event.listener;
+
+import com.dragoninfo.dcuc.common.utils.ResponseUtil;
+import com.dragonsoft.dcuc.approve.business.external.IBuSyncBusiness;
+import com.dragonsoft.dcuc.approve.enumresources.ApproveWorkFlowOperationEnum;
+import com.dragonsoft.dcuc.approve.event.event.ApproveFinalResultEvent;
+import com.dragonsoft.dcuc.approve.model.dto.ApproveMessageInfoDTO;
+import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationListener;
+import org.springframework.stereotype.Component;
+
+/**
+ * <p>
+ * 审批结束后同步到BU
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/11/13
+ */
+@Slf4j
+@Component
+public class SyncToBuSendFinalResultListener implements ApplicationListener<ApproveFinalResultEvent> {
+
+    private IBuSyncBusiness buSyncBusiness;
+
+    @Autowired
+    public void setBuSyncBusiness(IBuSyncBusiness buSyncBusiness) {
+        this.buSyncBusiness = buSyncBusiness;
+    }
+
+    @Override
+    public void onApplicationEvent(ApproveFinalResultEvent event) {
+        ApproveMessageInfoDTO approveMessageInfoDTO = event.getApproveMessageInfoDTO();
+        ApproveWorkFlowOperationEnum approveResult = approveMessageInfoDTO.getApproveResult();
+
+        if (approveResult.equals(ApproveWorkFlowOperationEnum.COMPLETE_AGREE)) {
+            ResponseStatus responseStatus = buSyncBusiness.syncToBu(approveMessageInfoDTO);
+            if (ResponseUtil.isFail(responseStatus)) {
+                log.error("sync to bu error: {}", responseStatus.getMessage());
+            }
+        }
+
+    }
+}

+ 10 - 10
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/ApproveFacade.java

@@ -4,26 +4,26 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.dragoninfo.dcuc.common.utils.ResponseUtil;
 import com.dragonsoft.dcuc.approve.business.IApproveTipsBusiness;
-import com.dragonsoft.dcuc.approve.business.IDcucAuthBusiness;
+import com.dragonsoft.dcuc.approve.business.external.IDcucAuthBusiness;
 import com.dragonsoft.dcuc.approve.business.IWorkFlowBusiness;
 import com.dragonsoft.dcuc.approve.constants.ApproveConstants;
-import com.dragonsoft.dcuc.approve.dto.OperateReqDTO;
-import com.dragonsoft.dcuc.approve.dto.ResourceInfoDTO;
+import com.dragonsoft.dcuc.approve.model.dto.OperateReqDTO;
+import com.dragonsoft.dcuc.approve.model.dto.ResourceInfoDTO;
 import com.dragonsoft.dcuc.approve.enumresources.ApproveWorkFlowOperationEnum;
 import com.dragonsoft.dcuc.approve.enumresources.ApproveWorkFlowTaskStateEnum;
 import com.dragonsoft.dcuc.approve.enumresources.FlowTypeEnum;
 import com.dragonsoft.dcuc.approve.enumresources.PageTypeEnum;
-import com.dragonsoft.dcuc.approve.model.ApprovalInfo;
+import com.dragonsoft.dcuc.approve.model.dto.ApprovalInfoDTO;
 import com.dragonsoft.dcuc.approve.model.ApproveCirculationInfo;
 import com.dragonsoft.dcuc.approve.model.ApproveRecordInfo;
 import com.dragonsoft.dcuc.approve.model.req.*;
 import com.dragonsoft.dcuc.approve.model.resp.*;
 import com.dragonsoft.dcuc.approve.model.vo.ApproveTaskRequestVo;
-import com.dragonsoft.dcuc.approve.model.vo.TaskRequestUserInfoDTO;
+import com.dragonsoft.dcuc.approve.model.dto.TaskRequestUserInfoDTO;
 import com.dragonsoft.dcuc.approve.properties.ApproveProperties;
 import com.dragonsoft.dcuc.approve.service.IApproveCirculationService;
 import com.dragonsoft.dcuc.approve.service.IApproveRecordService;
-import com.dragonsoft.dcuc.approve.service.IApproveService;
+import com.dragonsoft.dcuc.approve.business.IApproveCommonBusiness;
 import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.base.entity.security.BaseSecurityUser;
@@ -45,7 +45,7 @@ import java.util.List;
 @RestController
 public class ApproveFacade implements IApproveFacade {
 
-    private IApproveService approveService;
+    private IApproveCommonBusiness approveService;
 
     private IWorkFlowBusiness workFlowBusiness;
 
@@ -65,7 +65,7 @@ public class ApproveFacade implements IApproveFacade {
     }
 
     @Autowired
-    public void setApproveService(IApproveService approveService) {
+    public void setApproveService(IApproveCommonBusiness approveService) {
         this.approveService = approveService;
     }
 
@@ -155,8 +155,8 @@ public class ApproveFacade implements IApproveFacade {
         }
         String flowType = approveRecordInfo.getFlowType();
         String applicantIdcard = approveRecordInfo.getApplicantIdcard();
-        ApprovalInfo approvalInfo = approveRecordInfo.toApprovalInfo();
-        ResourceInfoDTO resourceInfoVo = approvalInfo.getResourceInfoVo();
+        ApprovalInfoDTO approvalInfoDTO = approveRecordInfo.toApprovalInfo();
+        ResourceInfoDTO resourceInfoVo = approvalInfoDTO.getResourceInfoVo();
 
         FlowTypeEnum flowTypeEnum = EnumUtils.enumOf(FlowTypeEnum.class, flowType);
 

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/ApproveOrgFacade.java

@@ -1,6 +1,6 @@
 package com.dragonsoft.dcuc.approve.facade;
 
-import com.dragonsoft.dcuc.approve.business.IUserOrgSyncBusiness;
+import com.dragonsoft.dcuc.approve.business.external.IUserOrgSyncBusiness;
 import com.dragonsoft.dcuc.approve.model.resp.ApproveOrgInfoRespVO;
 import com.dragonsoft.dcuc.approve.service.IApproveOrgInfoService;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/ApproveUserFacade.java

@@ -1,6 +1,6 @@
 package com.dragonsoft.dcuc.approve.facade;
 
-import com.dragonsoft.dcuc.approve.business.IUserOrgSyncBusiness;
+import com.dragonsoft.dcuc.approve.business.external.IUserOrgSyncBusiness;
 import com.dragonsoft.dcuc.approve.model.resp.ApproveUserInfoRespVO;
 import com.dragonsoft.dcuc.approve.service.IApproveUserInfoService;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/OpsFacade.java

@@ -1,7 +1,7 @@
 package com.dragonsoft.dcuc.approve.facade;
 
 import com.dragonsoft.dcuc.approve.business.IApproveExpirationBusiness;
-import com.dragonsoft.dcuc.approve.business.IBuSyncBusiness;
+import com.dragonsoft.dcuc.approve.business.external.IBuSyncBusiness;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RestController;

+ 42 - 14
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/api/ApiV1ApproveFacade.java

@@ -5,25 +5,24 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.dragoninfo.dcuc.app.dto.ResourceRequestParamDTO;
 import com.dragoninfo.dcuc.app.facade.IResourceFacade;
 import com.dragoninfo.dcuc.common.entity.ApiSearchReq;
-import com.dragoninfo.dcuc.common.entity.Proofs;
 import com.dragoninfo.dcuc.common.utils.ResponseUtil;
 import com.dragoninfo.dcuc.common.utils.SearchableUtil;
+import com.dragoninfo.dcuc.common.utils.SecurityUserUtil;
 import com.dragonsoft.dcuc.approve.business.IApproveBusiness;
+import com.dragonsoft.dcuc.approve.business.IApproveCommonBusiness;
 import com.dragonsoft.dcuc.approve.business.IApproveUploadBusiness;
 import com.dragonsoft.dcuc.approve.business.IWorkFlowBusiness;
-import com.dragonsoft.dcuc.approve.dto.OperateReqDTO;
 import com.dragonsoft.dcuc.approve.enumresources.ApproveWorkFlowOperationEnum;
 import com.dragonsoft.dcuc.approve.enumresources.PageTypeEnum;
+import com.dragonsoft.dcuc.approve.model.dto.OperateReqDTO;
+import com.dragonsoft.dcuc.approve.model.dto.TaskRequestUserInfoDTO;
 import com.dragonsoft.dcuc.approve.model.req.ApprovalInfoReqVO;
 import com.dragonsoft.dcuc.approve.model.req.ApprovalInfoUpdateReqVO;
 import com.dragonsoft.dcuc.approve.model.req.ApproveOperateReqVO;
 import com.dragonsoft.dcuc.approve.model.req.ApproveRecordReportReqVO;
 import com.dragonsoft.dcuc.approve.model.resp.*;
 import com.dragonsoft.dcuc.approve.model.vo.ApproveTaskRequestVo;
-import com.dragonsoft.dcuc.approve.model.vo.TaskRequestUserInfoDTO;
 import com.dragonsoft.dcuc.approve.properties.ApproveProperties;
-import com.dragonsoft.dcuc.approve.service.IApproveService;
-import com.dragonsoft.dcuc.approve.threadlocal.ThreadLocalProofsHolder;
 import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.base.entity.security.BaseSecurityUser;
@@ -49,20 +48,48 @@ import java.util.Map;
 @Slf4j
 @RestController
 public class ApiV1ApproveFacade implements IApiV1ApproveFacade {
+
+    private IApproveCommonBusiness approveService;
+
+    private IResourceFacade resourceFacade;
+
+    private IApproveUploadBusiness approveUploadService;
+
+    private IWorkFlowBusiness workFlowBusiness;
+
+    private IApproveBusiness approveBusiness;
+
+    private ApproveProperties approveProperties;
+
     @Autowired
-    private IApproveService approveService;
+    public void setApproveService(IApproveCommonBusiness approveService) {
+        this.approveService = approveService;
+    }
+
     @Autowired
-    private IResourceFacade resourceFacade;
+    public void setResourceFacade(IResourceFacade resourceFacade) {
+        this.resourceFacade = resourceFacade;
+    }
+
     @Autowired
-    private IApproveUploadBusiness approveUploadService;
+    public void setApproveUploadService(IApproveUploadBusiness approveUploadService) {
+        this.approveUploadService = approveUploadService;
+    }
 
     @Autowired
-    private IWorkFlowBusiness workFlowBusiness;
+    public void setWorkFlowBusiness(IWorkFlowBusiness workFlowBusiness) {
+        this.workFlowBusiness = workFlowBusiness;
+    }
 
     @Autowired
-    private IApproveBusiness approveBusiness;
+    public void setApproveBusiness(IApproveBusiness approveBusiness) {
+        this.approveBusiness = approveBusiness;
+    }
+
     @Autowired
-    private ApproveProperties approveProperties;
+    public void setApproveProperties(ApproveProperties approveProperties) {
+        this.approveProperties = approveProperties;
+    }
 
     @Override
     public ResponseDTO<String> save(ApprovalInfoReqVO approvalInfoReqVO) {
@@ -70,6 +97,7 @@ public class ApiV1ApproveFacade implements IApiV1ApproveFacade {
         if (StrUtil.isBlank(appCode)) {
             approvalInfoReqVO.setAppCode(approveProperties.getAppCode());
         }
+        approvalInfoReqVO.setApproveTaskClass(approveProperties.getAuthTaskClass());
         return approveService.save(approvalInfoReqVO);
     }
 
@@ -189,9 +217,9 @@ public class ApiV1ApproveFacade implements IApiV1ApproveFacade {
 
     @Override
     public ResponseDTO<List<BatchTaskOperateRespVO>> batchApproveOperateType(ApiSearchReq apiSearchReq) {
-        Proofs proofs = ThreadLocalProofsHolder.getProofs();
-        String idcard = proofs.getIdcard();
-        String appCode = proofs.getAppCode();
+        BaseSecurityUser currentUser = UserContextUtils.getCurrentUser();
+        String idcard = currentUser.getIdcard();
+        String appCode = SecurityUserUtil.getSecurityAppCode();
         if (StrUtil.isBlank(idcard) || StrUtil.isBlank(appCode)) {
             return ResponseUtil.dtoFail("请传入凭据");
         }

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/api/ApiV1TokenFacade.java

@@ -1,6 +1,6 @@
 package com.dragonsoft.dcuc.approve.facade.api;
 
-import com.dragonsoft.dcuc.approve.business.IZeroTrustTokenBusiness;
+import com.dragonsoft.dcuc.approve.business.external.IZeroTrustTokenBusiness;
 import com.dragonsoft.dcuc.approve.enumresources.ZeroTrustBusinessRespEnum;
 import com.dragonsoft.dcuc.approve.model.req.v1.token.TokenReceiveVO;
 import com.dragonsoft.dcuc.approve.model.resp.v3.ZeroTrustMessageRespVO;

+ 83 - 46
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/api/ApiV2ApproveFacade.java

@@ -4,26 +4,26 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.StrUtil;
 import com.dragoninfo.dcuc.common.entity.ApiResult;
 import com.dragoninfo.dcuc.common.entity.ApiSearchReq;
-import com.dragoninfo.dcuc.common.entity.Proofs;
 import com.dragoninfo.dcuc.common.utils.ResponseUtil;
 import com.dragoninfo.dcuc.common.utils.SearchableUtil;
+import com.dragoninfo.dcuc.common.utils.SecurityUserUtil;
 import com.dragoninfo.dcuc.duceap.enums.ManageDisposeTypeEnum;
 import com.dragonsoft.dcuc.approve.business.IApproveBusiness;
-import com.dragonsoft.dcuc.approve.business.IDcucBusiness;
+import com.dragonsoft.dcuc.approve.business.IApproveCommonBusiness;
 import com.dragonsoft.dcuc.approve.business.IWorkFlowBusiness;
-import com.dragonsoft.dcuc.approve.dto.OperateReqDTO;
+import com.dragonsoft.dcuc.approve.business.external.IDcucBusiness;
 import com.dragonsoft.dcuc.approve.enumresources.*;
-import com.dragonsoft.dcuc.approve.model.ApprovalInfo;
 import com.dragonsoft.dcuc.approve.model.ApproveRecordInfo;
+import com.dragonsoft.dcuc.approve.model.dto.ApprovalInfoDTO;
+import com.dragonsoft.dcuc.approve.model.dto.OperateReqDTO;
+import com.dragonsoft.dcuc.approve.model.dto.TaskRequestUserInfoDTO;
 import com.dragonsoft.dcuc.approve.model.req.*;
 import com.dragonsoft.dcuc.approve.model.req.v2.ApproveOperateV2ReqVO;
 import com.dragonsoft.dcuc.approve.model.resp.*;
 import com.dragonsoft.dcuc.approve.model.vo.ApproveTaskRequestVo;
-import com.dragonsoft.dcuc.approve.model.vo.TaskRequestUserInfoDTO;
 import com.dragonsoft.dcuc.approve.model.vo.dcuc.OauthUserVO;
+import com.dragonsoft.dcuc.approve.properties.ApproveProperties;
 import com.dragonsoft.dcuc.approve.service.IApproveRecordService;
-import com.dragonsoft.dcuc.approve.service.IApproveService;
-import com.dragonsoft.dcuc.approve.threadlocal.ThreadLocalProofsHolder;
 import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.base.entity.security.BaseSecurityUser;
@@ -34,7 +34,6 @@ import com.dragonsoft.duceap.core.search.Searchable;
 import com.dragonsoft.duceap.core.search.enums.SearchOperator;
 import com.dragonsoft.duceap.duwf.api.model.*;
 import lombok.extern.slf4j.Slf4j;
-import org.hibernate.validator.constraints.Length;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.web.bind.annotation.RestController;
@@ -56,26 +55,54 @@ import java.util.*;
 @RestController
 public class ApiV2ApproveFacade implements IApiV2ApproveFacade {
 
+    private IApproveCommonBusiness approveService;
+
+    private IApproveRecordService approveRecordService;
+
+    private IApproveBusiness approveBusiness;
+
+    private IWorkFlowBusiness workFlowBusiness;
+
+    private IDcucBusiness dcucBusiness;
+
+    private ApproveProperties approveProperties;
+
     @Autowired
-    private IApproveService approveService;
+    public void setApproveService(IApproveCommonBusiness approveService) {
+        this.approveService = approveService;
+    }
 
     @Autowired
-    private IApproveRecordService approveRecordService;
+    public void setApproveRecordService(IApproveRecordService approveRecordService) {
+        this.approveRecordService = approveRecordService;
+    }
 
     @Autowired
-    private IApproveBusiness approveBusiness;
+    public void setApproveBusiness(IApproveBusiness approveBusiness) {
+        this.approveBusiness = approveBusiness;
+    }
 
     @Autowired
-    private IWorkFlowBusiness workFlowBusiness;
+    public void setWorkFlowBusiness(IWorkFlowBusiness workFlowBusiness) {
+        this.workFlowBusiness = workFlowBusiness;
+    }
 
     @Autowired
-    private IDcucBusiness dcucBusiness;
+    public void setDcucBusiness(IDcucBusiness dcucBusiness) {
+        this.dcucBusiness = dcucBusiness;
+    }
+
+    @Autowired
+    public void setApproveProperties(ApproveProperties approveProperties) {
+        this.approveProperties = approveProperties;
+    }
 
     @Override
     public ResponseDTO<String> approveAuthorities(ApprovalInfoAuthReqVO approvalInfoAuthReqVO) {
-        Proofs proofs = ThreadLocalProofsHolder.getProofs();
-        String idcard = proofs.getIdcard();
-        String appCode = proofs.getAppCode();
+
+        BaseSecurityUser currentUser = UserContextUtils.getCurrentUser();
+        String idcard = currentUser.getIdcard();
+        String appCode = SecurityUserUtil.getSecurityAppCode();
         if (StrUtil.isBlank(idcard) || StrUtil.isBlank(appCode)) {
             return ResponseUtil.dtoFail("请传入凭据");
         }
@@ -121,13 +148,14 @@ public class ApiV2ApproveFacade implements IApiV2ApproveFacade {
             return ResponseUtil.dtoFail(checkResourceStatus.getMessage());
         }
 
-        @NotBlank @Length(max = 18, message = "请输入正确的身份证号") String applicantIdcard = approvalInfoReqVO.getApplicantIdcard();
+        String applicantIdcard = approvalInfoReqVO.getApplicantIdcard();
 
         OauthUserVO oauthUserVO = dcucBusiness.getOauthUserInfoByIdcard(applicantIdcard);
         if (oauthUserVO == null) {
             return ResponseUtil.dtoFail("申请人不存在");
         }
 
+        approvalInfoReqVO.setApproveTaskClass(approveProperties.getAuthTaskClass());
         ApproveRecordInfo approveRecordInfo = approveService.saveBase(approvalInfoReqVO, ManageDisposeTypeEnum.INSERT, new Date());
 
         String approveNo = approveRecordInfo.getApproveNo();
@@ -137,9 +165,10 @@ public class ApiV2ApproveFacade implements IApiV2ApproveFacade {
 
     @Override
     public ResponseStatus updateApprovesAuthorities(ApprovalInfoAuthUpdateReqVO approvalInfoAuthUpdateReqVO) {
-        Proofs proofs = ThreadLocalProofsHolder.getProofs();
-        String idcard = proofs.getIdcard();
-        String appCode = proofs.getAppCode();
+
+        BaseSecurityUser currentUser = UserContextUtils.getCurrentUser();
+        String idcard = currentUser.getIdcard();
+        String appCode = SecurityUserUtil.getSecurityAppCode();
         if (StrUtil.isBlank(idcard) || StrUtil.isBlank(appCode)) {
             return ResponseStatus.fail("请传入凭据");
         }
@@ -194,9 +223,10 @@ public class ApiV2ApproveFacade implements IApiV2ApproveFacade {
 
     @Override
     public ApiResult approvesSearch(ApiSearchReq apiSearchReq) {
-        Proofs proofs = ThreadLocalProofsHolder.getProofs();
-        String idcard = proofs.getIdcard();
-        String appCode = proofs.getAppCode();
+
+        BaseSecurityUser currentUser = UserContextUtils.getCurrentUser();
+        String idcard = currentUser.getIdcard();
+        String appCode = SecurityUserUtil.getSecurityAppCode();
         if (StrUtil.isBlank(idcard) || StrUtil.isBlank(appCode)) {
             return ApiResult.setFailMessage("请传入凭据");
         }
@@ -242,8 +272,8 @@ public class ApiV2ApproveFacade implements IApiV2ApproveFacade {
             return ResponseUtil.dtoFail("申请表单不存在");
         }
 
-        ApprovalInfo approvalInfo = approveRecordInfo.toApprovalInfo();
-        ApprovalInfoRespVO approvalInfoRespVO = approveBusiness.fillTaskInfoToApplyInfo(approvalInfo);
+        ApprovalInfoDTO approvalInfoDTO = approveRecordInfo.toApprovalInfo();
+        ApprovalInfoRespVO approvalInfoRespVO = approveBusiness.fillTaskInfoToApplyInfo(approvalInfoDTO);
 
         ApprovalInfoV2RespVO approvalInfoV2RespVO = new ApprovalInfoV2RespVO();
         BeanUtil.copyProperties(approvalInfoRespVO, approvalInfoV2RespVO);
@@ -252,9 +282,10 @@ public class ApiV2ApproveFacade implements IApiV2ApproveFacade {
 
     @Override
     public ResponseStatus recallApprove(String approveNo) {
-        Proofs proofs = ThreadLocalProofsHolder.getProofs();
-        String idcard = proofs.getIdcard();
-        String appCode = proofs.getAppCode();
+
+        BaseSecurityUser currentUser = UserContextUtils.getCurrentUser();
+        String idcard = currentUser.getIdcard();
+        String appCode = SecurityUserUtil.getSecurityAppCode();
         if (StrUtil.isBlank(idcard) || StrUtil.isBlank(appCode)) {
             return ResponseStatus.fail("请传入凭据");
         }
@@ -302,9 +333,10 @@ public class ApiV2ApproveFacade implements IApiV2ApproveFacade {
 
     @Override
     public ResponseStatus deleteApprove(String approveNo) {
-        Proofs proofs = ThreadLocalProofsHolder.getProofs();
-        String idcard = proofs.getIdcard();
-        String appCode = proofs.getAppCode();
+
+        BaseSecurityUser currentUser = UserContextUtils.getCurrentUser();
+        String idcard = currentUser.getIdcard();
+        String appCode = SecurityUserUtil.getSecurityAppCode();
         if (StrUtil.isBlank(idcard) || StrUtil.isBlank(appCode)) {
             return ResponseStatus.fail("请传入凭据");
         }
@@ -331,9 +363,10 @@ public class ApiV2ApproveFacade implements IApiV2ApproveFacade {
 
     @Override
     public ResponseDTO<List<ApproveCommentVo>> approveComments(String approveNo) {
-        Proofs proofs = ThreadLocalProofsHolder.getProofs();
-        String idcard = proofs.getIdcard();
-        String appCode = proofs.getAppCode();
+
+        BaseSecurityUser currentUser = UserContextUtils.getCurrentUser();
+        String idcard = currentUser.getIdcard();
+        String appCode = SecurityUserUtil.getSecurityAppCode();
         if (StrUtil.isBlank(idcard) || StrUtil.isBlank(appCode)) {
             return ResponseUtil.dtoFail("请传入凭据");
         }
@@ -355,9 +388,10 @@ public class ApiV2ApproveFacade implements IApiV2ApproveFacade {
 
     @Override
     public ResponseDTO<TraceProcessAndOverVo> processPic(String approveNo) {
-        Proofs proofs = ThreadLocalProofsHolder.getProofs();
-        String idcard = proofs.getIdcard();
-        String appCode = proofs.getAppCode();
+
+        BaseSecurityUser currentUser = UserContextUtils.getCurrentUser();
+        String idcard = currentUser.getIdcard();
+        String appCode = SecurityUserUtil.getSecurityAppCode();
         if (StrUtil.isBlank(idcard) || StrUtil.isBlank(appCode)) {
             return ResponseUtil.dtoFail("请传入凭据");
         }
@@ -380,9 +414,10 @@ public class ApiV2ApproveFacade implements IApiV2ApproveFacade {
 
     @Override
     public ResponseDTO<ActivityNodeInfoVo> processPicDetail(String approveNo, String taskDefinitionCode, String statusType) {
-        Proofs proofs = ThreadLocalProofsHolder.getProofs();
-        String idcard = proofs.getIdcard();
-        String appCode = proofs.getAppCode();
+
+        BaseSecurityUser currentUser = UserContextUtils.getCurrentUser();
+        String idcard = currentUser.getIdcard();
+        String appCode = SecurityUserUtil.getSecurityAppCode();
         if (StrUtil.isBlank(idcard) || StrUtil.isBlank(appCode)) {
             return ResponseUtil.dtoFail("请传入凭据");
         }
@@ -404,9 +439,10 @@ public class ApiV2ApproveFacade implements IApiV2ApproveFacade {
 
     @Override
     public ResponseDTO<List<ProcessStatusVo>> processStatus(String approveNo) {
-        Proofs proofs = ThreadLocalProofsHolder.getProofs();
-        String idcard = proofs.getIdcard();
-        String appCode = proofs.getAppCode();
+
+        BaseSecurityUser currentUser = UserContextUtils.getCurrentUser();
+        String idcard = currentUser.getIdcard();
+        String appCode = SecurityUserUtil.getSecurityAppCode();
         if (StrUtil.isBlank(idcard) || StrUtil.isBlank(appCode)) {
             return ResponseUtil.dtoFail("请传入凭据");
         }
@@ -429,9 +465,10 @@ public class ApiV2ApproveFacade implements IApiV2ApproveFacade {
 
     @Override
     public ResponseDTO<TaskOperateRespVO> approveOperateType(String approveNo, String pageType) {
-        Proofs proofs = ThreadLocalProofsHolder.getProofs();
-        String idcard = proofs.getIdcard();
-        String appCode = proofs.getAppCode();
+
+        BaseSecurityUser currentUser = UserContextUtils.getCurrentUser();
+        String idcard = currentUser.getIdcard();
+        String appCode = SecurityUserUtil.getSecurityAppCode();
         if (StrUtil.isBlank(idcard) || StrUtil.isBlank(appCode)) {
             return ResponseUtil.dtoFail("请传入凭据");
         }

+ 64 - 45
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/api/v3/ApiV3ApproveFacade.java

@@ -3,18 +3,20 @@ package com.dragonsoft.dcuc.approve.facade.api.v3;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.ObjectUtil;
-import com.dragoninfo.dcuc.common.entity.Proofs;
 import com.dragoninfo.dcuc.common.utils.LangUtil;
 import com.dragoninfo.dcuc.common.utils.ResponseUtil;
 import com.dragoninfo.dcuc.duceap.enums.ManageDisposeTypeEnum;
-import com.dragonsoft.dcuc.approve.business.IApproveApiBusiness;
-import com.dragonsoft.dcuc.approve.business.IBimBusiness;
-import com.dragonsoft.dcuc.approve.business.IDcucBusiness;
+import com.dragonsoft.dcuc.approve.business.IApproveCommonBusiness;
+import com.dragonsoft.dcuc.approve.business.ISecurityUserBusiness;
 import com.dragonsoft.dcuc.approve.business.IWorkFlowBusiness;
-import com.dragonsoft.dcuc.approve.dto.OperateReqDTO;
+import com.dragonsoft.dcuc.approve.business.api.IApiV3ApproveBusiness;
+import com.dragonsoft.dcuc.approve.business.api.IApproveApiBusiness;
+import com.dragonsoft.dcuc.approve.business.external.IBimBusiness;
 import com.dragonsoft.dcuc.approve.enumresources.*;
 import com.dragonsoft.dcuc.approve.model.ApproveRecordInfo;
 import com.dragonsoft.dcuc.approve.model.ApproveTaskClass;
+import com.dragonsoft.dcuc.approve.model.dto.OperateReqDTO;
+import com.dragonsoft.dcuc.approve.model.dto.TaskRequestUserInfoDTO;
 import com.dragonsoft.dcuc.approve.model.req.ApprovalInfoReqVO;
 import com.dragonsoft.dcuc.approve.model.req.ResourceInfoReqVO;
 import com.dragonsoft.dcuc.approve.model.req.v3.ZeroTrustApproveCreateReqV3VO;
@@ -26,14 +28,12 @@ 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 com.dragonsoft.dcuc.approve.model.vo.ApproveTaskRequestVo;
-import com.dragonsoft.dcuc.approve.model.vo.TaskRequestUserInfoDTO;
-import com.dragonsoft.dcuc.approve.model.vo.dcuc.ApiOrgResultVo;
-import com.dragonsoft.dcuc.approve.model.vo.dcuc.OauthUserVO;
 import com.dragonsoft.dcuc.approve.service.IApproveRecordService;
-import com.dragonsoft.dcuc.approve.service.IApproveService;
 import com.dragonsoft.dcuc.approve.service.IApproveTaskClassService;
-import com.dragonsoft.dcuc.approve.threadlocal.ThreadLocalProofsHolder;
 import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
+import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
+import com.dragonsoft.duceap.base.entity.security.SecurityUser;
+import com.dragonsoft.duceap.base.utils.UserContextUtils;
 import com.dragonsoft.duceap.commons.util.enums.EnumUtils;
 import com.dragonsoft.duceap.commons.util.json.JsonUtils;
 import com.dragonsoft.duceap.duwf.api.model.TaskRequest;
@@ -59,7 +59,7 @@ import java.util.Map;
 @RestController
 public class ApiV3ApproveFacade implements IApiV3ApproveFacade {
 
-    private IApproveService approveService;
+    private IApproveCommonBusiness approveService;
 
     private IApproveRecordService approveRecordService;
 
@@ -69,18 +69,25 @@ public class ApiV3ApproveFacade implements IApiV3ApproveFacade {
 
     private IApproveApiBusiness approveApiBusiness;
 
-    private IDcucBusiness dcucBusiness;
-
     private IApproveTaskClassService approveTaskClassService;
 
+    private IApiV3ApproveBusiness apiV3ApproveBusiness;
+
+    private ISecurityUserBusiness securityUserBusiness;
+
     @Autowired
-    public void setApproveTaskClassService(IApproveTaskClassService approveTaskClassService) {
-        this.approveTaskClassService = approveTaskClassService;
+    public void setSecurityUserBusiness(ISecurityUserBusiness securityUserBusiness) {
+        this.securityUserBusiness = securityUserBusiness;
     }
 
     @Autowired
-    public void setDcucBusiness(IDcucBusiness dcucBusiness) {
-        this.dcucBusiness = dcucBusiness;
+    public void setApiV3ApproveBusiness(IApiV3ApproveBusiness apiV3ApproveBusiness) {
+        this.apiV3ApproveBusiness = apiV3ApproveBusiness;
+    }
+
+    @Autowired
+    public void setApproveTaskClassService(IApproveTaskClassService approveTaskClassService) {
+        this.approveTaskClassService = approveTaskClassService;
     }
 
     @Autowired
@@ -89,7 +96,7 @@ public class ApiV3ApproveFacade implements IApiV3ApproveFacade {
     }
 
     @Autowired
-    public void setApproveService(IApproveService approveService) {
+    public void setApproveService(IApproveCommonBusiness approveService) {
         this.approveService = approveService;
     }
 
@@ -128,12 +135,16 @@ public class ApiV3ApproveFacade implements IApiV3ApproveFacade {
             return ZeroTrustResultDataVO.operateFailMessage("验证签名出错");
         }
 
-        if (!approveApiBusiness.checkTaskId(approveTaskId)) {
+        if (!approveApiBusiness.isStanderTaskNo(approveTaskId)) {
             return ZeroTrustResultDataVO.operateFailMessage("taskId格式出错");
         }
 
-        Map<String, List<Map<String, String>>> bo = zeroTrustApproveCreateReqV3VO.getBo();
-        Map<String, String> bizData = zeroTrustApproveCreateReqV3VO.getBizData();
+        Map<String, List<Map<String, Object>>> bo = zeroTrustApproveCreateReqV3VO.getBo();
+        Map<String, Object> bizData = zeroTrustApproveCreateReqV3VO.getBizData();
+        ResponseStatus checkBizDataStatus = apiV3ApproveBusiness.checkBizData(bizData);
+        if (ResponseUtil.isFail(checkBizDataStatus)) {
+            return ZeroTrustResultDataVO.operateFailMessage("bizData中key值:" + checkBizDataStatus.getMessage());
+        }
 
         //  查询应用令牌信息,获取人员信息
         ZeroTrustAppTokenInfoRespVO appTokenInfo = bimBusiness.getAppTokenInfo(appTokenId);
@@ -141,31 +152,24 @@ public class ApiV3ApproveFacade implements IApiV3ApproveFacade {
             return ZeroTrustResultDataVO.resultEnumMessage(ZeroTrustBusinessRespEnum.TOKEN_FAIL);
         }
         ZeroTrustAppItemUserTokenInfoRespVO userToken = appTokenInfo.getUserToken();
-        String userTokenId = userToken.getUserTokenId();
         String appCode = appTokenInfo.getAppId();
         String applicantIdcard = userToken.getPid();
         String applicantName = userToken.getName();
         String applicantIp = userToken.getIp();
+        String orgCode = userToken.getOrgCode();
 
-        OauthUserVO oauthUserVO = dcucBusiness.getOauthUserInfoByIdcard(applicantIdcard);
-        if (ObjectUtil.isNotNull(oauthUserVO)) {
-            applicantName = oauthUserVO.getName();
+        ResponseDTO<SecurityUser> securityUserResp = securityUserBusiness.getSecurityUser(applicantIdcard, appCode);
+        if (ResponseUtil.isFail(securityUserResp)) {
+            log.error("令牌信息异常:{}", securityUserResp.getMessage());
+            return ZeroTrustResultDataVO.operateFailMessage("令牌信息异常");
         }
 
-        String applicantOrgCode = userToken.getOrgCode();
-
-        Proofs proofs = Proofs.builder()
-                .appCode(appCode)
-                .idcard(applicantIdcard)
-                .userToken(userTokenId).appToken(appTokenId).build();
-        ThreadLocalProofsHolder.setPoofs(proofs);
+        SecurityUser securityUser = ResponseUtil.getResult(securityUserResp);
+        securityUserBusiness.setUserExtInfo(securityUser, appTokenInfo);
+        UserContextUtils.setCurrentUser(securityUser);
 
-        String applicantOrgName = "";
+        String applicantOrgName = securityUser.getSecurityOrgName();
         String applicantPhoneNo = "";
-        ApiOrgResultVo apiOrgResultVo = dcucBusiness.orgInfo(applicantOrgCode);
-        if (ObjectUtil.isNotNull(apiOrgResultVo)) {
-            applicantOrgName = apiOrgResultVo.getFullName();
-        }
 
         // 获取processType并校验
         WorkflowProcessVo workflowProcessVo = workFlowBusiness.queryWorkflowProcessByBusinessCode(processDefId);
@@ -191,6 +195,13 @@ public class ApiV3ApproveFacade implements IApiV3ApproveFacade {
         if (MapUtil.isNotEmpty(bizData)) {
             BeanUtil.copyProperties(bizData, resourceInfoReqVO);
         }
+        String otherApplyContext = "";
+        if (MapUtil.isNotEmpty(bizData)) {
+            otherApplyContext = JsonUtils.toJSONString(bizData);
+        }
+
+        Date startTime = apiV3ApproveBusiness.getBizData(bizData, ReqBizDataEnum.BIZ_TERM_START);
+        Date startEnd = apiV3ApproveBusiness.getBizData(bizData, ReqBizDataEnum.BIZ_TERM_END);
 
         ApprovalInfoReqVO approvalInfoReqVO = new ApprovalInfoReqVO();
         approvalInfoReqVO.setProcessTitle(title);
@@ -201,10 +212,10 @@ public class ApiV3ApproveFacade implements IApiV3ApproveFacade {
         approvalInfoReqVO.setApplyReason(title + "申请");
         approvalInfoReqVO.setApplicantIdcard(applicantIdcard);
         approvalInfoReqVO.setApplicantName(applicantName);
-        approvalInfoReqVO.setApplicantOrgCode(applicantOrgCode);
+        approvalInfoReqVO.setApplicantOrgCode(orgCode);
         approvalInfoReqVO.setApplicantOrgName(applicantOrgName);
         approvalInfoReqVO.setApplicantPhoneNo(applicantPhoneNo);
-        approvalInfoReqVO.setPermissionValidType(PermissionValidTypeEnum.LONG.getValue());
+        approvalInfoReqVO.setPermissionValidType(PermissionValidTypeEnum.CUSTOM.getValue());
         approvalInfoReqVO.setOperateType(CommitTypeEnum.APPLY_COMMIT.getValue());
         approvalInfoReqVO.setResourceInfoDTO(resourceInfoReqVO);
         approvalInfoReqVO.setCallbackUrl(callbackUrl);
@@ -213,6 +224,9 @@ public class ApiV3ApproveFacade implements IApiV3ApproveFacade {
         approvalInfoReqVO.setFlowType(FlowTypeEnum.OTHER.getValue());
         approvalInfoReqVO.setApplicantIp(applicantIp);
         approvalInfoReqVO.setApplicantAppToken(appTokenId);
+        approvalInfoReqVO.setStartTime(startTime);
+        approvalInfoReqVO.setEndTime(startEnd);
+        approvalInfoReqVO.setOtherApplyContext(otherApplyContext);
 
         ApproveRecordInfo approveRecordInfo = approveService.saveBase(approvalInfoReqVO, ManageDisposeTypeEnum.INSERT, new Date());
         String processInstanceId = approveRecordInfo.getProcessInstanceId();
@@ -245,16 +259,20 @@ public class ApiV3ApproveFacade implements IApiV3ApproveFacade {
             return ZeroTrustResultDataVO.resultEnumMessage(ZeroTrustBusinessRespEnum.TOKEN_FAIL);
         }
         ZeroTrustAppItemUserTokenInfoRespVO userToken = appTokenInfo.getUserToken();
-        String userTokenId = userToken.getUserTokenId();
         String appCode = appTokenInfo.getAppId();
         String applicantIdcard = userToken.getPid();
 
-        Proofs proofs = Proofs.builder()
-                .appCode(appCode)
-                .idcard(applicantIdcard)
-                .userToken(userTokenId).appToken(appTokenId).build();
 
-        ThreadLocalProofsHolder.setPoofs(proofs);
+        ResponseDTO<SecurityUser> securityUserResp = securityUserBusiness.getSecurityUser(applicantIdcard, appCode);
+        if (ResponseUtil.isFail(securityUserResp)) {
+            log.error("令牌信息异常:{}", securityUserResp.getMessage());
+            return ZeroTrustResultDataVO.operateFailMessage("令牌信息异常");
+        }
+
+        SecurityUser securityUser = ResponseUtil.getResult(securityUserResp);
+        securityUserBusiness.setUserExtInfo(securityUser, appTokenInfo);
+        UserContextUtils.setCurrentUser(securityUser);
+
 
         String idcard = userToken.getPid();
         ApproveRecordInfo approveRecordInfo = approveRecordService.findByProcessInstanceId(processInstId);
@@ -285,4 +303,5 @@ public class ApiV3ApproveFacade implements IApiV3ApproveFacade {
 
         return ZeroTrustMessageRespVO.messageEnumMessage(ZeroTrustBusinessRespEnum.SUCCESS);
     }
+
 }

+ 0 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/api/v3/ApiV3SecurityPolicyFacade.java

@@ -1,6 +1,5 @@
 package com.dragonsoft.dcuc.approve.facade.api.v3;
 
-import com.dragonsoft.dcuc.approve.business.IApproveApiBusiness;
 import com.dragonsoft.dcuc.approve.constants.ApproveBeanConstants;
 import com.dragonsoft.dcuc.approve.enumresources.ZeroTrustBusinessRespEnum;
 import com.dragonsoft.dcuc.approve.model.req.v3.rzy.RzyRiskInfoDetailReqVO;

+ 23 - 14
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/filter/ProofsFilter.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/filter/CheckProofsFilter.java

@@ -2,14 +2,17 @@ package com.dragonsoft.dcuc.approve.filter;
 
 import cn.hutool.core.util.StrUtil;
 import com.dragoninfo.dcuc.common.entity.Proofs;
+import com.dragoninfo.dcuc.common.utils.ResponseUtil;
+import com.dragonsoft.dcuc.approve.business.ISecurityUserBusiness;
 import com.dragonsoft.dcuc.approve.properties.ApproveProperties;
-import com.dragonsoft.dcuc.approve.threadlocal.ThreadLocalProofsHolder;
 import com.dragonsoft.dcuc.approve.utils.ProofsUtil;
+import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
+import com.dragonsoft.duceap.base.entity.security.SecurityUser;
+import com.dragonsoft.duceap.base.utils.UserContextUtils;
+import com.dragonsoft.duceap.core.spring.SpringUtils;
 import com.dragonsoft.duceap.web.utils.ResponseUtils;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
 import org.springframework.web.filter.OncePerRequestFilter;
 
 import javax.servlet.FilterChain;
@@ -26,33 +29,39 @@ import java.io.IOException;
  * @author huangzqa
  * @date 2021/8/18
  */
-@Component
 @Slf4j
-public class ProofsFilter extends OncePerRequestFilter {
-
-    @Autowired
-    private ApproveProperties approveProperties;
+public class CheckProofsFilter extends OncePerRequestFilter {
 
     @Override
     protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
-
-        ThreadLocalProofsHolder.remove();
+        ApproveProperties approveProperties = SpringUtils.getBean(ApproveProperties.class);
 
         String defaultAppCode = approveProperties.getAppCode();
         Proofs proofs = ProofsUtil.generalProofs(request, defaultAppCode);
 
-        ThreadLocalProofsHolder.setPoofs(proofs);
-
         String idcard = proofs.getIdcard();
         String appCode = proofs.getAppCode();
-        if (StrUtil.isBlank(idcard) || StrUtil.isBlank(appCode)) {
+
+        if (!(StrUtil.isNotBlank(idcard) && StrUtil.isNotBlank(appCode))) {
             ResponseStatus responseStatus = ResponseStatus.fail("请传入凭据");
             ResponseUtils.outJson(responseStatus, response);
             return;
         }
+        ISecurityUserBusiness securityUserBusiness = SpringUtils.getBean(ISecurityUserBusiness.class);
+
+        ResponseDTO<SecurityUser> securityUserResp = securityUserBusiness.getSecurityUser(idcard, appCode);
+        if (ResponseUtil.isFail(securityUserResp)) {
+            ResponseStatus responseStatus = ResponseStatus.fail(securityUserResp.getMessage());
+            ResponseUtils.outJson(responseStatus, response);
+            return;
+        }
+        SecurityUser securityUser = ResponseUtil.getResult(securityUserResp);
+
+        securityUserBusiness.setUserExtInfo(securityUser, request);
+
+        UserContextUtils.setCurrentUser(securityUser);
 
         filterChain.doFilter(request, response);
     }
 
-
 }

+ 25 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/filter/cache/ISecurityAppResolver.java

@@ -0,0 +1,25 @@
+package com.dragonsoft.dcuc.approve.filter.cache;
+
+import com.dragoninfo.dcuc.common.entity.SecurityApp;
+
+import java.util.Optional;
+
+/**
+ * <p>
+ * 获取应用信息
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2021/9/3
+ */
+public interface ISecurityAppResolver {
+
+    /**
+     * 获取应用信息
+     *
+     * @param appCode 应用代码
+     * @return 应用信息
+     */
+    Optional<SecurityApp> resolve(String appCode);
+
+}

+ 25 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/filter/cache/ISecurityUserResolver.java

@@ -0,0 +1,25 @@
+package com.dragonsoft.dcuc.approve.filter.cache;
+
+import com.dragonsoft.duceap.base.entity.security.SecurityUser;
+
+import java.util.Optional;
+
+/**
+ * <p>
+ * 获取用户信息
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2021/9/3
+ */
+public interface ISecurityUserResolver {
+
+    /**
+     * 获取用户信息
+     *
+     * @param idcard 用户外部ID
+     * @return 用户信息
+     */
+    Optional<SecurityUser> resolve(String idcard);
+
+}

+ 50 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/filter/cache/SecurityAppCache.java

@@ -0,0 +1,50 @@
+package com.dragonsoft.dcuc.approve.filter.cache;
+
+import com.dragoninfo.dcuc.common.entity.SecurityApp;
+import com.dragonsoft.dcuc.approve.properties.ProofStarterProperties;
+import com.dragonsoft.duceap.commons.util.string.StringUtils;
+import com.github.benmanes.caffeine.cache.Cache;
+import com.github.benmanes.caffeine.cache.Caffeine;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * <p>
+ * 应用缓存
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2021/9/3
+ */
+public class SecurityAppCache {
+
+    private final Cache<String, SecurityApp> caffeineCache;
+
+    public SecurityAppCache(ProofStarterProperties proofStarterProperties) {
+        ProofStarterProperties.AppCache appCache = proofStarterProperties.getAppCache();
+        this.caffeineCache = Caffeine.newBuilder()
+                .expireAfterWrite(appCache.getExpireAfterWrite(), TimeUnit.SECONDS)
+                .initialCapacity(appCache.getInitialCapacity())
+                .maximumSize(appCache.getMaximumSize())
+                .build();
+    }
+
+    private String cacheKey(String... names) {
+        return "cacheAppKey_" + StringUtils.join(names, "&");
+    }
+
+    public SecurityApp getIfPresent(String... key) {
+        String cacheKey = cacheKey(key);
+        return this.caffeineCache.getIfPresent(cacheKey);
+    }
+
+    public void put(String key, SecurityApp value) {
+        String cacheKey = cacheKey(key);
+        this.caffeineCache.put(cacheKey, value);
+    }
+
+    public void remove(String... keys) {
+        String cacheKey = cacheKey(keys);
+        this.caffeineCache.invalidate(cacheKey);
+    }
+}

+ 43 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/filter/cache/SecurityAppResolver.java

@@ -0,0 +1,43 @@
+package com.dragonsoft.dcuc.approve.filter.cache;
+
+import com.dragoninfo.dcuc.app.entity.ApplyInfo;
+import com.dragoninfo.dcuc.app.facade.IApplyInfoFacade;
+import com.dragoninfo.dcuc.common.entity.SecurityApp;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Optional;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2021/9/6
+ */
+@Component
+public class SecurityAppResolver implements ISecurityAppResolver {
+
+    private IApplyInfoFacade appInfoFacade;
+
+    @Autowired
+    public void setAppInfoFacade(IApplyInfoFacade appInfoFacade) {
+        this.appInfoFacade = appInfoFacade;
+    }
+
+    @Override
+    public Optional<SecurityApp> resolve(String appCode) {
+        ApplyInfo appInfo = appInfoFacade.getAppByCode(appCode);
+        if (appInfo == null) {
+            return Optional.empty();
+        }
+        SecurityApp securityApp = new SecurityApp();
+        securityApp.setAppCode(appInfo.getApplyCode());
+        securityApp.setAppName(appInfo.getApplyName());
+        securityApp.setOrgCode(appInfo.getOrgId());
+        securityApp.setManageOrgCode(appInfo.getManagerOrgId());
+        securityApp.setAppUrl(appInfo.getApplyUrl());
+        return Optional.of(securityApp);
+    }
+}

+ 50 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/filter/cache/SecurityUserCache.java

@@ -0,0 +1,50 @@
+package com.dragonsoft.dcuc.approve.filter.cache;
+
+import com.dragonsoft.dcuc.approve.properties.ProofStarterProperties;
+import com.dragonsoft.duceap.base.entity.security.SecurityUser;
+import com.dragonsoft.duceap.commons.util.string.StringUtils;
+import com.github.benmanes.caffeine.cache.Cache;
+import com.github.benmanes.caffeine.cache.Caffeine;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * <p>
+ * 用户信息缓存
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2021/9/3
+ */
+public class SecurityUserCache {
+
+    private final Cache<String, SecurityUser> caffeineCache;
+
+    public SecurityUserCache(ProofStarterProperties proofStarterProperties) {
+        ProofStarterProperties.UserCache userCache = proofStarterProperties.getUserCache();
+        this.caffeineCache = Caffeine.newBuilder()
+                .expireAfterWrite(userCache.getExpireAfterWrite(), TimeUnit.SECONDS)
+                .initialCapacity(userCache.getInitialCapacity())
+                .maximumSize(userCache.getMaximumSize())
+                .build();
+    }
+
+    private String cacheKey(String... names) {
+        return "cacheUserKey_" + StringUtils.join(names, "&");
+    }
+
+    public SecurityUser getIfPresent(String... key) {
+        String cacheKey = cacheKey(key);
+        return this.caffeineCache.getIfPresent(cacheKey);
+    }
+
+    public void put(String key, SecurityUser value) {
+        String cacheKey = cacheKey(key);
+        this.caffeineCache.put(cacheKey, value);
+    }
+
+    public void remove(String... keys) {
+        String cacheKey = cacheKey(keys);
+        this.caffeineCache.invalidate(cacheKey);
+    }
+}

+ 47 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/filter/cache/SecurityUserResolver.java

@@ -0,0 +1,47 @@
+package com.dragonsoft.dcuc.approve.filter.cache;
+
+import com.dragonsoft.dcuc.approve.business.external.IDcucBusiness;
+import com.dragonsoft.dcuc.approve.model.vo.dcuc.OauthUserVO;
+import com.dragonsoft.duceap.base.entity.security.SecurityUser;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Optional;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2021/9/6
+ */
+@Component
+public class SecurityUserResolver implements ISecurityUserResolver {
+
+    private IDcucBusiness dcucBusiness;
+
+
+    @Autowired
+    public void setDcucBusiness(IDcucBusiness dcucBusiness) {
+        this.dcucBusiness = dcucBusiness;
+    }
+
+    @Override
+    public Optional<SecurityUser> resolve(String idcard) {
+        OauthUserVO oauthUserVO = dcucBusiness.getOauthUserInfoByIdcard(idcard);
+        if (oauthUserVO == null) {
+            return Optional.empty();
+        }
+        SecurityUser securityUser = new SecurityUser();
+        securityUser.setId(oauthUserVO.getIdcard());
+        securityUser.setCode(oauthUserVO.getPoliceNumber());
+        securityUser.setUserName(oauthUserVO.getIdcard());
+        securityUser.setIdcard(oauthUserVO.getIdcard());
+        securityUser.setName(oauthUserVO.getName());
+        securityUser.setPoliceNo(oauthUserVO.getPoliceNumber());
+        securityUser.setSecurityOrg(oauthUserVO.getOrgCode());
+        securityUser.setSecurityOrgName(oauthUserVO.getOrgName());
+        return Optional.of(securityUser);
+    }
+}

+ 2 - 2
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/mapper/ApprovalInfoMapper.java

@@ -1,6 +1,6 @@
 package com.dragonsoft.dcuc.approve.mapper;
 
-import com.dragonsoft.dcuc.approve.model.ApprovalInfo;
+import com.dragonsoft.dcuc.approve.model.dto.ApprovalInfoDTO;
 import com.dragonsoft.duceap.mybaitsplus.core.BaseMybatisMapper;
 import org.apache.ibatis.annotations.Mapper;
 
@@ -10,5 +10,5 @@ import org.apache.ibatis.annotations.Mapper;
  * @desc 申请表单信息
  */
 @Mapper
-public interface ApprovalInfoMapper extends BaseMybatisMapper<ApprovalInfo> {
+public interface ApprovalInfoMapper extends BaseMybatisMapper<ApprovalInfoDTO> {
 }

+ 17 - 16
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/ApproveRecordInfo.java

@@ -3,7 +3,8 @@ package com.dragonsoft.dcuc.approve.model;
 import cn.hutool.core.collection.CollUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.annotation.*;
-import com.dragonsoft.dcuc.approve.dto.ResourceInfoDTO;
+import com.dragonsoft.dcuc.approve.model.dto.ApprovalInfoDTO;
+import com.dragonsoft.dcuc.approve.model.dto.ResourceInfoDTO;
 import com.dragonsoft.dcuc.approve.enumresources.ApproveResultEnum;
 import com.dragonsoft.dcuc.approve.enumresources.FlowTypeEnum;
 import com.dragonsoft.dcuc.approve.enumresources.PermissionValidTypeEnum;
@@ -312,18 +313,18 @@ public class ApproveRecordInfo {
      *
      * @return 旧表单对象
      */
-    public ApprovalInfo toApprovalInfo() {
-        ApprovalInfo approvalInfo = new ApprovalInfo();
-        BeanUtils.copyProperties(this, approvalInfo);
-        approvalInfo.setBusinessCode(this.getBusinessCode());
-        approvalInfo.setProcessInstanceId(this.getProcessInstanceId());
-        approvalInfo.setProcessTitle(this.getProcessTitle());
-        approvalInfo.setApplyReason(this.getApplyReason());
-        approvalInfo.setApplyContent(this.getApproveContent());
-        approvalInfo.setApproveTaskIdentifier(this.getTaskCode());
-        approvalInfo.setApproveResult(this.getFinalApprovalResult());
-        approvalInfo.setCallbackUrl(this.getCallbackUrl());
-        approvalInfo.setApproveTaskClass(this.getApproveTaskClass());
+    public ApprovalInfoDTO toApprovalInfo() {
+        ApprovalInfoDTO approvalInfoDTO = new ApprovalInfoDTO();
+        BeanUtils.copyProperties(this, approvalInfoDTO);
+        approvalInfoDTO.setBusinessCode(this.getBusinessCode());
+        approvalInfoDTO.setProcessInstanceId(this.getProcessInstanceId());
+        approvalInfoDTO.setProcessTitle(this.getProcessTitle());
+        approvalInfoDTO.setApplyReason(this.getApplyReason());
+        approvalInfoDTO.setApplyContent(this.getApproveContent());
+        approvalInfoDTO.setApproveTaskIdentifier(this.getTaskCode());
+        approvalInfoDTO.setApproveResult(this.getFinalApprovalResult());
+        approvalInfoDTO.setCallbackUrl(this.getCallbackUrl());
+        approvalInfoDTO.setApproveTaskClass(this.getApproveTaskClass());
 
         ResourceInfoDTO resourceInfoVo = new ResourceInfoDTO();
 
@@ -359,9 +360,9 @@ public class ApproveRecordInfo {
             resourceInfoVo.setDisagreeVisitResourceName(disagreeAccessResourcesMap.entrySet().stream().findFirst().get().getValue());
         }
 
-        approvalInfo.setResourceInfoVo(resourceInfoVo);
-        approvalInfo.setAppCode(this.getAppCode());
-        return approvalInfo;
+        approvalInfoDTO.setResourceInfoVo(resourceInfoVo);
+        approvalInfoDTO.setAppCode(this.getAppCode());
+        return approvalInfoDTO;
     }
 
 }

+ 11 - 3
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/ApprovalInfo.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/ApprovalInfoDTO.java

@@ -1,9 +1,9 @@
-package com.dragonsoft.dcuc.approve.model;
+package com.dragonsoft.dcuc.approve.model.dto;
 
 import com.baomidou.mybatisplus.annotation.TableLogic;
-import com.dragonsoft.dcuc.approve.dto.ResourceInfoDTO;
 import com.dragonsoft.dcuc.approve.enumresources.ApproveResultEnum;
 import com.dragonsoft.dcuc.approve.enumresources.FlowTypeEnum;
+import com.dragonsoft.dcuc.approve.model.ApproveRecordInfo;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -21,7 +21,7 @@ import java.util.Date;
  * @see ApproveRecordInfo
  */
 @Data
-public class ApprovalInfo implements Serializable {
+public class ApprovalInfoDTO implements Serializable {
 
     private static final long serialVersionUID = 5454155825318885342L;
 
@@ -137,6 +137,11 @@ public class ApprovalInfo implements Serializable {
      */
     private String appCode;
 
+    /**
+     * 应用名称
+     */
+    private String appName;
+
     /**
      * 有效时间起始
      */
@@ -220,4 +225,7 @@ public class ApprovalInfo implements Serializable {
     @ApiModelProperty(value = "访问资源信息")
     private ResourceInfoDTO resourceInfoVo;
 
+    @ApiModelProperty(value = "申请业务数据")
+    private String otherApplyContext;
+
 }

+ 4 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/vo/ApprovalInfoMsgItemDTO.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/ApprovalInfoMsgItemDTO.java

@@ -1,4 +1,4 @@
-package com.dragonsoft.dcuc.approve.model.vo;
+package com.dragonsoft.dcuc.approve.model.dto;
 
 import com.dragonsoft.dcuc.approve.model.resp.ResourceInfoRespVO;
 import com.fasterxml.jackson.annotation.JsonFormat;
@@ -16,6 +16,9 @@ import java.util.Date;
 @ApiModel(description = "申请表单返回信息")
 public class ApprovalInfoMsgItemDTO {
 
+    @ApiModelProperty(value = "主键")
+    private String id;
+
     @ApiModelProperty(value = "流程标识码")
     private String businessCode;
 

+ 1 - 2
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/dto/ApproveLogDTO.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/ApproveLogDTO.java

@@ -1,6 +1,5 @@
-package com.dragonsoft.dcuc.approve.dto;
+package com.dragonsoft.dcuc.approve.model.dto;
 
-import com.dragonsoft.dcuc.approve.model.vo.LogInfoMetaDTO;
 import lombok.Builder;
 import lombok.Data;
 

+ 27 - 14
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/vo/ApproveMessageInfoDTO.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/ApproveMessageInfoDTO.java

@@ -1,10 +1,10 @@
-package com.dragonsoft.dcuc.approve.model.vo;
+package com.dragonsoft.dcuc.approve.model.dto;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.lang.Assert;
-import com.dragonsoft.dcuc.approve.dto.ResourceInfoDTO;
 import com.dragonsoft.dcuc.approve.enumresources.ApproveWorkFlowOperationEnum;
-import com.dragonsoft.dcuc.approve.model.ApprovalInfo;
+import com.dragonsoft.duceap.base.entity.security.SecurityUser;
+import com.dragonsoft.duceap.base.utils.UserContextUtils;
 import lombok.Data;
 
 /**
@@ -51,27 +51,38 @@ public class ApproveMessageInfoDTO {
     /**
      * 审批单信息
      */
-    private ApprovalInfoMsgItemDTO approveInfo;
+    private ApprovalInfoMsgItemDTO approvalInfoMsgItemDTO;
 
     /**
      * 审批状态
      */
     private ApproveWorkFlowOperationEnum approveResult;
 
+    /**
+     * 审批单信息
+     */
+    private ApprovalInfoDTO approvalInfoDTO;
+
+    /**
+     * 审批人信息
+     */
+    private SecurityUser securityUser;
+
 
-    public static ApproveMessageInfoDTO newInstance(ApprovalInfo approvalInfo, ApproveWorkFlowOperationEnum approveResult, String approveMessage) {
-        Assert.notNull(approvalInfo);
+    public static ApproveMessageInfoDTO newInstance(ApprovalInfoDTO approvalInfoDTO, ApproveWorkFlowOperationEnum approveResult, String approveMessage) {
+        Assert.notNull(approvalInfoDTO);
         Assert.notNull(approveResult);
+        SecurityUser currentUser = UserContextUtils.getCurrentUser();
 
-        String approveNo = approvalInfo.getApproveNo();
-        String appCode = approvalInfo.getAppCode();
-        String processInstanceId = approvalInfo.getProcessInstanceId();
-        String messageId = approvalInfo.getMessageId();
-        String callbackUrl = approvalInfo.getCallbackUrl();
+        String approveNo = approvalInfoDTO.getApproveNo();
+        String appCode = approvalInfoDTO.getAppCode();
+        String processInstanceId = approvalInfoDTO.getProcessInstanceId();
+        String messageId = approvalInfoDTO.getMessageId();
+        String callbackUrl = approvalInfoDTO.getCallbackUrl();
 
         ApprovalInfoMsgItemDTO approvalInfoMsgItemDTO = new ApprovalInfoMsgItemDTO();
-        BeanUtil.copyProperties(approvalInfo, approvalInfoMsgItemDTO);
-        ResourceInfoDTO resourceInfoVo = approvalInfo.getResourceInfoVo();
+        BeanUtil.copyProperties(approvalInfoDTO, approvalInfoMsgItemDTO);
+        ResourceInfoDTO resourceInfoVo = approvalInfoDTO.getResourceInfoVo();
         approvalInfoMsgItemDTO.setResourceInfo(resourceInfoVo.toResourceInfoRespVO());
 
         ApproveMessageInfoDTO approveMessageInfoDTO = new ApproveMessageInfoDTO();
@@ -79,10 +90,12 @@ public class ApproveMessageInfoDTO {
         approveMessageInfoDTO.setProcessInstanceId(processInstanceId);
         approveMessageInfoDTO.setMessageId(messageId);
         approveMessageInfoDTO.setSourceAppCode(appCode);
-        approveMessageInfoDTO.setApproveInfo(approvalInfoMsgItemDTO);
+        approveMessageInfoDTO.setApprovalInfoMsgItemDTO(approvalInfoMsgItemDTO);
         approveMessageInfoDTO.setApproveResult(approveResult);
         approveMessageInfoDTO.setApproveMessage(approveMessage);
         approveMessageInfoDTO.setCallbackUrl(callbackUrl);
+        approveMessageInfoDTO.setApprovalInfoDTO(approvalInfoDTO);
+        approveMessageInfoDTO.setSecurityUser(currentUser);
 
         return approveMessageInfoDTO;
     }

+ 2 - 4
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/dto/BaseOperateReqDTO.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/BaseOperateReqDTO.java

@@ -1,9 +1,7 @@
-package com.dragonsoft.dcuc.approve.dto;
+package com.dragonsoft.dcuc.approve.model.dto;
 
 import com.dragonsoft.dcuc.approve.enumresources.ApproveWorkFlowOperationEnum;
-import com.dragonsoft.dcuc.approve.model.ApprovalInfo;
 import com.dragonsoft.dcuc.approve.model.vo.ApproveTaskRequestVo;
-import com.dragonsoft.dcuc.approve.model.vo.TaskRequestUserInfoDTO;
 import com.dragonsoft.duceap.duwf.api.model.TaskRequest;
 import lombok.Builder;
 import lombok.Data;
@@ -38,7 +36,7 @@ public class BaseOperateReqDTO {
     /**
      * 审批信息
      */
-    private ApprovalInfo approvalInfo;
+    private ApprovalInfoDTO approvalInfoDTO;
     /**
      * 请求人信息
      */

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/dto/ContentRespDTO.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/ContentRespDTO.java

@@ -1,4 +1,4 @@
-package com.dragonsoft.dcuc.approve.dto;
+package com.dragonsoft.dcuc.approve.model.dto;
 
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;

+ 3 - 3
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/vo/LogDto.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/LogDto.java

@@ -1,7 +1,7 @@
-package com.dragonsoft.dcuc.approve.model.vo;
+package com.dragonsoft.dcuc.approve.model.dto;
 
 import com.dragonsoft.dcuc.approve.enumresources.ApproveResultEnum;
-import com.dragonsoft.dcuc.approve.model.ApprovalInfo;
+import com.dragonsoft.dcuc.approve.model.dto.ApprovalInfoDTO;
 import com.dragonsoft.dcuc.approve.model.resp.OperateRespVO;
 import com.dragonsoft.duceap.duwf.api.model.ProcessInstanceVO;
 import com.fasterxml.jackson.annotation.JsonFormat;
@@ -24,7 +24,7 @@ public class LogDto implements Serializable {
 
     private static final long serialVersionUID = 5454155825318885342L;
     @ApiModelProperty(value = "表单信息")
-    private ApprovalInfo approvalInfo;
+    private ApprovalInfoDTO approvalInfoDTO;
 
     @ApiModelProperty(value = "节点Vo")
     private ProcessInstanceVO processInstanceVO;

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/vo/LogInfoMetaDTO.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/LogInfoMetaDTO.java

@@ -1,4 +1,4 @@
-package com.dragonsoft.dcuc.approve.model.vo;
+package com.dragonsoft.dcuc.approve.model.dto;
 
 import lombok.Data;
 

+ 1 - 2
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/dto/OperateReqDTO.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/OperateReqDTO.java

@@ -1,8 +1,7 @@
-package com.dragonsoft.dcuc.approve.dto;
+package com.dragonsoft.dcuc.approve.model.dto;
 
 import com.dragonsoft.dcuc.approve.enumresources.ApproveWorkFlowOperationEnum;
 import com.dragonsoft.dcuc.approve.model.vo.ApproveTaskRequestVo;
-import com.dragonsoft.dcuc.approve.model.vo.TaskRequestUserInfoDTO;
 import com.dragonsoft.duceap.duwf.api.model.ActivitiHolder;
 import com.dragonsoft.duceap.duwf.api.model.TaskRequest;
 import lombok.Builder;

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/vo/ProcessInstanceInfoDTO.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/ProcessInstanceInfoDTO.java

@@ -1,4 +1,4 @@
-package com.dragonsoft.dcuc.approve.model.vo;
+package com.dragonsoft.dcuc.approve.model.dto;
 
 import com.dragonsoft.duceap.duwf.api.model.ProcessInstanceVO;
 import com.dragonsoft.duceap.duwf.api.model.TaskHistoryDetailVo;

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/vo/QmOperateLogDTO.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/QmOperateLogDTO.java

@@ -1,4 +1,4 @@
-package com.dragonsoft.dcuc.approve.model.vo;
+package com.dragonsoft.dcuc.approve.model.dto;
 
 import com.dragoninfo.dcuc.duceap.enums.OperateDisposeTypeEnum;
 import com.dragonsoft.dcuc.approve.enumresources.QmApproveTypeEnum;

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/dto/ResourceInfoDTO.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/ResourceInfoDTO.java

@@ -1,4 +1,4 @@
-package com.dragonsoft.dcuc.approve.dto;
+package com.dragonsoft.dcuc.approve.model.dto;
 
 import cn.hutool.core.bean.BeanUtil;
 import com.dragonsoft.dcuc.approve.model.req.ResourceInfoReqVO;

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/dto/RzyRiskLogDTO.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/RzyRiskLogDTO.java

@@ -1,4 +1,4 @@
-package com.dragonsoft.dcuc.approve.dto;
+package com.dragonsoft.dcuc.approve.model.dto;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Builder;

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/vo/TaskRequestUserInfoDTO.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/TaskRequestUserInfoDTO.java

@@ -1,4 +1,4 @@
-package com.dragonsoft.dcuc.approve.model.vo;
+package com.dragonsoft.dcuc.approve.model.dto;
 
 import com.dragonsoft.duceap.base.entity.security.BaseSecurityUser;
 import lombok.Data;

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/dto/zerotrust/AppTokenInfoDTO.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/zerotrust/AppTokenInfoDTO.java

@@ -1,4 +1,4 @@
-package com.dragonsoft.dcuc.approve.dto.zerotrust;
+package com.dragonsoft.dcuc.approve.model.dto.zerotrust;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/dto/zerotrust/UserTokenInfoDTO.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/zerotrust/UserTokenInfoDTO.java

@@ -1,4 +1,4 @@
-package com.dragonsoft.dcuc.approve.dto.zerotrust;
+package com.dragonsoft.dcuc.approve.model.dto.zerotrust;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/properties/ApproveBuProperties.java

@@ -22,7 +22,7 @@ public class ApproveBuProperties {
     /**
      * 是否启用同步
      */
-    private boolean enable;
+    private boolean enable = true;
 
     /**
      * 同步任务路径

+ 5 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/properties/ApproveProperties.java

@@ -66,5 +66,10 @@ public class ApproveProperties {
      */
     private Integer expirationTimeDays = 3;
 
+    /**
+     * 权限任务类型
+     */
+    private String authTaskClass = "2";
+
 
 }

+ 74 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/properties/ProofStarterProperties.java

@@ -0,0 +1,74 @@
+package com.dragonsoft.dcuc.approve.properties;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+import java.util.Collections;
+import java.util.Set;
+
+/**
+ * <p>
+ * 配置属性信息
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2021/9/3
+ */
+@Data
+@ConfigurationProperties(prefix = "approve.proof")
+public class ProofStarterProperties {
+
+    /**
+     * 开启凭据过滤
+     */
+    private Boolean enableProofsFilter = true;
+
+    /**
+     * 用户缓存
+     */
+    private UserCache userCache = new UserCache();
+
+    /**
+     * 应用缓存
+     */
+    private AppCache appCache = new AppCache();
+
+    @Data
+    public static class UserCache {
+        /**
+         * 写入失效时间,单位:秒
+         */
+        private Long expireAfterWrite = 1800L;
+        /**
+         * 初始化容量
+         */
+        private Integer initialCapacity = 100;
+
+        /**
+         * 最大容量
+         */
+        private Long maximumSize = 100000L;
+    }
+
+    @Data
+    public static class AppCache {
+        /**
+         * 写入失效时间,单位:秒
+         */
+        private Long expireAfterWrite = 1800L;
+        /**
+         * 初始化容量
+         */
+        private Integer initialCapacity = 100;
+
+        /**
+         * 最大容量
+         */
+        private Long maximumSize = 1000L;
+    }
+
+    /**
+     * IP白名单
+     */
+    private Set<String> ipWitheList = Collections.emptySet();
+}

+ 3 - 4
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/service/IApproveRecordService.java

@@ -1,7 +1,6 @@
 package com.dragonsoft.dcuc.approve.service;
 
-import cn.hutool.core.date.DateTime;
-import com.dragonsoft.dcuc.approve.model.ApprovalInfo;
+import com.dragonsoft.dcuc.approve.model.dto.ApprovalInfoDTO;
 import com.dragonsoft.dcuc.approve.model.ApproveRecordInfo;
 import com.dragonsoft.dcuc.approve.model.resp.ApprovalInfoRespVO;
 import com.dragonsoft.duceap.base.enums.BooleanEnum;
@@ -93,11 +92,11 @@ public interface IApproveRecordService {
     /**
      * 将旧表单表对象构建成模式3新表对象
      *
-     * @param approvalInfo 审批信息
+     * @param approvalInfoDTO 审批信息
      * @param approveNo    审批单号
      * @return 审批记录信息
      */
-    ApproveRecordInfo buildApproveRecordInfo(ApprovalInfo approvalInfo, String approveNo);
+    ApproveRecordInfo buildApproveRecordInfo(ApprovalInfoDTO approvalInfoDTO, String approveNo);
 
     /**
      * 我的请求列表

+ 53 - 47
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/service/impl/ApproveRecordServiceImpl.java

@@ -6,22 +6,23 @@ import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.crypto.SmUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.dragoninfo.dcuc.app.entity.ApplyInfo;
 import com.dragoninfo.dcuc.app.facade.IApplyInfoFacade;
 import com.dragonsoft.dcuc.approve.business.IApproveBusiness;
 import com.dragonsoft.dcuc.approve.constants.ApproveConstants;
-import com.dragonsoft.dcuc.approve.dto.ResourceInfoDTO;
+import com.dragonsoft.dcuc.approve.model.dto.ResourceInfoDTO;
 import com.dragonsoft.dcuc.approve.enumresources.ApproveResultEnum;
 import com.dragonsoft.dcuc.approve.enumresources.ApproveTypeEnum;
 import com.dragonsoft.dcuc.approve.enumresources.FlowTypeEnum;
 import com.dragonsoft.dcuc.approve.mapper.ApproveRecordMapper;
-import com.dragonsoft.dcuc.approve.model.ApprovalInfo;
+import com.dragonsoft.dcuc.approve.model.dto.ApprovalInfoDTO;
 import com.dragonsoft.dcuc.approve.model.ApproveRecordInfo;
 import com.dragonsoft.dcuc.approve.model.resp.ApprovalInfoRespVO;
 import com.dragonsoft.dcuc.approve.service.IApproveRecordService;
+import com.dragonsoft.duceap.base.entity.security.SecurityUser;
 import com.dragonsoft.duceap.base.enums.BooleanEnum;
+import com.dragonsoft.duceap.base.utils.UserContextUtils;
 import com.dragonsoft.duceap.commons.util.date.DateConst;
 import com.dragonsoft.duceap.commons.util.date.DateUtils;
 import com.dragonsoft.duceap.commons.util.enums.EnumUtils;
@@ -162,36 +163,36 @@ public class ApproveRecordServiceImpl implements IApproveRecordService {
     /**
      * 将旧表单表对象构建成模式3新表对象
      *
-     * @param approvalInfo 审批信息
+     * @param approvalInfoDTO 审批信息
      * @param approveNo    审批单号
      * @return 审批记录信息
      */
     @Override
-    public ApproveRecordInfo buildApproveRecordInfo(ApprovalInfo approvalInfo, String approveNo) {
+    public ApproveRecordInfo buildApproveRecordInfo(ApprovalInfoDTO approvalInfoDTO, String approveNo) {
         ApproveRecordInfo approveRecordInfo = new ApproveRecordInfo();
-        approveRecordInfo.setId(approvalInfo.getId());
-        approveRecordInfo.setBusinessCode(approvalInfo.getBusinessCode());
-        approveRecordInfo.setProcessName(approvalInfo.getProcessName());
+        approveRecordInfo.setId(approvalInfoDTO.getId());
+        approveRecordInfo.setBusinessCode(approvalInfoDTO.getBusinessCode());
+        approveRecordInfo.setProcessName(approvalInfoDTO.getProcessName());
 
-        approveRecordInfo.setProcessType(approvalInfo.getProcessType());
-        approveRecordInfo.setProcessTypeName(approvalInfo.getProcessTypeName());
+        approveRecordInfo.setProcessType(approvalInfoDTO.getProcessType());
+        approveRecordInfo.setProcessTypeName(approvalInfoDTO.getProcessTypeName());
 
-        String flowType = approvalInfo.getFlowType();
+        String flowType = approvalInfoDTO.getFlowType();
         FlowTypeEnum flowTypeEnum = EnumUtils.enumOf(FlowTypeEnum.class, flowType);
         ApproveTypeEnum approveTypeEnum = flowTypeEnum.toApproveTypeEnum();
         //审批中心类型
         approveRecordInfo.setApproveType(approveTypeEnum.value);
         //审批单号规则
         approveRecordInfo.setApproveNo(approveNo);
-        approveRecordInfo.setProcessTitle(approvalInfo.getProcessTitle());
-        approveRecordInfo.setApplicantIdcard(approvalInfo.getApplicantIdcard());
-        approveRecordInfo.setApplicantName(approvalInfo.getApplicantName());
-        approveRecordInfo.setApplicantPhoneNo(approvalInfo.getApplicantPhoneNo());
-        approveRecordInfo.setApplicantOrgCode(approvalInfo.getApplicantOrgCode());
-        approveRecordInfo.setApplicantOrgName(approvalInfo.getApplicantOrgName());
-        approveRecordInfo.setApplyTime(DateUtils.getTimeStr(approvalInfo.getCreateTime(), DateConst.HYPHEN_DISPLAY_TIME));
-
-        String appCode = approvalInfo.getAppCode();
+        approveRecordInfo.setProcessTitle(approvalInfoDTO.getProcessTitle());
+        approveRecordInfo.setApplicantIdcard(approvalInfoDTO.getApplicantIdcard());
+        approveRecordInfo.setApplicantName(approvalInfoDTO.getApplicantName());
+        approveRecordInfo.setApplicantPhoneNo(approvalInfoDTO.getApplicantPhoneNo());
+        approveRecordInfo.setApplicantOrgCode(approvalInfoDTO.getApplicantOrgCode());
+        approveRecordInfo.setApplicantOrgName(approvalInfoDTO.getApplicantOrgName());
+        approveRecordInfo.setApplyTime(DateUtils.getTimeStr(approvalInfoDTO.getCreateTime(), DateConst.HYPHEN_DISPLAY_TIME));
+
+        String appCode = approvalInfoDTO.getAppCode();
         if (StrUtil.isBlank(appCode)) {
             throw new IllegalArgumentException("appCode can't be blank");
         }
@@ -205,34 +206,32 @@ public class ApproveRecordServiceImpl implements IApproveRecordService {
         } catch (Exception e) {
             log.error("调用app-service失败", e);
         }
-        ResourceInfoDTO resourceInfoVo = approvalInfo.getResourceInfoVo();
-        approveRecordInfo.setApproveContent(approvalInfo.getApplyContent());
+        ResourceInfoDTO resourceInfoVo = approvalInfoDTO.getResourceInfoVo();
+        approveRecordInfo.setApproveContent(approvalInfoDTO.getApplyContent());
 
         approveBusiness.setResourceInfoData(approveRecordInfo, resourceInfoVo);
 
-        approveRecordInfo.setPermissionValidType(approvalInfo.getPermissionValidType());
-        approveRecordInfo.setStartTime(approvalInfo.getStartTime());
-        approveRecordInfo.setEndTime(approvalInfo.getEndTime());
-        approveRecordInfo.setApplyReason(approvalInfo.getApplyReason());
-        if (StringUtils.isNotEmpty(approvalInfo.getApproveResult())) {
-            approveRecordInfo.setFinalApprovalResult(approvalInfo.getApproveResult());
-        }
-        approveRecordInfo.setProcessInstanceId(approvalInfo.getProcessInstanceId());
-        approveRecordInfo.setTaskCode(approvalInfo.getBusinessCode());
-        approveRecordInfo.setTaskId(approvalInfo.getTaskId());
-        approveRecordInfo.setTaskName(approvalInfo.getTaskName());
-        approveRecordInfo.setMessageId(approvalInfo.getMessageId());
-        approveRecordInfo.setOtherApplyContext(approvalInfo.getApplyContent());
+        approveRecordInfo.setPermissionValidType(approvalInfoDTO.getPermissionValidType());
+        approveRecordInfo.setStartTime(approvalInfoDTO.getStartTime());
+        approveRecordInfo.setEndTime(approvalInfoDTO.getEndTime());
+        approveRecordInfo.setApplyReason(approvalInfoDTO.getApplyReason());
+        approveRecordInfo.setFinalApprovalResult("");
+        approveRecordInfo.setProcessInstanceId(approvalInfoDTO.getProcessInstanceId());
+        approveRecordInfo.setTaskCode(approvalInfoDTO.getBusinessCode());
+        approveRecordInfo.setTaskId(approvalInfoDTO.getTaskId());
+        approveRecordInfo.setTaskName(approvalInfoDTO.getTaskName());
+        approveRecordInfo.setMessageId(approvalInfoDTO.getMessageId());
+        approveRecordInfo.setOtherApplyContext(approvalInfoDTO.getOtherApplyContext());
         approveRecordInfo.setIsDeleted(BooleanEnum.FALSE.getValue());
-        approveRecordInfo.setCreateUser(approvalInfo.getCreateUser());
-        approveRecordInfo.setCreateTime(approvalInfo.getCreateTime());
-        approveRecordInfo.setUpdateUser(approvalInfo.getUpdateUser());
-        approveRecordInfo.setUpdateTime(approvalInfo.getUpdateTime());
-        approveRecordInfo.setFlowType(approvalInfo.getFlowType());
-        approveRecordInfo.setCallbackUrl(approvalInfo.getCallbackUrl());
-        approveRecordInfo.setApproveTaskClass(approvalInfo.getApproveTaskClass());
-        approveRecordInfo.setApplicantIp(approvalInfo.getApplicantIp());
-        approveRecordInfo.setApplicantAppToken(approvalInfo.getApplicantAppToken());
+        approveRecordInfo.setCreateUser(approvalInfoDTO.getCreateUser());
+        approveRecordInfo.setCreateTime(approvalInfoDTO.getCreateTime());
+        approveRecordInfo.setUpdateUser(approvalInfoDTO.getUpdateUser());
+        approveRecordInfo.setUpdateTime(approvalInfoDTO.getUpdateTime());
+        approveRecordInfo.setFlowType(approvalInfoDTO.getFlowType());
+        approveRecordInfo.setCallbackUrl(approvalInfoDTO.getCallbackUrl());
+        approveRecordInfo.setApproveTaskClass(approvalInfoDTO.getApproveTaskClass());
+        approveRecordInfo.setApplicantIp(approvalInfoDTO.getApplicantIp());
+        approveRecordInfo.setApplicantAppToken(approvalInfoDTO.getApplicantAppToken());
         approveRecordInfo.setSyncFlag(BooleanEnum.FALSE.value);
         return approveRecordInfo;
     }
@@ -248,9 +247,9 @@ public class ApproveRecordServiceImpl implements IApproveRecordService {
         List<ApproveRecordInfo> content = applyInfoPage.getContent();
         for (ApproveRecordInfo approveRecordInfo : content) {
             //将模式3新表对象构建成旧表对象(前端和运营中心无需改造)
-            ApprovalInfo approvalInfo = approveRecordInfo.toApprovalInfo();
+            ApprovalInfoDTO approvalInfoDTO = approveRecordInfo.toApprovalInfo();
             //设置当前结点和未操作者信息
-            ApprovalInfoRespVO approvalInfoRespVo = approveBusiness.fillTaskInfoToApplyInfo(approvalInfo);
+            ApprovalInfoRespVO approvalInfoRespVo = approveBusiness.fillTaskInfoToApplyInfo(approvalInfoDTO);
             approvalInfoRespVo.setAppCode(approveRecordInfo.getAppCode());
             approvalInfoRespVo.setBusinessId(approvalInfoRespVo.getId());
             approvalInfoRespVOList.add(approvalInfoRespVo);
@@ -316,6 +315,13 @@ public class ApproveRecordServiceImpl implements IApproveRecordService {
         ApproveRecordInfo approveRecordInfo = approveRecordMapper.selectById(id);
         if (ObjectUtil.isNotNull(approveRecordInfo)) {
             approveRecordInfo.setSyncFlag(booleanEnum.value);
+            approveRecordInfo.setUpdateTime(new Date());
+            SecurityUser currentUser = UserContextUtils.getCurrentUser();
+            if (ObjectUtil.isNotNull(currentUser)) {
+                approveRecordInfo.setUpdateUser(currentUser.getIdcard());
+            }
+
+            approveRecordMapper.updateById(approveRecordInfo);
         }
     }
 
@@ -324,7 +330,7 @@ public class ApproveRecordServiceImpl implements IApproveRecordService {
         LambdaQueryWrapper<ApproveRecordInfo> queryWrapper = Wrappers.lambdaQuery();
         queryWrapper.eq(ApproveRecordInfo::getIsDeleted, BooleanEnum.FALSE.value)
                 .eq(ApproveRecordInfo::getSyncFlag, BooleanEnum.FALSE.value)
-                .eq(ApproveRecordInfo::getFinalApprovalResult, BooleanEnum.FALSE.value)
+                .eq(ApproveRecordInfo::getFinalApprovalResult, ApproveResultEnum.SUCCESS.getValue())
                 .orderByDesc(ApproveRecordInfo::getCreateTime);
 
         return approveRecordMapper.selectList(queryWrapper);

+ 0 - 31
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/threadlocal/ThreadLocalProofsHolder.java

@@ -1,31 +0,0 @@
-package com.dragonsoft.dcuc.approve.threadlocal;
-
-import com.alibaba.ttl.TransmittableThreadLocal;
-import com.dragoninfo.dcuc.common.entity.Proofs;
-
-/**
- * <p>
- * 接口请求凭据信息
- * </p>
- *
- * @author huangzqa
- * @date 2021/8/18
- */
-public class ThreadLocalProofsHolder {
-    public static String key = "threadLocalProofsHolder";
-
-    private static final TransmittableThreadLocal<Proofs> PROOFS_THREAD_LOCAL = new TransmittableThreadLocal<>();
-
-    public static Proofs getProofs() {
-        return PROOFS_THREAD_LOCAL.get();
-    }
-
-    public static void setPoofs(Proofs poofs) {
-        PROOFS_THREAD_LOCAL.set(poofs);
-    }
-
-    public static void remove() {
-        PROOFS_THREAD_LOCAL.remove();
-    }
-
-}

+ 67 - 5
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/utils/ProofsUtil.java

@@ -1,16 +1,23 @@
 package com.dragonsoft.dcuc.approve.utils;
 
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.map.MapUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.dragoninfo.dcuc.common.Constants;
 import com.dragoninfo.dcuc.common.entity.Proofs;
-import com.dragonsoft.dcuc.approve.threadlocal.ThreadLocalProofsHolder;
+import com.dragoninfo.dcuc.common.enums.UserExtInfoEnum;
+import com.dragoninfo.dcuc.common.utils.SecurityUserUtil;
 import com.dragonsoft.duceap.base.entity.security.BaseSecurityUser;
+import com.dragonsoft.duceap.base.entity.security.SecurityUser;
 import com.dragonsoft.duceap.base.utils.UserContextUtils;
 import com.dragonsoft.duceap.commons.util.json.JsonUtils;
+import org.springframework.http.HttpHeaders;
 import org.springframework.util.Base64Utils;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
 import java.util.Optional;
 
 /**
@@ -30,10 +37,6 @@ public class ProofsUtil {
         if (currentUser != null) {
             return currentUser.getIdcard();
         }
-        Proofs proofs = ThreadLocalProofsHolder.getProofs();
-        if (proofs != null) {
-            return proofs.getIdcard();
-        }
         return "";
     }
 
@@ -161,4 +164,63 @@ public class ProofsUtil {
         }
         return Optional.empty();
     }
+
+    /**
+     * 生成请求头
+     *
+     * @return 请求头信息
+     */
+    public static HttpHeaders buildHttpHeaders() {
+        SecurityUser currentUser = UserContextUtils.getCurrentUser();
+        return buildHttpHeaders(currentUser);
+    }
+
+    /**
+     * 生成请求头信息
+     *
+     * @param currentUser 当前用户
+     * @return 请求头信息
+     */
+    public static HttpHeaders buildHttpHeaders(SecurityUser currentUser) {
+        Assert.notNull(currentUser);
+        Map<String, Object> extendtions = currentUser.getExtendtions();
+
+        HttpHeaders headers = new HttpHeaders();
+        if (MapUtil.isEmpty(extendtions)) {
+            return headers;
+        }
+
+        Object userTokenObject = extendtions.get(UserExtInfoEnum.USER_TOKEN_ID.getValue());
+        String userToken = "";
+        if (ObjectUtil.isNotNull(userTokenObject)) {
+            userToken = userTokenObject.toString();
+        }
+        Object appTokenObject = extendtions.get(UserExtInfoEnum.APP_TOKEN_ID.getValue());
+        String appToken = "";
+        if (ObjectUtil.isNotNull(appTokenObject)) {
+            appToken = appTokenObject.toString();
+        }
+
+        String idcard = currentUser.getIdcard();
+        String appCode = SecurityUserUtil.getSecurityAppCode();
+
+        if (StrUtil.isNotBlank(appToken)) {
+            //应用token
+            headers.add("appToken", appToken);
+        }
+        if (StrUtil.isNotBlank(userToken)) {
+            //用户token
+            headers.add("userToken", userToken);
+        }
+
+        if (StrUtil.isNotBlank(idcard)) {
+            headers.add("idcard", idcard);
+        }
+
+        if (StrUtil.isNotBlank(appCode)) {
+            headers.add("appCode", appCode);
+        }
+
+        return headers;
+    }
 }

+ 28 - 10
approve-core-service/src/test/java/com/dragonsoft/dcuc/approve/business/impl/BimBusinessImplTest.java → approve-core-service/src/test/java/com/dragonsoft/dcuc/approve/business/external/impl/BimBusinessImplTest.java

@@ -1,6 +1,7 @@
-package com.dragonsoft.dcuc.approve.business.impl;
+package com.dragonsoft.dcuc.approve.business.external.impl;
 
 import com.dragoninfo.dcuc.common.http.SkipSslVerificationHttpRequestFactory;
+import com.dragonsoft.dcuc.approve.business.external.impl.BimBusinessImpl;
 import com.dragonsoft.dcuc.approve.model.resp.bim.ZeroTrustAppItemUserTokenInfoRespVO;
 import com.dragonsoft.dcuc.approve.model.resp.bim.ZeroTrustAppTokenInfoRespVO;
 import com.dragonsoft.dcuc.approve.model.resp.bim.ZeroTrustUserTokenInfoRespVO;
@@ -10,10 +11,10 @@ import com.dragonsoft.smtools.loader.SMFactory;
 import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.github.dreamhead.moco.HttpServer;
-import com.github.dreamhead.moco.junit.MocoJunitRunner;
+import com.github.dreamhead.moco.Runner;
+import org.junit.AfterClass;
 import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Rule;
+import org.junit.BeforeClass;
 import org.junit.Test;
 import org.springframework.web.client.RestTemplate;
 
@@ -33,27 +34,40 @@ import static com.github.dreamhead.moco.Moco.*;
 public class BimBusinessImplTest {
 
 
-    HttpServer httpServer = httpServer(19000, log());
-    @Rule
-    public MocoJunitRunner mocoJunitRunner = MocoJunitRunner.httpRunner(httpServer);
+    public static void main(String[] args) {
+        try {
+            BimBusinessImplTest.before();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static Runner runner;
 
 
     static String identityUrl = "http://127.0.0.1:19000";
     static String appInfoUrl = "/idp/rest/getAppTokenInfo";
+
     static String userInfoUrl = "/idp/rest/getUserTokenInfo";
 
     static BimBusinessImpl bimBusiness;
 
-    @Before
-    public void before() throws Exception {
+    @BeforeClass
+    public static void before() throws Exception {
+        HttpServer httpServer = httpServer(19000, log());
 
         httpServer.request(by(uri(appInfoUrl)))
-                .response(pathResource("bim/getAppTokenInfo.json"));
+                .response(pathResource("bim/testGetAppTokenInfo.json"));
 
 
         httpServer.request(by(uri(userInfoUrl)))
                 .response(pathResource("bim/getUserTokenInfo.json"));
 
+
+        runner = Runner.runner(httpServer);
+
+        runner.start();
+
         SkipSslVerificationHttpRequestFactory skipSslVerificationHttpRequestFactory
                 = new SkipSslVerificationHttpRequestFactory();
         skipSslVerificationHttpRequestFactory.setReadTimeout(5000);
@@ -75,6 +89,10 @@ public class BimBusinessImplTest {
         bimBusiness.setSmFactory(smFactory);
     }
 
+    @AfterClass
+    public static void stop() {
+        runner.stop();
+    }
 
     @Test
     public void getUserTokenInfo() {

+ 17 - 0
approve-core-service/src/test/java/com/dragonsoft/dcuc/approve/business/external/impl/BuSyncBusinessImplTest.java

@@ -0,0 +1,17 @@
+package com.dragonsoft.dcuc.approve.business.external.impl;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/11/14
+ */
+public class BuSyncBusinessImplTest {
+
+
+}

+ 2 - 4
approve-core-service/src/test/java/com/dragonsoft/dcuc/approve/business/impl/DcucAuthBusinessImplTest.java → approve-core-service/src/test/java/com/dragonsoft/dcuc/approve/business/external/impl/DcucAuthBusinessImplTest.java

@@ -1,10 +1,8 @@
-package com.dragonsoft.dcuc.approve.business.impl;
+package com.dragonsoft.dcuc.approve.business.external.impl;
 
-import com.dragonsoft.dcuc.approve.business.impl.DcucAuthBusinessImpl;
-import com.dragonsoft.dcuc.approve.dto.ResourceInfoDTO;
+import com.dragonsoft.dcuc.approve.model.dto.ResourceInfoDTO;
 import com.dragonsoft.dcuc.approve.enumresources.FlowTypeEnum;
 import com.dragonsoft.dcuc.approve.enumresources.ListLevelEnum;
-import com.dragonsoft.dcuc.approve.model.resp.ResourceInfoRespVO;
 import com.dragonsoft.dcuc.approve.model.resp.OperateRespVO;
 import org.junit.Assert;
 import org.junit.Test;

+ 2 - 1
approve-core-service/src/test/java/com/dragonsoft/dcuc/approve/business/impl/DcucBusinessImplTest.java → approve-core-service/src/test/java/com/dragonsoft/dcuc/approve/business/external/impl/DcucBusinessImplTest.java

@@ -1,8 +1,9 @@
-package com.dragonsoft.dcuc.approve.business.impl;
+package com.dragonsoft.dcuc.approve.business.external.impl;
 
 import com.dragoninfo.dcuc.common.entity.ApiResultPage;
 import com.dragoninfo.dcuc.common.entity.ApiSearchReq;
 import com.dragoninfo.dcuc.common.http.SkipSslVerificationHttpRequestFactory;
+import com.dragonsoft.dcuc.approve.business.external.impl.DcucBusinessImpl;
 import com.dragonsoft.dcuc.approve.model.vo.dcuc.ApiOrgResultVo;
 import com.dragonsoft.dcuc.approve.model.vo.dcuc.ApiPoliceResultVo;
 import com.dragonsoft.dcuc.approve.properties.ApproveProperties;

+ 2 - 3
approve-core-service/src/test/java/com/dragonsoft/dcuc/approve/business/impl/UserOrgSyncBusinessImplTest.java → approve-core-service/src/test/java/com/dragonsoft/dcuc/approve/business/external/impl/UserOrgSyncBusinessImplTest.java

@@ -1,10 +1,9 @@
-package com.dragonsoft.dcuc.approve.business.impl;
+package com.dragonsoft.dcuc.approve.business.external.impl;
 
+import com.dragonsoft.dcuc.approve.business.external.impl.UserOrgSyncBusinessImpl;
 import org.junit.Assert;
 import org.junit.Test;
 
-import static org.junit.Assert.*;
-
 /**
  * <p>
  *

+ 8 - 0
approve-core-service/src/test/java/com/dragonsoft/dcuc/approve/business/impl/ApproveApiBusinessImplTest.java

@@ -1,6 +1,7 @@
 package com.dragonsoft.dcuc.approve.business.impl;
 
 import cn.hutool.core.lang.Assert;
+import com.dragonsoft.dcuc.approve.business.api.impl.ApproveApiBusinessImpl;
 import com.dragonsoft.dcuc.approve.model.req.v3.ZeroTrustApproveCreateReqV3VO;
 import com.dragonsoft.smtools.enums.SmTypeEunm;
 import com.dragonsoft.smtools.loader.SMFactory;
@@ -42,4 +43,11 @@ public class ApproveApiBusinessImplTest {
 
 
     }
+
+    @Test
+    public void isStanderTaskNo() {
+        org.junit.Assert.assertTrue(approveApiBusiness.isStanderTaskNo("RWBH0100000000002023071409530500000010"));
+        org.junit.Assert.assertFalse(approveApiBusiness.isStanderTaskNo("iwrw0100000000002023071409530500000010"));
+        org.junit.Assert.assertFalse(approveApiBusiness.isStanderTaskNo("iwrw010000000000202307140953050000001022"));
+    }
 }

+ 31 - 32
approve-core-service/src/test/java/com/dragonsoft/dcuc/approve/business/impl/BuSyncBusinessImplTest.java → approve-core-service/src/test/java/com/dragonsoft/dcuc/approve/business/impl/NoticeBusinessImplTest.java

@@ -1,64 +1,69 @@
 package com.dragonsoft.dcuc.approve.business.impl;
 
-
 import com.dragoninfo.dcuc.common.http.SkipSslVerificationHttpRequestFactory;
 import com.dragoninfo.dcuc.common.utils.ResponseUtil;
+import com.dragonsoft.dcuc.approve.business.external.impl.NoticeBusinessImpl;
 import com.dragonsoft.dcuc.approve.model.resp.bu.BuApproveSyncBizApproveReqVO;
 import com.dragonsoft.dcuc.approve.model.resp.bu.BuApproveSyncBizDataReqVO;
 import com.dragonsoft.dcuc.approve.model.resp.bu.BuApproveSyncReqVO;
 import com.dragonsoft.dcuc.approve.properties.ApproveBuProperties;
-import com.dragonsoft.dcuc.approve.properties.BimProperties;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.commons.util.UUIDUtils;
-import com.dragonsoft.smtools.enums.SmTypeEunm;
-import com.dragonsoft.smtools.loader.SMFactory;
 import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.github.dreamhead.moco.HttpServer;
-import com.github.dreamhead.moco.junit.MocoJunitRunner;
+import com.github.dreamhead.moco.Runner;
 import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Rule;
+import org.junit.BeforeClass;
 import org.junit.Test;
 import org.springframework.web.client.RestTemplate;
 
 import java.util.Date;
 
 import static com.github.dreamhead.moco.Moco.*;
-import static com.github.dreamhead.moco.Moco.pathResource;
 
 /**
  * <p>
  *
  * </p>
  *
- * @author huangziquan
- * @date 2023/11/9
+ * @author huangzqa
+ * @date 2023/11/14
  */
-public class BuSyncBusinessImplTest {
-
-    static int port = 19000;
+public class NoticeBusinessImplTest {
+    static int port = 19001;
+
+    public static void main(String[] args) {
+        try {
+            NoticeBusinessImplTest.before();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
 
 
     static String baseUrl = "http://127.0.0.1:" + port;
 
     static String syncToBuUrl = "/sync/tuBu";
 
-    String fullBusinessUrl = baseUrl + syncToBuUrl;
+    static String fullBusinessUrl = baseUrl + syncToBuUrl;
 
-    static BuSyncBusinessImpl buSyncBusiness;
+    static NoticeBusinessImpl noticeBusiness;
 
-    HttpServer httpServer = httpServer(port, log());
-    @Rule
-    public MocoJunitRunner mocoJunitRunner = MocoJunitRunner.httpRunner(httpServer);
+    public static Runner runner;
 
 
-    @Before
-    public void before() throws Exception {
+    @BeforeClass
+    public static void before() throws Exception {
+        HttpServer httpServer = httpServer(port, log());
 
         httpServer.request(by(uri(syncToBuUrl)))
                 .response(pathResource("bu/buSuccess.json"));
 
+        runner = Runner.runner(httpServer);
+
+        runner.start();
+
         SkipSslVerificationHttpRequestFactory skipSslVerificationHttpRequestFactory
                 = new SkipSslVerificationHttpRequestFactory();
         skipSslVerificationHttpRequestFactory.setReadTimeout(5000);
@@ -72,20 +77,14 @@ public class BuSyncBusinessImplTest {
         // 忽略不对应的字段
         objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
 
-        buSyncBusiness = new BuSyncBusinessImpl();
-        buSyncBusiness.setRestTemplate(restTemplate);
-        buSyncBusiness.setApproveBuProperties(approveBuProperties);
-        buSyncBusiness.setDragonObjectMapper(objectMapper);
+        noticeBusiness = new NoticeBusinessImpl();
+        noticeBusiness.setRestTemplate(restTemplate);
+        noticeBusiness.setApproveBuProperties(approveBuProperties);
+        noticeBusiness.setDragonObjectMapper(objectMapper);
     }
 
     @Test
-    public void isStanderTaskNo() {
-        Assert.assertTrue(buSyncBusiness.isStanderTaskNo("RWBH0100000000002023071409530500000010"));
-        Assert.assertFalse(buSyncBusiness.isStanderTaskNo("iwrw0100000000002023071409530500000010"));
-        Assert.assertFalse(buSyncBusiness.isStanderTaskNo("iwrw010000000000202307140953050000001022"));
-    }
-    @Test
-    public void baseReq(){
+    public void baseReq() {
 
         BuApproveSyncReqVO buApproveSyncReqVO = new BuApproveSyncReqVO();
         buApproveSyncReqVO.setAppId("aaa");
@@ -110,7 +109,7 @@ public class BuSyncBusinessImplTest {
         buApproveSyncBizDataReqVO.setBizApprove(buApproveSyncBizApproveReqVO);
         buApproveSyncReqVO.setBizData(buApproveSyncBizDataReqVO);
 
-        ResponseStatus responseStatus = buSyncBusiness.requestSyncToBu(buApproveSyncReqVO);
+        ResponseStatus responseStatus = noticeBusiness.retryRequestSyncToBu(buApproveSyncReqVO);
         Assert.assertTrue(ResponseUtil.isSuccess(responseStatus));
     }
 }

+ 3 - 3
approve-core-service/src/test/java/com/dragonsoft/dcuc/approve/facade/api/ApiV3ApproveFacadeTest.java

@@ -1,6 +1,6 @@
 package com.dragonsoft.dcuc.approve.facade.api;
 
-import com.dragonsoft.dcuc.approve.business.IBimBusiness;
+import com.dragonsoft.dcuc.approve.business.external.IBimBusiness;
 import com.dragonsoft.dcuc.approve.business.IWorkFlowBusiness;
 import com.dragonsoft.dcuc.approve.enumresources.ZeroTrustBusinessRespEnum;
 import com.dragonsoft.dcuc.approve.facade.api.v3.ApiV3ApproveFacade;
@@ -9,7 +9,7 @@ import com.dragonsoft.dcuc.approve.model.req.v3.ZeroTrustApproveCreateReqV3VO;
 import com.dragonsoft.dcuc.approve.model.resp.bim.ZeroTrustAppTokenInfoRespVO;
 import com.dragonsoft.dcuc.approve.model.resp.v3.ZeroTrustApproveCreateV3RespVO;
 import com.dragonsoft.dcuc.approve.model.resp.v3.ZeroTrustResultDataVO;
-import com.dragonsoft.dcuc.approve.service.IApproveService;
+import com.dragonsoft.dcuc.approve.business.IApproveCommonBusiness;
 import com.dragonsoft.duceap.commons.util.UUIDUtils;
 import com.dragonsoft.duceap.duwf.api.model.WorkflowProcessVo;
 import com.fasterxml.jackson.core.JsonProcessingException;
@@ -46,7 +46,7 @@ public class ApiV3ApproveFacadeTest {
 
         approveRecordInfo.setProcessInstanceId(processInsId);
 
-        IApproveService approveService = Mockito.spy(IApproveService.class);
+        IApproveCommonBusiness approveService = Mockito.spy(IApproveCommonBusiness.class);
         Mockito.when(approveService.saveBase(Mockito.any(), Mockito.any(), Mockito.any()))
                 .thenReturn(approveRecordInfo);
 

+ 23 - 0
approve-core-service/src/test/resources/bim/testGetAppTokenInfo.json

@@ -0,0 +1,23 @@
+{
+  "result": {
+    "userToken": {
+      "createTime": "2023-06-15 14:34:18",
+      "orgCode": "010000000000",
+      "ip": "127.0.0.1",
+      "name": "鲁班一号",
+      "sign": "83522b44abfd628093490c969fc7df1741f410e940c18c21e0f0b1594bf2a761",
+      "mid": "",
+      "pid": "362428199108047711",
+      "userTokenId": "eyJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJCQyIsInN1YiI6InpoYW5wZW5nIiwiaWF0IjoxNjg2ODEwODU4LCJleHAiOjE2ODk0MDI4NTgsInR5cGUiOiJ1c2VyIiwiSUQiOiJiM2ViMzNkMi1iMjQzLTRhZDgtODlmMS05MmQ3OWMxY2M1MTciLCJyZW1vdGVJcCI6IjEyNy4wLjAuMSIsInNlc3Npb25JZCI6IjYwMDM3YjdiZGI4YjU0NjFhYmJhZjkzYTljNWQ2YjUzIiwidWlkIjoiMjAyMjExMjkxNjExMjQyNzUtNTUwQi1DQ0E3QUQ0QTQiLCJvcmdhbml6YXRpb25Db2RlIjoiYmFtYm9vY2xvdWQiLCJkZXZPbmx5SWQiOiIiLCJlcXVpcG1lbnRUeXBlIjoicGMifQ.opQczo6NVMuafO2ruKCCpT1YdrsKLP2vlUnETyPR8Al-CijmIgqE0oW_BkOJaCP_UX-BYLLhoPBDFriI5IrLMg",
+      "expireAt": "2023-11-13 16:36:41",
+      "env": "pc"
+    },
+    "appTokenId": "eyJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJCQyIsInN1YiI6InpoYW5wZW5nIiwiaWF0IjoxNjg2ODEwOTYzLCJleHAiOjE2ODk0MDI5NjMsInR5cGUiOiJhcHAiLCJJRCI6IjY0ZDBmY2RjLTAyMWMtNGM0My05ZWQxLThkYTgyYzJmYmY5ZiIsImFwcElkIjoiZGVtbzEiLCJ1aWQiOiIyMDIyMTEyOTE2MTEyNDI3NS01NTBCLUNDQTdBRDRBNCIsInVzZXJUb2tlbklkIjoiYjNlYjMzZDItYjI0My00YWQ4LTg5ZjEtOTJkNzljMWNjNTE3Iiwic2Vzc2lvbklkIjoiNjAwMzdiN2JkYjhiNTQ2MWFiYmFmOTNhOWM1ZDZiNTMifQ.C4QagXSAT5k4H9tDoZOS_4DypXIBNi4gZqB_AZQ40eEWhSQAHBTWEik86mxIuu4qCTBMBPJ28kjdXJEDCfgTMQ",
+    "createTime": "2023-06-15 14:36:03",
+    "appId": "YHZX0000000000000001",
+    "sign": "7bdc8e55f31e618192c51b52f81ad011cd45eaff0d22c78a5c2d81205d1b9389",
+    "expireAt": "2023-06-15 16:36:41"
+  },
+  "status_code": "0000",
+  "message": "操作成功"
+}