Selaa lähdekoodia

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

Huangzqa add 20231213

See merge request dcuc-tjdsj/approve-core!109
黄资权 1 vuosi sitten
vanhempi
sitoutus
ae1b6d8806
19 muutettua tiedostoa jossa 628 lisäystä ja 64 poistoa
  1. 13 0
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/facade/api/v3/IApiV3ApproveFacade.java
  2. 1 1
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/bu/BuApproveSyncBizApproveGridReqVO.java
  3. 1 1
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/bu/BuApproveSyncBizApproveReqVO.java
  4. 3 2
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/bu/BuApproveSyncReqVO.java
  5. 51 0
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/v3/report/ReportApproveSyncBizApproveReqVO.java
  6. 57 0
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/v3/report/ReportApproveSyncBizGridReqVO.java
  7. 90 0
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/v3/report/ReportApproveSyncReqVO.java
  8. 0 36
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/resp/bu/BuApproveSyncBizDataReqVO.java
  9. 19 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/api/IReportApprovalsBusiness.java
  10. 305 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/api/impl/ReportApprovalsBusinessImpl.java
  11. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/INoticeBusiness.java
  12. 10 8
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/impl/BuSyncBusinessImpl.java
  13. 2 2
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/impl/NoticeBusinessImpl.java
  14. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/config/ProofConfiguration.java
  15. 9 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/constants/ApproveConstants.java
  16. 17 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/api/v3/ApiV3ApproveFacade.java
  17. 10 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/service/IApproveActHiTaskService.java
  18. 30 5
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/service/impl/ApproveActHiTaskServiceImpl.java
  19. 8 7
      approve-core-service/src/test/java/com/dragonsoft/dcuc/approve/business/impl/NoticeBusinessImplTest.java

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

@@ -2,6 +2,7 @@ package com.dragonsoft.dcuc.approve.facade.api.v3;
 
 import com.dragonsoft.dcuc.approve.model.req.v3.ZeroTrustApproveCreateReqV3VO;
 import com.dragonsoft.dcuc.approve.model.req.v3.ZeroTrustApproveManagerReqV3VO;
+import com.dragonsoft.dcuc.approve.model.req.v3.report.ReportApproveSyncReqVO;
 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;
@@ -12,6 +13,8 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 
+import javax.validation.Valid;
+
 /**
  * <p>
  *
@@ -44,4 +47,14 @@ public interface IApiV3ApproveFacade {
     @ApiOperation(value = "流程管理", notes = "流程管理")
     @RequestMapping(value = "api/v3/manage", method = RequestMethod.POST)
     ZeroTrustMessageRespVO manage(@RequestBody ZeroTrustApproveManagerReqV3VO zeroTrustApproveManagerReqV3VO);
+
+    /**
+     * 接收审批信息上报接口
+     *
+     * @param reportApproveSyncReqVO 上报请求
+     * @return 状态
+     */
+    @ApiOperation(value = "接收审批上报", notes = "接收审批上报")
+    @RequestMapping(value = "api/v3/report-approvals", method = RequestMethod.POST)
+    ZeroTrustMessageRespVO reportApprovals(@Valid @RequestBody ReportApproveSyncReqVO reportApproveSyncReqVO);
 }

+ 1 - 1
approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/resp/bu/BuApproveSyncBizApproveGridReqVO.java → approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/bu/BuApproveSyncBizApproveGridReqVO.java

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

+ 1 - 1
approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/resp/bu/BuApproveSyncBizApproveReqVO.java → approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/bu/BuApproveSyncBizApproveReqVO.java

@@ -1,4 +1,4 @@
-package com.dragonsoft.dcuc.approve.model.resp.bu;
+package com.dragonsoft.dcuc.approve.model.req.bu;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;

+ 3 - 2
approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/resp/bu/BuApproveSyncReqVO.java → approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/bu/BuApproveSyncReqVO.java

@@ -1,4 +1,4 @@
-package com.dragonsoft.dcuc.approve.model.resp.bu;
+package com.dragonsoft.dcuc.approve.model.req.bu;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
@@ -11,6 +11,7 @@ import javax.validation.Valid;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import java.util.Date;
+import java.util.Map;
 
 /**
  * <p>
@@ -74,6 +75,6 @@ public class BuApproveSyncReqVO {
     @NotNull
     @Valid
     @ApiModelProperty(value = "流程业务数据")
-    private BuApproveSyncBizDataReqVO bizData;
+    private Map<String,Object> bizData;
 
 }

+ 51 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/v3/report/ReportApproveSyncBizApproveReqVO.java

@@ -0,0 +1,51 @@
+package com.dragonsoft.dcuc.approve.model.req.v3.report;
+
+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.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/12/12
+ */
+@Setter
+@Getter
+@ToString
+@ApiModel(value = "流程业务数据")
+public class ReportApproveSyncBizApproveReqVO {
+
+    @NotBlank
+    @ApiModelProperty(value = "任务名称")
+    private String title;
+
+    @NotBlank
+    @ApiModelProperty(value = "任务类型编码")
+    private String taskClass;
+
+    @NotNull
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty(value = "任务有效期开始时间")
+    private Date taskTermStart;
+
+    @NotNull
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty(value = "任务有效期结束时间")
+    private Date taskTermEnd;
+
+    @NotBlank
+    @ApiModelProperty(value = "任务状态(0废弃、1在用)")
+    private String taskStatus;
+
+
+}

