فهرست منبع

feat: 增加权限申请表单数据

huangzqa 1 سال پیش
والد
کامیت
af263f4f22

+ 39 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/enumresources/BizTypeEnum.java

@@ -0,0 +1,39 @@
+package com.dragonsoft.dcuc.approve.enumresources;
+
+import com.dragonsoft.duceap.base.enums.ICodeEnum;
+
+/**
+ * <p>
+ * 业务类型
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/11/13
+ */
+public enum BizTypeEnum implements ICodeEnum {
+
+    /**
+     * 权限
+     */
+    AUTH("auth", "权限");
+
+    private final String value;
+
+    private final String label;
+
+    BizTypeEnum(String value, String label) {
+        this.value = value;
+        this.label = label;
+    }
+
+    @Override
+    public String getValue() {
+        return this.value;
+    }
+
+    @Override
+    public String getLabel() {
+        return this.label;
+    }
+
+}

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

@@ -20,7 +20,11 @@ public enum ReqBizDataEnum implements ICodeEnum {
     /**
      * 任务有效时间结束
      */
-    BIZ_TERM_END("bizTermEnd", "任务有效时间结束", true);
+    BIZ_TERM_END("bizTermEnd", "任务有效时间结束", true),
+    /**
+     * 业务类型
+     */
+    BIZ_TYPE("bizType", "业务类型", true);
 
     private final String value;
 
@@ -47,4 +51,4 @@ public enum ReqBizDataEnum implements ICodeEnum {
     public boolean isNeed() {
         return need;
     }
-}
+    }

+ 35 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/v3/ZeroTrustApproveAuthInfoVO.java

@@ -0,0 +1,35 @@
+package com.dragonsoft.dcuc.approve.model.req.v3;
+
+import com.dragonsoft.dcuc.approve.model.req.ResourceInfoReqVO;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/11/27
+ */
+@ApiModel("创建审批请求")
+@Setter
+@Getter
+@ToString
+public class ZeroTrustApproveAuthInfoVO implements Serializable {
+
+    @ApiModelProperty("申请类型")
+    private String flowType;
+
+    @ApiModelProperty("申请人身份证号")
+    private String applicantIdcard;
+
+    @ApiModelProperty("访问资源信息")
+    private ResourceInfoReqVO resourceInfo;
+
+}

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

@@ -1,6 +1,10 @@
 package com.dragonsoft.dcuc.approve.business.api;
 
 import com.dragonsoft.dcuc.approve.enumresources.ReqBizDataEnum;
+import com.dragonsoft.dcuc.approve.model.req.ApprovalInfoReqVO;
+import com.dragonsoft.dcuc.approve.model.req.v3.ZeroTrustApproveCreateReqV3VO;
+import com.dragonsoft.dcuc.approve.model.resp.bim.ZeroTrustAppTokenInfoRespVO;
+import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 
 import java.util.Map;
@@ -33,4 +37,24 @@ public interface IApiV3ApproveBusiness {
      * @return 值
      */
     <T> T getBizData(Map<String, Object> bizDataMap, ReqBizDataEnum reqBizDataEnum);
+
+    /**
+     * 转换成VO
+     *
+     * @param zeroTrustApproveCreateReqV3VO 请求信息
+     * @param appTokenInfo                  应用令牌信息
+     * @param processType                   流程类型
+     * @return 请求
+     */
+    ResponseDTO<ApprovalInfoReqVO> parseToReqVO(ZeroTrustApproveCreateReqV3VO zeroTrustApproveCreateReqV3VO,
+                                                ZeroTrustAppTokenInfoRespVO appTokenInfo, String processType);
+
+    /**
+     * 添加业务数据
+     *
+     * @param approvalInfoReqVO 请求信息
+     * @param bizData           业务数据
+     * @return 状态
+     */
+    ResponseDTO<ApprovalInfoReqVO> addBizData(ApprovalInfoReqVO approvalInfoReqVO, Map<String, Object> bizData);
 }

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

@@ -1,21 +1,40 @@
 package com.dragonsoft.dcuc.approve.business.api.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.lang.Assert;
+import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.dragoninfo.dcuc.common.Constants;
 import com.dragoninfo.dcuc.common.utils.LangUtil;
+import com.dragoninfo.dcuc.common.utils.ResponseUtil;
 import com.dragonsoft.dcuc.approve.business.api.IApiV3ApproveBusiness;
