From 67cf459da7dc977b6554ba1a1de16ab1a48ff768 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 21 May 2026 09:49:17 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E5=B7=A5=E5=85=B7=E7=B1=BB=E7=AE=80=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/mapper/LambdaCrudChainWrapper.java | 2 +- .../service/impl/ExportExcelServiceImpl.java | 9 ++++----- .../dromara/job/snailjob/AlipayBillTask.java | 8 ++++---- .../dromara/job/snailjob/SummaryBillTask.java | 6 +++--- .../job/snailjob/TestMapJobAnnotation.java | 7 +++---- .../job/snailjob/TestMapReduceAnnotation1.java | 13 ++++++------- .../dromara/job/snailjob/WechatBillTask.java | 8 ++++---- .../listener/WorkflowGlobalListener.java | 11 ++++++----- .../service/impl/FlwNodeExtServiceImpl.java | 2 +- .../impl/FlwTaskAssigneeServiceImpl.java | 9 +++++---- .../service/impl/FlwTaskServiceImpl.java | 17 +++++++++-------- 11 files changed, 46 insertions(+), 46 deletions(-) diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/mapper/LambdaCrudChainWrapper.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/mapper/LambdaCrudChainWrapper.java index 4e8cff3ad..10cde6708 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/mapper/LambdaCrudChainWrapper.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/mapper/LambdaCrudChainWrapper.java @@ -189,7 +189,7 @@ public class LambdaCrudChainWrapper extends AbstractLambdaWrapper setIfText(SFunction column, String value) { - return set(org.dromara.common.core.utils.StringUtils.isNotBlank(value), column, value); + return set(StringUtils.isNotBlank(value), column, value); } /** diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/ExportExcelServiceImpl.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/ExportExcelServiceImpl.java index 45739023f..97a0710ab 100644 --- a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/ExportExcelServiceImpl.java +++ b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/ExportExcelServiceImpl.java @@ -1,13 +1,13 @@ package org.dromara.demo.service.impl; import cn.hutool.core.util.RandomUtil; -import cn.hutool.core.util.StrUtil; import org.apache.fesod.sheet.write.metadata.WriteSheet; import jakarta.servlet.http.HttpServletResponse; import lombok.Data; import lombok.RequiredArgsConstructor; import org.dromara.common.core.constant.SystemConstants; import org.dromara.common.core.utils.StreamUtils; +import org.dromara.common.core.utils.StringUtils; import org.dromara.common.excel.core.DropDownOptions; import org.dromara.common.excel.utils.ExcelBuilder; import org.dromara.common.excel.utils.ExcelWriterWrapper; @@ -18,7 +18,6 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; /** * 导出下拉框Excel示例 @@ -109,12 +108,12 @@ public class ExportExcelServiceImpl implements IExportExcelService { private String buildOptions(List cityDataList, Integer id) { Map> groupByIdMap = - cityDataList.stream().collect(Collectors.groupingBy(DemoCityData::getId)); + StreamUtils.groupByKey(cityDataList, DemoCityData::getId); if (groupByIdMap.containsKey(id)) { DemoCityData demoCityData = groupByIdMap.get(id).get(0); return DropDownOptions.createOptionValue(demoCityData.getName(), demoCityData.getId()); } else { - return StrUtil.EMPTY; + return StringUtils.EMPTY; } } @@ -201,7 +200,7 @@ public class ExportExcelServiceImpl implements IExportExcelService { */ private void selectParentData(List parentList, List sonList) { Map> parentGroupByIdMap = - parentList.stream().collect(Collectors.groupingBy(DemoCityData::getId)); + StreamUtils.groupByKey(parentList, DemoCityData::getId); sonList.forEach(everySon -> { if (parentGroupByIdMap.containsKey(everySon.getPid())) { diff --git a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/AlipayBillTask.java b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/AlipayBillTask.java index ee2904add..75ddfb002 100644 --- a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/AlipayBillTask.java +++ b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/AlipayBillTask.java @@ -1,11 +1,11 @@ package org.dromara.job.snailjob; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.StrUtil; import com.aizuda.snailjob.client.job.core.annotation.JobExecutor; import com.aizuda.snailjob.client.job.core.dto.JobArgs; import com.aizuda.snailjob.common.log.SnailJobLog; import com.aizuda.snailjob.model.dto.ExecuteResult; +import org.dromara.common.core.utils.DateUtils; +import org.dromara.common.core.utils.StringUtils; import org.dromara.common.json.utils.JsonUtils; import org.dromara.job.entity.BillDTO; import org.springframework.stereotype.Component; @@ -25,8 +25,8 @@ public class AlipayBillTask { public ExecuteResult jobExecute(JobArgs jobArgs) throws InterruptedException { // 设置清算日期 String settlementDate = (String) jobArgs.getWfContext().get("settlementDate"); - if (StrUtil.equals(settlementDate, "sysdate")) { - settlementDate = DateUtil.today(); + if (StringUtils.equals(settlementDate, "sysdate")) { + settlementDate = DateUtils.getDate(); } BillDTO billDTO = new BillDTO(23456789L, "alipay", settlementDate, new BigDecimal("2345.67")); // 把billDTO对象放入上下文进行传递 diff --git a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/SummaryBillTask.java b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/SummaryBillTask.java index 544339b06..405a4d419 100644 --- a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/SummaryBillTask.java +++ b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/SummaryBillTask.java @@ -1,10 +1,10 @@ package org.dromara.job.snailjob; -import cn.hutool.core.util.StrUtil; import com.aizuda.snailjob.client.job.core.annotation.JobExecutor; import com.aizuda.snailjob.client.job.core.dto.JobArgs; import com.aizuda.snailjob.common.log.SnailJobLog; import com.aizuda.snailjob.model.dto.ExecuteResult; +import org.dromara.common.core.utils.StringUtils; import org.dromara.common.json.utils.JsonUtils; import org.dromara.job.entity.BillDTO; import org.springframework.stereotype.Component; @@ -25,14 +25,14 @@ public class SummaryBillTask { // 获得微信账单 BigDecimal wechatAmount = BigDecimal.valueOf(0); String wechat = (String) jobArgs.getWfContext("wechat"); - if (StrUtil.isNotBlank(wechat)) { + if (StringUtils.isNotBlank(wechat)) { BillDTO wechatBillDTO = JsonUtils.parseObject(wechat, BillDTO.class); wechatAmount = wechatBillDTO.billAmount(); } // 获得支付宝账单 BigDecimal alipayAmount = BigDecimal.valueOf(0); String alipay = (String) jobArgs.getWfContext("alipay"); - if (StrUtil.isNotBlank(alipay)) { + if (StringUtils.isNotBlank(alipay)) { BillDTO alipayBillDTO = JsonUtils.parseObject(alipay, BillDTO.class); alipayAmount = alipayBillDTO.billAmount(); } diff --git a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/TestMapJobAnnotation.java b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/TestMapJobAnnotation.java index 8507092f6..b00b35d0e 100644 --- a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/TestMapJobAnnotation.java +++ b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/TestMapJobAnnotation.java @@ -8,11 +8,11 @@ import com.aizuda.snailjob.client.job.core.annotation.MapExecutor; import com.aizuda.snailjob.client.job.core.dto.MapArgs; import com.aizuda.snailjob.common.log.SnailJobLog; import com.aizuda.snailjob.model.dto.ExecuteResult; +import org.dromara.common.core.utils.StreamUtils; import org.springframework.stereotype.Component; import java.util.List; import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; import java.util.stream.IntStream; /** @@ -30,9 +30,8 @@ public class TestMapJobAnnotation { public ExecuteResult doJobMapExecute(MapArgs mapArgs, MapHandler mapHandler) { // 生成1~200数值并分片 int partitionSize = 50; - List> partition = IntStream.rangeClosed(1, 200) - .boxed() - .collect(Collectors.groupingBy(i -> (i - 1) / partitionSize)) + List sourceList = IntStream.rangeClosed(1, 200).boxed().toList(); + List> partition = StreamUtils.groupByKey(sourceList, i -> (i - 1) / partitionSize) .values() .stream() .toList(); diff --git a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/TestMapReduceAnnotation1.java b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/TestMapReduceAnnotation1.java index 17aa9e461..5a5ee4e47 100644 --- a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/TestMapReduceAnnotation1.java +++ b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/TestMapReduceAnnotation1.java @@ -10,11 +10,11 @@ import com.aizuda.snailjob.client.job.core.dto.MapArgs; import com.aizuda.snailjob.client.job.core.dto.ReduceArgs; import com.aizuda.snailjob.common.log.SnailJobLog; import com.aizuda.snailjob.model.dto.ExecuteResult; +import org.dromara.common.core.utils.StreamUtils; import org.springframework.stereotype.Component; import java.util.List; import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; import java.util.stream.IntStream; /** @@ -31,12 +31,11 @@ public class TestMapReduceAnnotation1 { @MapExecutor public ExecuteResult rootMapExecute(MapArgs mapArgs, MapHandler mapHandler) { int partitionSize = 50; - List> partition = IntStream.rangeClosed(1, 200) - .boxed() - .collect(Collectors.groupingBy(i -> (i - 1) / partitionSize)) - .values() - .stream() - .toList(); + List sourceList = IntStream.rangeClosed(1, 200).boxed().toList(); + List> partition = StreamUtils.groupByKey(sourceList, i -> (i - 1) / partitionSize) + .values() + .stream() + .toList(); SnailJobLog.REMOTE.info("端口:{}完成分配任务", SpringUtil.getProperty("server.port")); return mapHandler.doMap(partition, "doCalc"); } diff --git a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/WechatBillTask.java b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/WechatBillTask.java index adeb638e0..9b13c52da 100644 --- a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/WechatBillTask.java +++ b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/WechatBillTask.java @@ -1,11 +1,11 @@ package org.dromara.job.snailjob; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.StrUtil; import com.aizuda.snailjob.client.job.core.annotation.JobExecutor; import com.aizuda.snailjob.client.job.core.dto.JobArgs; import com.aizuda.snailjob.common.log.SnailJobLog; import com.aizuda.snailjob.model.dto.ExecuteResult; +import org.dromara.common.core.utils.DateUtils; +import org.dromara.common.core.utils.StringUtils; import org.dromara.common.json.utils.JsonUtils; import org.dromara.job.entity.BillDTO; import org.springframework.stereotype.Component; @@ -26,8 +26,8 @@ public class WechatBillTask { // 从上下文中获得清算日期并设置,如果上下文中清算日期 // 是sysdate设置为当前日期;否则取管理页面设置的值 String settlementDate = (String) jobArgs.getWfContext().get("settlementDate"); - if (StrUtil.equals(settlementDate, "sysdate")) { - settlementDate = DateUtil.today(); + if (StringUtils.equals(settlementDate, "sysdate")) { + settlementDate = DateUtils.getDate(); } BillDTO billDTO = new BillDTO(123456789L, "wechat", settlementDate, new BigDecimal("1234.56")); // 把billDTO对象放入上下文进行传递 diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java index 66f93bb49..914a6c00d 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java @@ -5,7 +5,6 @@ import cn.hutool.core.convert.Convert; import cn.hutool.core.lang.TypeReference; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.enums.BusinessStatusEnum; @@ -48,6 +47,8 @@ import java.util.*; @RequiredArgsConstructor public class WorkflowGlobalListener implements GlobalListener { + private static final String NODE_KEY_SEPARATOR = ":"; + private final IFlwTaskService flwTaskService; private final IFlwInstanceService flwInstanceService; private final FlowProcessEventHandler flowProcessEventHandler; @@ -138,7 +139,7 @@ public class WorkflowGlobalListener implements GlobalListener { * @param taskStatus 任务状态 */ private void processTaskPermission(Map variable, Task flowTask, String taskStatus) { - String nodeKey = taskStatus + StrUtil.COLON + flowTask.getNodeCode(); + String nodeKey = taskStatus + NODE_KEY_SEPARATOR + flowTask.getNodeCode(); // 检查是否存在状态相关的变量 if (!variable.containsKey(nodeKey)) { @@ -157,9 +158,9 @@ public class WorkflowGlobalListener implements GlobalListener { } // 分割用户ID并设置权限列表 - String[] userIdArray = userIds.split(StringUtils.SEPARATOR); - if (userIdArray.length > 0) { - flowTask.setPermissionList(List.of(userIdArray)); + List userIdList = StringUtils.str2List(userIds, StringUtils.SEPARATOR, true, true); + if (CollUtil.isNotEmpty(userIdList)) { + flowTask.setPermissionList(userIdList); // 移除已处理的状态变量 variable.remove(nodeKey); FlowEngine.insService().removeVariables(flowTask.getInstanceId(), nodeKey); diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwNodeExtServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwNodeExtServiceImpl.java index 5f84b1b57..5a9dab190 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwNodeExtServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwNodeExtServiceImpl.java @@ -259,7 +259,7 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService } else if (VariablesEnum.class.getSimpleName().equals(code)) { // 解析自定义参数 // 将 key=value 字符串拆分为 Map - Map variables = Arrays.stream(StringUtils.split(value, StringUtils.SEPARATOR)) + Map variables = StringUtils.str2List(value, StringUtils.SEPARATOR, true, true).stream() .map(s -> StringUtils.split(s, "=")) .filter(arr -> arr.length == 2) .collect(Collectors.toMap(arr -> arr[0], arr -> arr[1])); diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskAssigneeServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskAssigneeServiceImpl.java index 58a3af63b..fb1de2903 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskAssigneeServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskAssigneeServiceImpl.java @@ -5,7 +5,6 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.lang.Pair; import cn.hutool.core.map.MapUtil; -import cn.hutool.core.util.StrUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.utils.DateUtils; @@ -45,6 +44,8 @@ import java.util.stream.Collectors; public class FlwTaskAssigneeServiceImpl implements IFlwTaskAssigneeService, HandlerSelectService { private static final String DEFAULT_GROUP_NAME = "默认分组"; + private static final String STORAGE_ID_SEPARATOR = ":"; + private final TaskAssigneeService taskAssigneeService; private final UserService userService; private final DeptService deptService; @@ -208,7 +209,7 @@ public class FlwTaskAssigneeServiceImpl implements IFlwTaskAssigneeService, Hand return List.of(); } Map> typeIdMap = new EnumMap<>(TaskAssigneeEnum.class); - for (String storageId : storageIds.split(StringUtils.SEPARATOR)) { + for (String storageId : StringUtils.str2List(storageIds, StringUtils.SEPARATOR, true, true)) { Pair parsed = this.parseStorageId(storageId); if (parsed != null) { typeIdMap.computeIfAbsent(parsed.getKey(), k -> new ArrayList<>()).add(parsed.getValue()); @@ -311,11 +312,11 @@ public class FlwTaskAssigneeServiceImpl implements IFlwTaskAssigneeService, Hand return Pair.of(TaskAssigneeEnum.SPEL, storageId); } try { - String[] parts = storageId.split(StrUtil.COLON, 2); + String[] parts = storageId.split(STORAGE_ID_SEPARATOR, 2); if (parts.length < 2) { return Pair.of(TaskAssigneeEnum.USER, parts[0]); } else { - TaskAssigneeEnum type = TaskAssigneeEnum.fromCode(parts[0] + StrUtil.COLON); + TaskAssigneeEnum type = TaskAssigneeEnum.fromCode(parts[0] + STORAGE_ID_SEPARATOR); return Pair.of(type, parts[1]); } } catch (Exception e) { diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java index 42773bcd7..fec9f3058 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java @@ -5,7 +5,6 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.lang.Dict; import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; import com.baomidou.lock.annotation.Lock4j; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; @@ -77,6 +76,8 @@ import static org.dromara.workflow.common.constant.FlowConstant.*; @Service public class FlwTaskServiceImpl implements IFlwTaskService { + private static final String NODE_KEY_SEPARATOR = ":"; + private final TaskService taskService; private final InsService insService; private final DefService defService; @@ -311,17 +312,17 @@ public class FlwTaskServiceImpl implements IFlwTaskService { if (StringUtils.isNotBlank(userIds)) { Set hashSet = new HashSet<>(); //弹窗传入的选人 - List popUserIds = Arrays.asList(entry.getValue().toString().split(StringUtils.SEPARATOR)); + List popUserIds = StringUtils.str2List(entry.getValue().toString(), StringUtils.SEPARATOR, true, true); //已有的选人 - List variableUserIds = Arrays.asList(userIds.split(StringUtils.SEPARATOR)); + List variableUserIds = StringUtils.str2List(userIds, StringUtils.SEPARATOR, true, true); hashSet.addAll(popUserIds); hashSet.addAll(variableUserIds); - map.put(TaskStatusEnum.PASS.getStatus() + StrUtil.COLON + entry.getKey(), StringUtils.joinComma(hashSet)); - map.put(TaskStatusEnum.BACK.getStatus() + StrUtil.COLON + entry.getKey(), StringUtils.joinComma(hashSet)); + map.put(TaskStatusEnum.PASS.getStatus() + NODE_KEY_SEPARATOR + entry.getKey(), StringUtils.joinComma(hashSet)); + map.put(TaskStatusEnum.BACK.getStatus() + NODE_KEY_SEPARATOR + entry.getKey(), StringUtils.joinComma(hashSet)); } } else { - map.put(TaskStatusEnum.PASS.getStatus() + StrUtil.COLON + entry.getKey(), entry.getValue()); - map.put(TaskStatusEnum.BACK.getStatus() + StrUtil.COLON + entry.getKey(), entry.getValue()); + map.put(TaskStatusEnum.PASS.getStatus() + NODE_KEY_SEPARATOR + entry.getKey(), entry.getValue()); + map.put(TaskStatusEnum.BACK.getStatus() + NODE_KEY_SEPARATOR + entry.getKey(), entry.getValue()); } } return map; @@ -838,7 +839,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { // 操作执行成功后再发送消息 if (result && CollUtil.isNotEmpty(bo.getMessageType())) { List userIdList = new ArrayList<>(); - if (StrUtil.isNotBlank(bo.getUserId())) { + if (StringUtils.isNotBlank(bo.getUserId())) { userIdList.add(Convert.toLong(bo.getUserId())); } if (CollUtil.isNotEmpty(bo.getUserIds())) {