Browse Source

Merge branch 'develop' into 'master'

Develop

See merge request dcuc-tjdsj/approve-core!95
黄资权 3 years ago
parent
commit
1881550b8d
14 changed files with 202 additions and 17 deletions
  1. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/ApproveBusinessImpl.java
  2. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/ApproveLogBusinessImpl.java
  3. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/DcucAuthBusinessImpl.java
  4. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/DcucBusinessImpl.java
  5. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/api/ApiV1ApproveFacade.java
  6. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/api/ApiV2ApproveFacade.java
  7. 2 2
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/filter/ProofsFilter.java
  8. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/service/impl/ApproveActHiTaskServiceImpl.java
  9. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/service/impl/ApproveActRunTaskServiceImpl.java
  10. 3 4
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/service/impl/ApproveServiceImpl.java
  11. 31 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/threadlocal/ThreadLocalProofsHolder.java
  12. 155 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/utils/ProofsUtil.java
  13. 1 1
      approve-core-service/src/main/resources/config/mysql/V1_1_0006__alter_table_modif_business_code.sql
  14. 2 2
      approve-core-service/src/main/resources/config/mysql/V1_1_0007__add_sign_modif_message_id.sql

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

@@ -7,7 +7,6 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.dragoninfo.dcuc.common.utils.LangUtil;
-import com.dragoninfo.dcuc.common.utils.ProofsUtil;
 import com.dragoninfo.dcuc.common.utils.ResponseUtil;
 import com.dragoninfo.duceap.commons.util.kafka.KafkaServer;
 import com.dragonsoft.approve.common.ErrorCode;
@@ -35,6 +34,7 @@ import com.dragonsoft.dcuc.approve.service.IApproveActHiTaskService;
 import com.dragonsoft.dcuc.approve.service.IApproveActRunIdentityLinkService;
 import com.dragonsoft.dcuc.approve.service.IApproveActRunTaskService;
 import com.dragonsoft.dcuc.approve.service.IApproveRecordService;
+import com.dragonsoft.dcuc.approve.utils.ProofsUtil;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.base.enums.BooleanEnum;
 import com.dragonsoft.duceap.base.exception.ApplicationException;

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

@@ -6,7 +6,6 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.dragoninfo.dcuc.common.utils.LangUtil;
-import com.dragoninfo.dcuc.common.utils.ProofsUtil;
 import com.dragoninfo.dcuc.duceap.enums.ManageDisposeTypeEnum;
 import com.dragoninfo.dcuc.duceap.enums.OperateDisposeTypeEnum;
 import com.dragoninfo.dcuc.duceap.enums.RequestDisposeTypeEnum;
@@ -23,6 +22,7 @@ import com.dragonsoft.dcuc.approve.model.vo.*;
 import com.dragonsoft.dcuc.approve.properties.ApproveProperties;
 import com.dragonsoft.dcuc.approve.properties.KafkaProperties;
 import com.dragonsoft.dcuc.approve.service.*;
+import com.dragonsoft.dcuc.approve.utils.ProofsUtil;
 import com.dragonsoft.duceap.base.entity.security.BaseSecurityUser;
 import com.dragonsoft.duceap.base.exception.ApplicationException;
 import com.dragonsoft.duceap.base.utils.UserContextUtils;

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

@@ -2,7 +2,6 @@ package com.dragonsoft.dcuc.approve.business.impl;
 
 import cn.hutool.core.util.StrUtil;
 import com.dragoninfo.dcuc.common.entity.*;
-import com.dragoninfo.dcuc.common.threadlocal.ThreadLocalProofsHolder;
 import com.dragonsoft.auditlog.collection.qmtj.provider.IRestTemplateProvider;
 import com.dragonsoft.dcuc.approve.business.IDcucAuthBusiness;
 import com.dragonsoft.dcuc.approve.constants.ApproveConstants;
@@ -16,6 +15,7 @@ import com.dragonsoft.dcuc.approve.model.vo.AppFunRedListVo;
 import com.dragonsoft.dcuc.approve.model.vo.AuthAppFunApiVO;
 import com.dragonsoft.dcuc.approve.model.vo.WhiteListUserApiVo;
 import com.dragonsoft.dcuc.approve.properties.ApproveProperties;
