AA пре 7 месеци
родитељ
комит
1f509e2f50
15 измењених фајлова са 787 додато и 94 уклоњено
  1. 44 0
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/enumresources/QmApproveTypeEnumV2.java
  2. 1 1
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/enumresources/bu/BuErrorCodeEnum.java
  3. 89 0
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/bu/v2/BuApproveSyncReqVO.java
  4. 13 6
      approve-core-service/pom.xml
  5. 77 2
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/api/impl/ReportApprovalsBusinessImpl.java
  6. 4 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/INoticeBusiness.java
  7. 76 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/impl/NoticeBusinessImpl.java
  8. 23 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/impl/v2/INoticeBusinessV2.java
  9. 156 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/impl/v2/NoticeBusinessImplV2.java
  10. 115 25
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/ApproveLogBusinessImpl.java
  11. 98 53
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/event/listener/ApproveOperateLogEventListener.java
  12. 76 7
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/api/v3/ApiV3ApproveFacade.java
  13. 10 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/LogInfoMetaDTO.java
  14. 5 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/QmOperateLogDTO.java
  15. BIN
      approve-core-service/src/main/lib/auditlog-qm-tj-1.0.3-SNAPSHOT.jar

+ 44 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/enumresources/QmApproveTypeEnumV2.java

@@ -0,0 +1,44 @@
+package com.dragonsoft.dcuc.approve.enumresources;
+
+import com.dragonsoft.duceap.base.enums.ICodeEnum;
+
+public enum QmApproveTypeEnumV2 implements ICodeEnum {
+	
+	/**
+     * 发起
+     */
+	START("13", "发起流程"),
+    /**
+     * 撤销
+     */
+    RECALL("14", "撤销"),
+    /**
+     * 撤回
+     */
+    REBACK("16", "撤回"),
+    /**
+     * 审批
+     */
+    APPROVE("15", "审批");
+	
+    
+
+    private final String value;
+
+    private final String label;
+
+    QmApproveTypeEnumV2(String value, String label) {
+        this.value = value;
+        this.label = label;
+    }
+
+    @Override
+    public String getValue() {
+        return this.value;
+    }
+
+    @Override
+    public String getLabel() {
+        return this.label;
+    }
+}

+ 1 - 1
approve-api/src/main/java/com/dragonsoft/dcuc/approve/enumresources/bu/BuErrorCodeEnum.java

