update 工作中心代码(未完成)

This commit is contained in:
lijiarao
2023-10-17 18:23:52 +08:00
parent 300eec132c
commit 2069decf44
22 changed files with 408 additions and 105 deletions
+4 -1
View File
@@ -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 '流程审批记录表';
@@ -294,6 +294,11 @@ public class SysBaseAPIFallback implements ISysBaseAPI {
return null;
}
@Override
public List<DictModel> translateUserRealNameFromTableByKeys(String values) {
return null;
}
@Override
public void sendEmailMsg(String email,String title,String content) {
// do other
@@ -140,4 +140,6 @@ public interface CommonAPI {
String queryTableDictTextByKey(String table,String text,String code, String key);
String translateUserRealNameFromTable(String id);
List<DictModel> translateUserRealNameFromTableByKeys(String values);
}
@@ -250,7 +250,12 @@ public class DictAspect {
String values = String.join(",", needTranslDataTable);
log.info("translateDictFromTableByKeys.dictCode:" + dictCode);
log.info("translateDictFromTableByKeys.values:" + values);
List<DictModel> texts = commonAPI.translateDictFromTableByKeys(table, text, code, values);
List<DictModel> 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<DictModel> list = translText.computeIfAbsent(dictCode, k -> new ArrayList<>());
list.addAll(texts);
@@ -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");
@@ -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<SysUser> {
List<SysUser> getUserListByDepIds(@Param("departIds") List<String> departIds);
String translateUserRealNameFromTable(@Param("id") String id);
List<DictModel> translateUserRealNameFromTableByKeys(@Param("keys") List<String> keys);
}
@@ -219,4 +219,13 @@
select concat(realname,'',username,'') from sys_user
where id = #{id}
</select>
<select id="translateUserRealNameFromTableByKeys" resultType="com.jero.common.system.vo.DictModel">
select concat(realname,'',username,'') as "text", id as "value" from sys_user
where id IN (
<foreach item="key" collection="keys" separator=",">
#{key}
</foreach>
)
</select>
</mapper>
@@ -1186,4 +1186,9 @@ public class SysBaseApiImpl implements ISysBaseAPI {
return userMapper.translateUserRealNameFromTable(id);
}
@Override
public List<DictModel> translateUserRealNameFromTableByKeys(String keys) {
return userMapper.translateUserRealNameFromTableByKeys(Arrays.asList(keys.split(",")));
}
}
@@ -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;
}
}
@@ -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);
}
}
@@ -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<Map<String, String>> start(@RequestBody Map<String,Object> 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<List<Map<String, String>>> 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<Task> list = taskQuery.list();
List<Map<String, String>> 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<Object> complete(@RequestBody Map<String,Object> 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<String, Object> vars = new HashMap<>();
//List<String> otherDrafterList = new ArrayList<>();
//otherDrafterList.add("zhangsan");
//otherDrafterList.add("lisi");
//otherDrafterList.add("wangwu");
//vars.put("leaderList", otherDrafterList);
//Map<String, Object> 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<Object> claim(@RequestBody Map<String,Object> map) {
@@ -216,19 +221,14 @@ public class ActivitiController {
}
/**
* 加签
*
* @param taskId
* @param loginName
* @return
*/
@ApiOperation(value="加签/委托")
@GetMapping("/delegateTask")
public Result<Object> 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();
}
@@ -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<IPage<ProcessAll>> getTodoList(ProcessAll processAll,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<ProcessAll> 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<ProcessAll> page = new Page<>(pageNo, pageSize);
IPage<ProcessAll> 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<ProcessAll> 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<ProcessAll> page = new Page<>(pageNo, pageSize);
IPage<ProcessAll> 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<ProcessAll> queryWrapper = getProcessAllQueryWrapper(processAll);
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
String userId = loginUser.getId();
queryWrapper.eq("pa.user_id",userId);
Page<ProcessAll> page = new Page<>(pageNo, pageSize);
IPage<ProcessAll> sentList = processAllService.getSentList(page, queryWrapper);
return Result.OK(sentList);
}
@NotNull
private QueryWrapper<ProcessAll> getProcessAllQueryWrapper(ProcessAll processAll) {
String prcName = processAll.getPrcName();
String prcNum = processAll.getPrcNum();
Integer prcType = processAll.getPrcType();
Integer prcStatus = processAll.getPrcStatus();
QueryWrapper<ProcessAll> 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<String, String> map) {
String processInstanceId = map.get("processInstanceId");
processAllService.delete(processInstanceId);
return Result.OK();
}
}
@@ -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;
}
@@ -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;
}
@@ -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<ProcessApprovalRecord> 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 对接统一平台生成完成任务
}
}
@@ -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<IdentityLink> 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 对接统一平台生成待办任务
}
}
@@ -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<ProcessAll> 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);
}
}
@@ -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));
@@ -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<ProcessAll> {
IPage<ProcessAll> getTodoList(Page<ProcessAll> page, @Param(Constants.WRAPPER) QueryWrapper<ProcessAll> queryWrapper);
IPage<ProcessAll> getCompletedList(Page<ProcessAll> page, @Param(Constants.WRAPPER) QueryWrapper<ProcessAll> queryWrapper);
IPage<ProcessAll> getSentList(Page<ProcessAll> page, @Param(Constants.WRAPPER) QueryWrapper<ProcessAll> queryWrapper);
}
@@ -1,29 +1,36 @@
<?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.jero.modules.activiti.mapper.ProcessAllMapper">
<resultMap id="BaseResultMap" type="com.jero.modules.activiti.entity.ProcessAll">
<!--@mbg.generated-->
<!--@Table process_all-->
<id column="id" jdbcType="VARCHAR" property="id" />
<result column="prc_name" jdbcType="VARCHAR" property="prcName" />
<result column="process_instance_id" jdbcType="VARCHAR" property="processInstanceId" />
<result column="prc_mes" jdbcType="VARCHAR" property="prcMes" />
<result column="prc_num" jdbcType="VARCHAR" property="prcNum" />
<result column="create_user_id" jdbcType="VARCHAR" property="createUserId" />
<result column="prc_type" jdbcType="VARCHAR" property="prcType" />
<result column="create_user_name" jdbcType="VARCHAR" property="createUserName" />
<result column="mes" jdbcType="LONGVARCHAR" property="mes" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="end_time" jdbcType="TIMESTAMP" property="endTime" />
<result column="over_time" jdbcType="VARCHAR" property="overTime" />
<result column="due_time" jdbcType="TIMESTAMP" property="dueTime" />
<result column="project_id" jdbcType="VARCHAR" property="projectId" />
<result column="project_name" jdbcType="VARCHAR" property="projectName" />
<result column="prc_name_en" jdbcType="VARCHAR" property="prcNameEn" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
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
</sql>
<select id="getTodoList" resultType="com.jero.modules.activiti.entity.ProcessAll">
select pa.*,par.create_time as receivedTaskTime,par.task_id
from process_all pa
left join process_approval_record par on pa.process_instance_id = par.process_instance_id
${ew.customSqlSegment}
</select>
<select id="getCompletedList" resultType="com.jero.modules.activiti.entity.ProcessAll">
select p.*, group_concat(par.user_id) as handleUserId
from (
select pa.*, max(par.create_time) as receivedTaskTime, max(par.end_time) as completedTaskTime
from process_all pa
left join process_approval_record par on pa.process_instance_id = par.process_instance_id
${ew.customSqlSegment}
) p
left join process_approval_record par on p.process_instance_id = par.process_instance_id
WHERE par.finish_flag = 0
group by p.process_instance_id
</select>
<select id="getSentList" resultType="com.jero.modules.activiti.entity.ProcessAll">
select p.*, group_concat(par.user_id) as handleUserId
from (
select pa.*, max(par.create_time) as receivedTaskTime, max(par.end_time) as completedTaskTime
from process_all pa
left join process_approval_record par on pa.process_instance_id = par.process_instance_id
${ew.customSqlSegment}
) p
left join process_approval_record par on p.process_instance_id = par.process_instance_id
WHERE par.finish_flag = 0
group by p.process_instance_id
</select>
</mapper>
@@ -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<ProcessAllMapper, ProcessAll> {
@Resource
private ProcessAllMapper processAllMapper;
@Resource
private ProcessApprovalRecordMapper processApprovalRecordMapper;
@Resource
private RuntimeService runtimeService;
public ProcessAll getByProcessInstanceId(String processInstanceId){
LambdaQueryWrapper<ProcessAll> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessAll::getProcessInstanceId,processInstanceId);
return this.getOne(wrapper);
}
public IPage<ProcessAll> getTodoList(Page<ProcessAll> page, QueryWrapper<ProcessAll> queryWrapper) {
return processAllMapper.getTodoList(page,queryWrapper);
}
public IPage<ProcessAll> getCompletedList(Page<ProcessAll> page, QueryWrapper<ProcessAll> queryWrapper) {
return processAllMapper.getCompletedList(page,queryWrapper);
}
public IPage<ProcessAll> getSentList(Page<ProcessAll> page, QueryWrapper<ProcessAll> queryWrapper) {
return processAllMapper.getSentList(page,queryWrapper);
}
public void delete(String processInstanceId) {
runtimeService.deleteProcessInstance(processInstanceId,"撤销");
LambdaQueryWrapper<ProcessAll> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessAll::getProcessInstanceId,processInstanceId);
this.remove(wrapper);
LambdaQueryWrapper<ProcessApprovalRecord> wrapper1 = new LambdaQueryWrapper<>();
wrapper1.eq(ProcessApprovalRecord::getProcessInstanceId,processInstanceId);
processApprovalRecordMapper.delete(wrapper1);
}
}
@@ -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<ProcessApprovalRecordMapper, ProcessApprovalRecord> {
public ProcessApprovalRecord getByTaskId(String taskId){
LambdaQueryWrapper<ProcessApprovalRecord> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessApprovalRecord::getTaskId,taskId);
wrapper.eq(ProcessApprovalRecord::getIsDelegateTask, YesOrNoEnum.NO.getInteger());
return this.getOne(wrapper);
}
}