mirror of
				https://github.com/dromara/RuoYi-Vue-Plus.git
				synced 2025-11-04 16:23:42 +08:00 
			
		
		
		
	update SpEL表达式回显名称
This commit is contained in:
		@@ -40,7 +40,7 @@ public enum TaskAssigneeEnum {
 | 
			
		||||
    /**
 | 
			
		||||
     * SPEL表达式
 | 
			
		||||
     */
 | 
			
		||||
    SPEL("SPEL表达式", "");
 | 
			
		||||
    SPEL("SpEL表达式", "");
 | 
			
		||||
 | 
			
		||||
    private final String desc;
 | 
			
		||||
    private final String code;
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user