@@ -19,7 +19,7 @@ public enum BuErrorCodeEnum implements ICodeEnum {
     /**
      * 系统异常
      */
-    SYSTEM_ERROR("00001", "系统异常"),
+    SYSTEM_ERROR("0001", "系统异常"),
     /**
      * 参数校验异常
      */

+ 89 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/bu/v2/BuApproveSyncReqVO.java

@@ -0,0 +1,89 @@
+package com.dragonsoft.dcuc.approve.model.req.bu.v2;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * 
+ * @author julong
+ *
+ */
+@Setter
+@Getter
+@ToString
+@ApiModel(value = "BU审批同步接口")
+public class BuApproveSyncReqVO {
+
+    @NotBlank
+    @ApiModelProperty(value = "来源系统编码")
+    private String appId;
+    
+    
+    @NotBlank
+    @ApiModelProperty(value = "来源组织机构编码")
+    private String sourceOrgCode;
+    
+    @NotBlank
+    @ApiModelProperty(value = "任务编号")
+    private String taskId;
+
+    @NotNull
+    @ApiModelProperty(value = "任务创建时间")
+    private String createTime;
+    
+    
+    @NotBlank
+    @ApiModelProperty(value = "任务创建人身份证号")
+    private String creatorIdCard;
+    
+    @NotBlank
+    @ApiModelProperty(value = "任务创建人员姓名")
+    private String creatorUserName;
+    
+    @NotBlank
+    @ApiModelProperty(value = "任务创建人组织机构编码")
+    private String creatorUnitCode;
+    
+    @NotBlank
+    @ApiModelProperty(value = "任务创建人组织机构名称")
+    private String creatorUnitName;
+    
+    @NotBlank
+    @ApiModelProperty(value = "任务最终审批人身份证")
+    private String lastReviewerIdCard;
+    
+    @NotBlank
+    @ApiModelProperty(value = "任务最终审批人姓名")
+    private String lastReviewerName;
+    
+    @NotBlank
+    @ApiModelProperty(value = "任务最终审批人组织机构编码")
+    private String lastReviewerUnitCode;
+    
+    @NotBlank
+    @ApiModelProperty(value = "任务最终审批人组织机构名称")
+    private String lastReviewerUnitName;
+
+    @NotNull
+    @ApiModelProperty(value = "任务审批结束时间")
+    private String finishTime;
+
+
+  
+
+    @NotNull
+    @Valid
+    @ApiModelProperty(value = "流程业务数据")
+    private Map<String,Object> bizData;
+
+}

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

@@ -99,15 +99,22 @@
         </dependency>
 
         <!--对接审计-->
+        <!-- <dependency> -->
+        <!--     <groupId>com.dragonsoft</groupId> -->
+        <!--     <artifactId>auditlog-qm-tj</artifactId> -->
+        <!--     <exclusions> -->
+        <!--         <exclusion> -->
+        <!--             <artifactId>joda-time</artifactId> -->
+        <!--             <groupId>joda-time</groupId> -->
+        <!--         </exclusion> -->
+        <!--     </exclusions> -->
+        <!-- </dependency> -->
         <dependency>
             <groupId>com.dragonsoft</groupId>
             <artifactId>auditlog-qm-tj</artifactId>
-            <exclusions>
-                <exclusion>
-                    <artifactId>joda-time</artifactId>
-                    <groupId>joda-time</groupId>
-                </exclusion>
-            </exclusions>
+            <version>1.0.3-SNAPSHOT</version>
+            <scope>system</scope>
+            <systemPath>${project.basedir}\src\main\lib\auditlog-qm-tj-1.0.3-SNAPSHOT.jar</systemPath>
         </dependency>
         <!--对接审计-->
         <!--测试-->

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

@@ -2,6 +2,7 @@ package com.dragonsoft.dcuc.approve.business.api.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.dragoninfo.dcuc.app.entity.ApplyInfo;
@@ -11,6 +12,7 @@ import com.dragonsoft.dcuc.approve.business.api.IApproveApiBusiness;
 import com.dragonsoft.dcuc.approve.business.api.IReportApprovalsBusiness;
 import com.dragonsoft.dcuc.approve.business.external.IDcucBusiness;
 import com.dragonsoft.dcuc.approve.business.external.INoticeBusiness;
+import com.dragonsoft.dcuc.approve.business.external.impl.v2.INoticeBusinessV2;
 import com.dragonsoft.dcuc.approve.constants.ApproveConstants;
 import com.dragonsoft.dcuc.approve.enumresources.*;
 import com.dragonsoft.dcuc.approve.enumresources.bu.BizDataTypeEnum;
@@ -56,6 +58,7 @@ public class ReportApprovalsBusinessImpl implements IReportApprovalsBusiness {
     private IApproveCirculationService approveCirculationService;
 
     private INoticeBusiness noticeBusiness;
+    
 
     private IApproveTaskClassService approveTaskClassService;
 
@@ -125,9 +128,14 @@ public class ReportApprovalsBusinessImpl implements IReportApprovalsBusiness {
         List<ReportApproveSyncBizGridReqVO> bizGridReqList = parseToReportApproveSyncBizGridReqVO(bizData);
 
         String approveId = syncToStore(reportApproveSyncReqVO, bizApproveReqVO, bizGridReqList);
-        BuApproveSyncReqVO buApproveSyncReqVO = reportApproveSyncReqVO.toBuApproveSyncReqVO();
+        
+//        BuApproveSyncReqVO buApproveSyncReqVO = reportApproveSyncReqVO.toBuApproveSyncReqVO();
         // 报送到 BU
-        ResponseStatus responseStatus = noticeBusiness.retryRequestSyncToBu(buApproveSyncReqVO);
+//        ResponseStatus responseStatus = noticeBusiness.retryRequestSyncToBu(buApproveSyncReqVO);
+        
+        // 报送到 BU V2版本
+        com.dragonsoft.dcuc.approve.model.req.bu.v2.BuApproveSyncReqVO basrVO = createTestV2(reportApproveSyncReqVO);
+        ResponseStatus responseStatus = noticeBusiness.retryRequestSyncToBuV2(basrVO);
         if (ResponseUtil.isSuccess(responseStatus)) {
             approveRecordService.updateSyncFlag(approveId, BooleanEnum.TRUE);
             return ZeroTrustMessageRespVO.messageEnumMessage(ZeroTrustBusinessRespEnum.SUCCESS);
@@ -138,6 +146,73 @@ public class ReportApprovalsBusinessImpl implements IReportApprovalsBusiness {
     }
 
     /**
+     * 创建上报TO BU实体对象 V2
+     * 20240923修改
+     * @param reportApproveSyncReqVO
+     * @return
+     */
+    private com.dragonsoft.dcuc.approve.model.req.bu.v2.BuApproveSyncReqVO createTestV2(ReportApproveSyncReqVO reportApproveSyncReqVO) {
+		
+    	com.dragonsoft.dcuc.approve.model.req.bu.v2.BuApproveSyncReqVO basrVO = new com.dragonsoft.dcuc.approve.model.req.bu.v2.BuApproveSyncReqVO();
+        
+    	String taskId = reportApproveSyncReqVO.getTaskId();
+    	Map<String, Object> bizData = reportApproveSyncReqVO.getBizData();
+    	ReportApproveSyncBizApproveReqVO bizApproveReqVO = parseToReportApproveSyncBizApproveReqVO(bizData);
+    	List<ReportApproveSyncBizGridReqVO> bizGridReqList = parseToReportApproveSyncBizGridReqVO(bizData);
+        
+        Map<String,Object> bizDataV2 = new HashMap<>();
+        Map<String,Object> taskInfo = new HashMap<>();
+        taskInfo.put("title", bizApproveReqVO.getTitle());//任务名称
+        taskInfo.put("taskClass", bizApproveReqVO.getTaskClass());//任务类型编码
+        taskInfo.put("taskTermStart", bizApproveReqVO.getTaskTermStart());//任务有效期开始时间
+        taskInfo.put("taskTermEnd", bizApproveReqVO.getTaskTermEnd());//任务有效期结束时间
+        taskInfo.put("taskStatus", bizApproveReqVO.getTaskStatus());//任务状态
+        List<Object> approveGrid = new ArrayList<>();
+        
+        for (ReportApproveSyncBizGridReqVO reportApproveSyncBizGridReqVO : bizGridReqList) {
+        	Map<String,Object> g1 = new HashMap<>();
+            g1.put("id", reportApproveSyncBizGridReqVO.getId());//要素或承办人数据唯一标识
+            g1.put("dataType", reportApproveSyncBizGridReqVO.getDataType());//业务数据类型
+            g1.put("elementContent", reportApproveSyncBizGridReqVO.getElementContent());//要素内容
+            g1.put("elementType", reportApproveSyncBizGridReqVO.getElementType());//要输类型编码
+            g1.put("elementTypeName", reportApproveSyncBizGridReqVO.getElementType());//要输类型名称
+            g1.put("elementTermStart", reportApproveSyncBizGridReqVO.getElementTermStart());//要素有效期开始时间
+            g1.put("elementTermEnd", reportApproveSyncBizGridReqVO.getElementTermEnd());//要素有效期结束时间
+            g1.put("handleUnitCode", reportApproveSyncBizGridReqVO.getHandleUnitCode());//承办人所在组织机构编码
+            g1.put("handleUnitName", reportApproveSyncBizGridReqVO.getHandleUnitName());//承办人所在组织机构名称
+            g1.put("handleUserIdCard", reportApproveSyncBizGridReqVO.getHandleUserId());//承办人身份证号
+            g1.put("handleUserName", reportApproveSyncBizGridReqVO.getHandleUserName());//承办人姓名
+            approveGrid.add(g1);
+		}
+        
+        bizDataV2.put("taskInfo", taskInfo);
+        bizDataV2.put("approveGrid",approveGrid);
+        
+        String createrId = reportApproveSyncReqVO.getCreaterId();
+        OauthUserVO oauthUserVO = dcucBusiness.getOauthUserInfoByIdcard(createrId);
+        
+        basrVO.setAppId(reportApproveSyncReqVO.getAppId());
+        basrVO.setSourceOrgCode(oauthUserVO.getOrgCode());
+        basrVO.setTaskId(taskId);
+        String customFormat = "yyyy-MM-dd HH:mm:ss";
+        basrVO.setCreateTime(DateUtil.format(reportApproveSyncReqVO.getCreateTime(), customFormat));
+        basrVO.setCreatorIdCard(oauthUserVO.getIdcard());
+        basrVO.setCreatorUserName(oauthUserVO.getName());
+        basrVO.setCreatorUnitCode(oauthUserVO.getOrgCode());
+        basrVO.setCreatorUnitName(oauthUserVO.getOrgName());
+        basrVO.setLastReviewerIdCard(reportApproveSyncReqVO.getLastReviewerIdCard());
+        basrVO.setLastReviewerName(reportApproveSyncReqVO.getLastReviewerName());
+        basrVO.setLastReviewerUnitCode(reportApproveSyncReqVO.getLastReviewerUnitCode());
+        basrVO.setLastReviewerUnitName(reportApproveSyncReqVO.getLastReviewerUnitName());
+        basrVO.setFinishTime(DateUtil.format(reportApproveSyncReqVO.getFinishTime(), customFormat));
+        
+        
+        basrVO.setBizData(bizDataV2);
+        
+        return basrVO;
+	}
+
+	/**
      * 同步存储
      *
      * @param reportApproveSyncReqVO 上报请求信息

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

@@ -38,4 +38,8 @@ public interface INoticeBusiness {
      * @return 状态
      */
      ResponseStatus retryRequestSyncToBu(BuApproveSyncReqVO buApproveSyncReqVO);
+     
+     
+     ResponseStatus retryRequestSyncToBuV2(com.dragonsoft.dcuc.approve.model.req.bu.v2.BuApproveSyncReqVO buApproveSyncReqVO);
+     
 }

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

@@ -211,4 +211,80 @@ public class NoticeBusinessImpl implements INoticeBusiness {
 
         return ResponseUtil.newInstance(respDto.getData());
     }
+    
+    /**
+     * V2 版本
+     */
+	@Override
+	public ResponseStatus retryRequestSyncToBuV2(
+			com.dragonsoft.dcuc.approve.model.req.bu.v2.BuApproveSyncReqVO buApproveSyncReqVO) {
+		if (!approveBuProperties.isEnable()) {
+            return ResponseStatus.success();
+        }
+        String syncTaskUrl = approveBuProperties.getSyncTaskUrl();
+
+        ResponseStatus responseStatus;
+        try {
+            responseStatus = RESPONSE_STATUS_RETRYER.call(() -> syncToBuBaseReqV2(syncTaskUrl, buApproveSyncReqVO, "同步任务信息到BUV2"));
+        } catch (ExecutionException | RetryException e) {
+            logger.error("retry error", e);
+            responseStatus = ResponseStatus.fail(e.getMessage());
+        }
+
+        return responseStatus;
+	}
+
+	
+	/**
+	 * V2 版本
+	 * @param url
+	 * @param buApproveSyncReqVO
+	 * @param requestName
+	 * @return
+	 */
+	protected ResponseStatus syncToBuBaseReqV2(String url, com.dragonsoft.dcuc.approve.model.req.bu.v2.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<com.dragonsoft.dcuc.approve.model.req.bu.v2.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 :{}", requestName, 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());
+    }
+    
 }

+ 23 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/impl/v2/INoticeBusinessV2.java

@@ -0,0 +1,23 @@
+package com.dragonsoft.dcuc.approve.business.external.impl.v2;
+
+import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/3/8
+ */
+public interface INoticeBusinessV2 {
+    
+     
+     /**
+      * 请求同步到 BU V2版本
+      *
+      * @param buApproveSyncReqVO 同步请求
+      * @return 状态
+      */
+     ResponseStatus retryRequestSyncToBuV2(com.dragonsoft.dcuc.approve.model.req.bu.v2.BuApproveSyncReqVO buApproveSyncReqVO);
+}

+ 156 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/impl/v2/NoticeBusinessImplV2.java

@@ -0,0 +1,156 @@
+package com.dragonsoft.dcuc.approve.business.external.impl.v2;
+
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+
+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.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import com.dragoninfo.dcuc.common.utils.ResponseUtil;
+import com.dragoninfo.dcuc.common.utils.ValidUtil;
+import com.dragonsoft.dcuc.approve.business.external.impl.NoticeBusinessImpl;
+import com.dragonsoft.dcuc.approve.constants.ApproveBeanConstants;
+import com.dragonsoft.dcuc.approve.enumresources.bu.BuErrorCodeEnum;
+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.AttemptTimeLimiters;
+import com.github.rholder.retry.RetryException;
+import com.github.rholder.retry.Retryer;
+import com.github.rholder.retry.RetryerBuilder;
+import com.github.rholder.retry.StopStrategies;
+import com.github.rholder.retry.WaitStrategies;
+
+/**
+ * @author hunagzqa
+ * @date 2022/11/16
+ */
+@Component
+public class NoticeBusinessImplV2 implements INoticeBusinessV2 {
+
+	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);
+
+    private static final Retryer<ResponseStatus> RESPONSE_STATUS_RETRYER =
+            RetryerBuilder.<ResponseStatus>newBuilder()
+                    .retryIfException()
+                    .retryIfResult(item -> !item.getStatusCode().equals(ResponseStatus.SUCCESS_CODE))
+                    .withAttemptTimeLimiter(AttemptTimeLimiters.fixedTimeLimit(5, TimeUnit.SECONDS))
+                    .withWaitStrategy(WaitStrategies.fixedWait(1, TimeUnit.SECONDS))
+                    .withStopStrategy(StopStrategies.stopAfterAttempt(5))
+                    .build();
+
+    
+
+    /**
+     * V2 版本
+     */
+	@Override
+	public ResponseStatus retryRequestSyncToBuV2(
+			com.dragonsoft.dcuc.approve.model.req.bu.v2.BuApproveSyncReqVO buApproveSyncReqVO) {
+		if (!approveBuProperties.isEnable()) {
+            return ResponseStatus.success();
+        }
+        String syncTaskUrl = approveBuProperties.getSyncTaskUrl();
+
+        ResponseStatus responseStatus;
+        try {
+            responseStatus = RESPONSE_STATUS_RETRYER.call(() -> syncToBuBaseReqV2(syncTaskUrl, buApproveSyncReqVO, "同步任务信息到BUV2"));
+        } catch (ExecutionException | RetryException e) {
+            logger.error("retry error", e);
+            responseStatus = ResponseStatus.fail(e.getMessage());
+        }
+
+        return responseStatus;
+	}
+	
+	/**
+	 * V2 版本
+	 * @param url
+	 * @param buApproveSyncReqVO
+	 * @param requestName
+	 * @return
+	 */
+	protected ResponseStatus syncToBuBaseReqV2(String url, com.dragonsoft.dcuc.approve.model.req.bu.v2.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<com.dragonsoft.dcuc.approve.model.req.bu.v2.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 :{}", requestName, 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());
+    }
+
+	
+}

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

@@ -1,10 +1,26 @@
 package com.dragonsoft.dcuc.approve.business.impl;
 
-import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.StrUtil;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.dragoninfo.dcuc.common.Constants;
+import com.dragoninfo.dcuc.common.enums.UserExtInfoEnum;
 import com.dragoninfo.dcuc.common.utils.LangUtil;
 import com.dragoninfo.dcuc.common.utils.ResponseUtil;
 import com.dragoninfo.dcuc.duceap.enums.ManageDisposeTypeEnum;
@@ -15,22 +31,37 @@ import com.dragonsoft.dcuc.approve.business.IApproveLogBusiness;
 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.enumresources.ApproveResultEnum;
+import com.dragonsoft.dcuc.approve.enumresources.ApproveWorkFlowOperationEnum;
+import com.dragonsoft.dcuc.approve.enumresources.CommitTypeEnum;
+import com.dragonsoft.dcuc.approve.enumresources.LogReceiverEnum;
+import com.dragonsoft.dcuc.approve.enumresources.LogTypeEnum;
+import com.dragonsoft.dcuc.approve.enumresources.QmApproveTypeEnum;
+import com.dragonsoft.dcuc.approve.enumresources.QmApproveTypeEnumV2;
+import com.dragonsoft.dcuc.approve.event.ApproveEventPublish;
+import com.dragonsoft.dcuc.approve.model.FlowManageLog;
+import com.dragonsoft.dcuc.approve.model.OperateLog;
+import com.dragonsoft.dcuc.approve.model.RequestLog;
+import com.dragonsoft.dcuc.approve.model.RiskLog;
+import com.dragonsoft.dcuc.approve.model.RiskScheme;
 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.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.resp.OperateRespVO;
 import com.dragonsoft.dcuc.approve.model.vo.dcuc.OauthUserVO;
 import com.dragonsoft.dcuc.approve.properties.ApproveProperties;
-import com.dragonsoft.dcuc.approve.service.*;
+import com.dragonsoft.dcuc.approve.service.IFlowManageLogService;
+import com.dragonsoft.dcuc.approve.service.IOperateLogService;
+import com.dragonsoft.dcuc.approve.service.IRequestLogService;
+import com.dragonsoft.dcuc.approve.service.IRiskLogService;
+import com.dragonsoft.dcuc.approve.service.IRiskSchemeService;
 import com.dragonsoft.dcuc.approve.utils.ProofsUtil;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.base.entity.security.BaseSecurityUser;
+import com.dragonsoft.duceap.base.entity.security.SecurityUser;
 import com.dragonsoft.duceap.base.exception.ApplicationException;
 import com.dragonsoft.duceap.base.utils.UserContextUtils;
 import com.dragonsoft.duceap.commons.util.enums.EnumUtils;
@@ -41,17 +72,10 @@ import com.dragonsoft.duceap.duwf.api.model.ProcessInstanceVO;
 import com.dragonsoft.duceap.duwf.api.model.TaskDefinitionVo;
 import com.dragonsoft.duceap.duwf.api.model.TaskHistoryDetailVo;
 import com.dragonsoft.duceap.workflow.client.WorkflowClientFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.web.context.request.RequestContextHolder;
-import org.springframework.web.context.request.ServletRequestAttributes;
 
-import javax.servlet.http.HttpServletRequest;
-import java.util.*;
-import java.util.stream.Collectors;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 
 /**
  * 代码千万行,注释第一行,编码不规范,同事两行泪
@@ -165,7 +189,7 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
                 break;
             case RECALL:
                 //审批请求日志
-                buildRequestLog(RequestDisposeTypeEnum.RECALL.getValue(), logDto, flowNodeCode, flowNodeName, taskKey, flowKey, processInstanceId, "22");
+                buildRequestLog(RequestDisposeTypeEnum.RECALL, logDto, flowNodeCode, flowNodeName, taskKey, flowKey, processInstanceId, "22");
                 break;
             default:
                 break;
@@ -182,7 +206,7 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
      * @param taskKey      任务key
      * @param flowKey      流程key
      */
-    private void buildRequestLog(String disposeType, LogDto logDto, String flowNodeCode, String flowNodeName,
+    private void buildRequestLog(RequestDisposeTypeEnum disposeTypeEnum, LogDto logDto, String flowNodeCode, String flowNodeName,
                                  String taskKey, String flowKey, String processInstanceId, String businessCode) {
 
         ApprovalInfoDTO approvalInfoDTO = logDto.getApprovalInfoDTO();
@@ -192,7 +216,7 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
         requestLog.setOrgCode(approvalInfoDTO.getApplicantOrgCode());
         requestLog.setBusinessCode(approvalInfoDTO.getBusinessCode());
         requestLog.setTitle(approvalInfoDTO.getProcessTitle());
-        requestLog.setDisposeType(disposeType);
+        requestLog.setDisposeType(disposeTypeEnum.getValue());
         requestLog.setResult(logDto.getResult());
         requestLog.setFailMsg(logDto.getFailMsg());
         requestLog.setCreateIp(logDto.getCreateIp());
@@ -200,7 +224,8 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
 //        requestLog.setOperateContent(JSON.toJSONString(logDto.getApprovalInfo()));
         requestLog.setCreateUser(logDto.getCreateUser());
         requestLog.setCreateUserName(logDto.getCreateUserName());
-        requestLog.setCreateTime(new Date());
+        Date date = new Date();
+        requestLog.setCreateTime(date);
         requestLog.setFlowNodeCode(flowNodeCode);
         requestLog.setFlowNodeName(flowNodeName);
         requestLog.setApproveRecordId(approvalInfoDTO.getId());
@@ -217,6 +242,24 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
         // 请求发起
         logInfoMetaDTO.setBusinessType(businessCode);
 
+        
+     // 2024-8-21 对接BU新规范
+        logInfoMetaDTO.setTaskId(approvalInfoDTO.getTaskId());
+        logInfoMetaDTO.setTaskName(approvalInfoDTO.getTaskName());
+        logInfoMetaDTO.setAppName(approvalInfoDTO.getAppName());
+        logInfoMetaDTO.setOperatorCertNo(approvalInfoDTO.getApplicantIdcard());
+        logInfoMetaDTO.setOperatorName(approvalInfoDTO.getApplicantName());
+        logInfoMetaDTO.setOperatorOrgCode(approvalInfoDTO.getApplicantOrgCode());
+        logInfoMetaDTO.setOperatorOrgName(approvalInfoDTO.getApplicantOrgName());
+        logInfoMetaDTO.setOperateTime(DateUtil.format(date, "yyyy-MM-dd HH:mm:ss"));
+        
+        if (RequestDisposeTypeEnum.START.equals(disposeTypeEnum)) {
+        	logInfoMetaDTO.setOperateType(QmApproveTypeEnumV2.START.getValue());
+        }else if(RequestDisposeTypeEnum.RECALL.equals(disposeTypeEnum)) {
+        	logInfoMetaDTO.setOperateType(QmApproveTypeEnumV2.RECALL.getValue());
+        }
+		
+        
         sendInfo(JSON.toJSONString(requestLog), "审批请求日志", logInfoMetaDTO);
     }
 
@@ -267,6 +310,23 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
         logInfoMetaDTO.setBusinessType(operateDisposeTypeEnum.businessTypeCode);
         logInfoMetaDTO.setNeedSendRedListRisk(dto.getNeedSendRedListRisk());
         logInfoMetaDTO.setRedListOperateRespVO(JsonUtils.toJSONString(dto.getRedListOperateRespVO()));
+        // 2024-8-21 对接BU新规范
+        logInfoMetaDTO.setTaskId(approvalInfoDTO.getTaskId());
+        logInfoMetaDTO.setTaskName(approvalInfoDTO.getTaskName());
+        logInfoMetaDTO.setAppName(approvalInfoDTO.getAppName());
+        logInfoMetaDTO.setOperatorCertNo(approvalInfoDTO.getApplicantIdcard());
+        logInfoMetaDTO.setOperatorName(approvalInfoDTO.getApplicantName());
+        logInfoMetaDTO.setOperatorOrgCode(approvalInfoDTO.getApplicantOrgCode());
+        logInfoMetaDTO.setOperatorOrgName(approvalInfoDTO.getApplicantOrgName());
+        logInfoMetaDTO.setOperateTime(DateUtil.format(dto.getCreateTime(), "yyyy-MM-dd HH:mm:ss"));
+        
+        if (OperateDisposeTypeEnum.COMPLETE_DISAGREE.equals(operateDisposeTypeEnum)) {
+        	logInfoMetaDTO.setOperateType(QmApproveTypeEnumV2.REBACK.getValue());
+        }else if(OperateDisposeTypeEnum.COMPLETE_AGREE.equals(operateDisposeTypeEnum)) {
+        	logInfoMetaDTO.setOperateType(QmApproveTypeEnumV2.APPROVE.getValue());
+        }
+		
+        
         //发送审批操作日志消息
         logger.info("=====发送审批操作日志消息,消息体为:{}====", JSON.toJSONString(operateLog));
         sendInfo(JSON.toJSONString(operateLog), "审批操作日志", logInfoMetaDTO);
@@ -525,7 +585,7 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
                 .requestIdcard(requestIdcard)
                 .requestUsername(requestUsername)
                 .requestApproveIp(requestApproveIp)
-                .flowFinish(flowFinish)
+                .flowFinish(flowFinish).logInfoMetaDTO(logInfoMetaDTO)
                 .build();
 
         approveEventPublish.publishOperateEvent(qmOperateLogDTO);
@@ -571,7 +631,7 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
                 .requestApproveIp(createIp)
                 .approveIdcard(applicantIdcard)
                 .businessType(businessType)
-                .approveTime(createTime)
+                .approveTime(createTime).logInfoMetaDTO(logInfoMetaDTO)
                 .build();
 
         approveEventPublish.publishOperateEvent(qmOperateLogDTO);
@@ -626,7 +686,7 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
                 .approveTime(createTime)
                 .requestIdcard(requestIdcard)
                 .requestUsername(requestUsername)
-                .requestApproveIp(requestApproveIp)
+                .requestApproveIp(requestApproveIp).logInfoMetaDTO(logInfoMetaDTO)
                 .build();
 
 
@@ -649,7 +709,7 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
             String flowKey = processInstanceInfoDTO.getFlowKey();
             String processInstanceId = processInstanceInfoDTO.getProcessInstanceId();
             //如果是保存并提交,则需要构建(申请请求日志-发起)对象
-            buildRequestLog(RequestDisposeTypeEnum.START.getValue(), logDto, "start", "开始", "start", flowKey, processInstanceId, "21");
+            buildRequestLog(RequestDisposeTypeEnum.START, logDto, "start", "开始", "start", flowKey, processInstanceId, "21");
         }
     }
 