+import com.dragonsoft.dcuc.approve.threadlocal.ThreadLocalProofsHolder;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.commons.util.json.JsonUtils;
 import com.dragonsoft.duceap.core.search.enums.SearchOperator;

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

@@ -3,12 +3,12 @@ package com.dragonsoft.dcuc.approve.business.impl;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.dragoninfo.dcuc.common.entity.Proofs;
-import com.dragoninfo.dcuc.common.threadlocal.ThreadLocalProofsHolder;
 import com.dragoninfo.dcuc.common.utils.ResponseUtil;
 import com.dragonsoft.dcuc.approve.business.IDcucBusiness;
 import com.dragonsoft.dcuc.approve.model.resp.PoliceResultVO;
 import com.dragonsoft.dcuc.approve.model.vo.OauthUserVO;
 import com.dragonsoft.dcuc.approve.properties.ApproveProperties;
+import com.dragonsoft.dcuc.approve.threadlocal.ThreadLocalProofsHolder;
 import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
 import com.dragonsoft.duceap.core.entity.response.ResponseResult;
 import org.slf4j.Logger;

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/api/ApiV1ApproveFacade.java

@@ -6,7 +6,6 @@ import com.dragoninfo.dcuc.app.dto.ResourceRequestParamDTO;
 import com.dragoninfo.dcuc.app.facade.IResourceFacade;
 import com.dragoninfo.dcuc.common.entity.ApiSearchReq;
 import com.dragoninfo.dcuc.common.entity.Proofs;
-import com.dragoninfo.dcuc.common.threadlocal.ThreadLocalProofsHolder;
 import com.dragoninfo.dcuc.common.utils.ResponseUtil;
 import com.dragoninfo.dcuc.common.utils.SearchableUtil;
 import com.dragonsoft.dcuc.approve.business.IApproveBusiness;
@@ -22,6 +21,7 @@ import com.dragonsoft.dcuc.approve.model.resp.*;
 import com.dragonsoft.dcuc.approve.model.vo.ApproveTaskRequestVo;
 import com.dragonsoft.dcuc.approve.model.vo.TaskRequestUserInfoDTO;
 import com.dragonsoft.dcuc.approve.service.IApproveService;
+import com.dragonsoft.dcuc.approve.threadlocal.ThreadLocalProofsHolder;
 import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.base.entity.security.BaseSecurityUser;

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/api/ApiV2ApproveFacade.java

@@ -5,7 +5,6 @@ import cn.hutool.core.util.StrUtil;
 import com.dragoninfo.dcuc.common.entity.ApiResult;
 import com.dragoninfo.dcuc.common.entity.ApiSearchReq;
 import com.dragoninfo.dcuc.common.entity.Proofs;
-import com.dragoninfo.dcuc.common.threadlocal.ThreadLocalProofsHolder;
 import com.dragoninfo.dcuc.common.utils.ResponseUtil;
 import com.dragoninfo.dcuc.common.utils.SearchableUtil;
 import com.dragoninfo.dcuc.duceap.enums.ManageDisposeTypeEnum;
@@ -22,6 +21,7 @@ import com.dragonsoft.dcuc.approve.model.vo.OauthUserVO;
 import com.dragonsoft.dcuc.approve.model.vo.TaskRequestUserInfoDTO;
 import com.dragonsoft.dcuc.approve.service.IApproveRecordService;
 import com.dragonsoft.dcuc.approve.service.IApproveService;
+import com.dragonsoft.dcuc.approve.threadlocal.ThreadLocalProofsHolder;
 import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.commons.util.enums.EnumUtils;

+ 2 - 2
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/filter/ProofsFilter.java

@@ -2,9 +2,9 @@ package com.dragonsoft.dcuc.approve.filter;
 
 import cn.hutool.core.util.StrUtil;
 import com.dragoninfo.dcuc.common.entity.Proofs;
