From 5cb24c582df49f3e154913c863a830ce4e41b64e Mon Sep 17 00:00:00 2001 From: geht <2947093423@qq.com> Date: Wed, 10 Jun 2026 16:57:07 +0800 Subject: [PATCH] =?UTF-8?q?MES=E5=AE=A1=E6=89=B9=E5=A4=8D=E7=94=A8?= =?UTF-8?q?=E9=92=89=E9=92=89=E5=AE=A1=E6=89=B9=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jeecg-module-xslmes/doc/代码修改日志 | 5 ++ .../MesXslApprovalLaunchController.java | 77 ++++++++++++++++++- .../src/components/ApprovalLaunch/index.vue | 53 ++++++++----- .../src/views/approval/flow/launch.api.ts | 4 +- 4 files changed, 115 insertions(+), 24 deletions(-) diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/doc/代码修改日志 b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/doc/代码修改日志 index ce96a24..2b2ee4b 100644 --- a/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/doc/代码修改日志 +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/doc/代码修改日志 @@ -944,6 +944,11 @@ jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslMixingSpecServiceImpl.java jeecgboot-vue3/src/views/xslmes/mesXslMixingSpec/components/MesXslMixingSpecModal.vue +-- author:GHT---date:20260610--for: 【IM审批通用化】MES发起审批按钮按ding_tpl_bind路由匹配(与钉钉按钮一致) ----- +jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/approval/controller/MesXslApprovalLaunchController.java +jeecgboot-vue3/src/components/ApprovalLaunch/index.vue +jeecgboot-vue3/src/views/approval/flow/launch.api.ts + -- author:GHT---date:20260610--for: 【IM审批通用化】IM工作通知公众号(同事列表置顶+审批消息统一推送) ----- jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_147__sys_im_work_notify_user.sql jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/im/service/impl/SysImChatServiceImpl.java diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/approval/controller/MesXslApprovalLaunchController.java b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/approval/controller/MesXslApprovalLaunchController.java index 0f63b01..61d1506 100644 --- a/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/approval/controller/MesXslApprovalLaunchController.java +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/approval/controller/MesXslApprovalLaunchController.java @@ -16,11 +16,13 @@ import org.jeecg.modules.xslmes.approval.service.IMesXslApprovalHandleService; import org.jeecg.modules.xslmes.approval.service.IMesXslApprovalInstanceService; import org.jeecg.modules.xslmes.approval.vo.ApprovalGateVo; import org.jeecg.modules.xslmes.common.MesXslTenantUtils; +import org.jeecg.modules.xslmes.dingtalk.service.IMesXslDingTplBindService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.List; import java.util.Map; @@ -61,19 +63,37 @@ public class MesXslApprovalLaunchController { @Autowired private JdbcTemplate jdbcTemplate; + //update-begin---author:GHT ---date:20260610 for:【IM审批通用化】MES发起按钮与钉钉绑定同路由匹配----------- + @Autowired + private IMesXslDingTplBindService dingTplBindService; + //update-end---author:GHT ---date:20260610 for:【IM审批通用化】MES发起按钮与钉钉绑定同路由匹配----------- + /** * 已发布审批流列表(按租户隔离),即"可发起的单据类型"。 - * 同时按"功能模块(单据表)"自动反查其菜单路由填入 routePath,供前端控制悬浮按钮仅在该功能页显示,无需手工配置。 + * routePath 有值时:与钉钉审批按钮一致,先按 mes_xsl_ding_tpl_bind 解析当前页绑定,再返回该页业务表下已发布审批流。 */ @Operation(summary = "发起审批-已发布审批流列表") @GetMapping("/publishedList") - public Result> publishedList() { + public Result> publishedList( + @RequestParam(name = "routePath", required = false) String routePath) { QueryWrapper qw = new QueryWrapper<>(); qw.eq("status", "1"); Integer tenantId = MesXslTenantUtils.resolveTenantId(null); if (tenantId != null) { qw.eq("tenant_id", tenantId); } + //update-begin---author:GHT ---date:20260610 for:【IM审批通用化】MES发起按钮与钉钉绑定同路由匹配----------- + if (oConvertUtils.isNotEmpty(routePath)) { + if (dingTplBindService.resolveActiveByRoutePath(routePath.trim()) == null) { + return Result.OK(Collections.emptyList()); + } + String bizTable = resolveTableByRoutePath(routePath); + if (oConvertUtils.isEmpty(bizTable) || !IDENTIFIER.matcher(bizTable).matches()) { + return Result.OK(Collections.emptyList()); + } + qw.eq("biz_table", bizTable); + } + //update-end---author:GHT ---date:20260610 for:【IM审批通用化】MES发起按钮与钉钉绑定同路由匹配----------- qw.orderByDesc("create_time"); List list = approvalFlowService.list(qw); // 未手工指定 route_path 时,按单据表名自动反查菜单路由 @@ -90,6 +110,59 @@ public class MesXslApprovalLaunchController { * 约定:jeecg 代码生成的列表组件名为 表名驼峰 + List(如 mes_xsl_formula_spec -> MesXslFormulaSpecList), * 对应 sys_permission.component 形如 xslmes/mesXslFormulaSpec/MesXslFormulaSpecList,取其 url 即路由。 */ + //update-begin---author:GHT ---date:20260610 for:【IM审批通用化】按前端路由反查业务表(与钉钉绑定路由解析一致)----------- + private String resolveTableByRoutePath(String routePath) { + if (oConvertUtils.isEmpty(routePath)) { + return null; + } + String component = resolveComponentByRoutePath(routePath); + if (oConvertUtils.isEmpty(component)) { + return null; + } + String comp = component.contains("/") ? component.substring(component.lastIndexOf('/') + 1) : component; + if (comp.endsWith("List")) { + comp = comp.substring(0, comp.length() - "List".length()); + } + return camelToUnderline(comp); + } + + private String resolveComponentByRoutePath(String routePath) { + if (oConvertUtils.isEmpty(routePath)) { + return null; + } + String path = routePath.trim().replaceAll("/+$", ""); + String sql = "SELECT component FROM sys_permission WHERE menu_type IN (0,1) " + + "AND (del_flag = 0 OR del_flag IS NULL) AND url = ? " + + "ORDER BY menu_type DESC LIMIT 1"; + try { + List list = jdbcTemplate.queryForList(sql, String.class, path); + return list.isEmpty() ? null : list.get(0); + } catch (Exception e) { + log.warn("反查菜单组件失败 routePath={}", routePath, e); + return null; + } + } + + private String camelToUnderline(String camel) { + if (oConvertUtils.isEmpty(camel)) { + return null; + } + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < camel.length(); i++) { + char c = camel.charAt(i); + if (Character.isUpperCase(c)) { + if (i > 0) { + sb.append('_'); + } + sb.append(Character.toLowerCase(c)); + } else { + sb.append(c); + } + } + return sb.toString(); + } + //update-end---author:GHT ---date:20260610 for:【IM审批通用化】按前端路由反查业务表(与钉钉绑定路由解析一致)----------- + private String resolveRoutePathByTable(String table) { if (oConvertUtils.isEmpty(table) || !IDENTIFIER.matcher(table).matches()) { return null; diff --git a/jeecgboot-vue3/src/components/ApprovalLaunch/index.vue b/jeecgboot-vue3/src/components/ApprovalLaunch/index.vue index a2c8e6d..08813d8 100644 --- a/jeecgboot-vue3/src/components/ApprovalLaunch/index.vue +++ b/jeecgboot-vue3/src/components/ApprovalLaunch/index.vue @@ -1,6 +1,7 @@