@@ -719,6 +779,23 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
         logInfoMetaDTO.setProcessInstanceId(processInstanceId);
         logInfoMetaDTO.setTerminalIp(logDto.getCreateIp());
         logInfoMetaDTO.setBusinessType(manageDisposeTypeEnum.auditCode);
+        
+     // 2024-8-21 对接BU新规范
+        logInfoMetaDTO.setTaskId(approvalInfoDTO.getTaskId());
+        logInfoMetaDTO.setTaskName(approvalInfoDTO.getTaskName());
+        logInfoMetaDTO.setAppName(approvalInfoDTO.getAppName());
+        logInfoMetaDTO.setOperatorCertNo(approvalInfoDTO.getApplicantIdcard());
+        logInfoMetaDTO.setOperatorName(approvalInfoDTO.getApplicantName());
+        logInfoMetaDTO.setOperatorOrgCode(approvalInfoDTO.getApplicantOrgCode());
+        logInfoMetaDTO.setOperatorOrgName(approvalInfoDTO.getApplicantOrgName());
+        logInfoMetaDTO.setOperateTime(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
+        
+        if (ManageDisposeTypeEnum.UPDATE.equals(manageDisposeTypeEnum)) {
+        	logInfoMetaDTO.setOperateType(QmApproveTypeEnumV2.START.getValue());
+        }else if (ManageDisposeTypeEnum.DELETED.equals(manageDisposeTypeEnum)) {
+        	logInfoMetaDTO.setOperateType(QmApproveTypeEnumV2.RECALL.getValue());
+        }
+        
         sendInfo(flowManageLogJsonString, "审批流程管理日志", logInfoMetaDTO);
     }
 
