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 selectAllFlowTaskByParams(FlowTaskEntity flowTaskEntity); + + /** + * 根据条件统计所有流任务 + * @param flowTaskEntity + * @return + */ + public Map quueryCount(FlowTaskEntity flowTaskEntity); + + /** + * 根据条件流程Id查询操作日志 + * @param procInsId + * @return + */ + public List> selectCommentByProcInsId(String procInsId); + + /** + * 根据流程Id查询表单数据 + * @param procInsId + * @return + */ + public Map selectFormDatasByProcInsId(String procInsId); + + /** + * 查询我的代办任务 + * @param flowTaskEntity + * @return + */ + public List> selectMyAwaitFlowTask(FlowTaskEntity flowTaskEntity); + + /** + * 查询我的已办任务 + * @param flowTaskEntity + * @return + */ + public List> selectMyFinishedFlowTask(FlowTaskEntity flowTaskEntity); + +} diff --git a/yanzhu-flowable/src/main/java/com/yanzhu/flowable/service/impl/FlowBusinessKeyServiceImpl.java b/yanzhu-flowable/src/main/java/com/yanzhu/flowable/service/impl/FlowBusinessKeyServiceImpl.java new file mode 100644 index 0000000..2e57a82 --- /dev/null +++ b/yanzhu-flowable/src/main/java/com/yanzhu/flowable/service/impl/FlowBusinessKeyServiceImpl.java @@ -0,0 +1,102 @@ +package com.yanzhu.flowable.service.impl; + +import com.yanzhu.common.core.text.Convert; +import com.yanzhu.flowable.service.IFlowBusinessKeyService; +import com.yanzhu.system.domain.flowable.FlowTaskEntity; +import com.yanzhu.system.mapper.FlowBusinessKeyMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +/** + * 业务工作流程自定义 + * + * @author Tony + * @date 2021-04-03 + */ +@Service +@Slf4j +public class FlowBusinessKeyServiceImpl implements IFlowBusinessKeyService { + + @Resource + private FlowBusinessKeyMapper flowBusinessKeyMapper; + /** + * 根据条件查询所有流任务 + * @param flowTaskEntity + * @return + */ + @Override + public List selectAllFlowTaskByParams(FlowTaskEntity flowTaskEntity) { + return flowBusinessKeyMapper.selectAllFlowTaskByParams(flowTaskEntity); + } + + /** + * 根据条件统计所有流任务 + * @param flowTaskEntity + * @return + */ + @Override + public Map quueryCount(FlowTaskEntity flowTaskEntity) { + flowTaskEntity.setActiveName("await"); + int awaitSize = flowBusinessKeyMapper.selectAllFlowTaskByParams(flowTaskEntity).size(); + flowTaskEntity.setActiveName("finished"); + int finishedSize = flowBusinessKeyMapper.selectAllFlowTaskByParams(flowTaskEntity).size(); + Map dataMap = new HashMap<>(); + dataMap.put("await",awaitSize); + dataMap.put("finished",finishedSize); + return dataMap; + } + + /** + * 根据条件流程Id查询操作日志 + * @param procInsId + * @return + */ + @Override + public List> selectCommentByProcInsId(String procInsId) { + return flowBusinessKeyMapper.selectCommentByProcInsId(procInsId); + } + + /** + * 根据流程Id查询表单数据 + * @param procInsId + * @return + */ + @Override + public Map selectFormDatasByProcInsId(String procInsId) { + Map dataMap = new HashMap<>(); + List> list = flowBusinessKeyMapper.selectFormDatasByProcInsId(procInsId); + Iterator> it = list.iterator(); + while (it.hasNext()) { + Map map = it.next(); + dataMap.put(Convert.toStr(map.get("name")), map.get("text")); + } + return dataMap; + } + + /** + * 查询我的代办任务 + * @param flowTaskEntity + * @return + */ + @Override + public List> selectMyAwaitFlowTask(FlowTaskEntity flowTaskEntity){ + return flowBusinessKeyMapper.selectMyAwaitFlowTask(flowTaskEntity); + } + + /** + * 查询我的已办任务 + * @param flowTaskEntity + * @return + */ + @Override + public List> selectMyFinishedFlowTask(FlowTaskEntity flowTaskEntity) { + return flowBusinessKeyMapper.selectMyFinishedFlowTask(flowTaskEntity); + } + +} diff --git a/yanzhu-flowable/src/main/java/com/yanzhu/flowable/service/impl/FlowDefinitionServiceImpl.java b/yanzhu-flowable/src/main/java/com/yanzhu/flowable/service/impl/FlowDefinitionServiceImpl.java index 36e1b20..784bbe4 100644 --- a/yanzhu-flowable/src/main/java/com/yanzhu/flowable/service/impl/FlowDefinitionServiceImpl.java +++ b/yanzhu-flowable/src/main/java/com/yanzhu/flowable/service/impl/FlowDefinitionServiceImpl.java @@ -21,6 +21,7 @@ import com.yanzhu.system.service.ISysDeptService; import com.yanzhu.system.service.ISysPostService; import com.yanzhu.system.service.ISysUserService; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.io.IOUtils; import org.flowable.bpmn.model.BpmnModel; import org.flowable.engine.repository.Deployment; @@ -34,6 +35,7 @@ import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.util.*; +import java.util.stream.Collectors; /** * 流程定义 @@ -81,7 +83,7 @@ public class FlowDefinitionServiceImpl extends FlowServiceFactory implements IFl public Page list(FlowQueryVo flowQueryVo) { Page page = new Page<>(); PageHelper.startPage(flowQueryVo.getPageNum(), flowQueryVo.getPageSize()); - final List dataList = flowDeployMapper.selectDeployList(flowQueryVo); + List dataList = flowDeployMapper.selectDeployList(flowQueryVo); // 加载挂表单 /**for (FlowProcDefDto procDef : dataList) { SysForm sysForm = sysDeployFormService.selectSysDeployFormByDeployId(procDef.getDeploymentId()); @@ -90,6 +92,14 @@ public class FlowDefinitionServiceImpl extends FlowServiceFactory implements IFl procDef.setFormId(sysForm.getFormId()); } }*/ + if(flowQueryVo.getDeptId()!=null){ + // 单位查询时::查询缺省工作流 + List categoryList = dataList.stream().map(FlowProcDefDto::getCategory).collect(Collectors.toList()); + List defaultList = flowDeployMapper.selectDefaultDeployList(categoryList); + if(CollectionUtils.isNotEmpty(defaultList)){ + dataList.addAll(defaultList); + } + } page.setTotal(new PageInfo(dataList).getTotal()); page.setRecords(dataList); return page; @@ -125,7 +135,9 @@ public class FlowDefinitionServiceImpl extends FlowServiceFactory implements IFl Long projectDeptId = Convert.toLong(SecurityUtils.getLoginUser().getUser().getDept().getAncestors().split(",")[2]); flowDeptVo.setDeptId(projectDeptId); } - flowDeployMapper.insertActReProcdefDept(flowDeptVo); + if(flowDeptVo.getDeptId()!=null){ + flowDeployMapper.insertActReProcdefDept(flowDeptVo); + } } /** @@ -240,5 +252,4 @@ public class FlowDefinitionServiceImpl extends FlowServiceFactory implements IFl repositoryService.deleteDeployment(deployId, true); } - } diff --git a/yanzhu-flowable/src/main/java/com/yanzhu/flowable/service/impl/FlowTaskServiceImpl.java b/yanzhu-flowable/src/main/java/com/yanzhu/flowable/service/impl/FlowTaskServiceImpl.java index 29aa232..95ce006 100644 --- a/yanzhu-flowable/src/main/java/com/yanzhu/flowable/service/impl/FlowTaskServiceImpl.java +++ b/yanzhu-flowable/src/main/java/com/yanzhu/flowable/service/impl/FlowTaskServiceImpl.java @@ -12,10 +12,10 @@ import com.yanzhu.common.core.domain.entity.SysUser; import com.yanzhu.flowable.common.enums.FlowComment; import com.yanzhu.common.exception.CustomException; import com.yanzhu.common.utils.SecurityUtils; -import com.yanzhu.system.domain.flowable.dto.FlowCommentDto; -import com.yanzhu.system.domain.flowable.dto.FlowNextDto; -import com.yanzhu.system.domain.flowable.dto.FlowTaskDto; -import com.yanzhu.system.domain.flowable.dto.FlowViewerDto; +import com.yanzhu.flowable.domain.FlowCommentDto; +import com.yanzhu.flowable.domain.FlowNextDto; +import com.yanzhu.flowable.domain.FlowTaskDto; +import com.yanzhu.flowable.domain.FlowViewerDto; import com.yanzhu.system.domain.flowable.FlowQueryVo; import com.yanzhu.system.domain.flowable.FlowTaskVo; import com.yanzhu.flowable.factory.FlowServiceFactory; @@ -510,10 +510,18 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask public AjaxResult myProcess(FlowQueryVo queryVo) { Page page = new Page<>(); Long userId = SecurityUtils.getLoginUser().getUser().getUserId(); - HistoricProcessInstanceQuery historicProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery() - .startedBy(userId.toString()) - .orderByProcessInstanceStartTime() - .desc(); + HistoricProcessInstanceQuery historicProcessInstanceQuery; + //超管查询所有数据据 + if(SecurityUtils.isAdmin(userId)){ + historicProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery() + .orderByProcessInstanceStartTime() + .desc(); + }else{ + historicProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery() + .startedBy(userId.toString()) + .orderByProcessInstanceStartTime() + .desc(); + } List historicProcessInstances = historicProcessInstanceQuery.listPage(queryVo.getPageSize() * (queryVo.getPageNum() - 1), queryVo.getPageSize()); page.setTotal(historicProcessInstanceQuery.count()); List flowList = new ArrayList<>(); diff --git a/yanzhu-mapper/src/main/java/com/yanzhu/project/domain/ProProjectApply.java b/yanzhu-mapper/src/main/java/com/yanzhu/project/domain/ProProjectApply.java index 0a2ba93..81f3cab 100644 --- a/yanzhu-mapper/src/main/java/com/yanzhu/project/domain/ProProjectApply.java +++ b/yanzhu-mapper/src/main/java/com/yanzhu/project/domain/ProProjectApply.java @@ -29,6 +29,14 @@ public class ProProjectApply extends BaseEntity @Excel(name = "项目主键") private Long projId; + /** 项目名称 */ + @Excel(name = "项目名称") + private String projName; + + /** 父级项目名称 */ + @Excel(name = "父级项目名称") + private String parProjName; + /** 申请类型 */ @Excel(name = "申请类型") private String applyType; @@ -152,6 +160,22 @@ public class ProProjectApply extends BaseEntity return isDel; } + public String getProjName() { + return projName; + } + + public void setProjName(String projName) { + this.projName = projName; + } + + public String getParProjName() { + return parProjName; + } + + public void setParProjName(String parProjName) { + this.parProjName = parProjName; + } + public List getProProjectApplyDetailList() { return proProjectApplyDetailList; @@ -168,6 +192,8 @@ public class ProProjectApply extends BaseEntity .append("id", getId()) .append("deptId", getDeptId()) .append("projId", getProjId()) + .append("projName", getProjName()) + .append("projId", getParProjName()) .append("applyType", getApplyType()) .append("applyStatus", getApplyStatus()) .append("applyReason", getApplyReason()) diff --git a/yanzhu-system/src/main/java/com/yanzhu/system/domain/flowable/FlowTaskEntity.java b/yanzhu-system/src/main/java/com/yanzhu/system/domain/flowable/FlowTaskEntity.java new file mode 100644 index 0000000..242df66 --- /dev/null +++ b/yanzhu-system/src/main/java/com/yanzhu/system/domain/flowable/FlowTaskEntity.java @@ -0,0 +1,326 @@ +package com.yanzhu.system.domain.flowable; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.yanzhu.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModelProperty; + +import java.util.Date; +import java.util.List; + +/** + *

工作流任务

+ * + * @author JiangYuQi + * @date 2021-04-03 + */ +public class FlowTaskEntity extends BaseEntity { + + private static final long serialVersionUID = 1L; + + private String businessKey; + + @ApiModelProperty("业务名称") + private String businessKeyName; + + @ApiModelProperty("任务编号") + private String taskId; + + @ApiModelProperty("任务执行编号") + private String executionId; + + @ApiModelProperty("任务名称") + private String taskName; + + @ApiModelProperty("任务Key") + private String taskDefKey; + + @ApiModelProperty("部门名称") + private String deptName; + + @ApiModelProperty("流程发起人部门名称") + private String startDeptName; + + @ApiModelProperty("任务执行人Id") + private Long assigneeId; + + @ApiModelProperty("任务执行人名称") + private String assigneeName; + + @ApiModelProperty("任务执行人部门") + private String assigneeDeptName;; + + @ApiModelProperty("流程发起人Id") + private String startUserId; + + @ApiModelProperty("流程发起人名称") + private String startUserName; + + @ApiModelProperty("流程类型") + private String category; + + @ApiModelProperty("流程变量信息") + private Object procVars; + + @ApiModelProperty("局部变量信息") + private Object taskLocalVars; + + @ApiModelProperty("流程部署编号") + private String deployId; + + @ApiModelProperty("流程ID") + private String procDefId; + + @ApiModelProperty("流程key") + private String procDefKey; + + @ApiModelProperty("流程定义名称") + private String procDefName; + + @ApiModelProperty("流程定义内置使用版本") + private int procDefVersion; + + @ApiModelProperty("流程实例ID") + private String procInsId; + + @ApiModelProperty("历史流程实例ID") + private String hisProcInsId; + + @ApiModelProperty("任务耗时") + private String duration; + + @ApiModelProperty("候选执行人") + private String candidate; + + @ApiModelProperty("任务完成时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date finishTime; + + @ApiModelProperty("单位祖籍列表") + private String deptAncestors; + + public String getBusinessKeyName() { + return businessKeyName; + } + + public void setBusinessKeyName(String businessKeyName) { + this.businessKeyName = businessKeyName; + } + + public String getTaskId() { + return taskId; + } + + public void setTaskId(String taskId) { + this.taskId = taskId; + } + + public String getExecutionId() { + return executionId; + } + + public void setExecutionId(String executionId) { + this.executionId = executionId; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getTaskDefKey() { + return taskDefKey; + } + + public void setTaskDefKey(String taskDefKey) { + this.taskDefKey = taskDefKey; + } + + public Long getAssigneeId() { + return assigneeId; + } + + public void setAssigneeId(Long assigneeId) { + this.assigneeId = assigneeId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getStartDeptName() { + return startDeptName; + } + + public void setStartDeptName(String startDeptName) { + this.startDeptName = startDeptName; + } + + public String getAssigneeName() { + return assigneeName; + } + + public void setAssigneeName(String assigneeName) { + this.assigneeName = assigneeName; + } + + public String getAssigneeDeptName() { + return assigneeDeptName; + } + + public void setAssigneeDeptName(String assigneeDeptName) { + this.assigneeDeptName = assigneeDeptName; + } + + public String getStartUserId() { + return startUserId; + } + + public void setStartUserId(String startUserId) { + this.startUserId = startUserId; + } + + public String getStartUserName() { + return startUserName; + } + + public void setStartUserName(String startUserName) { + this.startUserName = startUserName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public Object getProcVars() { + return procVars; + } + + public void setProcVars(Object procVars) { + this.procVars = procVars; + } + + public Object getTaskLocalVars() { + return taskLocalVars; + } + + public void setTaskLocalVars(Object taskLocalVars) { + this.taskLocalVars = taskLocalVars; + } + + public String getDeployId() { + return deployId; + } + + public void setDeployId(String deployId) { + this.deployId = deployId; + } + + public String getProcDefId() { + return procDefId; + } + + public void setProcDefId(String procDefId) { + this.procDefId = procDefId; + } + + public String getProcDefKey() { + return procDefKey; + } + + public void setProcDefKey(String procDefKey) { + this.procDefKey = procDefKey; + } + + public String getProcDefName() { + return procDefName; + } + + public void setProcDefName(String procDefName) { + this.procDefName = procDefName; + } + + public int getProcDefVersion() { + return procDefVersion; + } + + public void setProcDefVersion(int procDefVersion) { + this.procDefVersion = procDefVersion; + } + + public String getProcInsId() { + return procInsId; + } + + public void setProcInsId(String procInsId) { + this.procInsId = procInsId; + } + + public String getHisProcInsId() { + return hisProcInsId; + } + + public void setHisProcInsId(String hisProcInsId) { + this.hisProcInsId = hisProcInsId; + } + + public String getDuration() { + return duration; + } + + public void setDuration(String duration) { + this.duration = duration; + } + + public String getCandidate() { + return candidate; + } + + public void setCandidate(String candidate) { + this.candidate = candidate; + } + + public Date getFinishTime() { + return finishTime; + } + + public void setFinishTime(Date finishTime) { + this.finishTime = finishTime; + } + + public String getBusinessKey() { + return businessKey; + } + + public void setBusinessKey(String businessKey) { + this.businessKey = businessKey; + } + + public String getDeptAncestors() { + return deptAncestors; + } + + public void setDeptAncestors(String deptAncestors) { + this.deptAncestors = deptAncestors; + } + + private List roleIds; + + public List getRoleIds() { + return roleIds; + } + + public void setRoleIds(List roleIds) { + this.roleIds = roleIds; + } +} diff --git a/yanzhu-system/src/main/java/com/yanzhu/system/mapper/FlowBusinessKeyMapper.java b/yanzhu-system/src/main/java/com/yanzhu/system/mapper/FlowBusinessKeyMapper.java new file mode 100644 index 0000000..5bb16ce --- /dev/null +++ b/yanzhu-system/src/main/java/com/yanzhu/system/mapper/FlowBusinessKeyMapper.java @@ -0,0 +1,48 @@ +package com.yanzhu.system.mapper; + +import com.yanzhu.system.domain.flowable.FlowTaskEntity; + +import java.util.List; +import java.util.Map; + +/*** + * 工作流业务相关 + */ +public interface FlowBusinessKeyMapper { + + /** + * 根据条件查询所有流任务 + * @param flowTaskEntity + * @return + */ + public List selectAllFlowTaskByParams(FlowTaskEntity flowTaskEntity); + + /** + * 根据流程Id查询操作日志 + * @param procInsId + * @return + */ + public List> selectCommentByProcInsId(String procInsId); + + /** + * 根据流程Id查询表单数据 + * @param procInsId + * @return + */ + public List> selectFormDatasByProcInsId(String procInsId); + + /** + * 查询我的代办任务 + * @param flowTaskEntity + * @return + */ + public List> selectMyAwaitFlowTask(FlowTaskEntity flowTaskEntity); + + /** + * 查询我的已办任务 + * @param flowTaskEntity + * @return + */ + public List> selectMyFinishedFlowTask(FlowTaskEntity flowTaskEntity); + +} diff --git a/yanzhu-system/src/main/java/com/yanzhu/system/mapper/FlowDeployMapper.java b/yanzhu-system/src/main/java/com/yanzhu/system/mapper/FlowDeployMapper.java index ea95b3d..39ecb48 100644 --- a/yanzhu-system/src/main/java/com/yanzhu/system/mapper/FlowDeployMapper.java +++ b/yanzhu-system/src/main/java/com/yanzhu/system/mapper/FlowDeployMapper.java @@ -23,6 +23,13 @@ public interface FlowDeployMapper { */ List selectDeployList(FlowQueryVo flowQueryVo); + /** + * 缺省流程定义列表 + * @param list 排除的缺省工作流类型 + * @return + */ + List selectDefaultDeployList(List list); + /** * 新增单位流程关系 * diff --git a/yanzhu-system/src/main/resources/mapper/flowable/FlowBusinessKeyMapper.xml b/yanzhu-system/src/main/resources/mapper/flowable/FlowBusinessKeyMapper.xml new file mode 100644 index 0000000..85be12a --- /dev/null +++ b/yanzhu-system/src/main/resources/mapper/flowable/FlowBusinessKeyMapper.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/yanzhu-system/src/main/resources/mapper/flowable/FlowDeployMapper.xml b/yanzhu-system/src/main/resources/mapper/flowable/FlowDeployMapper.xml index 2d1aa5c..55f0a1c 100644 --- a/yanzhu-system/src/main/resources/mapper/flowable/FlowDeployMapper.xml +++ b/yanzhu-system/src/main/resources/mapper/flowable/FlowDeployMapper.xml @@ -21,7 +21,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" act_re_procdef rp LEFT JOIN act_re_deployment rd ON rp.deployment_id_ = rd.id_ left join act_re_procdef_dept rpd on rp.id_ = rpd.PROCDEF_ID_ - left join sys_dept sd on sd.dept_id = rpr.DEPT_ID_ + left join sys_dept sd on sd.dept_id = rpd.DEPT_ID_ and rpd.DEPT_ID_ = #{deptId} @@ -38,6 +38,34 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + insert into act_re_procdef_dept diff --git a/yanzhu-ui/src/assets/styles/variables.scss b/yanzhu-ui/src/assets/styles/variables.scss index 34484d4..5c841aa 100644 --- a/yanzhu-ui/src/assets/styles/variables.scss +++ b/yanzhu-ui/src/assets/styles/variables.scss @@ -36,7 +36,7 @@ $base-sub-menu-background:#000c17; $base-sub-menu-hover:#001528; */ -$base-sidebar-width: 200px; +$base-sidebar-width: 225px; // the :export directive is the magic sauce for webpack // https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass diff --git a/yanzhu-ui/src/views/flowable/task/finished/index.vue b/yanzhu-ui/src/views/flowable/task/finished/index.vue index 96cb094..2d07914 100644 --- a/yanzhu-ui/src/views/flowable/task/finished/index.vue +++ b/yanzhu-ui/src/views/flowable/task/finished/index.vue @@ -1,22 +1,49 @@