-import com.dragoninfo.dcuc.common.threadlocal.ThreadLocalProofsHolder;
-import com.dragoninfo.dcuc.common.utils.ProofsUtil;
 import com.dragonsoft.dcuc.approve.properties.ApproveProperties;
+import com.dragonsoft.dcuc.approve.threadlocal.ThreadLocalProofsHolder;
+import com.dragonsoft.dcuc.approve.utils.ProofsUtil;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.web.utils.ResponseUtils;
 import lombok.extern.slf4j.Slf4j;

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

@@ -1,7 +1,6 @@
 package com.dragonsoft.dcuc.approve.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.dragoninfo.dcuc.common.utils.ProofsUtil;
 import com.dragonsoft.dcuc.approve.business.IApproveBusiness;
 import com.dragonsoft.dcuc.approve.mapper.ApproveActHiTaskMapper;
 import com.dragonsoft.dcuc.approve.model.ApproveActHiTask;
@@ -9,6 +8,7 @@ import com.dragonsoft.dcuc.approve.model.ApproveRecordInfo;
 import com.dragonsoft.dcuc.approve.model.resp.TaskVo;
 import com.dragonsoft.dcuc.approve.service.IApproveActHiTaskService;
 import com.dragonsoft.dcuc.approve.service.IApproveRecordService;
+import com.dragonsoft.dcuc.approve.utils.ProofsUtil;
 import com.dragonsoft.duceap.base.enums.BooleanEnum;
 import com.dragonsoft.duceap.core.entity.page.PageImpl;
 import com.dragonsoft.duceap.core.search.Searchable;

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/service/impl/ApproveActRunTaskServiceImpl.java

@@ -4,7 +4,6 @@ import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.dragoninfo.dcuc.common.utils.ProofsUtil;
 import com.dragonsoft.dcuc.approve.business.IApproveBusiness;
 import com.dragonsoft.dcuc.approve.mapper.ApproveActRunTaskMapper;
 import com.dragonsoft.dcuc.approve.model.ApproveActRunIdentityLink;
@@ -16,6 +15,7 @@ import com.dragonsoft.dcuc.approve.model.resp.TaskVo;
 import com.dragonsoft.dcuc.approve.service.IApproveActRunIdentityLinkService;
 import com.dragonsoft.dcuc.approve.service.IApproveActRunTaskService;
 import com.dragonsoft.dcuc.approve.service.IApproveRecordService;
+import com.dragonsoft.dcuc.approve.utils.ProofsUtil;
 import com.dragonsoft.duceap.base.entity.search.SearchDTO;
 import com.dragonsoft.duceap.base.enums.BooleanEnum;
 import com.dragonsoft.duceap.base.utils.UserContextUtils;

+ 3 - 4
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/service/impl/ApproveServiceImpl.java

@@ -9,8 +9,6 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.dragoninfo.dcuc.common.entity.Proofs;
-import com.dragoninfo.dcuc.common.threadlocal.ThreadLocalProofsHolder;
-import com.dragoninfo.dcuc.common.utils.ProofsUtil;
 import com.dragoninfo.dcuc.common.utils.ResponseUtil;
 import com.dragoninfo.dcuc.duceap.enums.ManageDisposeTypeEnum;
 import com.dragonsoft.dcuc.approve.business.IApproveBusiness;
@@ -34,6 +32,8 @@ import com.dragonsoft.dcuc.approve.model.vo.LogDto;
 import com.dragonsoft.dcuc.approve.model.vo.TaskRequestUserInfoDTO;
 import com.dragonsoft.dcuc.approve.properties.ApproveProperties;
 import com.dragonsoft.dcuc.approve.service.*;
+import com.dragonsoft.dcuc.approve.threadlocal.ThreadLocalProofsHolder;
+import com.dragonsoft.dcuc.approve.utils.ProofsUtil;
 import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.base.entity.security.BaseSecurityUser;