@@ -739,8 +816,21 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
                 String appTokenId = request.getHeader(Constants.RZZX_APPTOKEN);
                 logger.info("从请求头获取到应用令牌信息:{}", appTokenId);
                 logInfoMetaDTO.setAppToken(appTokenId);
+                
+                
+                
             }
         }
+        
+        System.out.println("======================================20240909=========================");
+        appToken = logInfoMetaDTO.getAppToken();
+        if (StrUtil.isBlank(appToken)) {
+	        SecurityUser securityUser = (SecurityUser)UserContextUtils.getCurrentUser();
+	        String appTokenId = (String)securityUser.getExtendtions().get(UserExtInfoEnum.APP_TOKEN_ID.getValue());
+	        logger.info("=================20240909==================" + appTokenId);
+	        logInfoMetaDTO.setAppToken(appTokenId);
+        }
+        System.out.println("======================================20240909=========================");
 
         ApproveLogDTO approveLogDTO = ApproveLogDTO.builder()
                 .content(content)

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

@@ -1,19 +1,22 @@
 package com.dragonsoft.dcuc.approve.event.listener;
 
-import com.dragoninfo.dcuc.duceap.enums.OperateDisposeTypeEnum;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 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.auditlog.collection.qmtj.pojo.req.ApproveBusLogV2;
 import com.dragonsoft.dcuc.approve.event.event.AuditApproveOperateLogEvent;
