From 2069decf44cb2600166b2b1a969c8b51a81a2058 Mon Sep 17 00:00:00 2001 From: lijiarao Date: Tue, 17 Oct 2023 18:23:52 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E5=B7=A5=E4=BD=9C=E4=B8=AD=E5=BF=83?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=EF=BC=88=E6=9C=AA=E5=AE=8C=E6=88=90=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/流程.sql | 5 +- .../api/fallback/SysBaseAPIFallback.java | 5 + .../java/com/jero/common/api/CommonAPI.java | 2 + .../com/jero/common/aspect/DictAspect.java | 7 +- .../com/jero/config/shiro/ShiroConfig.java | 2 +- .../modules/system/mapper/SysUserMapper.java | 3 + .../system/mapper/xml/SysUserMapper.xml | 9 ++ .../system/service/impl/SysBaseApiImpl.java | 5 + .../activiti/config/ActivitiConfig.java | 17 ++- .../jero/modules/activiti/config/MyGen.java | 12 ++- .../controller/ActivitiController.java | 58 +++++----- .../controller/WorkCenterController.java | 102 +++++++++++++++++- .../modules/activiti/entity/ProcessAll.java | 47 +++++++- .../entity/ProcessApprovalRecord.java | 43 +++++--- .../activiti/listener/CompleteListener.java | 25 ++++- .../activiti/listener/CreateListener.java | 33 ++---- .../activiti/listener/EndListener.java | 26 +++++ .../activiti/listener/StartListener.java | 2 +- .../activiti/mapper/ProcessAllMapper.java | 10 ++ .../activiti/mapper/xml/ProcessAllMapper.xml | 57 +++++----- .../activiti/service/ProcessAllService.java | 35 ++++++ .../service/ProcessApprovalRecordService.java | 8 ++ 22 files changed, 408 insertions(+), 105 deletions(-) diff --git a/db/流程.sql b/db/流程.sql index d77fa091..bf7c1622 100644 --- a/db/流程.sql +++ b/db/流程.sql @@ -63,8 +63,11 @@ create table process_approval_record project_id varchar(32) comment '项目id', commit_flag tinyint(4) comment '审批意见(0同意,1不同意)', commit_text varchar(255) comment '审批内容', + commit_file varchar(1000) comment '审批附件', + has_delegate_task tinyint(4) default 0 comment '是否派发过加签任务', + is_delegate_task tinyint(4) default 0 comment '是否加签任务', prc_name varchar(255) comment '流程名称', - create_time datetime default current_timestamp comment '创建时间', + create_time datetime comment '创建时间', update_time datetime comment '更新时间', end_time datetime comment '完成时间' ) comment '流程审批记录表'; diff --git a/laws-base/laws-base-api/jero-system-cloud-api/src/main/java/com/jero/common/system/api/fallback/SysBaseAPIFallback.java b/laws-base/laws-base-api/jero-system-cloud-api/src/main/java/com/jero/common/system/api/fallback/SysBaseAPIFallback.java index ee7d151c..8fa0e330 100644 --- a/laws-base/laws-base-api/jero-system-cloud-api/src/main/java/com/jero/common/system/api/fallback/SysBaseAPIFallback.java +++ b/laws-base/laws-base-api/jero-system-cloud-api/src/main/java/com/jero/common/system/api/fallback/SysBaseAPIFallback.java @@ -294,6 +294,11 @@ public class SysBaseAPIFallback implements ISysBaseAPI { return null; } + @Override + public List translateUserRealNameFromTableByKeys(String values) { + return null; + } + @Override public void sendEmailMsg(String email,String title,String content) { // do other diff --git a/laws-base/laws-base-core/src/main/java/com/jero/common/api/CommonAPI.java b/laws-base/laws-base-core/src/main/java/com/jero/common/api/CommonAPI.java index 1bd72506..17194eae 100644 --- a/laws-base/laws-base-core/src/main/java/com/jero/common/api/CommonAPI.java +++ b/laws-base/laws-base-core/src/main/java/com/jero/common/api/CommonAPI.java @@ -140,4 +140,6 @@ public interface CommonAPI { String queryTableDictTextByKey(String table,String text,String code, String key); String translateUserRealNameFromTable(String id); + + List translateUserRealNameFromTableByKeys(String values); } diff --git a/laws-base/laws-base-core/src/main/java/com/jero/common/aspect/DictAspect.java b/laws-base/laws-base-core/src/main/java/com/jero/common/aspect/DictAspect.java index b44676b4..3d9490d3 100644 --- a/laws-base/laws-base-core/src/main/java/com/jero/common/aspect/DictAspect.java +++ b/laws-base/laws-base-core/src/main/java/com/jero/common/aspect/DictAspect.java @@ -250,7 +250,12 @@ public class DictAspect { String values = String.join(",", needTranslDataTable); log.info("translateDictFromTableByKeys.dictCode:" + dictCode); log.info("translateDictFromTableByKeys.values:" + values); - List texts = commonAPI.translateDictFromTableByKeys(table, text, code, values); + List texts; + if ("sys_user".equals(table)&&"realname".equals(text)&&"id".equals(code)){ + texts = commonAPI.translateUserRealNameFromTableByKeys(values); + }else { + texts = commonAPI.translateDictFromTableByKeys(table, text, code, values); + } log.info("translateDictFromTableByKeys.result:" + texts); List list = translText.computeIfAbsent(dictCode, k -> new ArrayList<>()); list.addAll(texts); diff --git a/laws-base/laws-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java b/laws-base/laws-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java index 69e62087..395589d0 100644 --- a/laws-base/laws-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java +++ b/laws-base/laws-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java @@ -123,7 +123,7 @@ public class ShiroConfig { //测试示例 filterChainDefinitionMap.put("/test/bigScreen/**", "anon"); //大屏模板例子 //activti - filterChainDefinitionMap.put("/modeler/**", "anon"); + //filterChainDefinitionMap.put("/modeler/**", "anon"); filterChainDefinitionMap.put("/activitiModel/**", "anon"); filterChainDefinitionMap.put("/editor-app/**", "anon"); filterChainDefinitionMap.put("/service/**", "anon"); diff --git a/laws-module-system/src/main/java/com/jero/modules/system/mapper/SysUserMapper.java b/laws-module-system/src/main/java/com/jero/modules/system/mapper/SysUserMapper.java index 9de52fe0..4eee698f 100644 --- a/laws-module-system/src/main/java/com/jero/modules/system/mapper/SysUserMapper.java +++ b/laws-module-system/src/main/java/com/jero/modules/system/mapper/SysUserMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.jero.common.system.vo.DictModel; import com.jero.modules.system.vo.SysUserRoleNameVo; import org.apache.ibatis.annotations.Param; import com.jero.modules.system.entity.SysUser; @@ -169,4 +170,6 @@ public interface SysUserMapper extends BaseMapper { List getUserListByDepIds(@Param("departIds") List departIds); String translateUserRealNameFromTable(@Param("id") String id); + + List translateUserRealNameFromTableByKeys(@Param("keys") List keys); } diff --git a/laws-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysUserMapper.xml b/laws-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysUserMapper.xml index f9566b6c..81c4dea2 100644 --- a/laws-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysUserMapper.xml +++ b/laws-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysUserMapper.xml @@ -219,4 +219,13 @@ select concat(realname,'(',username,')') from sys_user where id = #{id} + + diff --git a/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysBaseApiImpl.java b/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysBaseApiImpl.java index 86e0b5d3..eb81aa87 100644 --- a/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysBaseApiImpl.java +++ b/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysBaseApiImpl.java @@ -1186,4 +1186,9 @@ public class SysBaseApiImpl implements ISysBaseAPI { return userMapper.translateUserRealNameFromTable(id); } + @Override + public List translateUserRealNameFromTableByKeys(String keys) { + return userMapper.translateUserRealNameFromTableByKeys(Arrays.asList(keys.split(","))); + } + } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/config/ActivitiConfig.java b/laws-modules/src/main/java/com/jero/modules/activiti/config/ActivitiConfig.java index 4ebe76ba..2d59a6c3 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/config/ActivitiConfig.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/config/ActivitiConfig.java @@ -2,6 +2,8 @@ package com.jero.modules.activiti.config; import com.jero.modules.activiti.service.impl.image.ICustomProcessDiagramGenerator; import org.activiti.engine.ProcessEngineConfiguration; +import org.activiti.engine.cfg.AbstractProcessEngineConfigurator; +import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl; import org.activiti.engine.impl.form.DoubleFormType; import org.activiti.engine.impl.history.HistoryLevel; import org.activiti.spring.SpringProcessEngineConfiguration; @@ -20,14 +22,15 @@ import javax.sql.DataSource; * @date 2023-09-05 17:53 */ @Configuration -public class ActivitiConfig { +public class ActivitiConfig extends AbstractProcessEngineConfigurator { @Resource private ICustomProcessDiagramGenerator customProcessDiagramGenerator; @Autowired private DataSource dataSource; @Autowired private PlatformTransactionManager transactionManager; - + @Autowired + private MyGen myGen; /** * 初始化配置 * @@ -52,5 +55,15 @@ public class ActivitiConfig { return configuration; } + @Bean + public ProcessEngineConfigurationImpl processEngineConfigurationImpl(ProcessEngineConfigurationImpl processEngineConfigurationImpl) { + //自定义id生成规则 + //设置ProcessEngineConfigurationImpl里的CustomIdGenerator + processEngineConfigurationImpl.setIdGenerator(myGen); + //设置DbSqlSessionFactory的CustomIdGenerator ,否则流程id,任务id,实例id依然是用DbIdGenerator生成 + processEngineConfigurationImpl.getDbSqlSessionFactory().setIdGenerator(myGen); + return processEngineConfigurationImpl; + + } } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/config/MyGen.java b/laws-modules/src/main/java/com/jero/modules/activiti/config/MyGen.java index 00f40768..0fbcc754 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/config/MyGen.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/config/MyGen.java @@ -1,17 +1,25 @@ package com.jero.modules.activiti.config; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.date.LocalDateTimeUtil; import org.activiti.engine.impl.cfg.IdGenerator; +import org.springframework.stereotype.Component; +import java.time.format.DateTimeFormatter; import java.util.concurrent.atomic.AtomicLong; /** * @author liJiaRao * @date 2023-09-05 17:39 */ +@Component public class MyGen implements IdGenerator { - private AtomicLong aLong = new AtomicLong(100); @Override public synchronized String getNextId() { - return String.valueOf(aLong.incrementAndGet()); + DateTime date = DateUtil.date(); + //标准日期格式:yyyyMMddHHmmssSSS + return DateUtil.format(date, DatePattern.PURE_DATETIME_MS_PATTERN); } } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/controller/ActivitiController.java b/laws-modules/src/main/java/com/jero/modules/activiti/controller/ActivitiController.java index a88300a7..c2c276a3 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/controller/ActivitiController.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/controller/ActivitiController.java @@ -1,16 +1,16 @@ package com.jero.modules.activiti.controller; import cn.hutool.core.bean.BeanUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import com.jero.common.api.vo.Result; import com.jero.common.aspect.annotation.DictPoint; import com.jero.common.constant.enums.LanguageEnum; +import com.jero.common.constant.enums.YesOrNoEnum; import com.jero.common.system.vo.LoginUser; import com.jero.common.util.MessageUtils; import com.jero.modules.activiti.entity.ProcessAll; -import com.jero.modules.activiti.entity.ProcessModelNode; +import com.jero.modules.activiti.entity.ProcessApprovalRecord; import com.jero.modules.activiti.entity.ProcessNode; import com.jero.modules.activiti.service.*; import com.jero.modules.laws.common.constant.ResultCommon; @@ -28,7 +28,6 @@ import org.activiti.engine.task.TaskQuery; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; -import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; @@ -63,13 +62,15 @@ public class ActivitiController { private ProcessNodeLinkService processNodeLinkService; @Resource private ProcessAllService processAllService; + @Resource + private ProcessApprovalRecordService processApprovalRecordService; @ApiOperation(value="启动流程") @PostMapping("/start") public Result> start(@RequestBody Map map) { String key = map.get("key").toString(); String prcName = map.get("prcName").toString(); - String prcNum = map.get("prcNum").toString(); + String prcMes = map.get("prcMes").toString(); Date dueTime = (Date) map.get("dueTime"); // 1、创建ProcessEngine ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); @@ -80,12 +81,12 @@ public class ActivitiController { ProcessInstance processInstance = runtimeService .startProcessInstanceByKey(key, map); String processInstanceId = processInstance.getId(); - //更新流程总表 + //根据流程实例id更新流程总表 ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId); LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); process.setCreateUserId(loginUser.getId()); process.setPrcName(prcName); - process.setPrcNum(prcNum); + process.setPrcMes(prcMes); process.setDueTime(dueTime); process.setProjectId("业务id"); processAllService.updateById(process); @@ -108,16 +109,19 @@ public class ActivitiController { public Result>> testFindPersonalTaskList(@RequestParam(value = "assignee") String assignee, @RequestParam(value = "processKey") String processKey, @RequestParam(value = "group") String group) { -// 根据流程key 和 任务负责人 查询任务 + //根据流程key 和 任务负责人 查询任务 TaskQuery taskQuery = taskService.createTaskQuery(); if (StringUtils.isNotBlank(assignee)) { - taskQuery.taskAssignee(assignee);//只查询该任务负责人的任务 + //只查询该任务负责人的任务 + taskQuery.taskAssignee(assignee); } if (StringUtils.isNotBlank(group)) { - taskQuery.taskCandidateGroup(group);//只查询该组的任务 + //只查询该组的任务 + taskQuery.taskCandidateGroup(group); } if (StringUtils.isNotBlank(processKey)) { - taskQuery.processDefinitionKey(processKey); //流程Key + //流程Key + taskQuery.processDefinitionKey(processKey); } List list = taskQuery.list(); List> result = new ArrayList<>(); @@ -127,7 +131,6 @@ public class ActivitiController { map.put("任务id:", task.getId()); map.put("任务负责人:", task.getAssignee()); map.put("任务名称:", task.getName()); - //map.put("任务名称:", task.get); result.add(map); } return Result.OK(result); @@ -138,6 +141,10 @@ public class ActivitiController { public Result complete(@RequestBody Map map) { //todo 判断当前节点,执行不同的操作 String taskId = map.get("taskId").toString(); + Integer commitFlag = Integer.valueOf(map.get("commitFlag").toString()); + String commitText = map.get("commitText").toString(); + String commitFile = map.get("commitFile").toString(); + Task task=taskService.createTaskQuery() // 创建任务查询 .taskId(taskId) // 根据任务id查询 @@ -145,18 +152,17 @@ public class ActivitiController { String taskName = task.getName(); if ("填写基本信息,在线编辑,分发其他起草人".equals(taskName)){ - // todo }else if ("其他起草人线下填写,上传".equals(taskName)){ - // todo } - //Map vars = new HashMap<>(); - //List otherDrafterList = new ArrayList<>(); - //otherDrafterList.add("zhangsan"); - //otherDrafterList.add("lisi"); - //otherDrafterList.add("wangwu"); - //vars.put("leaderList", otherDrafterList); - //Map map = new HashMap<>(); - //map.put("status", 2); + //更新审批表为完成,填充数据 + ProcessApprovalRecord approvalRecord = processApprovalRecordService.getByTaskId(taskId); + approvalRecord.setCommitFlag(commitFlag); + approvalRecord.setCommitText(commitText); + approvalRecord.setCommitFile(commitFile); + approvalRecord.setFinishFlag(YesOrNoEnum.YES.getInteger()); + approvalRecord.setEndTime(new Date()); + processApprovalRecordService.updateById(approvalRecord); + //审批节点 taskService.complete(taskId, map); return Result.OK(); } @@ -205,7 +211,6 @@ public class ActivitiController { } - @ApiOperation(value="签收任务") @PostMapping("/claim") public Result claim(@RequestBody Map map) { @@ -216,19 +221,14 @@ public class ActivitiController { } - /** * 加签 - * - * @param taskId - * @param loginName - * @return */ @ApiOperation(value="加签/委托") @GetMapping("/delegateTask") public Result delegateTask(@RequestParam(value = "taskId") String taskId, - @RequestParam(value = "loginName") String loginName) { - taskService.delegateTask(taskId, loginName); + @RequestParam(value = "userId") String userId) { + taskService.delegateTask(taskId, userId); return Result.OK(); } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/controller/WorkCenterController.java b/laws-modules/src/main/java/com/jero/modules/activiti/controller/WorkCenterController.java index f3150dc1..5751fe6f 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/controller/WorkCenterController.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/controller/WorkCenterController.java @@ -1,9 +1,30 @@ package com.jero.modules.activiti.controller; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.jero.common.api.vo.Result; +import com.jero.common.system.query.QueryGenerator; +import com.jero.common.system.vo.LoginUser; +import com.jero.modules.activiti.entity.ProcessAll; +import com.jero.modules.activiti.service.ProcessAllService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.activiti.engine.RuntimeService; +import org.activiti.engine.task.Task; +import org.activiti.engine.task.TaskQuery; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.jetbrains.annotations.NotNull; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * @author liJiaRao @@ -15,4 +36,81 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping("/workCenter") public class WorkCenterController { + @Resource + private ProcessAllService processAllService; + + @ApiOperation(value = "查询待办流程列表") + @GetMapping("/getTodoList") + public Result> getTodoList(ProcessAll processAll, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = getProcessAllQueryWrapper(processAll); + LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String userId = loginUser.getId(); + queryWrapper.eq("par.user_id",userId); + queryWrapper.eq("par.finish_flag",0); + + Page page = new Page<>(pageNo, pageSize); + IPage todoList = processAllService.getTodoList(page, queryWrapper); + return Result.OK(todoList); + } + + @ApiOperation(value = "查询已办流程列表") + @GetMapping("/getCompletedList") + public Result getCompletedList(ProcessAll processAll, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = getProcessAllQueryWrapper(processAll); + LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String userId = loginUser.getId(); + queryWrapper.eq("par.user_id",userId); + queryWrapper.eq("par.finish_flag",1); + + Page page = new Page<>(pageNo, pageSize); + IPage completedList = processAllService.getCompletedList(page, queryWrapper); + return Result.OK(completedList); + } + + @ApiOperation(value = "查询已发流程列表") + @GetMapping("/getSentList") + public Result getSentList(ProcessAll processAll, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = getProcessAllQueryWrapper(processAll); + LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String userId = loginUser.getId(); + queryWrapper.eq("pa.user_id",userId); + + Page page = new Page<>(pageNo, pageSize); + IPage sentList = processAllService.getSentList(page, queryWrapper); + return Result.OK(sentList); + } + + @NotNull + private QueryWrapper getProcessAllQueryWrapper(ProcessAll processAll) { + String prcName = processAll.getPrcName(); + String prcNum = processAll.getPrcNum(); + Integer prcType = processAll.getPrcType(); + Integer prcStatus = processAll.getPrcStatus(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(StringUtils.isNotBlank(prcName), "pa.prc_name", "%" + prcName + "%"); + queryWrapper.like(StringUtils.isNotBlank(prcNum), "pa.prc_num", "%" + prcNum + "%"); + queryWrapper.eq(prcType != null, "pa.prc_type", prcType); + queryWrapper.eq(prcStatus != null, "pa.prc_status", prcStatus); + + + return queryWrapper; + } + + @ApiOperation(value = "撤销流程") + @PostMapping("/delete") + public Result delete(@RequestBody Map map) { + String processInstanceId = map.get("processInstanceId"); + + processAllService.delete(processInstanceId); + return Result.OK(); + } } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/entity/ProcessAll.java b/laws-modules/src/main/java/com/jero/modules/activiti/entity/ProcessAll.java index 9b392af4..a7320755 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/entity/ProcessAll.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/entity/ProcessAll.java @@ -4,10 +4,13 @@ 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.fasterxml.jackson.annotation.JsonFormat; +import com.jero.common.aspect.annotation.Dict; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.util.Date; import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; /** *流程总表 @@ -49,7 +52,8 @@ public class ProcessAll { /** * 创建人id */ - @ApiModelProperty(value="创建人id") + @ApiModelProperty(value="发起人id") + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "realname") private String createUserId; /** @@ -62,6 +66,7 @@ public class ProcessAll { * 流程状态 */ @ApiModelProperty(value="流程状态(1未完成,2已完成,3已撤回)") + @Dict(dicCode = "prc_status") private Integer prcStatus; /** @@ -80,12 +85,16 @@ public class ProcessAll { * 创建时间 */ @ApiModelProperty(value="创建时间") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") private Date createTime; /** * 完成时间 */ @ApiModelProperty(value="完成时间") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") private Date endTime; /** @@ -98,6 +107,8 @@ public class ProcessAll { * 截止时间 */ @ApiModelProperty(value="截止时间") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") private Date dueTime; /** @@ -117,4 +128,38 @@ public class ProcessAll { */ @ApiModelProperty(value="流程名称(英文)") private String prcNameEn; + + /** + * 处理人id + */ + @TableField(exist = false) + @ApiModelProperty(value="处理人id") + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "realname") + private String handleUserId; + + /** + * 任务id + */ + @TableField(exist = false) + @ApiModelProperty(value="任务id") + private String taskId; + + /** + * 接收任务时间 + */ + @TableField(exist = false) + @ApiModelProperty(value="接收任务时间") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date receivedTaskTime; + + /** + * 接收任务时间 + */ + @TableField(exist = false) + @ApiModelProperty(value="完成任务时间") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date completedTaskTime; + } \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/entity/ProcessApprovalRecord.java b/laws-modules/src/main/java/com/jero/modules/activiti/entity/ProcessApprovalRecord.java index d7e9fc17..c92d4bc2 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/entity/ProcessApprovalRecord.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/entity/ProcessApprovalRecord.java @@ -4,10 +4,12 @@ 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.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.util.Date; import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; /** * @@ -31,98 +33,109 @@ public class ProcessApprovalRecord { /** * 任务id */ - @TableField(value = "task_id") @ApiModelProperty(value="任务id") private String taskId; /** * 任务名称 */ - @TableField(value = "task_name") @ApiModelProperty(value="任务名称") private String taskName; /** * 流程实例id */ - @TableField(value = "process_instance_id") @ApiModelProperty(value="流程实例id") private String processInstanceId; /** * 资源类型 */ - @TableField(value = "msg_type") @ApiModelProperty(value="资源类型") private String msgType; /** * 处理人id */ - @TableField(value = "user_id") @ApiModelProperty(value="处理人id") private String userId; /** * 信息 */ - @TableField(value = "mesg") @ApiModelProperty(value="信息") private String mesg; /** * 完成注记(0未完成,1完成) */ - @TableField(value = "finish_flag") - @ApiModelProperty(value="完成注记(0未完成,1完成)") + @ApiModelProperty(value="完成注记(0未完成,1完成,2暂停)") private Integer finishFlag; /** * 项目id */ - @TableField(value = "project_id") @ApiModelProperty(value="项目id") private String projectId; /** * 审批意见(0同意,1不同意) */ - @TableField(value = "commit_flag") @ApiModelProperty(value="审批意见(0同意,1不同意)") private Integer commitFlag; /** * 审批内容 */ - @TableField(value = "commit_text") @ApiModelProperty(value="审批内容") private String commitText; + /** + * 附件 + */ + @ApiModelProperty(value="附件") + private String commitFile; + + /** + * 是否派发过加签任务 + */ + @ApiModelProperty(value="是否派发过加签任务") + private Integer hasDelegateTask; + + /** + * 是否加签任务 + */ + @ApiModelProperty(value="是否加签任务") + private Integer isDelegateTask; + + /** * 流程名称 */ - @TableField(value = "prc_name") @ApiModelProperty(value="流程名称") private String prcName; /** * 创建时间 */ - @TableField(value = "create_time") @ApiModelProperty(value="创建时间") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") private Date createTime; /** * 更新时间 */ - @TableField(value = "update_time") @ApiModelProperty(value="更新时间") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") private Date updateTime; /** * 完成时间 */ - @TableField(value = "end_time") @ApiModelProperty(value="完成时间") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") private Date endTime; } \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/listener/CompleteListener.java b/laws-modules/src/main/java/com/jero/modules/activiti/listener/CompleteListener.java index 9cf086f4..fc504213 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/listener/CompleteListener.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/listener/CompleteListener.java @@ -1,5 +1,10 @@ package com.jero.modules.activiti.listener; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.jero.common.constant.enums.YesOrNoEnum; +import com.jero.modules.activiti.entity.ProcessApprovalRecord; +import com.jero.modules.activiti.service.ProcessApprovalRecordService; +import com.jero.modules.activiti.util.SpringContextUtil; import org.activiti.engine.delegate.DelegateTask; import org.activiti.engine.delegate.TaskListener; @@ -10,10 +15,24 @@ import org.activiti.engine.delegate.TaskListener; public class CompleteListener implements TaskListener { @Override public void notify(DelegateTask delegateTask) { - System.out.println(delegateTask.getId()); + //流程审批信息 + ProcessApprovalRecordService recordService = SpringContextUtil.getBean(ProcessApprovalRecordService.class); + + String taskId = delegateTask.getId(); + String assignee = delegateTask.getAssignee(); + //更新审批信息为完成 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ProcessApprovalRecord::getTaskId,taskId); + wrapper.eq(ProcessApprovalRecord::getUserId,assignee); + ProcessApprovalRecord approvalRecord = recordService.getOne(wrapper); + approvalRecord.setFinishFlag(YesOrNoEnum.YES.getInteger()); + recordService.updateById(approvalRecord); + + System.out.println(taskId); System.out.println(delegateTask.getName()); System.out.println(delegateTask.getEventName()); - System.out.println(delegateTask.getAssignee()); - // todo 对接统一平台完成任务 + System.out.println(assignee); + + // todo 对接统一平台生成完成任务 } } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/listener/CreateListener.java b/laws-modules/src/main/java/com/jero/modules/activiti/listener/CreateListener.java index dd157ac8..dc0934ff 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/listener/CreateListener.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/listener/CreateListener.java @@ -1,5 +1,6 @@ package com.jero.modules.activiti.listener; +import com.jero.modules.activiti.entity.ProcessApprovalRecord; import com.jero.modules.activiti.service.ProcessAllService; import com.jero.modules.activiti.service.ProcessApprovalRecordService; import com.jero.modules.activiti.util.SpringContextUtil; @@ -30,30 +31,18 @@ public class CreateListener implements TaskListener { String id = delegateTask.getId(); String name = delegateTask.getName(); - String description = delegateTask.getDescription(); - int priority = delegateTask.getPriority(); String processInstanceId = delegateTask.getProcessInstanceId(); - String executionId = delegateTask.getExecutionId(); - String processDefinitionId = delegateTask.getProcessDefinitionId(); Date createTime = delegateTask.getCreateTime(); - String taskDefinitionKey = delegateTask.getTaskDefinitionKey(); - boolean isSuspended = delegateTask.isSuspended(); - String tenantId = delegateTask.getTenantId(); - String formKey = delegateTask.getFormKey(); - DelegateExecution execution = delegateTask.getExecution(); - String eventName = delegateTask.getEventName(); - ActivitiListener currentActivitiListener = delegateTask.getCurrentActivitiListener(); - DelegationState delegationState = delegateTask.getDelegationState(); - String owner = delegateTask.getOwner(); String assignee = delegateTask.getAssignee(); - Date dueDate = delegateTask.getDueDate(); - String category = delegateTask.getCategory(); - Set candidates = delegateTask.getCandidates(); - - System.out.println(delegateTask.getId()); - System.out.println(delegateTask.getName()); - System.out.println(delegateTask.getEventName()); - System.out.println(delegateTask.getAssignee()); - // todo 对接统一平台完成任务 + //新增待审批记录 + ProcessApprovalRecord approvalRecord = new ProcessApprovalRecord(); + approvalRecord.setTaskId(id); + approvalRecord.setTaskName(name); + approvalRecord.setProcessInstanceId(processInstanceId); + approvalRecord.setUserId(assignee); + approvalRecord.setFinishFlag(0); + approvalRecord.setCreateTime(createTime); + recordService.save(approvalRecord); + // todo 对接统一平台生成待办任务 } } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/listener/EndListener.java b/laws-modules/src/main/java/com/jero/modules/activiti/listener/EndListener.java index 0af96b3d..f1035727 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/listener/EndListener.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/listener/EndListener.java @@ -1,10 +1,21 @@ package com.jero.modules.activiti.listener; +import cn.hutool.core.date.DateBetween; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.jero.modules.activiti.entity.ProcessAll; +import com.jero.modules.activiti.enums.ProcessStatusEnum; +import com.jero.modules.activiti.service.ProcessAllService; +import com.jero.modules.activiti.util.SpringContextUtil; import org.activiti.engine.delegate.DelegateExecution; import org.activiti.engine.delegate.DelegateTask; import org.activiti.engine.delegate.ExecutionListener; import org.activiti.engine.delegate.TaskListener; +import java.util.Date; + /** * @author liJiaRao * @date 2023-10-13 16:43 @@ -12,6 +23,21 @@ import org.activiti.engine.delegate.TaskListener; public class EndListener implements ExecutionListener { @Override public void notify(DelegateExecution execution) { + //流程信息 + ProcessAllService processAllService = SpringContextUtil.getBean(ProcessAllService.class); + String processInstanceId = execution.getProcessInstanceId(); + ProcessAll processAll = processAllService.getByProcessInstanceId(processInstanceId); + Date createTime = processAll.getCreateTime(); + DateTime date = DateUtil.date(); + DateBetween between = date.between(createTime); + + //更新流程总表信息为已完成 + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(ProcessAll::getProcessInstanceId,processInstanceId); + wrapper.set(ProcessAll::getPrcStatus, ProcessStatusEnum.COMPLETED.getValue()); + wrapper.set(ProcessAll::getEndTime,date); + wrapper.set(ProcessAll::getOverTime,between.toString()); + processAllService.update(wrapper); } } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/listener/StartListener.java b/laws-modules/src/main/java/com/jero/modules/activiti/listener/StartListener.java index 98fc15c0..aad51627 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/listener/StartListener.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/listener/StartListener.java @@ -42,7 +42,7 @@ public class StartListener implements ExecutionListener { String name = processDefinition.getName(); String key = processDefinition.getKey(); - + //新增流程总表信息(剩余的内容在启动流程时填充) ProcessAll processAll = new ProcessAll(); processAll.setProcessInstanceId(processInstanceId); processAll.setPrcType(ProcessTypeEnum.getValueByKey(key)); diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/ProcessAllMapper.java b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/ProcessAllMapper.java index f5e78549..0c0f713b 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/ProcessAllMapper.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/ProcessAllMapper.java @@ -1,7 +1,12 @@ package com.jero.modules.activiti.mapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.jero.modules.activiti.entity.ProcessAll; +import org.apache.ibatis.annotations.Param; /** * @@ -9,4 +14,9 @@ import com.jero.modules.activiti.entity.ProcessAll; *@date 2023-10-16 15:49 */ public interface ProcessAllMapper extends BaseMapper { + IPage getTodoList(Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + + IPage getCompletedList(Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + + IPage getSentList(Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); } \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/ProcessAllMapper.xml b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/ProcessAllMapper.xml index 83c370ca..10965435 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/ProcessAllMapper.xml +++ b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/ProcessAllMapper.xml @@ -1,29 +1,36 @@ - - - - - - - - - - - - - - - - - - - - - - - id, prc_name, process_instance_id, prc_mes, prc_num, create_user_id, prc_type, create_user_name, - mes, create_time, end_time, over_time, due_time, project_id, project_name, prc_name_en - + + + + + \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessAllService.java b/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessAllService.java index b359c8ce..a6c862d9 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessAllService.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessAllService.java @@ -1,6 +1,12 @@ package com.jero.modules.activiti.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.jero.modules.activiti.entity.ProcessApprovalRecord; +import com.jero.modules.activiti.mapper.ProcessApprovalRecordMapper; +import org.activiti.engine.RuntimeService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; @@ -14,10 +20,39 @@ import com.jero.modules.activiti.entity.ProcessAll; */ @Service public class ProcessAllService extends ServiceImpl { + @Resource + private ProcessAllMapper processAllMapper; + @Resource + private ProcessApprovalRecordMapper processApprovalRecordMapper; + @Resource + private RuntimeService runtimeService; public ProcessAll getByProcessInstanceId(String processInstanceId){ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(ProcessAll::getProcessInstanceId,processInstanceId); return this.getOne(wrapper); } + + public IPage getTodoList(Page page, QueryWrapper queryWrapper) { + return processAllMapper.getTodoList(page,queryWrapper); + } + + public IPage getCompletedList(Page page, QueryWrapper queryWrapper) { + return processAllMapper.getCompletedList(page,queryWrapper); + } + + public IPage getSentList(Page page, QueryWrapper queryWrapper) { + return processAllMapper.getSentList(page,queryWrapper); + } + + public void delete(String processInstanceId) { + runtimeService.deleteProcessInstance(processInstanceId,"撤销"); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ProcessAll::getProcessInstanceId,processInstanceId); + this.remove(wrapper); + + LambdaQueryWrapper wrapper1 = new LambdaQueryWrapper<>(); + wrapper1.eq(ProcessApprovalRecord::getProcessInstanceId,processInstanceId); + processApprovalRecordMapper.delete(wrapper1); + } } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessApprovalRecordService.java b/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessApprovalRecordService.java index 36c1ee45..2e1f8af6 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessApprovalRecordService.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessApprovalRecordService.java @@ -1,5 +1,7 @@ package com.jero.modules.activiti.service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.jero.common.constant.enums.YesOrNoEnum; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; @@ -14,4 +16,10 @@ import com.jero.modules.activiti.entity.ProcessApprovalRecord; @Service public class ProcessApprovalRecordService extends ServiceImpl { + public ProcessApprovalRecord getByTaskId(String taskId){ + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ProcessApprovalRecord::getTaskId,taskId); + wrapper.eq(ProcessApprovalRecord::getIsDelegateTask, YesOrNoEnum.NO.getInteger()); + return this.getOne(wrapper); + } }