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