@@ -361,8 +361,7 @@ public class ApproveServiceImpl implements IApproveService {
                     for (TaskHistoryDetailVo taskDetailVo : list) {
                         String taskDetailVoId = taskDetailVo.getId();
                         //循环提交当前待办任务
-                        Proofs proofs = ThreadLocalProofsHolder.getProofs();
-                        processInstanceVO = baseApproveOperate(proofs.getIdcard(), taskDetailVoId, ApproveWorkFlowOperationEnum.COMPLETE_AGREE,
+                        processInstanceVO = baseApproveOperate(ProofsUtil.getIdcard(), taskDetailVoId, ApproveWorkFlowOperationEnum.COMPLETE_AGREE,
                                 taskRequest, approvalInfo, taskRequestUserInfoDTO, approveRecordInfo.getApproveNo(), approveRecordInfo.getBusinessCode(),
                                 approveRecordInfo.getId(), operateRespVO.getHitRedList());
                         List<TaskHistoryDetailVo> taskRunDetailVos = processInstanceVO.getTaskRunDetailVos();

+ 31 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/threadlocal/ThreadLocalProofsHolder.java

@@ -0,0 +1,31 @@
+package com.dragonsoft.dcuc.approve.threadlocal;
+
+import com.alibaba.ttl.TransmittableThreadLocal;
+import com.dragoninfo.dcuc.common.entity.Proofs;
+
+/**
+ * <p>
+ * 接口请求凭据信息
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2021/8/18
+ */
+public class ThreadLocalProofsHolder {
+    public static String key = "threadLocalProofsHolder";
+
+    private static TransmittableThreadLocal<Proofs> proofsThreadLocal = new TransmittableThreadLocal<>();
+
+    public static Proofs getProofs() {
+        return proofsThreadLocal.get();
+    }
+
+    public static void setPoofs(Proofs poofs) {
+        proofsThreadLocal.set(poofs);
+    }
+
+    public static void remove() {
+        proofsThreadLocal.remove();
+    }
+
+}

+ 155 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/utils/ProofsUtil.java

@@ -0,0 +1,155 @@
+package com.dragonsoft.dcuc.approve.utils;
+
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.dragoninfo.dcuc.common.Constants;
+import com.dragoninfo.dcuc.common.entity.Proofs;
+import com.dragonsoft.dcuc.approve.threadlocal.ThreadLocalProofsHolder;
+import com.dragonsoft.duceap.base.entity.security.BaseSecurityUser;
+import com.dragonsoft.duceap.base.utils.UserContextUtils;
+import com.dragonsoft.duceap.commons.util.json.JsonUtils;
+import org.springframework.util.Base64Utils;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Optional;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2021/8/25
+ */
+public class ProofsUtil {
+    private ProofsUtil() {
+    }
+
+    public static String getIdcard() {
+        BaseSecurityUser currentUser = UserContextUtils.getCurrentUser();
+        if (currentUser != null) {
+            return currentUser.getIdcard();
+        }
+        Proofs proofs = ThreadLocalProofsHolder.getProofs();
+        if (proofs != null) {
+            return proofs.getIdcard();
+        }
+        return "";
+    }
+
+
+    public static Proofs generalProofs(HttpServletRequest request, String defaultAppCode) {
+        BaseSecurityUser currentUser = UserContextUtils.getCurrentUser();
+        String idcard;
+        String appCode;
+        if (currentUser != null) {
+            idcard = currentUser.getIdcard();
+            appCode = defaultAppCode;
+        } else {
+            idcard = getIdcard(request);
+            appCode = getAppCode(request);
+        }
+
+        return Proofs.builder()
+                .appCode(appCode)
+                .idcard(idcard)
+                .userToken(getUserToken(request))
+                .appToken(getAppToken(request))
+                .build();
+    }
+
+    public static String getUserToken(HttpServletRequest request) {
+        // 使用Header获取的key会全部转换为小写字母
+        String userToken = request.getHeader(Constants.USER_TOKEN);
+
+        if (StrUtil.isBlank(userToken)) {
+            userToken = request.getHeader(Constants.BUS_SRE_TOKEN);
+        }
+        return userToken;
+    }
+
+    public static String getAppToken(HttpServletRequest request) {
+        String appToken = request.getHeader(Constants.APP_TOKEN);
+        if (StrUtil.isBlank(appToken)) {
+            appToken = request.getHeader(Constants.BUS_SRA_TOKEN);
+        }
+        return appToken;
+    }
+
+    /**
+     * 获取身份证号
+     *
+     * @param request 请求头
+     * @return 身份证号
+     */
+    public static String getIdcard(HttpServletRequest request) {
+        // 使用Header获取的key会全部转换为小写字母
+        String userToken = getUserToken(request);
+        String idcard = "";
+        if (StrUtil.isNotBlank(userToken)) {
+            Optional<JSONObject> jsonObject = parseJwt(userToken);
+            if (jsonObject.isPresent()) {
+                idcard = jsonObject.get().getString("idCard");
+            }
+        }
+
+        if (StrUtil.isBlank(idcard)) {
+            idcard = request.getHeader(Constants.IDCARD);
+        }
+
+        if (StrUtil.isBlank(idcard)) {
+            idcard = request.getHeader(Constants.BUS_SRE_IDCARD);
+        }
+
+        return idcard;
+    }
+
+    /**
+     * 获取应用代码
+     *
+     * @param request 请求头
+     * @return 应用代码
+     */
+    public static String getAppCode(HttpServletRequest request) {
+        String appToken = getAppToken(request);
+
+        String appCode = "";
+        if (StrUtil.isNotBlank(appToken)) {
+            Optional<JSONObject> jsonObject = parseJwt(appToken);
+            if (jsonObject.isPresent()) {
+                appCode = jsonObject.get().getString("appCode");
+            }
+        }
+
+        if (StrUtil.isBlank(appCode)) {
+            appCode = request.getHeader(Constants.APP_CODE);
+        }
+
+        if (StrUtil.isBlank(appCode)) {
+            appCode = request.getHeader(Constants.BUS_SRA_ID);
+        }
+
+        return appCode;
+    }
+
+    /**
+     * 解析JWT内容
+     *
+     * @param token jwtToken
+     * @return 负载内容
+     */
+    private static Optional<JSONObject> parseJwt(String token) {
+        if (StrUtil.isBlank(token)) {
+            return Optional.empty();
+        }
+        int jwtLength = 3;
+        String[] split = token.split("\\.");
+        if (split.length == jwtLength) {
+            String playLoad = split[1];
+            byte[] bytes = Base64Utils.decodeFromUrlSafeString(playLoad);
+            JSONObject jsonObject = JsonUtils.parseObject(new String(bytes));
+            return Optional.of(jsonObject);
+        }
+        return Optional.empty();
+    }
+}

+ 1 - 1
approve-core-service/src/main/resources/config/mysql/V1_1_0006__alter_table_modif_business_code.sql

@@ -1,2 +1,2 @@
 ALTER TABLE `t_approve_record_info`
-    CHANGE COLUMN `process_no` `business_code` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '流程编号' AFTER `id`;
+    CHANGE COLUMN `process_no` `business_code` varchar(32) DEFAULT NULL COMMENT '流程编号' AFTER `id`;

+ 2 - 2
approve-core-service/src/main/resources/config/mysql/V1_1_0007__add_sign_modif_message_id.sql

@@ -1,6 +1,6 @@
 ALTER TABLE `t_approve_record_info`
     ADD COLUMN `SIGN` varchar(1024) NULL COMMENT '签名' AFTER `delete_time`;
 ALTER TABLE `t_approval_info`
-    MODIFY COLUMN `MESSAGE_ID` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '消息ID' AFTER `IS_DELETED`;
+    MODIFY COLUMN `MESSAGE_ID` varchar(128) DEFAULT NULL COMMENT '消息ID' AFTER `IS_DELETED`;
 ALTER TABLE `t_approve_record_info`
-    MODIFY COLUMN `message_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '第三方消息id' AFTER `attachment_url`;
+    MODIFY COLUMN `message_id` varchar(128) DEFAULT NULL COMMENT '第三方消息id' AFTER `attachment_url`;