+ 57 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/v3/report/ReportApproveSyncBizGridReqVO.java

@@ -0,0 +1,57 @@
+package com.dragonsoft.dcuc.approve.model.req.v3.report;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/12/12
+ */
+@Setter
+@Getter
+@ToString
+@ApiModel(value = "流程业务数据")
+public class ReportApproveSyncBizGridReqVO {
+
+    @NotBlank
+    @ApiModelProperty(value = "数据唯一ID")
+    private String id;
+
+    @NotBlank
+    @ApiModelProperty(value = "业务数据类型")
+    private String dataType;
+
+    @ApiModelProperty(value = "要素内容,dataType为02时必填")
+    private String elementContent;
+
+    @ApiModelProperty(value = "要素类型编码,dataType为02时必填")
+    private String elementType;
+
+    @ApiModelProperty(value = "要素有效期开始时间,dataType为02时必填")
+    private String elementTermStart;
+
+    @ApiModelProperty(value = "要素有效期结束时间,dataType为02时必填")
+    private String elementTermEnd;
+
+    @ApiModelProperty(value = "承办单位编码")
+    private String handleUnitCode;
+
+    @ApiModelProperty(value = "承办单位名称")
+    private String handleUnitName;
+
+    @ApiModelProperty(value = "承办人ID")
+    private String handleUserId;
+
+    @ApiModelProperty(value = "承办人姓名")
+    private String handleUserName;
+
+}

+ 90 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/v3/report/ReportApproveSyncReqVO.java

@@ -0,0 +1,90 @@
+package com.dragonsoft.dcuc.approve.model.req.v3.report;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.dragonsoft.dcuc.approve.model.req.bu.BuApproveSyncReqVO;
+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.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/12/12
+ */
+@Setter
+@Getter
+@ToString
+@ApiModel(value = "上报审批同步接口")
+public class ReportApproveSyncReqVO {
+
+    @NotBlank
+    @ApiModelProperty(value = "来源系统编码")
+    private String appId;
+
+    @NotBlank
+    @ApiModelProperty(value = "来源系统名称")
+    private String appName;
+
+    @NotNull
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty(value = "任务创建时间")
+    private Date createTime;
+
+    @NotNull
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty(value = "任务审批结束时间")
+    private Date finishTime;
+
+    @NotBlank
+    @ApiModelProperty(value = "任务编号")
+    private String taskId;
+
+    @NotBlank
+    @ApiModelProperty(value = "任务创建人ID")
+    private String createrId;
+
+    @ApiModelProperty(value = "任务最终审批人Id")
+    private String lastReviewerId;
+
+    @NotBlank
+    @ApiModelProperty(value = "任务最终审批人身份证编号")
+    private String lastReviewerIdCard;
+
+    @NotBlank
+    @ApiModelProperty(value = "任务最终审批人名称")
+    private String lastReviewerName;
+
+    @NotBlank
+    @ApiModelProperty(value = "任务最终审批人单位ID")
+    private String lastReviewerUnitCode;
+
+    @NotBlank
+    @ApiModelProperty(value = "任务最终审批人单位名称")
+    private String lastReviewerUnitName;
+
+    @NotEmpty
+    @Valid
+    @ApiModelProperty(value = "流程业务数据")
+    private Map<String, Object> bizData;
+
+    public BuApproveSyncReqVO toBuApproveSyncReqVO() {
+        BuApproveSyncReqVO buApproveSyncReqVO = new BuApproveSyncReqVO();
+        BeanUtil.copyProperties(this, buApproveSyncReqVO);
+
+        return buApproveSyncReqVO;
+    }
+
+}

+ 0 - 36
approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/resp/bu/BuApproveSyncBizDataReqVO.java

@@ -1,36 +0,0 @@
-package com.dragonsoft.dcuc.approve.model.resp.bu;
-
-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.NotNull;
-import java.util.List;
-
-/**
- * <p>
- *
- * </p>
- *
- * @author huangzqa
- * @date 2023/11/7
- */
-@Setter
-@Getter
-@ToString
-@ApiModel(value = "流程业务数据")
-public class BuApproveSyncBizDataReqVO {
-
-    @NotNull
-    @Valid
-    @ApiModelProperty(value = "任务数据")
-    private BuApproveSyncBizApproveReqVO taskInfo;
-
-    @Valid
-    @ApiModelProperty(value = "要素/承办人数据")
-    private List<BuApproveSyncBizApproveGridReqVO> approveGrid;
-
-}

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