-import com.dragonsoft.dcuc.approve.enumresources.ReqBizDataEnum;
+import com.dragonsoft.dcuc.approve.business.external.IDcucBusiness;
+import com.dragonsoft.dcuc.approve.enumresources.*;
+import com.dragonsoft.dcuc.approve.model.req.ApprovalInfoReqVO;
+import com.dragonsoft.dcuc.approve.model.req.ResourceInfoReqVO;
+import com.dragonsoft.dcuc.approve.model.req.v3.ZeroTrustApproveAuthInfoVO;
+import com.dragonsoft.dcuc.approve.model.req.v3.ZeroTrustApproveCreateReqV3VO;
+import com.dragonsoft.dcuc.approve.model.resp.bim.ZeroTrustAppItemUserTokenInfoRespVO;
+import com.dragonsoft.dcuc.approve.model.resp.bim.ZeroTrustAppTokenInfoRespVO;
+import com.dragonsoft.dcuc.approve.model.vo.dcuc.OauthUserVO;
+import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
+import com.dragonsoft.duceap.base.entity.security.SecurityUser;
+import com.dragonsoft.duceap.base.utils.UserContextUtils;
 import com.dragonsoft.duceap.commons.util.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 lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.text.ParseException;
 import java.util.Collections;
+import java.util.Date;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -30,6 +49,13 @@ import java.util.Map;
 @Component
 public class ApiV3ApproveBusinessImpl implements IApiV3ApproveBusiness {
 
+    private IDcucBusiness dcucBusiness;
+
+    @Autowired
+    public void setDcucBusiness(IDcucBusiness dcucBusiness) {
+        this.dcucBusiness = dcucBusiness;
+    }
+
     @Override
     public ResponseStatus checkBizData(Map<String, Object> bizDataMap) {
         if (CollUtil.isEmpty(bizDataMap)) {
@@ -83,4 +109,117 @@ public class ApiV3ApproveBusinessImpl implements IApiV3ApproveBusiness {
         return (T) object;
     }
 
+
+    @Override
+    public ResponseDTO<ApprovalInfoReqVO> parseToReqVO(ZeroTrustApproveCreateReqV3VO zeroTrustApproveCreateReqV3VO,
+                                                       ZeroTrustAppTokenInfoRespVO appTokenInfo, String processType) {
+        final Map<String, Object> bizData = zeroTrustApproveCreateReqV3VO.getBizData();
+        ResourceInfoReqVO resourceInfoReqVO = new ResourceInfoReqVO();
+        if (MapUtil.isNotEmpty(bizData)) {
+            BeanUtil.copyProperties(bizData, resourceInfoReqVO);
+        }
+        String otherApplyContext = "";
+        if (MapUtil.isNotEmpty(bizData)) {
+            otherApplyContext = JsonUtils.toJSONString(bizData);
+        }
+        String title = zeroTrustApproveCreateReqV3VO.getTitle();
+        String processDefId = zeroTrustApproveCreateReqV3VO.getProcessDefId();
+        String approveTaskId = zeroTrustApproveCreateReqV3VO.getTaskId();
+        String callbackUrl = zeroTrustApproveCreateReqV3VO.getCallbackUrl();
+        Map<String, List<Map<String, Object>>> bo = zeroTrustApproveCreateReqV3VO.getBo();
+        String approveTaskClassCode = zeroTrustApproveCreateReqV3VO.getTaskClass();
+        String appTokenId = zeroTrustApproveCreateReqV3VO.getAppTokenId();
+
+        ZeroTrustAppItemUserTokenInfoRespVO userToken = appTokenInfo.getUserToken();
+        String appCode = appTokenInfo.getAppId();
+        String applicantIdcard = userToken.getPid();
+        String applicantName = userToken.getName();
+        String applicantIp = userToken.getIp();
+        String orgCode = userToken.getOrgCode();
+        String content = "";
+        if (MapUtil.isNotEmpty(bo)) {
+            content = JsonUtils.toJSONString(bo);
+        }
+        final SecurityUser securityUser = UserContextUtils.getCurrentUser();
+        String applicantOrgName = securityUser.getSecurityOrgName();
+        String applicantPhoneNo = "";
+
+        ApprovalInfoReqVO approvalInfoReqVO = new ApprovalInfoReqVO();
+        approvalInfoReqVO.setProcessTitle(title);
+        approvalInfoReqVO.setProcessType(processType);
+        approvalInfoReqVO.setBusinessCode(processDefId);
+        approvalInfoReqVO.setAppCode(appCode);
+        approvalInfoReqVO.setApplyContent(content);
+        approvalInfoReqVO.setApplyReason(title + "申请");
+        approvalInfoReqVO.setApplicantIdcard(applicantIdcard);
+        approvalInfoReqVO.setApplicantName(applicantName);
+        approvalInfoReqVO.setApplicantOrgCode(orgCode);
+        approvalInfoReqVO.setApplicantOrgName(applicantOrgName);
+        approvalInfoReqVO.setApplicantPhoneNo(applicantPhoneNo);
+        approvalInfoReqVO.setPermissionValidType(PermissionValidTypeEnum.CUSTOM.getValue());
+        approvalInfoReqVO.setOperateType(CommitTypeEnum.APPLY_COMMIT.getValue());
+        approvalInfoReqVO.setResourceInfoDTO(resourceInfoReqVO);
+        approvalInfoReqVO.setCallbackUrl(callbackUrl);
+        approvalInfoReqVO.setApproveTaskClass(approveTaskClassCode);
+        approvalInfoReqVO.setApproveTaskId(approveTaskId);
+        approvalInfoReqVO.setFlowType(FlowTypeEnum.OTHER.getValue());
+        approvalInfoReqVO.setApplicantIp(applicantIp);
+        approvalInfoReqVO.setApplicantAppToken(appTokenId);
+
+        approvalInfoReqVO.setOtherApplyContext(otherApplyContext);
+        final ResponseDTO<ApprovalInfoReqVO> addBizDataStatus = addBizData(approvalInfoReqVO, bizData);
+        if (ResponseUtil.isFail(addBizDataStatus)) {
+            return ResponseUtil.dtoFail(addBizDataStatus.getMessage());
+        }
+
+        return ResponseUtil.newInstance(approvalInfoReqVO);
+    }
+
+    @Override
+    public ResponseDTO<ApprovalInfoReqVO> addBizData(ApprovalInfoReqVO approvalInfoReqVO, final Map<String, Object> bizData) {
+        Assert.notNull(approvalInfoReqVO);
+        Assert.notEmpty(bizData);
+        Date startTime = getBizData(bizData, ReqBizDataEnum.BIZ_TERM_START);
+        Date startEnd = getBizData(bizData, ReqBizDataEnum.BIZ_TERM_END);
+        approvalInfoReqVO.setStartTime(startTime);
+        approvalInfoReqVO.setEndTime(startEnd);
+
+        BizTypeEnum bizTypeEnum = null;
+        final Object bizTypeObject = getBizData(bizData, ReqBizDataEnum.BIZ_TYPE);
+        if (ObjectUtil.isNotNull(bizTypeObject)) {
+            bizTypeEnum = EnumUtils.enumOf(BizTypeEnum.class, bizTypeObject.toString());
+        }
+        if (bizTypeEnum == null) {
+            return ResponseUtil.dtoFail("请传入业务类型");
+        }
+        if (!bizTypeEnum.equals(BizTypeEnum.AUTH)) {
+            return ResponseUtil.dtoFail(String.format("暂不支持该业务类型:%s", bizTypeObject));
+        }
+
+        final Object content = bizData.get("content");
+        final ZeroTrustApproveAuthInfoVO zeroTrustApproveAuthInfoVO = new ZeroTrustApproveAuthInfoVO();
+        BeanUtil.copyProperties(content, zeroTrustApproveAuthInfoVO);
+        final String flowType = zeroTrustApproveAuthInfoVO.getFlowType();
+        approvalInfoReqVO.setFlowType(flowType);
+        final String currentApplicantIdcard = approvalInfoReqVO.getApplicantIdcard();
+        final String applicantIdcard = zeroTrustApproveAuthInfoVO.getApplicantIdcard();
+
+        if (!currentApplicantIdcard.equals(applicantIdcard)) {
+            approvalInfoReqVO.setApplicantIdcard(applicantIdcard);
+            //  获取用户信息
+            final OauthUserVO oauthUserVO = dcucBusiness.getOauthUserInfoByIdcard(applicantIdcard);
+            if (ObjectUtil.isNull(oauthUserVO)) {
+                return ResponseUtil.dtoFail(String.format("申请人:%s 信息不存在", applicantIdcard));
+            }
+            approvalInfoReqVO.setApplicantName(oauthUserVO.getName());
+            approvalInfoReqVO.setApplicantOrgCode(oauthUserVO.getOrgCode());
+            approvalInfoReqVO.setApplicantOrgName(oauthUserVO.getOrgName());
+            // todo 获取联系方式
+            approvalInfoReqVO.setApplicantPhoneNo("");
+        }
+        final ResourceInfoReqVO resourceInfo = zeroTrustApproveAuthInfoVO.getResourceInfo();
+        approvalInfoReqVO.setResourceInfoDTO(resourceInfo);
+        return ResponseUtil.newInstance(approvalInfoReqVO);
+    }
+
 }

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

@@ -1,7 +1,5 @@
 package com.dragonsoft.dcuc.approve.facade.api.v3;
 
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.dragoninfo.dcuc.common.utils.LangUtil;
 import com.dragoninfo.dcuc.common.utils.ResponseUtil;
@@ -12,13 +10,14 @@ 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.external.IBimBusiness;
-import com.dragonsoft.dcuc.approve.enumresources.*;
+import com.dragonsoft.dcuc.approve.enumresources.ApproveWorkFlowOperationEnum;
+import com.dragonsoft.dcuc.approve.enumresources.ZeroTrustApproveManageEnum;
+import com.dragonsoft.dcuc.approve.enumresources.ZeroTrustBusinessRespEnum;
 import com.dragonsoft.dcuc.approve.model.ApproveRecordInfo;
 import com.dragonsoft.dcuc.approve.model.ApproveTaskClass;
 import com.dragonsoft.dcuc.approve.model.dto.OperateReqDTO;
 import com.dragonsoft.dcuc.approve.model.dto.TaskRequestUserInfoDTO;
 import com.dragonsoft.dcuc.approve.model.req.ApprovalInfoReqVO;
-import com.dragonsoft.dcuc.approve.model.req.ResourceInfoReqVO;
 import com.dragonsoft.dcuc.approve.model.req.v3.ZeroTrustApproveCreateReqV3VO;
 import com.dragonsoft.dcuc.approve.model.req.v3.ZeroTrustApproveManagerReqV3VO;
 import com.dragonsoft.dcuc.approve.model.resp.OperateRespVO;
@@ -35,7 +34,6 @@ 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;
@@ -44,7 +42,6 @@ import org.springframework.web.bind.annotation.RestController;
 
 import java.util.Collections;
 import java.util.Date;
-import java.util.List;
 import java.util.Map;
 
 /**
@@ -138,8 +135,6 @@ public class ApiV3ApproveFacade implements IApiV3ApproveFacade {
         if (!approveApiBusiness.isStanderTaskNo(approveTaskId)) {
             return ZeroTrustResultDataVO.operateFailMessage("taskId格式出错");
         }
-
-        Map<String, List<Map<String, Object>>> bo = zeroTrustApproveCreateReqV3VO.getBo();
         Map<String, Object> bizData = zeroTrustApproveCreateReqV3VO.getBizData();
         ResponseStatus checkBizDataStatus = apiV3ApproveBusiness.checkBizData(bizData);
         if (ResponseUtil.isFail(checkBizDataStatus)) {
@@ -154,10 +149,6 @@ public class ApiV3ApproveFacade implements IApiV3ApproveFacade {
         ZeroTrustAppItemUserTokenInfoRespVO userToken = appTokenInfo.getUserToken();
         String appCode = appTokenInfo.getAppId();
         String applicantIdcard = userToken.getPid();
-        String applicantName = userToken.getName();
-        String applicantIp = userToken.getIp();
-        String orgCode = userToken.getOrgCode();
-
         ResponseDTO<SecurityUser> securityUserResp = securityUserBusiness.getSecurityUser(applicantIdcard, appCode);
         if (ResponseUtil.isFail(securityUserResp)) {
             log.error("令牌信息异常:{}", securityUserResp.getMessage());
@@ -168,19 +159,12 @@ public class ApiV3ApproveFacade implements IApiV3ApproveFacade {
         securityUserBusiness.setUserExtInfo(securityUser, appTokenInfo);
         UserContextUtils.setCurrentUser(securityUser);
 
-        String applicantOrgName = securityUser.getSecurityOrgName();
-        String applicantPhoneNo = "";
-
         // 获取processType并校验
         WorkflowProcessVo workflowProcessVo = workFlowBusiness.queryWorkflowProcessByBusinessCode(processDefId);
         if (ObjectUtil.isNull(workflowProcessVo)) {
             return ZeroTrustResultDataVO.operateFailMessage("流程标识不存在");
         }
         String processType = workflowProcessVo.getWorkflowProcesstypeVo().getProcessTypeCode();
-        String content = "";
-        if (MapUtil.isNotEmpty(bo)) {
-            content = JsonUtils.toJSONString(bo);
-        }
         ApproveRecordInfo selectApproveRecordInfo = approveRecordService.selectByApproveNo(approveTaskId);
         if (ObjectUtil.isNotNull(selectApproveRecordInfo)) {
             return ZeroTrustResultDataVO.operateFailMessage("TaskId已存在");
@@ -191,43 +175,11 @@ public class ApiV3ApproveFacade implements IApiV3ApproveFacade {
             return ZeroTrustResultDataVO.operateFailMessage("taskClass不存在");
         }
 
-        ResourceInfoReqVO resourceInfoReqVO = new ResourceInfoReqVO();
-        if (MapUtil.isNotEmpty(bizData)) {
-            BeanUtil.copyProperties(bizData, resourceInfoReqVO);
+        final ResponseDTO<ApprovalInfoReqVO> approvalInfoReqStatus = apiV3ApproveBusiness.parseToReqVO(zeroTrustApproveCreateReqV3VO, appTokenInfo, processType);
+        if (ResponseUtil.isFail(approvalInfoReqStatus)) {
+            return ZeroTrustResultDataVO.operateFailMessage(approvalInfoReqStatus.getMessage());
         }
-        String otherApplyContext = "";
-        if (MapUtil.isNotEmpty(bizData)) {
-            otherApplyContext = JsonUtils.toJSONString(bizData);
-        }
-
-        Date startTime = apiV3ApproveBusiness.getBizData(bizData, ReqBizDataEnum.BIZ_TERM_START);
-        Date startEnd = apiV3ApproveBusiness.getBizData(bizData, ReqBizDataEnum.BIZ_TERM_END);
-
-        ApprovalInfoReqVO approvalInfoReqVO = new ApprovalInfoReqVO();
-        approvalInfoReqVO.setProcessTitle(title);
-        approvalInfoReqVO.setProcessType(processType);
-        approvalInfoReqVO.setBusinessCode(processDefId);
-        approvalInfoReqVO.setAppCode(appCode);
-        approvalInfoReqVO.setApplyContent(content);
-        approvalInfoReqVO.setApplyReason(title + "申请");
-        approvalInfoReqVO.setApplicantIdcard(applicantIdcard);
-        approvalInfoReqVO.setApplicantName(applicantName);
-        approvalInfoReqVO.setApplicantOrgCode(orgCode);
-        approvalInfoReqVO.setApplicantOrgName(applicantOrgName);
-        approvalInfoReqVO.setApplicantPhoneNo(applicantPhoneNo);
-        approvalInfoReqVO.setPermissionValidType(PermissionValidTypeEnum.CUSTOM.getValue());
-        approvalInfoReqVO.setOperateType(CommitTypeEnum.APPLY_COMMIT.getValue());
-        approvalInfoReqVO.setResourceInfoDTO(resourceInfoReqVO);
-        approvalInfoReqVO.setCallbackUrl(callbackUrl);
-        approvalInfoReqVO.setApproveTaskClass(approveTaskClassCode);
-        approvalInfoReqVO.setApproveTaskId(approveTaskId);
-        approvalInfoReqVO.setFlowType(FlowTypeEnum.OTHER.getValue());
-        approvalInfoReqVO.setApplicantIp(applicantIp);
-        approvalInfoReqVO.setApplicantAppToken(appTokenId);
-        approvalInfoReqVO.setStartTime(startTime);
-        approvalInfoReqVO.setEndTime(startEnd);
-        approvalInfoReqVO.setOtherApplyContext(otherApplyContext);
-
+        final ApprovalInfoReqVO approvalInfoReqVO = ResponseUtil.getResult(approvalInfoReqStatus);
         ApproveRecordInfo approveRecordInfo = approveService.saveBase(approvalInfoReqVO, ManageDisposeTypeEnum.INSERT, new Date());
         String processInstanceId = approveRecordInfo.getProcessInstanceId();
         ZeroTrustApproveCreateV3RespVO zeroTrustApproveCreateV3RespVO = new ZeroTrustApproveCreateV3RespVO();