From 6a1132e248cc9570db9a32aa00b5208cffdb0c73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A7=9C=E7=8E=89=E7=90=A6?= <7507756+jiang_yuqi@user.noreply.gitee.com> Date: Sat, 24 Feb 2024 23:32:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/vw_sql.sql | 141 ++++++++ .../yanzhu/common/core/domain/BaseEntity.java | 11 + .../controller/FlowBusinessKeyController.java | 116 +++++++ .../controller/FlowDefinitionController.java | 4 + .../controller/FlowTaskController.java | 2 +- .../flowable/domain}/FlowCommentDto.java | 2 +- .../flowable/domain}/FlowFromFieldDTO.java | 2 +- .../yanzhu/flowable/domain}/FlowNextDto.java | 2 +- .../yanzhu/flowable/domain}/FlowTaskDto.java | 2 +- .../flowable/domain}/FlowViewerDto.java | 2 +- .../service/IFlowBusinessKeyService.java | 56 +++ .../impl/FlowBusinessKeyServiceImpl.java | 102 ++++++ .../impl/FlowDefinitionServiceImpl.java | 17 +- .../service/impl/FlowTaskServiceImpl.java | 24 +- .../project/domain/ProProjectApply.java | 26 ++ .../domain/flowable/FlowTaskEntity.java | 326 ++++++++++++++++++ .../system/mapper/FlowBusinessKeyMapper.java | 48 +++ .../system/mapper/FlowDeployMapper.java | 7 + .../mapper/flowable/FlowBusinessKeyMapper.xml | 103 ++++++ .../mapper/flowable/FlowDeployMapper.xml | 30 +- yanzhu-ui/src/assets/styles/variables.scss | 2 +- .../views/flowable/task/finished/index.vue | 115 ++++-- .../views/flowable/task/myProcess/index.vue | 318 ++++++++++++----- 23 files changed, 1320 insertions(+), 138 deletions(-) create mode 100644 sql/vw_sql.sql create mode 100644 yanzhu-flowable/src/main/java/com/yanzhu/flowable/controller/FlowBusinessKeyController.java rename {yanzhu-system/src/main/java/com/yanzhu/system/domain/flowable/dto => yanzhu-flowable/src/main/java/com/yanzhu/flowable/domain}/FlowCommentDto.java (88%) rename {yanzhu-system/src/main/java/com/yanzhu/system/domain/flowable/dto => yanzhu-flowable/src/main/java/com/yanzhu/flowable/domain}/FlowFromFieldDTO.java (80%) rename {yanzhu-system/src/main/java/com/yanzhu/system/domain/flowable/dto => yanzhu-flowable/src/main/java/com/yanzhu/flowable/domain}/FlowNextDto.java (84%) rename {yanzhu-system/src/main/java/com/yanzhu/system/domain/flowable/dto => yanzhu-flowable/src/main/java/com/yanzhu/flowable/domain}/FlowTaskDto.java (98%) rename {yanzhu-system/src/main/java/com/yanzhu/system/domain/flowable/dto => yanzhu-flowable/src/main/java/com/yanzhu/flowable/domain}/FlowViewerDto.java (86%) create mode 100644 yanzhu-flowable/src/main/java/com/yanzhu/flowable/service/IFlowBusinessKeyService.java create mode 100644 yanzhu-flowable/src/main/java/com/yanzhu/flowable/service/impl/FlowBusinessKeyServiceImpl.java create mode 100644 yanzhu-system/src/main/java/com/yanzhu/system/domain/flowable/FlowTaskEntity.java create mode 100644 yanzhu-system/src/main/java/com/yanzhu/system/mapper/FlowBusinessKeyMapper.java create mode 100644 yanzhu-system/src/main/resources/mapper/flowable/FlowBusinessKeyMapper.xml diff --git a/sql/vw_sql.sql b/sql/vw_sql.sql new file mode 100644 index 0000000..9bd1920 --- /dev/null +++ b/sql/vw_sql.sql @@ -0,0 +1,141 @@ +##全部,根据finishTime判断代办,已办 +DROP view vw_flow_all; +CREATE VIEW vw_flow_all AS ( + SELECT + RES.ID_ AS procInsId, + DEF.DEPLOYMENT_ID_ AS deployId, + RES.START_TIME_ AS createTime, + RES.END_TIME_ AS finishTime, + CASE + WHEN RES.END_TIME_ IS NULL THEN + TIMESTAMPDIFF( + MINUTE, + RES.START_TIME_, + DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%S') + ) + ELSE + TIMESTAMPDIFF( + MINUTE, + RES.START_TIME_, + RES.END_TIME_ + ) + END AS duration, + DEF.NAME_ AS procDefName, + DEF.VERSION_ AS procDefVersion, + DEF.CATEGORY_ AS category, + DEF.KEY_ AS procDefKey, + ppa.id AS businessKey, + ppa.dept_id as businessDeptId, + ppa.proj_name AS businessKeyName, + ppa.par_proj_name as businessKeyParName, + ru.user_id AS startUserId, + ru.nick_name AS startUserName, + rd.dept_name AS startDeptName, + ht.* +FROM + ACT_HI_PROCINST RES +LEFT OUTER JOIN ACT_RE_PROCDEF DEF ON RES.PROC_DEF_ID_ = DEF.ID_ +LEFT OUTER JOIN pro_project_apply ppa ON RES.BUSINESS_KEY_ = ppa.id +LEFT JOIN sys_user ru ON ru.user_id = RES.START_USER_ID_ +LEFT JOIN sys_dept rd ON rd.dept_id = ru.dept_id +LEFT JOIN ( + SELECT + ht.ID_ AS taskId, + ht.NAME_ AS taskName, + tu.user_id AS assigneeId, + tu.nick_name AS assigneeName, + td.dept_name AS assigneeDeptName, + ht.PROC_INST_ID_ + FROM + act_hi_taskinst ht + LEFT JOIN sys_user tu ON tu.user_id = ht.ASSIGNEE_ + LEFT JOIN sys_dept td ON td.dept_id = tu.dept_id + WHERE + ht.ID_ IN ( + SELECT + MAX(ID_) + FROM + act_hi_taskinst + GROUP BY + PROC_INST_ID_ + ) + GROUP BY ht.PROC_INST_ID_ +) ht ON ht.PROC_INST_ID_ = RES.PROC_INST_ID_ +); + +##待办 +DROP view vw_flow_await; +CREATE VIEW vw_flow_await AS (SELECT + RES.ID_ AS taskId, + RES.NAME_ AS taskName, + re.ID_ AS procInsId, + DEF.DEPLOYMENT_ID_ AS deployId, + DATE_FORMAT(re.START_TIME_, '%Y-%m-%d %H:%i:%S') AS createTime, + TIMESTAMPDIFF( + MINUTE, + re.START_TIME_, + DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%S') + ) AS duration, + DEF.NAME_ AS procDefName, + DEF.VERSION_ AS procDefVersion, + DEF.CATEGORY_ AS category, + DEF.KEY_ AS procDefKey, + ppa.id AS businessKey, + ppa.dept_id AS businessDeptId, + ppa.proj_name AS businessKeyName, + ppa.par_proj_name as businessKeyParName, + ru.user_id AS startUserId, + ru.nick_name AS startUserName, + rd.dept_name AS startDeptName, + RES.SUSPENSION_STATE_, + RES.ASSIGNEE_, + LINK.USER_ID_, + LINK.GROUP_ID_ +FROM + ACT_RU_TASK RES +LEFT JOIN act_ru_execution re ON re.PARENT_ID_ IS NULL +AND re.PROC_INST_ID_ = RES.PROC_INST_ID_ +LEFT OUTER JOIN ACT_RE_PROCDEF DEF ON re.PROC_DEF_ID_ = DEF.ID_ +LEFT OUTER JOIN pro_project_apply ppa ON re.BUSINESS_KEY_ = ppa.id +LEFT JOIN sys_user ru ON ru.user_id = re.START_USER_ID_ +LEFT JOIN sys_dept rd ON rd.dept_id = ru.dept_id +left JOIN ACT_RU_IDENTITYLINK LINK on LINK.TASK_ID_ = RES.ID_ AND LINK.TYPE_ = 'candidate' +WHERE + RES.SUSPENSION_STATE_ = 1) + + +##已办 +DROP view vw_flow_finished; +CREATE VIEW vw_flow_finished AS (SELECT + RES.ID_ AS taskId, + RES.NAME_ AS taskName, + RES.PROC_INST_ID_ AS procInsId, + pd.DEPLOYMENT_ID_ as deployId, + DATE_FORMAT(RES.START_TIME_, '%Y-%m-%d %H:%i:%S') AS createTime, + DATE_FORMAT(RES.END_TIME_, '%Y-%m-%d %H:%i:%S') AS endTime, + TIMESTAMPDIFF( + MINUTE, + res.START_TIME_, + RES.END_TIME_ + ) AS duration, +DEF.END_TIME_ as finishTime, + pd.NAME_ AS procDefName, + pd.CATEGORY_ AS category, + pd.KEY_ AS procDefKey, + ppa.id AS businessKey, + ppa.dept_id AS businessDeptId, + ppa.proj_name AS businessKeyName, + ppa.par_proj_name as businessKeyParName, + ru.user_id AS startUserId, + ru.nick_name AS startUserName, + rd.dept_name AS startDeptName, + RES.ASSIGNEE_ +FROM + act_hi_taskinst RES +LEFT OUTER JOIN act_hi_procinst DEF ON RES.PROC_INST_ID_ = DEF.PROC_INST_ID_ +LEFT OUTER join act_re_procdef pd on RES.PROC_DEF_ID_ = pd.ID_ +LEFT OUTER JOIN pro_project_apply ppa ON DEF.BUSINESS_KEY_ = ppa.id +LEFT JOIN sys_user ru ON ru.user_id = RES.ASSIGNEE_ +LEFT JOIN sys_dept rd ON rd.dept_id = ru.dept_id +WHERE + RES.ASSIGNEE_ is not null and RES.END_TIME_ is not null) \ No newline at end of file diff --git a/yanzhu-common/src/main/java/com/yanzhu/common/core/domain/BaseEntity.java b/yanzhu-common/src/main/java/com/yanzhu/common/core/domain/BaseEntity.java index e87076b..8252d61 100644 --- a/yanzhu-common/src/main/java/com/yanzhu/common/core/domain/BaseEntity.java +++ b/yanzhu-common/src/main/java/com/yanzhu/common/core/domain/BaseEntity.java @@ -35,6 +35,9 @@ public class BaseEntity implements Serializable @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date updateTime; + /** 选中页签 */ + private String activeName; + /** 备注 */ private String remark; @@ -115,4 +118,12 @@ public class BaseEntity implements Serializable { this.params = params; } + + public String getActiveName() { + return activeName; + } + + public void setActiveName(String activeName) { + this.activeName = activeName; + } } diff --git a/yanzhu-flowable/src/main/java/com/yanzhu/flowable/controller/FlowBusinessKeyController.java b/yanzhu-flowable/src/main/java/com/yanzhu/flowable/controller/FlowBusinessKeyController.java new file mode 100644 index 0000000..829be1e --- /dev/null +++ b/yanzhu-flowable/src/main/java/com/yanzhu/flowable/controller/FlowBusinessKeyController.java @@ -0,0 +1,116 @@ +package com.yanzhu.flowable.controller; + +import com.yanzhu.common.core.controller.BaseController; +import com.yanzhu.common.core.domain.AjaxResult; +import com.yanzhu.common.core.domain.entity.SysUser; +import com.yanzhu.common.core.page.TableDataInfo; +import com.yanzhu.flowable.service.IFlowBusinessKeyService; +import com.yanzhu.system.domain.flowable.FlowTaskEntity; +import com.yanzhu.system.service.ISysDeptService; +import io.swagger.annotations.Api; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.stream.Collectors; + +/** + *
+ * 业务工作流程 + *
+ * + * @author JiangYuQi + * @date 2024-04-03 + */ +@Slf4j +@Api(tags = "业务工作流程") +@RestController +@RequestMapping("/flowable/businessKey") +public class FlowBusinessKeyController extends BaseController { + + @Autowired + private ISysDeptService sysDeptService; + + @Autowired + private IFlowBusinessKeyService flowBusinessKeyService; + + /** + * 根据条件查询所有流任务 + * @param flowTaskEntity + * @return + */ + @GetMapping(value = "/allList") + public TableDataInfo allList(FlowTaskEntity flowTaskEntity) { + startPage(); + //超管查询所有数据 + if(!SysUser.isAdmin(super.getUserId())){ + flowTaskEntity.setDeptAncestors(super.getLoginUser().getUser().getDept().getAncestors()); + } + return getDataTable(flowBusinessKeyService.selectAllFlowTaskByParams(flowTaskEntity)); + } + + /** + * 根据条件统计所有流任务 + * @param flowTaskEntity + * @return + */ + @GetMapping(value = "/queryCount") + public AjaxResult queryCount(FlowTaskEntity flowTaskEntity) { + //超管查询所有数据 + if(!SysUser.isAdmin(super.getUserId())){ + flowTaskEntity.setDeptAncestors(super.getLoginUser().getUser().getDept().getAncestors()); + } + return success(flowBusinessKeyService.quueryCount(flowTaskEntity)); + } + + /** + * 根据流程Id查询操作日志 + * @param procInsId + * @return + */ + @GetMapping(value = "/findCommentByProcInsId") + public AjaxResult findCommentByProcInsId(String procInsId) { + return success(flowBusinessKeyService.selectCommentByProcInsId(procInsId)); + } + + /** + * 根据流程Id查询表单数据 + * @param procInsId + * @return + */ + @GetMapping(value = "/findFormDatasByProcInsId") + public AjaxResult findFormDatasByProcInsId(String procInsId) { + return success(flowBusinessKeyService.selectFormDatasByProcInsId(procInsId)); + } + + /** + * 根据条件查询我的代办任务 + * @param flowTaskEntity + * @return + */ + @GetMapping(value = "/myAwaitFlowTaskList") + public TableDataInfo myAwaitFlowTaskList(FlowTaskEntity flowTaskEntity) { + startPage(); + //超管查询所有数据 + if(!SysUser.isAdmin(super.getUserId())){ + SysUser sysUser = super.getLoginUser().getUser(); + flowTaskEntity.setDeptAncestors(sysUser.getDept().getAncestors()); + flowTaskEntity.setRoleIds(sysUser.getRoles().stream().map(role -> role.getRoleId()).collect(Collectors.toList())); + } + return getDataTable(flowBusinessKeyService.selectMyAwaitFlowTask(flowTaskEntity)); + } + + /** + * 根据条件查询我的已办任务 + * @param flowTaskEntity + * @return + */ + @GetMapping(value = "/myFinishedFlowTaskList") + public TableDataInfo myFinishedFlowTaskList(FlowTaskEntity flowTaskEntity) { + startPage(); + flowTaskEntity.setAssigneeId(super.getUserId()); + return getDataTable(flowBusinessKeyService.selectMyFinishedFlowTask(flowTaskEntity)); + } +} diff --git a/yanzhu-flowable/src/main/java/com/yanzhu/flowable/controller/FlowDefinitionController.java b/yanzhu-flowable/src/main/java/com/yanzhu/flowable/controller/FlowDefinitionController.java index c4015ee..f81d100 100644 --- a/yanzhu-flowable/src/main/java/com/yanzhu/flowable/controller/FlowDefinitionController.java +++ b/yanzhu-flowable/src/main/java/com/yanzhu/flowable/controller/FlowDefinitionController.java @@ -4,6 +4,7 @@ import com.yanzhu.common.core.controller.BaseController; import com.yanzhu.common.core.domain.AjaxResult; import com.yanzhu.common.core.domain.entity.SysRole; import com.yanzhu.common.core.domain.entity.SysUser; +import com.yanzhu.common.core.text.Convert; import com.yanzhu.flowable.domain.FlowSaveXmlVo; import com.yanzhu.system.domain.flowable.FlowQueryVo; import com.yanzhu.flowable.service.IFlowDefinitionService; @@ -66,6 +67,9 @@ public class FlowDefinitionController extends BaseController { @GetMapping(value = "/list") @ApiOperation(value = "流程定义列表", response = FlowProcDefDto.class) public AjaxResult list(FlowQueryVo flowQueryVo) { + if(!SysUser.isAdmin(super.getUserId())){ + flowQueryVo.setDeptId(Convert.toLong(super.getLoginUser().getUser().getDept().getAncestors().split(",")[2])); + } return AjaxResult.success(flowDefinitionService.list(flowQueryVo)); } diff --git a/yanzhu-flowable/src/main/java/com/yanzhu/flowable/controller/FlowTaskController.java b/yanzhu-flowable/src/main/java/com/yanzhu/flowable/controller/FlowTaskController.java index aab3e99..86f7cc5 100644 --- a/yanzhu-flowable/src/main/java/com/yanzhu/flowable/controller/FlowTaskController.java +++ b/yanzhu-flowable/src/main/java/com/yanzhu/flowable/controller/FlowTaskController.java @@ -1,7 +1,7 @@ package com.yanzhu.flowable.controller; import com.yanzhu.common.core.domain.AjaxResult; -import com.yanzhu.system.domain.flowable.dto.FlowTaskDto; +import com.yanzhu.flowable.domain.FlowTaskDto; import com.yanzhu.system.domain.flowable.FlowQueryVo; import com.yanzhu.system.domain.flowable.FlowTaskVo; import com.yanzhu.flowable.service.IFlowTaskService; diff --git a/yanzhu-system/src/main/java/com/yanzhu/system/domain/flowable/dto/FlowCommentDto.java b/yanzhu-flowable/src/main/java/com/yanzhu/flowable/domain/FlowCommentDto.java similarity index 88% rename from yanzhu-system/src/main/java/com/yanzhu/system/domain/flowable/dto/FlowCommentDto.java rename to yanzhu-flowable/src/main/java/com/yanzhu/flowable/domain/FlowCommentDto.java index 7f8f552..4b9d597 100644 --- a/yanzhu-system/src/main/java/com/yanzhu/system/domain/flowable/dto/FlowCommentDto.java +++ b/yanzhu-flowable/src/main/java/com/yanzhu/flowable/domain/FlowCommentDto.java @@ -1,4 +1,4 @@ -package com.yanzhu.system.domain.flowable.dto; +package com.yanzhu.flowable.domain; import lombok.Builder; import lombok.Data; diff --git a/yanzhu-system/src/main/java/com/yanzhu/system/domain/flowable/dto/FlowFromFieldDTO.java b/yanzhu-flowable/src/main/java/com/yanzhu/flowable/domain/FlowFromFieldDTO.java similarity index 80% rename from yanzhu-system/src/main/java/com/yanzhu/system/domain/flowable/dto/FlowFromFieldDTO.java rename to yanzhu-flowable/src/main/java/com/yanzhu/flowable/domain/FlowFromFieldDTO.java index 372cb98..e591207 100644 --- a/yanzhu-system/src/main/java/com/yanzhu/system/domain/flowable/dto/FlowFromFieldDTO.java +++ b/yanzhu-flowable/src/main/java/com/yanzhu/flowable/domain/FlowFromFieldDTO.java @@ -1,4 +1,4 @@ -package com.yanzhu.system.domain.flowable.dto; +package com.yanzhu.flowable.domain; import lombok.Data; diff --git a/yanzhu-system/src/main/java/com/yanzhu/system/domain/flowable/dto/FlowNextDto.java b/yanzhu-flowable/src/main/java/com/yanzhu/flowable/domain/FlowNextDto.java similarity index 84% rename from yanzhu-system/src/main/java/com/yanzhu/system/domain/flowable/dto/FlowNextDto.java rename to yanzhu-flowable/src/main/java/com/yanzhu/flowable/domain/FlowNextDto.java index f46826c..70b506a 100644 --- a/yanzhu-system/src/main/java/com/yanzhu/system/domain/flowable/dto/FlowNextDto.java +++ b/yanzhu-flowable/src/main/java/com/yanzhu/flowable/domain/FlowNextDto.java @@ -1,4 +1,4 @@ -package com.yanzhu.system.domain.flowable.dto; +package com.yanzhu.flowable.domain; import lombok.Data; diff --git a/yanzhu-system/src/main/java/com/yanzhu/system/domain/flowable/dto/FlowTaskDto.java b/yanzhu-flowable/src/main/java/com/yanzhu/flowable/domain/FlowTaskDto.java similarity index 98% rename from yanzhu-system/src/main/java/com/yanzhu/system/domain/flowable/dto/FlowTaskDto.java rename to yanzhu-flowable/src/main/java/com/yanzhu/flowable/domain/FlowTaskDto.java index 89fa539..5db80e9 100644 --- a/yanzhu-system/src/main/java/com/yanzhu/system/domain/flowable/dto/FlowTaskDto.java +++ b/yanzhu-flowable/src/main/java/com/yanzhu/flowable/domain/FlowTaskDto.java @@ -1,4 +1,4 @@ -package com.yanzhu.system.domain.flowable.dto; +package com.yanzhu.flowable.domain; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; diff --git a/yanzhu-system/src/main/java/com/yanzhu/system/domain/flowable/dto/FlowViewerDto.java b/yanzhu-flowable/src/main/java/com/yanzhu/flowable/domain/FlowViewerDto.java similarity index 86% rename from yanzhu-system/src/main/java/com/yanzhu/system/domain/flowable/dto/FlowViewerDto.java rename to yanzhu-flowable/src/main/java/com/yanzhu/flowable/domain/FlowViewerDto.java index efd1539..60b221f 100644 --- a/yanzhu-system/src/main/java/com/yanzhu/system/domain/flowable/dto/FlowViewerDto.java +++ b/yanzhu-flowable/src/main/java/com/yanzhu/flowable/domain/FlowViewerDto.java @@ -1,4 +1,4 @@ -package com.yanzhu.system.domain.flowable.dto; +package com.yanzhu.flowable.domain; import lombok.Data; diff --git a/yanzhu-flowable/src/main/java/com/yanzhu/flowable/service/IFlowBusinessKeyService.java b/yanzhu-flowable/src/main/java/com/yanzhu/flowable/service/IFlowBusinessKeyService.java new file mode 100644 index 0000000..11f7385 --- /dev/null +++ b/yanzhu-flowable/src/main/java/com/yanzhu/flowable/service/IFlowBusinessKeyService.java @@ -0,0 +1,56 @@ +package com.yanzhu.flowable.service; + +import com.yanzhu.system.domain.flowable.FlowTaskEntity; + +import java.util.List; +import java.util.Map; + +/** + * @author JiangYuQi + * @date 2021-04-03 14:41 + */ +public interface IFlowBusinessKeyService { + + /** + * 根据条件查询所有流任务 + * @param flowTaskEntity + * @return + */ + public List