@@ -0,0 +1,19 @@
+package com.dragonsoft.dcuc.approve.business.api;
+
+import com.dragonsoft.dcuc.approve.model.req.v3.report.ReportApproveSyncReqVO;
+import com.dragonsoft.dcuc.approve.model.resp.v3.ZeroTrustMessageRespVO;
+
+/**
+ * @author huangzqa
+ * @date 2023/12/12
+ */
+public interface IReportApprovalsBusiness {
+    /**
+     * 接收审批上报信息
+     *
+     * @param reportApproveSyncReqVO 上报请求
+     * @return 状态
+     */
+    ZeroTrustMessageRespVO reportApprovals(ReportApproveSyncReqVO reportApproveSyncReqVO);
+
+}

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

@@ -0,0 +1,305 @@
+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;
+import com.dragoninfo.dcuc.app.facade.IApplyInfoFacade;
+import com.dragoninfo.dcuc.common.utils.ResponseUtil;
+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.constants.ApproveConstants;
+import com.dragonsoft.dcuc.approve.enumresources.*;
+import com.dragonsoft.dcuc.approve.enumresources.bu.BizDataTypeEnum;
+import com.dragonsoft.dcuc.approve.enumresources.bu.TaskStatusEnum;
+import com.dragonsoft.dcuc.approve.model.ApproveActHiTask;
+import com.dragonsoft.dcuc.approve.model.ApproveRecordInfo;
+import com.dragonsoft.dcuc.approve.model.ApproveTaskClass;
+import com.dragonsoft.dcuc.approve.model.req.bu.BuApproveSyncReqVO;
+import com.dragonsoft.dcuc.approve.model.req.v3.report.ReportApproveSyncBizApproveReqVO;
+import com.dragonsoft.dcuc.approve.model.req.v3.report.ReportApproveSyncBizGridReqVO;
+import com.dragonsoft.dcuc.approve.model.req.v3.report.ReportApproveSyncReqVO;
+import com.dragonsoft.dcuc.approve.model.resp.v3.ZeroTrustMessageRespVO;
+import com.dragonsoft.dcuc.approve.model.vo.dcuc.OauthUserVO;
+import com.dragonsoft.dcuc.approve.service.IApproveActHiTaskService;
+import com.dragonsoft.dcuc.approve.service.IApproveRecordService;
+import com.dragonsoft.dcuc.approve.service.IApproveTaskClassService;
+import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
+import com.dragonsoft.duceap.base.enums.BooleanEnum;
+import com.dragonsoft.duceap.commons.util.date.DateConst;
+import com.dragonsoft.duceap.commons.util.date.DateUtils;
+import com.dragonsoft.duceap.commons.util.enums.EnumUtils;
+import com.dragonsoft.duceap.commons.util.json.JsonUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+
+/**
+ * @author huangzqa
+ * @date 2023/12/12
+ */
+@Component
+public class ReportApprovalsBusinessImpl implements IReportApprovalsBusiness {
+
+    private IApplyInfoFacade applyInfoFacade;
+
+    private IApproveApiBusiness approveApiBusiness;
+
+    private IApproveRecordService approveRecordService;
+
+    private IApproveActHiTaskService approveActHiTaskService;
+
+    private INoticeBusiness noticeBusiness;
+
+    private IApproveTaskClassService approveTaskClassService;
+
+    private IDcucBusiness dcucBusiness;
+
+    @Autowired
+    public void setDcucBusiness(IDcucBusiness dcucBusiness) {
+        this.dcucBusiness = dcucBusiness;
+    }
+
+    @Autowired
+    public void setApproveTaskClassService(IApproveTaskClassService approveTaskClassService) {
+        this.approveTaskClassService = approveTaskClassService;
+    }
+
+    @Autowired
+    public void setNoticeBusiness(INoticeBusiness noticeBusiness) {
+        this.noticeBusiness = noticeBusiness;
+    }
+
+    @Autowired
+    public void setApproveActHiTaskService(IApproveActHiTaskService approveActHiTaskService) {
+        this.approveActHiTaskService = approveActHiTaskService;
+    }
+
+    @Autowired
+    public void setApproveRecordService(IApproveRecordService approveRecordService) {
+        this.approveRecordService = approveRecordService;
+    }
+
+    @Autowired
+    public void setApproveApiBusiness(IApproveApiBusiness approveApiBusiness) {
+        this.approveApiBusiness = approveApiBusiness;
+    }
+
+    @Autowired
+    public void setApplyInfoFacade(IApplyInfoFacade applyInfoFacade) {
+        this.applyInfoFacade = applyInfoFacade;
+    }
+
+
+    @Transactional(rollbackFor = Throwable.class)
+    @Override
+    public ZeroTrustMessageRespVO reportApprovals(ReportApproveSyncReqVO reportApproveSyncReqVO) {
+        String taskId = reportApproveSyncReqVO.getTaskId();
+        //  校验taskId是否正确
+        boolean standerTaskNo = approveApiBusiness.isStanderTaskNo(taskId);
+        if (!standerTaskNo) {
+            return ZeroTrustMessageRespVO.requestErrorMessage(String.format("taskId: %s 格式不正确", taskId));
+        }
+        String appId = reportApproveSyncReqVO.getAppId();
+        ApplyInfo applyInfo = applyInfoFacade.getAppByCode(appId);
+        if (ObjectUtil.isNull(applyInfo)) {
+            return ZeroTrustMessageRespVO.requestErrorMessage(String.format("appId: %s 不存在", appId));
+        }
+        Map<String, Object> bizData = reportApproveSyncReqVO.getBizData();
+        ReportApproveSyncBizApproveReqVO bizApproveReqVO = parseToReportApproveSyncBizApproveReqVO(bizData);
+        if (ObjectUtil.isNull(bizApproveReqVO)) {
+            return ZeroTrustMessageRespVO.requestErrorMessage("taskInfo必填");
+        }
+        String taskClass = bizApproveReqVO.getTaskClass();
+        ApproveTaskClass approveTaskClass = approveTaskClassService.detailByCode(taskClass);
+        if (ObjectUtil.isNull(approveTaskClass)) {
+            return ZeroTrustMessageRespVO.requestErrorMessage(String.format("taskClass:%s 不存在", taskClass));
+        }
+
+        List<ReportApproveSyncBizGridReqVO> bizGridReqList = parseToReportApproveSyncBizGridReqVO(bizData);
+
+        String approveId = syncToStore(reportApproveSyncReqVO, bizApproveReqVO, bizGridReqList);
+        BuApproveSyncReqVO buApproveSyncReqVO = reportApproveSyncReqVO.toBuApproveSyncReqVO();
+        // 报送到 BU
+        ResponseStatus responseStatus = noticeBusiness.retryRequestSyncToBu(buApproveSyncReqVO);
+        if (ResponseUtil.isSuccess(responseStatus)) {
+            approveRecordService.updateSyncFlag(approveId, BooleanEnum.TRUE);
+            return ZeroTrustMessageRespVO.messageEnumMessage(ZeroTrustBusinessRespEnum.SUCCESS);
+        }
+        approveRecordService.updateSyncFlag(approveId, BooleanEnum.FALSE);
+
+        return ZeroTrustMessageRespVO.requestErrorMessage(String.format("同步到部审批失败:%s", responseStatus.getMessage()));
+    }
+
+    /**
+     * 同步存储
+     *
+     * @param reportApproveSyncReqVO 上报请求信息
+     * @return 审批单ID
+     */
+    protected String syncToStore(ReportApproveSyncReqVO reportApproveSyncReqVO, ReportApproveSyncBizApproveReqVO bizApproveReqVO,
+                                 List<ReportApproveSyncBizGridReqVO> bizGridReqList) {
+        String taskId = reportApproveSyncReqVO.getTaskId();
+        //  校验taskID是否存在,存在则更新
+        ApproveRecordInfo approveRecordInfo = approveRecordService.selectByApproveNo(taskId);
+        boolean isSave = false;
+        if (ObjectUtil.isNull(approveRecordInfo)) {
+            approveRecordInfo = new ApproveRecordInfo();
+            isSave = true;
+        }
+        String createrId = reportApproveSyncReqVO.getCreaterId();
+        OauthUserVO oauthUserVO = dcucBusiness.getOauthUserInfoByIdcard(createrId);
+
+        approveRecordInfo.setApplicantIdcard(createrId);
+        approveRecordInfo.setApplicantName(oauthUserVO.getName());
+        approveRecordInfo.setApplicantOrgCode(oauthUserVO.getOrgCode());
+        approveRecordInfo.setApplicantOrgName(oauthUserVO.getOrgName());
+        Date createTime = reportApproveSyncReqVO.getCreateTime();
+        String createTimeString = DateUtils.getDateFormat(createTime, DateConst.HYPHEN_DISPLAY_TIME);
+        approveRecordInfo.setApplyTime(createTimeString);
+
+        approveRecordInfo.setAppCode(reportApproveSyncReqVO.getAppId());
+        approveRecordInfo.setAppName(reportApproveSyncReqVO.getAppName());
+        approveRecordInfo.setCreateUser(reportApproveSyncReqVO.getCreaterId());
+        approveRecordInfo.setCreateTime(reportApproveSyncReqVO.getCreateTime());
+        approveRecordInfo.setApproveNo(reportApproveSyncReqVO.getTaskId());
+        approveRecordInfo.setTaskCode("end");
+        approveRecordInfo.setTaskName("结束");
+        approveRecordInfo.setApproveType(ApproveTypeEnum.OTHER.value);
+        approveRecordInfo.setFlowType(FlowTypeEnum.OTHER.getValue());
+        approveRecordInfo.setSyncFlag(BooleanEnum.FALSE.value);
+        approveRecordInfo.setIsDeleted(BooleanEnum.FALSE.getValue());
+        approveRecordInfo.setUpdateTime(reportApproveSyncReqVO.getFinishTime());
+        approveRecordInfo.setUpdateUser(reportApproveSyncReqVO.getLastReviewerIdCard());
+
+        Map<String, Object> bizData = reportApproveSyncReqVO.getBizData();
+        setTaskInfo(approveRecordInfo, bizApproveReqVO);
+        String bizDataJson = JsonUtils.toJSONString(bizData);
+
+        approveRecordInfo.setApproveContent(bizDataJson);
+        approveRecordInfo.setApproveNo(taskId);
+
+        if (isSave) {
+            approveRecordService.save(approveRecordInfo);
+        } else {
+            approveRecordService.updateById(approveRecordInfo);
+        }
+
+        String approveId = approveRecordInfo.getId();
+        if (!isSave) {
+            approveActHiTaskService.deleteByApplyRecordId(approveId);
+        }
+
+        List<ApproveActHiTask> approveActHiTaskList = generalActHiTaskList(approveId, bizGridReqList);
+        approveActHiTaskService.deleteAndSaveList(approveId, approveActHiTaskList);
+        return approveId;
+    }
+
+    /**
+     * 设置任务信息
+     *
+     * @param approveRecordInfo                审批单信息
+     * @param reportApproveSyncBizApproveReqVO 任务信息
+     */
+    protected void setTaskInfo(ApproveRecordInfo approveRecordInfo, ReportApproveSyncBizApproveReqVO reportApproveSyncBizApproveReqVO) {
+
+        if (ObjectUtil.isNotNull(reportApproveSyncBizApproveReqVO)) {
+            approveRecordInfo.setProcessTitle(reportApproveSyncBizApproveReqVO.getTitle());
+            approveRecordInfo.setApproveTaskClass(reportApproveSyncBizApproveReqVO.getTaskClass());
+            approveRecordInfo.setProcessTitle(PermissionValidTypeEnum.CUSTOM.getValue());
+            approveRecordInfo.setStartTime(reportApproveSyncBizApproveReqVO.getTaskTermStart());
+            approveRecordInfo.setEndTime(reportApproveSyncBizApproveReqVO.getTaskTermEnd());
+            String taskStatus = reportApproveSyncBizApproveReqVO.getTaskStatus();
+            TaskStatusEnum taskStatusEnum = EnumUtils.enumOf(TaskStatusEnum.class, taskStatus);
+            ApproveResultEnum approveResultEnum = ApproveResultEnum.SUCCESS;
+            if (taskStatusEnum.equals(TaskStatusEnum.DISABLE)) {
+                approveResultEnum = ApproveResultEnum.FAIL;
+            }
+            approveRecordInfo.setFinalApprovalResult(approveResultEnum.getValue());
+        }
+    }
+
+    /**
+     * 设置要素、承办人数据
+     *
+     * @param approveId                      审批单号
+     * @param reportApproveSyncBizGridReqVOS 要素/承办人信息
+     */
+    protected List<ApproveActHiTask> generalActHiTaskList(String approveId, List<ReportApproveSyncBizGridReqVO> reportApproveSyncBizGridReqVOS) {
+        List<ApproveActHiTask> approveActHiTaskList = Collections.emptyList();
+        if (CollUtil.isNotEmpty(reportApproveSyncBizGridReqVOS)) {
+            approveActHiTaskList = new ArrayList<>(reportApproveSyncBizGridReqVOS.size());
+            for (ReportApproveSyncBizGridReqVO approveSyncBizGridReqVO : reportApproveSyncBizGridReqVOS) {
+                String dataType = approveSyncBizGridReqVO.getDataType();
+                BizDataTypeEnum bizDataTypeEnum = EnumUtils.enumOf(BizDataTypeEnum.class, dataType);
+                if (bizDataTypeEnum.equals(BizDataTypeEnum.HANDLE)) {
+                    ApproveActHiTask approveActHiTask = new ApproveActHiTask();
+                    String handleUserId = approveSyncBizGridReqVO.getHandleUserId();
+                    String handleUserName = approveSyncBizGridReqVO.getHandleUserName();
+                    if (StrUtil.isNotBlank(handleUserId)
+                            && StrUtil.isNotBlank(handleUserName)) {
+                        approveActHiTask.setApplyRecordId(approveId);
+                        approveActHiTask.setOperateUserIdcard(handleUserId);
+                        approveActHiTask.setOperateUserName(handleUserName);
+                        approveActHiTask.setDeleted(BooleanEnum.FALSE.value);
+                        approveActHiTaskList.add(approveActHiTask);
+                    }
+
+                }
+            }
+
+        }
+        return approveActHiTaskList;
+    }
+
+    /**
+     * 转换任务信息
+     *
+     * @param bizData 业务数据
+     * @return 任务信息
+     */
+    protected ReportApproveSyncBizApproveReqVO parseToReportApproveSyncBizApproveReqVO(Map<String, Object> bizData) {
+        if (CollUtil.isNotEmpty(bizData)) {
+            Object taskInfoObject = bizData.get(ApproveConstants.TASK_INFO);
+            ReportApproveSyncBizApproveReqVO reportApproveSyncBizApproveReqVO = new ReportApproveSyncBizApproveReqVO();
+            BeanUtil.copyProperties(taskInfoObject, reportApproveSyncBizApproveReqVO);
+            return reportApproveSyncBizApproveReqVO;
+        }
+        return null;
+    }
+
+    /**
+     * 转换要素信息
+     *
+     * @param bizData 业务数据
+     * @return 要素信息
+     */
+    @SuppressWarnings("unchecked")
+    protected List<ReportApproveSyncBizGridReqVO> parseToReportApproveSyncBizGridReqVO(Map<String, Object> bizData) {
+        List<ReportApproveSyncBizGridReqVO> respList = Collections.emptyList();
+        if (CollUtil.isNotEmpty(bizData)) {
+            Object approveGridObject = bizData.get(ApproveConstants.APPROVE_GRID);
+
+            if (approveGridObject instanceof List) {
+
+                List<Object> approveGridObjectList = (List<Object>) approveGridObject;
+                if (ObjectUtil.isNotNull(approveGridObjectList)) {
+                    respList = new ArrayList<>(approveGridObjectList.size());
+                    for (Object approveGridItemObject : approveGridObjectList) {
+                        ReportApproveSyncBizGridReqVO approveSyncBizGridReqVO = new ReportApproveSyncBizGridReqVO();
+                        BeanUtil.copyProperties(approveGridItemObject, approveSyncBizGridReqVO);
+
+                        respList.add(approveSyncBizGridReqVO);
+                    }
+                }
+            }
+        }
+        return respList;
+    }
+}

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

