Kaynağa Gözat

feat: 新增过期

huangzqa 1 yıl önce
ebeveyn
işleme
a543f420e8
14 değiştirilmiş dosya ile 196 ekleme ve 44 silme
  1. 12 0
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/ApprovalInfoReqVO.java
  2. 9 0
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/resp/ApprovalInfoRespVO.java
  3. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/IApproveExpirationBusiness.java
  4. 108 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/ApproveExpirationBusinessImpl.java
  5. 0 40
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/ApproveOverdueBusinessImpl.java
  6. 2 2
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/event/listener/ApproveOperateLogEventListener.java
  7. 4 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/api/v3/ApiV3ApproveFacade.java
  8. 15 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/ApprovalInfo.java
  9. 18 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/ApproveRecordInfo.java
  10. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/properties/ApproveProperties.java
  11. 8 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/service/IApproveRecordService.java
  12. 10 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/service/impl/ApproveRecordServiceImpl.java
  13. 2 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/service/impl/ApproveServiceImpl.java
  14. 6 0
      approve-core-service/src/main/resources/config/mysql/V1_1_0018__add_ApplyInfo_.sql

+ 12 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/ApprovalInfoReqVO.java

@@ -129,4 +129,16 @@ public class ApprovalInfoReqVO implements Serializable {
     @ApiModelProperty(value = "任务编号")
     private String approveTaskId;
 
+    /**
+     * 申请人IP
+     */
+    @ApiModelProperty(value = "申请人IP")
+    private String applicantIp;
+
+    /**
+     * 申请人应用令牌
+     */
+    @ApiModelProperty(value = "申请人应用令牌")
+    private String applicantAppToken;
+
 }

+ 9 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/resp/ApprovalInfoRespVO.java

@@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.util.Date;
 