+import com.dragonsoft.dcuc.approve.model.dto.LogInfoMetaDTO;
 import com.dragonsoft.dcuc.approve.model.dto.QmOperateLogDTO;
 import com.dragonsoft.dcuc.approve.properties.ApproveProperties;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationListener;
 import org.springframework.stereotype.Component;
 
 import java.util.Collections;
-import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author wangrs
@@ -47,6 +50,68 @@ public class ApproveOperateLogEventListener implements ApplicationListener<Audit
      */
     public static final String EXTEND = "1";
 
+//    @Override
+//    public void onApplicationEvent(AuditApproveOperateLogEvent event) {
+//        if (!approveProperties.getSendToAudit()) {
+//            return;
+//        }
+//
+//        String auditSysId = approveProperties.getAuditSysId();
+//
+//        QmOperateLogDTO qmOperateLogDTO = event.getQmOperateLogDTO();
+//        String appToken = qmOperateLogDTO.getAppToken();
+//        String requestIdcard = qmOperateLogDTO.getRequestIdcard();
+//        String requestUsername = qmOperateLogDTO.getRequestUsername();
+//        String requestApproveIp = qmOperateLogDTO.getRequestApproveIp();
+//
+//        QmApproveTypeEnum qmApproveTypeEnum = qmOperateLogDTO.getQmApproveTypeEnum();
+//        String businessType = qmOperateLogDTO.getBusinessType();
+//        String approveIdcard = qmOperateLogDTO.getApproveIdcard();
+//        String approveUserName = qmOperateLogDTO.getApproveUserName();
+//        OperateDisposeTypeEnum operateDisposeTypeEnum = qmOperateLogDTO.getOperateDisposeTypeEnum();
+//        Date approveTime = qmOperateLogDTO.getApproveTime();
+//        // 文档有误,实际需使用毫秒
+//        String approveTimeString = approveTime.getTime() + "";
+//        String approveLogId = qmOperateLogDTO.getApproveLogId();
+//
+//        Boolean flowFinish = qmOperateLogDTO.getFlowFinish();
+//        String approveNo = qmOperateLogDTO.getApproveNo();
+//
+//        ApproveBusLog approveBusLog = new ApproveBusLog();
+//        approveBusLog.setAppToken(appToken);
+//        approveBusLog.setApplyApproveId(requestIdcard);//审批操作人身份证号
+//        approveBusLog.setApplyApproveIdCard(requestIdcard); //审批操作人身份证号
+//        approveBusLog.setApplyApproveName(requestUsername);//审批操作人姓名
+//        approveBusLog.setApplyApproveIp(requestApproveIp);//终端IP
+//        approveBusLog.setOperateTime(approveTimeString);//操作时间
+//        approveBusLog.setApplyType(qmApproveTypeEnum.getValue());
+//        approveBusLog.setBusinessType(businessType);
+//        approveBusLog.setApproveContentHash("");
+//        approveBusLog.setApproveTableHash("");
+//
+//        if (qmApproveTypeEnum.equals(QmApproveTypeEnum.OPERATE)) {
+//            approveBusLog.setApproveId(approveIdcard);
+//            approveBusLog.setApproveIdCard(approveIdcard);
+//            approveBusLog.setApproveName(approveUserName);
+//            approveBusLog.setApproveInforceTime(approveTimeString);
+//
+//            if (flowFinish != null && flowFinish) {
+//                approveBusLog.setApproveResult(operateDisposeTypeEnum.getAuditCode());
+//                approveBusLog.setApproveTime(approveTimeString);
+//            }
+//        }
+//        approveBusLog.setApproveTaskId(approveLogId);
+//        approveBusLog.setApplySystemId("");
+//        approveBusLog.setApproveCenterId(approveNo);
+//        approveBusLog.setExtend(EXTEND);
+//        approveBusLog.setRelatedId("");
+//
+//        List<ApproveBusLog> approveBusLogList = Collections.singletonList(approveBusLog);
+//        logSendComponent.sendApproveBusLog(auditSysId, OPERATE_LOG_TYPE, approveBusLogList);
+//        
+//    }
+    
+    
     @Override
     public void onApplicationEvent(AuditApproveOperateLogEvent event) {
         if (!approveProperties.getSendToAudit()) {
@@ -56,54 +121,34 @@ public class ApproveOperateLogEventListener implements ApplicationListener<Audit
         String auditSysId = approveProperties.getAuditSysId();
 
         QmOperateLogDTO qmOperateLogDTO = event.getQmOperateLogDTO();
-        String appToken = qmOperateLogDTO.getAppToken();
-        String requestIdcard = qmOperateLogDTO.getRequestIdcard();
-        String requestUsername = qmOperateLogDTO.getRequestUsername();
-        String requestApproveIp = qmOperateLogDTO.getRequestApproveIp();
-
-        QmApproveTypeEnum qmApproveTypeEnum = qmOperateLogDTO.getQmApproveTypeEnum();
-        String businessType = qmOperateLogDTO.getBusinessType();
-        String approveIdcard = qmOperateLogDTO.getApproveIdcard();
-        String approveUserName = qmOperateLogDTO.getApproveUserName();
-        OperateDisposeTypeEnum operateDisposeTypeEnum = qmOperateLogDTO.getOperateDisposeTypeEnum();
-        Date approveTime = qmOperateLogDTO.getApproveTime();
-        // 文档有误,实际需使用毫秒
-        String approveTimeString = approveTime.getTime() + "";
-        String approveLogId = qmOperateLogDTO.getApproveLogId();
-
-        Boolean flowFinish = qmOperateLogDTO.getFlowFinish();
-        String approveNo = qmOperateLogDTO.getApproveNo();
-
-        ApproveBusLog approveBusLog = new ApproveBusLog();
-        approveBusLog.setAppToken(appToken);
-        approveBusLog.setApplyApproveId(requestIdcard);
-        approveBusLog.setApplyApproveIdCard(requestIdcard);
-        approveBusLog.setApplyApproveName(requestUsername);
-        approveBusLog.setApplyApproveIp(requestApproveIp);
-        approveBusLog.setOperateTime(approveTimeString);
-        approveBusLog.setApplyType(qmApproveTypeEnum.getValue());
-        approveBusLog.setBusinessType(businessType);
-        approveBusLog.setApproveContentHash("");
-        approveBusLog.setApproveTableHash("");
-
-        if (qmApproveTypeEnum.equals(QmApproveTypeEnum.OPERATE)) {
-            approveBusLog.setApproveId(approveIdcard);
-            approveBusLog.setApproveIdCard(approveIdcard);
-            approveBusLog.setApproveName(approveUserName);
-            approveBusLog.setApproveInforceTime(approveTimeString);
-
-            if (flowFinish != null && flowFinish) {
-                approveBusLog.setApproveResult(operateDisposeTypeEnum.getAuditCode());
-                approveBusLog.setApproveTime(approveTimeString);
-            }
-        }
-        approveBusLog.setApproveTaskId(approveLogId);
-        approveBusLog.setApplySystemId("");
-        approveBusLog.setApproveCenterId(approveNo);
-        approveBusLog.setExtend(EXTEND);
-        approveBusLog.setRelatedId("");
-
-        List<ApproveBusLog> approveBusLogList = Collections.singletonList(approveBusLog);
-        logSendComponent.sendApproveBusLog(auditSysId, OPERATE_LOG_TYPE, approveBusLogList);
+        LogInfoMetaDTO logInfoMetaDTO = qmOperateLogDTO.getLogInfoMetaDTO();
+        
+
+        ApproveBusLogV2 approveBusLog = new ApproveBusLogV2();
+        
+        Map<String,Object> baseStandardInfo = new HashMap<>();
+        baseStandardInfo.put("appName", logInfoMetaDTO.getAppName());
+        baseStandardInfo.put("operatorCertNo", logInfoMetaDTO.getOperatorCertNo());
+        baseStandardInfo.put("operatorName", logInfoMetaDTO.getOperatorName());
+        baseStandardInfo.put("operatorOrgName", logInfoMetaDTO.getOperatorOrgName());
+        baseStandardInfo.put("operatorOrgCode", logInfoMetaDTO.getOperatorOrgCode());
+        baseStandardInfo.put("terminalIp", logInfoMetaDTO.getTerminalIp());
+        
+        approveBusLog.setBaseStandardInfo(baseStandardInfo);
+        approveBusLog.setTaskId(logInfoMetaDTO.getTaskId());
+        approveBusLog.setTaskName(logInfoMetaDTO.getTaskName());
+        approveBusLog.setOperateTime(logInfoMetaDTO.getOperateTime());
+        approveBusLog.setOperateType(logInfoMetaDTO.getOperateType());
+
+        List<ApproveBusLogV2> approveBusLogList = Collections.singletonList(approveBusLog);
+        try {
+        	ObjectMapper mapper = new ObjectMapper();
+			String writeValueAsString = mapper.writeValueAsString(approveBusLogList);
+			JSONArray jsonArray = JSONObject.parseArray(writeValueAsString);
+			logSendComponent.sendApproveBusLogV2(auditSysId, OPERATE_LOG_TYPE, jsonArray);
+        }catch (Exception e) {
+        	e.printStackTrace();
+		}
+        
     }
 }

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

