Explorar o código

feat: 新增接收审批信息接口

huangzqa hai 1 ano
pai
achega
f066f895e9

+ 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);
 }

+ 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;
+    }
+
+}

+ 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;
+    }
+}

+ 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);
+        }
+    }
+
 }