@@ -103,4 +104,12 @@ public class ApprovalInfoRespVO {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
 
+    /**
+     * 过期时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date expirationTime;
+
+
 }

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/IApproveOverdueBusiness.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/IApproveExpirationBusiness.java

@@ -8,7 +8,7 @@ package com.dragonsoft.dcuc.approve.business;
  * @author huangzqa
  * @date 2023/7/18
  */
-public interface IApproveOverdueBusiness {
+public interface IApproveExpirationBusiness {
 
     /**
      * 调度任务

+ 108 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/ApproveExpirationBusinessImpl.java

@@ -0,0 +1,108 @@
+package com.dragonsoft.dcuc.approve.business.impl;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import com.dragonsoft.auditlog.collection.qmtj.LogSendComponent;
+import com.dragonsoft.auditlog.collection.qmtj.pojo.req.ApproveBusLog;
+import com.dragonsoft.dcuc.approve.business.IApproveExpirationBusiness;
+import com.dragonsoft.dcuc.approve.event.listener.ApproveOperateLogEventListener;
+import com.dragonsoft.dcuc.approve.model.ApproveRecordInfo;
+import com.dragonsoft.dcuc.approve.properties.ApproveProperties;
+import com.dragonsoft.dcuc.approve.service.IApproveRecordService;
+import com.dragonsoft.duceap.commons.util.UUIDUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/7/18
+ */
+@Slf4j
+@Component
+public class ApproveExpirationBusinessImpl implements IApproveExpirationBusiness {
+
+    private ApproveProperties approveProperties;
+
+    private IApproveRecordService approveRecordService;
+
+    private LogSendComponent logSendComponent;
+
+    @Autowired
+    public void setLogSendComponent(LogSendComponent logSendComponent) {
+        this.logSendComponent = logSendComponent;
+    }
+
+    @Autowired
+    public void setApproveRecordService(IApproveRecordService approveRecordService) {
+        this.approveRecordService = approveRecordService;
+    }
+
+    @Autowired
+    public void setApproveProperties(ApproveProperties approveProperties) {
+        this.approveProperties = approveProperties;
+    }
+
+    @Override
+    public void schedulingTask() {
+        Integer overdueTimeDays = approveProperties.getExpirationTimeDays();
+        //
+        DateTime date = DateUtil.date();
+        DateTime startExpirationDateTime = DateUtil.offsetDay(date, -overdueTimeDays);
+        // 开始过期的时间
+        List<ApproveRecordInfo> expirationTimeRecord = approveRecordService.findExpirationTimeRecord(startExpirationDateTime);
+        for (ApproveRecordInfo approveRecordInfo : expirationTimeRecord) {
+            approveRecordInfo.setExpirationTime(date);
+            approveRecordService.updateById(approveRecordInfo);
+            sendAuditOverdueTimeLog(approveRecordInfo);
+        }
+    }
+
+    /**
+     * 发送超期日志
+     *
+     * @param approveRecordInfo 审批单信息
+     */
+    protected void sendAuditOverdueTimeLog(ApproveRecordInfo approveRecordInfo) {
+        String auditSysId = approveProperties.getAuditSysId();
+        String appToken = approveRecordInfo.getApplicantAppToken();
+        String requestIdcard = approveRecordInfo.getApplicantIdcard();
+        String requestUsername = approveRecordInfo.getApplicantName();
+        String requestApproveIp = approveRecordInfo.getApplicantIp();
+        String approveTimeString = System.currentTimeMillis() + "";
+        String approveLogId = UUIDUtils.getUUID();
+        String approveNo = approveRecordInfo.getApproveNo();
+
+        log.info("发送超期日志:审批单号:{}", approveNo);
+
+        ApproveBusLog approveBusLog = new ApproveBusLog();
+        approveBusLog.setAppToken(appToken);
+        approveBusLog.setApplyApproveId(requestIdcard);
+        approveBusLog.setApplyApproveIdCard(requestIdcard);
+        approveBusLog.setApplyApproveName(requestUsername);
+        approveBusLog.setApplyApproveIp(requestApproveIp);
+        approveBusLog.setOperateTime(approveTimeString);
+        // 请求处理
+        approveBusLog.setApplyType("02");
+        // 超期
+        approveBusLog.setBusinessType("23");
+        approveBusLog.setApproveContentHash("");
+        approveBusLog.setApproveTableHash("");
+
+        approveBusLog.setApproveTaskId(approveLogId);
+        approveBusLog.setApplySystemId("");
+        approveBusLog.setApproveCenterId(approveNo);
+        approveBusLog.setExtend(ApproveOperateLogEventListener.EXTEND);
+        approveBusLog.setRelatedId("");
+
+        List<ApproveBusLog> approveBusLogList = Collections.singletonList(approveBusLog);
+        logSendComponent.sendApproveBusLog(auditSysId, ApproveOperateLogEventListener.OPERATE_LOG_TYPE, approveBusLogList);
+    }
+}

+ 0 - 40
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/ApproveOverdueBusinessImpl.java

@@ -1,40 +0,0 @@
-package com.dragonsoft.dcuc.approve.business.impl;
-
-import com.dragonsoft.dcuc.approve.business.IApproveOverdueBusiness;
-import com.dragonsoft.dcuc.approve.properties.ApproveProperties;
-import com.dragonsoft.dcuc.approve.service.IApproveRecordService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-/**
- * <p>
- *
- * </p>
- *
- * @author huangzqa
- * @date 2023/7/18
- */
-@Component
-public class ApproveOverdueBusinessImpl implements IApproveOverdueBusiness {
-
-    private ApproveProperties approveProperties;
-
-    private IApproveRecordService approveRecordService;
-
-    @Autowired
-    public void setApproveRecordService(IApproveRecordService approveRecordService) {
-        this.approveRecordService = approveRecordService;
-    }
-
-    @Autowired
-    public void setApproveProperties(ApproveProperties approveProperties) {
-        this.approveProperties = approveProperties;
-    }
-
-    @Override
-    public void schedulingTask() {
-        Integer overdueTimeDays = approveProperties.getOverdueTimeDays();
-
-
-    }
-}

+ 2 - 2
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/event/listener/ApproveOperateLogEventListener.java

@@ -40,7 +40,7 @@ public class ApproveOperateLogEventListener implements ApplicationListener<Audit
     /**
      * 审批操作日志
      */
-    public static final String LOG_TYPE = "009";
+    public static final String OPERATE_LOG_TYPE = "009";
 
     /**
      * 是否扩线,就是关联审批流程
@@ -104,6 +104,6 @@ public class ApproveOperateLogEventListener implements ApplicationListener<Audit
         approveBusLog.setRelatedId("");
 
         List<ApproveBusLog> approveBusLogList = Collections.singletonList(approveBusLog);
-        logSendComponent.sendApproveBusLog(auditSysId, LOG_TYPE, approveBusLogList);
+        logSendComponent.sendApproveBusLog(auditSysId, OPERATE_LOG_TYPE, approveBusLogList);
     }
 }

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

@@ -145,6 +145,8 @@ public class ApiV3ApproveFacade implements IApiV3ApproveFacade {
         String appCode = appTokenInfo.getAppId();
         String applicantIdcard = userToken.getPid();
         String applicantName = userToken.getName();
+        String applicantIp = userToken.getIp();
+
         OauthUserVO oauthUserVO = dcucBusiness.getOauthUserInfoByIdcard(applicantIdcard);
         if (ObjectUtil.isNotNull(oauthUserVO)) {
             applicantName = oauthUserVO.getName();
@@ -209,6 +211,8 @@ public class ApiV3ApproveFacade implements IApiV3ApproveFacade {
         approvalInfoReqVO.setApproveTaskClass(approveTaskClassCode);
         approvalInfoReqVO.setApproveTaskId(approveTaskId);
         approvalInfoReqVO.setFlowType(FlowTypeEnum.OTHER.getValue());
+        approvalInfoReqVO.setApplicantIp(applicantIp);
+        approvalInfoReqVO.setApplicantAppToken(appTokenId);
 
         ApproveRecordInfo approveRecordInfo = approveService.saveBase(approvalInfoReqVO, ManageDisposeTypeEnum.INSERT, new Date());
         String processInstanceId = approveRecordInfo.getProcessInstanceId();

+ 15 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/ApprovalInfo.java

@@ -201,6 +201,21 @@ public class ApprovalInfo implements Serializable {
      */
     private String approveTaskClass;
 
+    /**
+     * 申请人IP
+     */
+    private String applicantIp;
+
+    /**
+     * 申请人应用令牌
+     */
+    private String applicantAppToken;
+    /**
+     * 过期时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date expirationTime;
+
 
     @ApiModelProperty(value = "访问资源信息")
     private ResourceInfoDTO resourceInfoVo;

+ 18 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/ApproveRecordInfo.java

@@ -93,6 +93,16 @@ public class ApproveRecordInfo {
      */
     private String applicantOrgName;
 
+    /**
+     * 申请人IP
+     */
+    private String applicantIp;
+
+    /**
+     * 申请人应用令牌
+     */
+    private String applicantAppToken;
+
     /**
      * 申请时间
      */
@@ -278,6 +288,14 @@ public class ApproveRecordInfo {
      */
     private String approveTaskClass;
 
+    /**
+     * 过期时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(jdbcType = JdbcType.TIMESTAMP)
+    private Date expirationTime;
+
+
     /**
      * 将模式3新表单表构建成旧表单对象
      *

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/properties/ApproveProperties.java

@@ -64,7 +64,7 @@ public class ApproveProperties {
     /**
      * 流程超期时间,(单位日)
      */
-    private Integer overdueTimeDays = 3;
+    private Integer expirationTimeDays = 3;
 
 
 }

+ 8 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/service/IApproveRecordService.java

@@ -1,5 +1,6 @@
 package com.dragonsoft.dcuc.approve.service;
 
+import cn.hutool.core.date.DateTime;
 import com.dragonsoft.dcuc.approve.model.ApprovalInfo;
 import com.dragonsoft.dcuc.approve.model.ApproveRecordInfo;
 import com.dragonsoft.dcuc.approve.model.resp.ApprovalInfoRespVO;
@@ -130,4 +131,11 @@ public interface IApproveRecordService {
      * @return taskNo
      */
     String getTaskNoByDate(String appCode, String dateTimeStr);
+
+    /**
+     * 获取过期的审批
+     * @param startExpirationDateTime  开始过期的时间
+     * @return 过期的审批单
+     */
+    List<ApproveRecordInfo> findExpirationTimeRecord(Date startExpirationDateTime);
 }

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

@@ -230,6 +230,8 @@ public class ApproveRecordServiceImpl implements IApproveRecordService {
         approveRecordInfo.setFlowType(approvalInfo.getFlowType());
         approveRecordInfo.setCallbackUrl(approvalInfo.getCallbackUrl());
         approveRecordInfo.setApproveTaskClass(approvalInfo.getApproveTaskClass());
+        approveRecordInfo.setApplicantIp(approvalInfo.getApplicantIp());
+        approveRecordInfo.setApplicantAppToken(approvalInfo.getApplicantAppToken());
         return approveRecordInfo;
     }
 
@@ -295,6 +297,14 @@ public class ApproveRecordServiceImpl implements IApproveRecordService {
         return "";
     }
 
+    @Override
+    public List<ApproveRecordInfo> findExpirationTimeRecord(Date startExpirationDateTime) {
+        LambdaQueryWrapper<ApproveRecordInfo> lambdaQueryWrapper = Wrappers.lambdaQuery();
+        lambdaQueryWrapper.ne(ApproveRecordInfo::getTaskId, ApproveConstants.END_STR)
+                .le(ApproveRecordInfo::getUpdateTime, startExpirationDateTime);
+        return approveRecordMapper.selectList(lambdaQueryWrapper);
+    }
+
     protected String getCurrentNo(String approveNo) {
         if (StrUtil.isBlank(approveNo)) {
             return "";

+ 2 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/service/impl/ApproveServiceImpl.java

@@ -1153,6 +1153,8 @@ public class ApproveServiceImpl implements IApproveService {
 
         approvalInfo.setCallbackUrl(approvalInfoReqVO.getCallbackUrl());
         approvalInfo.setApproveTaskClass(approvalInfoReqVO.getApproveTaskClass());
+        approvalInfo.setApplicantIp(approvalInfoReqVO.getApplicantIp());
+        approvalInfo.setApplicantAppToken(approvalInfoReqVO.getApplicantAppToken());
 
         return approvalInfo;
     }

+ 6 - 0
approve-core-service/src/main/resources/config/mysql/V1_1_0018__add_ApplyInfo_.sql

@@ -0,0 +1,6 @@
+ALTER TABLE t_approve_record_info
+    ADD applicant_ip varchar(32) NULL COMMENT '申请人IP' AFTER `applicant_org_name`;;
+ALTER TABLE t_approve_record_info
+    ADD applicant_app_token varchar(1024) NULL COMMENT '申请人应用令牌' AFTER `applicant_ip`;;
+ALTER TABLE t_approve_record_info
+    ADD expiration_time datetime NULL COMMENT '过期时间' AFTER `approve_task_class`;;