diff --git a/pom.xml b/pom.xml index 81fc51c4d..5d5fe84ca 100644 --- a/pom.xml +++ b/pom.xml @@ -48,7 +48,7 @@ 8.7.2-20250603 - 1.7.5-m2 + 1.7.4 3.4.2 diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCategoryServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCategoryServiceImpl.java index 6870a80c9..db1b7b7f0 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCategoryServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCategoryServiceImpl.java @@ -13,7 +13,6 @@ import org.dromara.common.mybatis.helper.DataBaseHelper; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.warm.flow.core.service.DefService; import org.dromara.warm.flow.orm.entity.FlowDefinition; -import org.dromara.warm.flow.ui.service.CategoryService; import org.dromara.workflow.common.ConditionalOnEnable; import org.dromara.workflow.common.constant.FlowConstant; import org.dromara.workflow.domain.FlowCategory; @@ -36,7 +35,7 @@ import java.util.List; @ConditionalOnEnable @RequiredArgsConstructor @Service -public class FlwCategoryServiceImpl implements IFlwCategoryService, CategoryService { +public class FlwCategoryServiceImpl implements IFlwCategoryService { private final DefService defService; private final FlwCategoryMapper baseMapper; @@ -103,37 +102,22 @@ public class FlwCategoryServiceImpl implements IFlwCategoryService, CategoryServ } // 获取当前列表中每一个节点的parentId,然后在列表中查找是否有id与其parentId对应,若无对应,则表明此时节点列表中,该节点在当前列表中属于顶级节点 List> treeList = CollUtil.newArrayList(); - for (FlowCategoryVo current : categorys) { - String parentId = current.getParentId().toString(); + for (FlowCategoryVo d : categorys) { + String parentId = d.getParentId().toString(); FlowCategoryVo categoryVo = StreamUtils.findFirst(categorys, it -> it.getCategoryId().toString().equals(parentId)); if (ObjectUtil.isNull(categoryVo)) { - List> trees = TreeBuildUtils.build(categorys, parentId, (node, tree) -> - tree.setId(node.getCategoryId().toString()) - .setParentId(node.getParentId().toString()) - .setName(node.getCategoryName()) - .setWeight(node.getOrderNum())); - Tree tree = StreamUtils.findFirst(trees, it -> it.getId().equals(current.getCategoryId().toString())); + List> trees = TreeBuildUtils.build(categorys, parentId, (dept, tree) -> + tree.setId(dept.getCategoryId().toString()) + .setParentId(dept.getParentId().toString()) + .setName(dept.getCategoryName()) + .setWeight(dept.getOrderNum())); + Tree tree = StreamUtils.findFirst(trees, it -> it.getId().equals(d.getCategoryId().toString())); treeList.add(tree); } } return treeList; } - /** - * 工作流查询分类 - * - * @return 分类树结构列表 - */ - @Override - public List queryCategory() { - List list = this.queryList(new FlowCategoryBo()); - return StreamUtils.toList(list, category -> new org.dromara.warm.flow.core.dto.Tree() - .setId(String.valueOf(category.getCategoryId())) - .setName(category.getCategoryName()) - .setParentId(String.valueOf(category.getParentId())) - ); - } - /** * 校验流程分类是否有数据权限 * diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwChartExtServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwChartExtServiceImpl.java index 0f5a2c764..d7c6f77eb 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwChartExtServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwChartExtServiceImpl.java @@ -12,6 +12,7 @@ import org.dromara.common.core.service.DeptService; import org.dromara.common.core.service.DictService; import org.dromara.common.core.service.UserService; import org.dromara.common.core.utils.DateUtils; +import org.dromara.common.core.utils.ServletUtils; import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.warm.flow.core.dto.DefJson; @@ -52,8 +53,12 @@ public class FlwChartExtServiceImpl implements ChartExtService { */ @Override public void execute(DefJson defJson) { + // 临时修复 后续版本将通过defjson获取流程实例ID + String[] parts = ServletUtils.getRequest().getRequestURI().split("/"); + Long instanceId = Convert.toLong(parts[parts.length - 1]); + // 根据流程实例ID查询所有相关的历史任务列表 - List flowHisTasks = this.getHisTaskGroupedByNode(defJson.getInstance().getId()); + List flowHisTasks = this.getHisTaskGroupedByNode(instanceId); if (CollUtil.isEmpty(flowHisTasks)) { return; } @@ -69,12 +74,14 @@ public class FlwChartExtServiceImpl implements ChartExtService { Map dictType = dictService.getAllDictByDictType(FlowConstant.WF_TASK_STATUS); + // 遍历流程定义中的每个节点,调用处理方法,将对应节点的任务列表及用户信息传入,生成扩展提示内容 for (NodeJson nodeJson : defJson.getNodeList()) { + // 获取当前节点对应的历史任务列表,如果没有则返回空列表避免空指针 List taskList = groupedByNode.get(nodeJson.getNodeCode()); if (CollUtil.isEmpty(taskList)) { continue; } - // 处理当前节点的扩展信息 + // 处理当前节点的扩展信息,包括构建审批人提示内容等 this.processNodeExtInfo(nodeJson, taskList, userMap, dictType); } } @@ -89,44 +96,44 @@ public class FlwChartExtServiceImpl implements ChartExtService { defJson.setTopText("流程名称: " + defJson.getFlowName()); defJson.getNodeList().forEach(nodeJson -> { nodeJson.setPromptContent( - new PromptContent() - // 提示信息主体内容样式 - .setInfo( - CollUtil.newArrayList( - new PromptContent.InfoItem() - .setPrefix("任务名称: ") - .setContent(nodeJson.getNodeName()) - .setContentStyle(Map.of( - "border", "1px solid #d1e9ff", - "backgroundColor", "#e8f4ff", - "padding", "4px 8px", - "borderRadius", "4px" - )) - .setRowStyle(Map.of( - "fontWeight", "bold", - "margin", "0 0 6px 0", - "padding", "0 0 8px 0", - "borderBottom", "1px solid #ccc" - )) - )) - // 弹窗容器样式(包含滚动条设置) - .setDialogStyle(MapUtil.mergeAll( - "position", "absolute", - "backgroundColor", "#fff", - "border", "1px solid #ccc", - "borderRadius", "4px", - "boxShadow", "0 2px 8px rgba(0, 0, 0, 0.15)", - "padding", "8px 12px", - "fontSize", "14px", - "zIndex", "1000", - "maxWidth", "500px", - "maxHeight", "300px", // 设置最大高度,超过触发滚动 - "overflowY", "auto", // 允许垂直滚动 - "overflowX", "hidden", // 禁止横向滚动 - "color", "#333", - "pointerEvents", "auto", - "scrollbarWidth", "thin" // 滚动条宽度细化(部分浏览器支持) - )) + new PromptContent() + // 提示信息 + .setInfo( + CollUtil.newArrayList( + new PromptContent.InfoItem() + .setPrefix("任务名称: ") + .setContent(nodeJson.getNodeName()) + .setContentStyle(Map.of( + "border", "1px solid #d1e9ff", + "backgroundColor", "#e8f4ff", + "padding", "4px 8px", + "borderRadius", "4px" + )) + .setRowStyle(Map.of( + "fontWeight", "bold", + "margin", "0 0 6px 0", + "padding", "0 0 8px 0", + "borderBottom", "1px solid #ccc" + )) + ) + ) + // 弹窗样式 + .setDialogStyle(MapUtil.mergeAll( + "position", "absolute", + "backgroundColor", "#fff", + "border", "1px solid #ccc", + "borderRadius", "4px", + "boxShadow", "0 2px 8px rgba(0, 0, 0, 0.15)", + "padding", "8px 12px", + "fontSize", "14px", + "zIndex", "1000", + "maxWidth", "500px", + "overflowY", "visible", + "overflowX", "hidden", + "color", "#333", + "pointerEvents", "auto", + "scrollbarWidth", "thin" + )) ); }); } diff --git a/script/sql/ry_workflow.sql b/script/sql/ry_workflow.sql index 8c2e12cd1..bb3d76e68 100644 --- a/script/sql/ry_workflow.sql +++ b/script/sql/ry_workflow.sql @@ -6,7 +6,6 @@ CREATE TABLE `flow_definition` `id` bigint NOT NULL COMMENT '主键id', `flow_code` varchar(40) NOT NULL COMMENT '流程编码', `flow_name` varchar(100) NOT NULL COMMENT '流程名称', - `mode` varchar(40) NOT NULL DEFAULT 'CLASSICS' COMMENT '设计器模式(CLASSICS经典模式 MIMIC仿钉钉模式)', `category` varchar(100) DEFAULT NULL COMMENT '流程类别', `version` varchar(20) NOT NULL COMMENT '流程版本', `is_publish` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否发布(0未发布 1已发布 9失效)', diff --git a/script/sql/update/update_5.3.1-5.4.0.sql b/script/sql/update/update_5.3.1-5.4.0.sql index b0e02af69..058f6fcba 100644 --- a/script/sql/update/update_5.3.1-5.4.0.sql +++ b/script/sql/update/update_5.3.1-5.4.0.sql @@ -7,9 +7,6 @@ ALTER TABLE `flow_instance` ALTER TABLE `flow_his_task` MODIFY COLUMN `flow_status` varchar(20) NOT NULL COMMENT '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)' AFTER `skip_type`; -ALTER TABLE `flow_definition` - ADD COLUMN `mode` varchar(40) NOT NULL DEFAULT 'CLASSICS' COMMENT '设计器模式(CLASSICS经典模式 MIMIC仿钉钉模式)' AFTER `flow_name`; - ALTER TABLE `sys_social` MODIFY COLUMN `access_token` varchar(2000) NOT NULL COMMENT '用户的授权令牌' AFTER `avatar`; ALTER TABLE `sys_social`