@@ -1,7 +1,7 @@
 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.dcuc.approve.model.req.bu.BuApproveSyncReqVO;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 
 /**

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

@@ -7,14 +7,14 @@ 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.constants.ApproveConstants;
 import com.dragonsoft.dcuc.approve.enumresources.bu.TaskStatusEnum;
 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.model.req.bu.BuApproveSyncBizApproveReqVO;
+import com.dragonsoft.dcuc.approve.model.req.bu.BuApproveSyncReqVO;
 import com.dragonsoft.dcuc.approve.service.IApproveCirculationService;
 import com.dragonsoft.dcuc.approve.service.IApproveRecordService;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
@@ -27,7 +27,9 @@ import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Date;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -72,8 +74,8 @@ public class BuSyncBusinessImpl implements IBuSyncBusiness {
     @Override
     @CacheLock
     public ResponseStatus syncTuBu() {
-        List<ApproveRecordInfo> unSyncList = approveRecordService.getUnSyncList();
         TransactionSupport.execute(() -> {
+            List<ApproveRecordInfo> unSyncList = approveRecordService.getUnSyncList();
             for (ApproveRecordInfo approveRecordInfo : unSyncList) {
                 String id = approveRecordInfo.getId();
                 String approveNo = approveRecordInfo.getApproveNo();
@@ -170,10 +172,9 @@ public class BuSyncBusinessImpl implements IBuSyncBusiness {
 
         BuApproveSyncBizApproveReqVO buApproveSyncBizApproveReqVO = parseApprovalInfoDTO(approvalInfoDTO);
 
-        BuApproveSyncBizDataReqVO buApproveSyncBizDataReqVO = new BuApproveSyncBizDataReqVO();
-        buApproveSyncBizDataReqVO.setTaskInfo(buApproveSyncBizApproveReqVO);
-        buApproveSyncReqVO.setBizData(buApproveSyncBizDataReqVO);
-
+        Map<String, Object> bizData = new LinkedHashMap<>(2);
+        bizData.put(ApproveConstants.TASK_INFO, buApproveSyncBizApproveReqVO);
+        buApproveSyncReqVO.setBizData(bizData);
 
         ResponseStatus responseStatus = noticeBusiness.retryRequestSyncToBu(buApproveSyncReqVO);
         if (ResponseUtil.isSuccess(responseStatus)) {
@@ -191,6 +192,7 @@ public class BuSyncBusinessImpl implements IBuSyncBusiness {
      * @return 流程业务数据
      */
     protected BuApproveSyncBizApproveReqVO parseApprovalInfoDTO(ApprovalInfoDTO approvalInfoDTO) {
+        Assert.notNull(approvalInfoDTO);
         BuApproveSyncBizApproveReqVO buApproveSyncBizApproveReqVO = new BuApproveSyncBizApproveReqVO();
         buApproveSyncBizApproveReqVO.setTitle(approvalInfoDTO.getProcessTitle());
         buApproveSyncBizApproveReqVO.setTaskClass(approvalInfoDTO.getApproveTaskClass());

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

@@ -7,7 +7,7 @@ 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.req.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;
@@ -190,7 +190,7 @@ public class NoticeBusinessImpl implements INoticeBusiness {
             return ResponseUtil.dtoFail(errorTip);
         }
 
-        logger.info("baseReq resp :{}", JsonUtils.toJSONString(exchange));
+        logger.info("{} baseReq resp :{}", requestName, JsonUtils.toJSONString(exchange));
         TypeReference<ZeroTrustResultDataVO<Object>> typeReference = new TypeReference<ZeroTrustResultDataVO<Object>>() {
         };
 

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

@@ -40,8 +40,8 @@ public class ProofConfiguration {
         filterRegistrationBean.setFilter(proofsFilter());
         filterRegistrationBean.addUrlPatterns("/api/v1/*");
         filterRegistrationBean.addUrlPatterns("/api/v2/*");
-        filterRegistrationBean.addUrlPatterns("/v1/*");
         filterRegistrationBean.setName("proofsFilter");
+
         return filterRegistrationBean;
     }
 

+ 9 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/constants/ApproveConstants.java

@@ -46,6 +46,15 @@ public final class ApproveConstants {
      */
     public static final String SYS_LOG_NAME = "sysLog";
 
+    /**
+     * 任务数据
+     */
+    public static final String TASK_INFO = "taskInfo";
+    /**
+     * 要素/承办人数据
+     */
+    public static final String APPROVE_GRID = "approveGird";
+
     private ApproveConstants() {
     }
 }

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

@@ -9,6 +9,7 @@ import com.dragonsoft.dcuc.approve.business.ISecurityUserBusiness;
 import com.dragonsoft.dcuc.approve.business.IWorkFlowBusiness;
 import com.dragonsoft.dcuc.approve.business.api.IApiV3ApproveBusiness;
 import com.dragonsoft.dcuc.approve.business.api.IApproveApiBusiness;
+import com.dragonsoft.dcuc.approve.business.api.IReportApprovalsBusiness;
 import com.dragonsoft.dcuc.approve.business.external.IBimBusiness;
 import com.dragonsoft.dcuc.approve.enumresources.ApproveWorkFlowOperationEnum;
 import com.dragonsoft.dcuc.approve.enumresources.ZeroTrustApproveManageEnum;
@@ -20,6 +21,7 @@ import com.dragonsoft.dcuc.approve.model.dto.TaskRequestUserInfoDTO;
 import com.dragonsoft.dcuc.approve.model.req.ApprovalInfoReqVO;
 import com.dragonsoft.dcuc.approve.model.req.v3.ZeroTrustApproveCreateReqV3VO;
 import com.dragonsoft.dcuc.approve.model.req.v3.ZeroTrustApproveManagerReqV3VO;
+import com.dragonsoft.dcuc.approve.model.req.v3.report.ReportApproveSyncReqVO;
 import com.dragonsoft.dcuc.approve.model.resp.OperateRespVO;
 import com.dragonsoft.dcuc.approve.model.resp.bim.ZeroTrustAppItemUserTokenInfoRespVO;
 import com.dragonsoft.dcuc.approve.model.resp.bim.ZeroTrustAppTokenInfoRespVO;
@@ -34,6 +36,7 @@ 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;
 import com.dragonsoft.duceap.duwf.api.model.WorkflowProcessVo;
 import lombok.extern.slf4j.Slf4j;
@@ -72,6 +75,13 @@ public class ApiV3ApproveFacade implements IApiV3ApproveFacade {
 
     private ISecurityUserBusiness securityUserBusiness;
 
+    private IReportApprovalsBusiness reportApprovalsBusiness;
+
+    @Autowired
+    public void setReportApprovalsBusiness(IReportApprovalsBusiness reportApprovalsBusiness) {
+        this.reportApprovalsBusiness = reportApprovalsBusiness;
+    }
+
     @Autowired
     public void setSecurityUserBusiness(ISecurityUserBusiness securityUserBusiness) {
         this.securityUserBusiness = securityUserBusiness;
@@ -256,4 +266,11 @@ public class ApiV3ApproveFacade implements IApiV3ApproveFacade {
         return ZeroTrustMessageRespVO.messageEnumMessage(ZeroTrustBusinessRespEnum.SUCCESS);
     }
 
+    @Override
+    public ZeroTrustMessageRespVO reportApprovals(ReportApproveSyncReqVO reportApproveSyncReqVO) {
+        String jsonString = JsonUtils.toJSONString(reportApproveSyncReqVO);
+        log.info("接收到应用上报的数据:{}", jsonString);
+        return reportApprovalsBusiness.reportApprovals(reportApproveSyncReqVO);
+    }
+
 }

+ 10 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/service/IApproveActHiTaskService.java

@@ -5,6 +5,8 @@ import com.dragonsoft.dcuc.approve.model.resp.TaskVo;
 import com.dragonsoft.duceap.core.search.Searchable;
 import org.springframework.data.domain.Page;
 
+import java.util.List;
+
 /**
  * @author wangrs
  * @date 2021/03/23
@@ -47,4 +49,12 @@ public interface IApproveActHiTaskService {
      * @return 分页
      */
     Page<TaskVo> buildApproveActHiTask(Searchable searchable);
+
+    /**
+     * 删除旧已办西悉尼并保存已办列表
+     *
+     * @param approveId            审批单ID
+     * @param approveActHiTaskList 已办列表
+     */
+    void deleteAndSaveList(String approveId, List<ApproveActHiTask> approveActHiTaskList);
 }

+ 30 - 5
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/service/impl/ApproveActHiTaskServiceImpl.java

@@ -19,6 +19,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Sort;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -29,20 +30,35 @@ import java.util.List;
  */
 @Service
 public class ApproveActHiTaskServiceImpl implements IApproveActHiTaskService {
-    @Autowired
+
     private ApproveActHiTaskMapper approveActHiTaskMapper;
 
-    @Autowired
     private IApproveBusiness approveBusiness;
 
-    @Autowired
     private IApproveRecordService approveRecordService;
 
+    @Autowired
+    public void setApproveActHiTaskMapper(ApproveActHiTaskMapper approveActHiTaskMapper) {
+        this.approveActHiTaskMapper = approveActHiTaskMapper;
+    }
+
+    @Autowired
+    public void setApproveBusiness(IApproveBusiness approveBusiness) {
+        this.approveBusiness = approveBusiness;
+    }
+
+    @Autowired
+    public void setApproveRecordService(IApproveRecordService approveRecordService) {
+        this.approveRecordService = approveRecordService;
+    }
+
+    @Transactional(rollbackFor = Throwable.class)
     @Override
     public void save(ApproveActHiTask approveActHiTask) {
         approveActHiTaskMapper.insert(approveActHiTask);
     }
 
+    @Transactional(rollbackFor = Throwable.class)
     @Override
     public void update(ApproveActHiTask approveActHiTask) {
         approveActHiTaskMapper.updateById(approveActHiTask);
@@ -53,13 +69,13 @@ public class ApproveActHiTaskServiceImpl implements IApproveActHiTaskService {
         return approveActHiTaskMapper.pagingBySearchable(searchable);
     }
 
+    @Transactional(rollbackFor = Throwable.class)
     @Override
     public void deleteByApplyRecordId(String applyRecordId) {
         //删除所有已办
         LambdaUpdateWrapper<ApproveActHiTask> hiTaskLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
         hiTaskLambdaUpdateWrapper.eq(ApproveActHiTask::getApplyRecordId, applyRecordId);
-        hiTaskLambdaUpdateWrapper.set(ApproveActHiTask::getDeleted, BooleanEnum.TRUE.getValue());
-        approveActHiTaskMapper.update(null, hiTaskLambdaUpdateWrapper);
+        approveActHiTaskMapper.delete(hiTaskLambdaUpdateWrapper);
     }
 
     /**
@@ -116,4 +132,13 @@ public class ApproveActHiTaskServiceImpl implements IApproveActHiTaskService {
         return new PageImpl<>(list, page.getPageable(), page.getTotalElements());
     }
 
+    @Transactional(rollbackFor = Throwable.class)
+    @Override
+    public void deleteAndSaveList(String approveId, List<ApproveActHiTask> approveActHiTaskList) {
+        deleteByApplyRecordId(approveId);
+        for (ApproveActHiTask approveActHiTask : approveActHiTaskList) {
+            this.save(approveActHiTask);
+        }
+    }
+
 }

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

@@ -3,12 +3,11 @@ 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.constants.ApproveConstants;
+import com.dragonsoft.dcuc.approve.model.req.bu.BuApproveSyncBizApproveReqVO;
+import com.dragonsoft.dcuc.approve.model.req.bu.BuApproveSyncReqVO;
 import com.dragonsoft.dcuc.approve.properties.ApproveBuProperties;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
-import com.dragonsoft.duceap.commons.util.UUIDUtils;
 import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.github.dreamhead.moco.HttpServer;
@@ -19,6 +18,8 @@ import org.junit.Test;
 import org.springframework.web.client.RestTemplate;
 
 import java.util.Date;
+import java.util.LinkedHashMap;
+import java.util.Map;
 
 import static com.github.dreamhead.moco.Moco.*;
 
@@ -106,9 +107,9 @@ public class NoticeBusinessImplTest {
         buApproveSyncBizApproveReqVO.setTaskTermStart(new Date());
         buApproveSyncBizApproveReqVO.setTaskTermEnd(new Date());
 
-        BuApproveSyncBizDataReqVO buApproveSyncBizDataReqVO = new BuApproveSyncBizDataReqVO();
-        buApproveSyncBizDataReqVO.setTaskInfo(buApproveSyncBizApproveReqVO);
-        buApproveSyncReqVO.setBizData(buApproveSyncBizDataReqVO);
+        Map<String, Object> bizData = new LinkedHashMap<>(2);
+        bizData.put(ApproveConstants.TASK_INFO, buApproveSyncBizApproveReqVO);
+        buApproveSyncReqVO.setBizData(bizData);
 
         ResponseStatus responseStatus = noticeBusiness.retryRequestSyncToBu(buApproveSyncReqVO);
         Assert.assertTrue(ResponseUtil.isSuccess(responseStatus));