@@ -45,6 +45,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 import java.util.Collections;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.Map;
 
 /**
@@ -196,6 +197,8 @@ public class ApiV3ApproveFacade implements IApiV3ApproveFacade {
         zeroTrustApproveCreateV3RespVO.setProcessInstId(processInstanceId);
         return ZeroTrustResultDataVO.success(zeroTrustApproveCreateV3RespVO);
     }
+    
+    public static Map<String, String> statusMap = new HashMap<>();
 
     @Override
     public ZeroTrustMessageRespVO manage(ZeroTrustApproveManagerReqV3VO zeroTrustApproveManagerReqV3VO) {
@@ -207,14 +210,80 @@ public class ApiV3ApproveFacade implements IApiV3ApproveFacade {
             return ZeroTrustResultDataVO.operateFailMessage("请传入必填参数");
         }
 
-        ZeroTrustApproveManageEnum zeroTrustApproveManageEnum = EnumUtils.enumOf(ZeroTrustApproveManageEnum.class, actionType);
-        if (ObjectUtil.isNull(zeroTrustApproveManageEnum)) {
-            return ZeroTrustResultDataVO.operateFailMessage("actionType,参数不正确");
-        }
-        ApproveWorkFlowOperationEnum approveWorkFlowOperationEnum = zeroTrustApproveManageEnum.toApproveWorkFlowOperationEnum();
-        if (ObjectUtil.isNull(approveWorkFlowOperationEnum)) {
-            return ZeroTrustResultDataVO.operateFailMessage("暂不支持该操作");
+//        ZeroTrustApproveManageEnum zeroTrustApproveManageEnum = EnumUtils.enumOf(ZeroTrustApproveManageEnum.class, actionType);
+//        if (ObjectUtil.isNull(zeroTrustApproveManageEnum)) {
+//            return ZeroTrustResultDataVO.operateFailMessage("actionType,参数不正确");
+//        }
+//        ApproveWorkFlowOperationEnum approveWorkFlowOperationEnum = zeroTrustApproveManageEnum.toApproveWorkFlowOperationEnum();
+//        if (ObjectUtil.isNull(approveWorkFlowOperationEnum)) {
+//            return ZeroTrustResultDataVO.operateFailMessage("暂不支持该操作");
+//        }
+        
+        System.out.println("======================================20240909=========================");
+        if(statusMap.get(processInstId) == null) {
+        	statusMap.put(processInstId, actionType);
+        	return ZeroTrustMessageRespVO.messageEnumMessage(ZeroTrustBusinessRespEnum.SUCCESS);
+        }else {
+        	String oldStatus = statusMap.get(processInstId);
+        	
+        	if("01".equals(actionType)) {//
+        		
+        		if("01".equals(oldStatus)) {//chexiao
+        			return ZeroTrustResultDataVO.operateFailMessage("已经是撤销状态无法操作");
+            	}else if("02".equals(oldStatus)){//挂起
+                	statusMap.put(processInstId, actionType);
+            		return ZeroTrustMessageRespVO.messageEnumMessage(ZeroTrustBusinessRespEnum.SUCCESS);
+            	}else if("03".equals(oldStatus)){//终止
+            		return ZeroTrustResultDataVO.operateFailMessage("终止状态下无法执行撤销操作");
+            	}else if("04".equals(oldStatus)){//激活
+            		statusMap.put(processInstId, actionType);
+            		return ZeroTrustMessageRespVO.messageEnumMessage(ZeroTrustBusinessRespEnum.SUCCESS);
+            	}
+        		
+        		
+        		
+        	}else if("02".equals(actionType)) {
+        		if("01".equals(oldStatus)) {//chexiao
+        			return ZeroTrustResultDataVO.operateFailMessage("撤销状态下无法执行挂起操作");
+            	}else if("02".equals(oldStatus)){//挂起
+            		return ZeroTrustResultDataVO.operateFailMessage("已经是挂起状态无法操作");
+            	}else if("03".equals(oldStatus)){//终止
+            		return ZeroTrustResultDataVO.operateFailMessage("终止状态下无法执行挂起操作");
+            	}else if("04".equals(oldStatus)){//激活
+            		statusMap.put(processInstId, actionType);
+            		return ZeroTrustMessageRespVO.messageEnumMessage(ZeroTrustBusinessRespEnum.SUCCESS);
+            	}
+        	}else if("03".equals(actionType)) {
+        		if("01".equals(oldStatus)) {//chexiao
+        			statusMap.put(processInstId, actionType);
+            		return ZeroTrustMessageRespVO.messageEnumMessage(ZeroTrustBusinessRespEnum.SUCCESS);
+            	}else if("02".equals(oldStatus)){//挂起
+            		statusMap.put(processInstId, actionType);
+            		return ZeroTrustMessageRespVO.messageEnumMessage(ZeroTrustBusinessRespEnum.SUCCESS);
+            	}else if("03".equals(oldStatus)){//终止
+            		return ZeroTrustResultDataVO.operateFailMessage("已经是终止状态无法操作");
+            	}else if("04".equals(oldStatus)){//激活
+            		statusMap.put(processInstId, actionType);
+            		return ZeroTrustMessageRespVO.messageEnumMessage(ZeroTrustBusinessRespEnum.SUCCESS);
+            	}
+        	}else if("04".equals(actionType)) {
+        		if("01".equals(oldStatus)) {//chexiao
+        			return ZeroTrustResultDataVO.operateFailMessage("撤销状态下无法执行激活操作");
+            	}else if("02".equals(oldStatus)){//挂起
+            		statusMap.put(processInstId, actionType);
+            		return ZeroTrustMessageRespVO.messageEnumMessage(ZeroTrustBusinessRespEnum.SUCCESS);
+            	}else if("03".equals(oldStatus)){//终止
+            		return ZeroTrustResultDataVO.operateFailMessage("终止状态下无法执行激活操作");
+            	}else if("04".equals(oldStatus)){//激活
+            		return ZeroTrustResultDataVO.operateFailMessage("已经是激活状态无法操作");
+            	}
+        	}
+        	
+        	
+        	
         }
+        
+        System.out.println("======================================20240909=========================");
         //  查询应用令牌信息,获取人员信息
         ZeroTrustAppTokenInfoRespVO appTokenInfo = bimBusiness.getAppTokenInfo(appTokenId);
         if (ObjectUtil.isNull(appTokenInfo)) {

+ 10 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/LogInfoMetaDTO.java

@@ -62,4 +62,14 @@ public class LogInfoMetaDTO {
      * 是否需要发送红名单风险
      */
     private Boolean needSendRedListRisk;
+    
+    private String taskId;
+    private String taskName;
+    private String appName;
+    private String operatorCertNo;
+    private String operatorName;
+    private String operatorOrgName;
+    private String operatorOrgCode;
+    private String operateTime;
+    private String operateType;
 }

+ 5 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/dto/QmOperateLogDTO.java

@@ -88,5 +88,10 @@ public class QmOperateLogDTO {
      * 流程结束标志
      */
     private Boolean flowFinish;
+    
+    /**
+     * V2新增 用于传递必要参数
+     */
+    private LogInfoMetaDTO logInfoMetaDTO;
 
 }

BIN
approve-core-service/src/main/lib/auditlog-qm-tj-1.0.3-SNAPSHOT.jar