From bb2309676cefae28bef14d1971ccda4b7dc38ed8 Mon Sep 17 00:00:00 2001 From: xuhy <3313886187@qq.com> Date: 星期四, 27 二月 2025 19:52:40 +0800 Subject: [PATCH] 审批流定时任务 --- ruoyi-admin/src/main/java/com/ruoyi/web/controller/interceptor/MybatisInterceptor.java | 238 +++++++++++++++++++------------------- ruoyi-system/src/main/resources/mapper/system/StateProcessInstanceActionMapper.xml | 24 ++++ ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessInstanceActionServiceImpl.java | 4 ruoyi-system/src/main/java/com/ruoyi/system/task/jobs/StateProcessJob.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessInstanceActionService.java | 3 ruoyi-system/src/main/java/com/ruoyi/system/model/StateProcessInstanceAction.java | 23 +++ ruoyi-admin/src/main/java/com/ruoyi/web/controller/interceptor/MybatisConfiguration.java | 34 ++-- ruoyi-system/src/main/java/com/ruoyi/system/mapper/StateProcessInstanceActionMapper.java | 2 8 files changed, 189 insertions(+), 141 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/interceptor/MybatisConfiguration.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/interceptor/MybatisConfiguration.java index 5390dc1..b2cbb16 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/interceptor/MybatisConfiguration.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/interceptor/MybatisConfiguration.java @@ -1,17 +1,17 @@ -package com.ruoyi.web.controller.interceptor; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class MybatisConfiguration { - - /** - * 注册拦截器 - */ - @Bean - public MybatisInterceptor getMybatisInterceptor() { - return new MybatisInterceptor(); - } - -} \ No newline at end of file +//package com.ruoyi.web.controller.interceptor; +// +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +// +//@Configuration +//public class MybatisConfiguration { +// +// /** +// * 注册拦截器 +// */ +// @Bean +// public MybatisInterceptor getMybatisInterceptor() { +// return new MybatisInterceptor(); +// } +// +//} \ No newline at end of file diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/interceptor/MybatisInterceptor.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/interceptor/MybatisInterceptor.java index 8c232f4..fcbd5dc 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/interceptor/MybatisInterceptor.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/interceptor/MybatisInterceptor.java @@ -1,119 +1,119 @@ -package com.ruoyi.web.controller.interceptor; - -import com.ruoyi.framework.web.service.TokenService; -import lombok.extern.slf4j.Slf4j; -import org.apache.ibatis.executor.Executor; -import org.apache.ibatis.mapping.MappedStatement; -import org.apache.ibatis.mapping.SqlCommandType; -import org.apache.ibatis.plugin.*; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.lang.reflect.Field; -import java.time.LocalDateTime; -import java.util.*; - -@Slf4j -@Component -@Intercepts({ @Signature(type = Executor.class, method = "update", args = { MappedStatement.class, Object.class }) }) -public class MybatisInterceptor implements Interceptor { - - @Autowired - private TokenService tokenService; - - @Override - public Object intercept(Invocation invocation) throws Throwable { - MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0]; - if("com.ruoyi.system.mapper.SysLogininforMapper.insertLogininfor".equals(mappedStatement.getId())){ - return invocation.proceed(); - } - // sql类型:insert、update、select、delete - SqlCommandType sqlCommandType = mappedStatement.getSqlCommandType(); - Object parameter = invocation.getArgs()[1]; - - if (parameter == null) { - return invocation.proceed(); - } - - // 当sql为新增或更新类型时,自动填充操作人相关信息 - if (SqlCommandType.INSERT == sqlCommandType) { - - Field[] fields = getAllFields(parameter); - for (Field field : fields) { - try { - // 注入创建人 - if ("createBy".equals(field.getName())) { - // 获取当前登录用户信息 - if(Objects.nonNull(tokenService.getLoginUser())){ - String userName = tokenService.getLoginUser().getUser().getUserName(); - field.setAccessible(true); - field.set(parameter, userName); - field.setAccessible(false); - } - } - //注入创建时间 - if ("createTime".equals(field.getName())) { - field.setAccessible(true); -// field.set(parameter, LocalDateTime.now()); - field.setAccessible(false); - } - } catch (Exception e) { - log.error("failed to insert data, exception = ", e); - } - } - } - if (SqlCommandType.UPDATE == sqlCommandType) { - Field[] fields = getAllFields(parameter); - for (Field field : fields) { - try { - if ("updateBy".equals(field.getName())) { - // 获取当前登录用户信息 - if(Objects.nonNull(tokenService.getLoginUser())){ - String userName = tokenService.getLoginUser().getUser().getUserName(); - field.setAccessible(true); - field.set(parameter, userName); - field.setAccessible(false); - } - } - if ("updateTime".equals(field.getName())) { - field.setAccessible(true); -// field.set(parameter, new Date()); - field.setAccessible(false); - } - } catch (Exception e) { - log.error("failed to update data, exception = ", e); - } - } - } - return invocation.proceed(); - } - - @Override - public Object plugin(Object target) { - return Plugin.wrap(target, this); - } - - @Override - public void setProperties(Properties properties) { - // TODO Auto-generated method stub - } - - /** - * 获取类的所有属性,包括父类 - * - * @param object - * @return - */ - private Field[] getAllFields(Object object) { - Class<?> clazz = object.getClass(); - List<Field> fieldList = new ArrayList<>(); - while (clazz != null) { - fieldList.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields()))); - clazz = clazz.getSuperclass(); - } - Field[] fields = new Field[fieldList.size()]; - fieldList.toArray(fields); - return fields; - } - -} \ No newline at end of file +//package com.ruoyi.web.controller.interceptor; +// +//import com.ruoyi.framework.web.service.TokenService; +//import lombok.extern.slf4j.Slf4j; +//import org.apache.ibatis.executor.Executor; +//import org.apache.ibatis.mapping.MappedStatement; +//import org.apache.ibatis.mapping.SqlCommandType; +//import org.apache.ibatis.plugin.*; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.stereotype.Component; +// +//import java.lang.reflect.Field; +//import java.time.LocalDateTime; +//import java.util.*; +// +//@Slf4j +//@Component +//@Intercepts({ @Signature(type = Executor.class, method = "update", args = { MappedStatement.class, Object.class }) }) +//public class MybatisInterceptor implements Interceptor { +// +// @Autowired +// private TokenService tokenService; +// +// @Override +// public Object intercept(Invocation invocation) throws Throwable { +// MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0]; +// if("com.ruoyi.system.mapper.SysLogininforMapper.insertLogininfor".equals(mappedStatement.getId())){ +// return invocation.proceed(); +// } +// // sql类型:insert、update、select、delete +// SqlCommandType sqlCommandType = mappedStatement.getSqlCommandType(); +// Object parameter = invocation.getArgs()[1]; +// +// if (parameter == null) { +// return invocation.proceed(); +// } +// +// // 当sql为新增或更新类型时,自动填充操作人相关信息 +// if (SqlCommandType.INSERT == sqlCommandType) { +// +// Field[] fields = getAllFields(parameter); +// for (Field field : fields) { +// try { +// // 注入创建人 +// if ("createBy".equals(field.getName())) { +// // 获取当前登录用户信息 +// if(Objects.nonNull(tokenService.getLoginUser())){ +// String userName = tokenService.getLoginUser().getUser().getUserName(); +// field.setAccessible(true); +// field.set(parameter, userName); +// field.setAccessible(false); +// } +// } +// //注入创建时间 +// if ("createTime".equals(field.getName())) { +// field.setAccessible(true); +//// field.set(parameter, LocalDateTime.now()); +// field.setAccessible(false); +// } +// } catch (Exception e) { +// log.error("failed to insert data, exception = ", e); +// } +// } +// } +// if (SqlCommandType.UPDATE == sqlCommandType) { +// Field[] fields = getAllFields(parameter); +// for (Field field : fields) { +// try { +// if ("updateBy".equals(field.getName())) { +// // 获取当前登录用户信息 +// if(Objects.nonNull(tokenService.getLoginUser())){ +// String userName = tokenService.getLoginUser().getUser().getUserName(); +// field.setAccessible(true); +// field.set(parameter, userName); +// field.setAccessible(false); +// } +// } +// if ("updateTime".equals(field.getName())) { +// field.setAccessible(true); +//// field.set(parameter, new Date()); +// field.setAccessible(false); +// } +// } catch (Exception e) { +// log.error("failed to update data, exception = ", e); +// } +// } +// } +// return invocation.proceed(); +// } +// +// @Override +// public Object plugin(Object target) { +// return Plugin.wrap(target, this); +// } +// +// @Override +// public void setProperties(Properties properties) { +// // TODO Auto-generated method stub +// } +// +// /** +// * 获取类的所有属性,包括父类 +// * +// * @param object +// * @return +// */ +// private Field[] getAllFields(Object object) { +// Class<?> clazz = object.getClass(); +// List<Field> fieldList = new ArrayList<>(); +// while (clazz != null) { +// fieldList.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields()))); +// clazz = clazz.getSuperclass(); +// } +// Field[] fields = new Field[fieldList.size()]; +// fieldList.toArray(fields); +// return fields; +// } +// +//} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/StateProcessInstanceActionMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/StateProcessInstanceActionMapper.java index 81dcaa1..be2c3dc 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/StateProcessInstanceActionMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/StateProcessInstanceActionMapper.java @@ -4,4 +4,6 @@ import com.ruoyi.system.model.StateProcessInstanceAction; public interface StateProcessInstanceActionMapper extends BaseMapper<StateProcessInstanceAction> { + void saveData(StateProcessInstanceAction stateProcessInstanceAction); + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/StateProcessInstanceAction.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/StateProcessInstanceAction.java index e1501db..0ed879b 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/StateProcessInstanceAction.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/StateProcessInstanceAction.java @@ -1,20 +1,22 @@ package com.ruoyi.system.model; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.ruoyi.common.core.domain.BaseModel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; +import java.io.Serializable; +import java.time.LocalDateTime; + @Data @EqualsAndHashCode(callSuper = false) @ApiModel(value = "工作流-实例操作记录表") @TableName(value = "state_process_instance_action") -public class StateProcessInstanceAction extends BaseModel { +public class StateProcessInstanceAction implements Serializable { @TableId(value = "id", type = IdType.ASSIGN_ID) private String id; @@ -45,6 +47,17 @@ @ApiModelProperty(value = "图片") @TableField("pictures") private String pictures; + /** + * 删除 未删除 + */ + @TableField("`disabled`") + @TableLogic + private Boolean disabled; + + @ApiModelProperty(value = "记录创建时间,前端忽略") + @TableField("create_time") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime createTime; @TableField(exist = false) private String nickName; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessInstanceActionService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessInstanceActionService.java index 85b5090..58bee7e 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessInstanceActionService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessInstanceActionService.java @@ -4,4 +4,7 @@ import com.ruoyi.system.model.StateProcessInstanceAction; public interface StateProcessInstanceActionService extends IService<StateProcessInstanceAction> { + + void saveData(StateProcessInstanceAction stateProcessInstanceAction); + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessInstanceActionServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessInstanceActionServiceImpl.java index 45a3d5a..013972a 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessInstanceActionServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessInstanceActionServiceImpl.java @@ -8,4 +8,8 @@ @Service public class StateProcessInstanceActionServiceImpl extends ServiceImpl<StateProcessInstanceActionMapper, StateProcessInstanceAction> implements StateProcessInstanceActionService { + @Override + public void saveData(StateProcessInstanceAction stateProcessInstanceAction) { + this.baseMapper.saveData(stateProcessInstanceAction); + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/task/jobs/StateProcessJob.java b/ruoyi-system/src/main/java/com/ruoyi/system/task/jobs/StateProcessJob.java index d42aada..c4ad3a2 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/task/jobs/StateProcessJob.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/task/jobs/StateProcessJob.java @@ -2,6 +2,7 @@ import com.aizuda.bpm.engine.entity.FlwTaskActor; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.system.bo.ProcessAgreeBO; import com.ruoyi.system.task.base.AbstractJob; import org.quartz.JobDataMap; @@ -33,6 +34,7 @@ System.err.println("该任务不存在"); return; } + processAgreeBO.setRemark("自动审批"); processAgreeBO.setUserId(Long.valueOf(flwTaskActor.getActorId())); stateProcessTemplateService.agree(processAgreeBO); }catch(Exception e){ diff --git a/ruoyi-system/src/main/resources/mapper/system/StateProcessInstanceActionMapper.xml b/ruoyi-system/src/main/resources/mapper/system/StateProcessInstanceActionMapper.xml new file mode 100644 index 0000000..6dbf513 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/StateProcessInstanceActionMapper.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.system.mapper.StateProcessInstanceActionMapper"> + + + <insert id="saveData"> + insert into state_process_instance_action( + id, + instance_id, + auditor_id, + action_type, + node_id, + remark, + pictures + values + (#{id}, + #{instanceId}, + #{auditorId}, + #{actionType}, + #{nodeId}, + #{remark}, + #{pictures}) + </insert> +</mapper> \ No newline at end of file -- Gitblit v1.7.1