update SpEL表达式回显名称

This commit is contained in:
AprilWind 2025-07-06 19:21:23 +08:00
parent 6c2518640b
commit 446a14b928
4 changed files with 74 additions and 27 deletions

View File

@ -40,7 +40,7 @@ public enum TaskAssigneeEnum {
/**
* SPEL表达式
*/
SPEL("SPEL表达式", "");
SPEL("SpEL表达式", "");
private final String desc;
private final String code;

View File

@ -2,13 +2,14 @@ package org.dromara.workflow.service;
import org.dromara.common.core.domain.dto.TaskAssigneeDTO;
import org.dromara.common.core.domain.model.TaskAssigneeBody;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.workflow.domain.bo.FlowSpelBo;
import org.dromara.workflow.domain.vo.FlowSpelVo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* 流程spel达式定义Service接口
@ -18,8 +19,6 @@ import java.util.List;
*/
public interface IFlwSpelService {
TaskAssigneeDTO selectSpelByTaskAssigneeList(TaskAssigneeBody taskQuery);
/**
* 查询流程spel达式定义
*
@ -69,4 +68,21 @@ public interface IFlwSpelService {
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 查询spel并返回任务指派的列表支持分页
*
* @param taskQuery 查询条件
* @return 办理人
*/
TaskAssigneeDTO selectSpelByTaskAssigneeList(TaskAssigneeBody taskQuery);
/**
* 根据视图 SpEL 表达式列表查询对应的备注信息
*
* @param viewSpels SpEL 表达式列表
* @return 映射表key SpEL 表达式value 为对应备注若为空则返回空 Map
*/
Map<String, String> selectRemarksBySpels(List<String> viewSpels);
}

View File

@ -1,9 +1,11 @@
package org.dromara.workflow.service.impl;
import cn.hutool.core.collection.CollUtil;
import org.dromara.common.core.constant.SystemConstants;
import org.dromara.common.core.domain.dto.TaskAssigneeDTO;
import org.dromara.common.core.domain.model.TaskAssigneeBody;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
@ -20,6 +22,7 @@ import org.dromara.workflow.mapper.FlwSpelMapper;
import org.dromara.workflow.service.IFlwSpelService;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
import java.util.Collection;
import java.util.Map;
@ -38,26 +41,6 @@ public class FlwSpelServiceImpl implements IFlwSpelService {
private final FlwSpelMapper baseMapper;
/**
* 查询流程spel达式定义列表
*/
@Override
public TaskAssigneeDTO selectSpelByTaskAssigneeList(TaskAssigneeBody taskQuery) {
PageQuery pageQuery = new PageQuery(taskQuery.getPageSize(), taskQuery.getPageNum());
FlowSpelBo bo = new FlowSpelBo();
bo.setViewSpel(taskQuery.getHandlerCode());
bo.setRemark(taskQuery.getHandlerName());
bo.setStatus(SystemConstants.NORMAL);
Map<String, Object> params = bo.getParams();
params.put("beginTime", taskQuery.getBeginTime());
params.put("endTime", taskQuery.getEndTime());
TableDataInfo<FlowSpelVo> page = this.queryPageList(bo, pageQuery);
// 使用封装的字段映射方法进行转换
List<TaskAssigneeDTO.TaskHandler> handlers = TaskAssigneeDTO.convertToHandlerList(page.getRows(),
FlowSpelVo::getViewSpel, c -> "", FlowSpelVo::getRemark, null, FlowSpelVo::getCreateTime);
return new TaskAssigneeDTO(page.getTotal(), handlers);
}
/**
* 查询流程spel达式定义
*
@ -159,4 +142,46 @@ public class FlwSpelServiceImpl implements IFlwSpelService {
}
return baseMapper.deleteByIds(ids) > 0;
}
/**
* 查询spel并返回任务指派的列表支持分页
*
* @param taskQuery 查询条件
* @return 办理人
*/
@Override
public TaskAssigneeDTO selectSpelByTaskAssigneeList(TaskAssigneeBody taskQuery) {
PageQuery pageQuery = new PageQuery(taskQuery.getPageSize(), taskQuery.getPageNum());
FlowSpelBo bo = new FlowSpelBo();
bo.setViewSpel(taskQuery.getHandlerCode());
bo.setRemark(taskQuery.getHandlerName());
bo.setStatus(SystemConstants.NORMAL);
Map<String, Object> params = bo.getParams();
params.put("beginTime", taskQuery.getBeginTime());
params.put("endTime", taskQuery.getEndTime());
TableDataInfo<FlowSpelVo> page = this.queryPageList(bo, pageQuery);
// 使用封装的字段映射方法进行转换
List<TaskAssigneeDTO.TaskHandler> handlers = TaskAssigneeDTO.convertToHandlerList(page.getRows(),
FlowSpelVo::getViewSpel, c -> "", FlowSpelVo::getRemark, null, FlowSpelVo::getCreateTime);
return new TaskAssigneeDTO(page.getTotal(), handlers);
}
/**
* 根据视图 SpEL 表达式列表查询对应的备注信息
*
* @param viewSpels SpEL 表达式列表
* @return 映射表key SpEL 表达式value 为对应备注若为空则返回空 Map
*/
@Override
public Map<String, String> selectRemarksBySpels(List<String> viewSpels) {
if (CollUtil.isEmpty(viewSpels)) {
return Collections.emptyMap();
}
List<FlowSpel> list = baseMapper.selectList(
new LambdaQueryWrapper<FlowSpel>()
.select(FlowSpel::getViewSpel, FlowSpel::getRemark)
);
return StreamUtils.toMap(list, FlowSpel::getViewSpel, FlowSpel::getRemark);
}
}

View File

@ -92,24 +92,28 @@ public class FlwTaskAssigneeServiceImpl implements IFlwTaskAssigneeService, Hand
// 解析并归类 ID同时记录原始顺序和对应解析结果
Map<TaskAssigneeEnum, List<Long>> typeIdMap = new EnumMap<>(TaskAssigneeEnum.class);
Map<String, Pair<TaskAssigneeEnum, Long>> parsedMap = new LinkedHashMap<>();
List<String> spelList = new ArrayList<>();
for (String storageId : storageIds) {
Pair<TaskAssigneeEnum, Long> parsed = this.parseStorageId(storageId);
parsedMap.put(storageId, parsed);
if (parsed != null) {
typeIdMap.computeIfAbsent(parsed.getKey(), k -> new ArrayList<>()).add(parsed.getValue());
} else if (StringUtils.startsWith(storageId, "#")) {
// #前缀表示SpEL办理人变量策略
spelList.add(storageId);
}
}
// 查询所有类型对应的 ID 名称映射
Map<TaskAssigneeEnum, Map<Long, String>> nameMap = new EnumMap<>(TaskAssigneeEnum.class);
typeIdMap.forEach((type, ids) -> nameMap.put(type, this.getNamesByType(type, ids)));
Map<String, String> spelMap = spelService.selectRemarksBySpels(spelList);
// 组装返回结果保持原始顺序
return parsedMap.entrySet().stream()
.map(entry -> {
String storageId = entry.getKey();
Pair<TaskAssigneeEnum, Long> parsed = entry.getValue();
String handlerName = (parsed == null) ? null
String handlerName = (parsed == null) ? spelMap.get(storageId)
: nameMap.getOrDefault(parsed.getKey(), Collections.emptyMap())
.get(parsed.getValue());
return new HandlerFeedBackVo(storageId, handlerName);
@ -239,6 +243,8 @@ public class FlwTaskAssigneeServiceImpl implements IFlwTaskAssigneeService, Hand
}
// 跳过以 $ # 开头的字符串
if (StringUtils.startsWith(storageId, "$") || StringUtils.startsWith(storageId, "#")) {
// $前缀表示默认办理人变量策略
// #前缀表示spel办理人变量策略
log.debug("跳过 storageId 解析,检测到内置变量表达式:{}", storageId);
return null;
}