Browse Source

[feat]

1、测试批量产生预警压力测试,并且修正。
pull/1/head
杨威 3 months ago
parent
commit
cb2631ab61
  1. 12
      dk-api/api-workflow/src/main/java/org/dromara/workflow/api/RemoteWorkflowService.java
  2. 22
      dk-api/api-workflow/src/main/java/org/dromara/workflow/api/domain/FlowDepartVo.java
  3. 3
      dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java
  4. 74
      dk-modules/business/src/main/java/org/dromara/business/controller/FixController.java
  5. 1
      dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java
  6. 23
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java
  7. 2
      dk-modules/system/src/main/java/org/dromara/system/controller/system/SysDepartBoundaryController.java
  8. 7
      dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteLabelPostServicelmpl.java
  9. 17
      dk-modules/workflow/src/main/java/org/dromara/workflow/dubbo/RemoteWorkflowServiceImpl.java
  10. 8
      dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwDepartMapper.java
  11. 2
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/FlwDepartService.java
  12. 7
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java
  13. 7
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/WorkflowService.java
  14. 13
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwDepartServiceImpl.java
  15. 14
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java
  16. 15
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java
  17. 39
      dk-modules/workflow/src/main/java/org/dromara/workflow/utils/BatchProcessorUtil.java
  18. 14
      dk-modules/workflow/src/main/resources/mapper/workflow/FlwDepartMapper.xml

12
dk-api/api-workflow/src/main/java/org/dromara/workflow/api/RemoteWorkflowService.java

@ -1,6 +1,7 @@
package org.dromara.workflow.api;
import org.dromara.system.api.domain.vo.RemoteUserVo;
import org.dromara.workflow.api.domain.FlowDepartVo;
import org.dromara.workflow.api.domain.RemoteCompleteTask;
import org.dromara.workflow.api.domain.RemoteStartProcess;
import org.dromara.workflow.api.domain.RemoteStartProcessReturn;
@ -8,6 +9,7 @@ import org.dromara.workflow.api.domain.RemoteStartProcessReturn;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
/**
* 通用 工作流服务
@ -79,6 +81,14 @@ public interface RemoteWorkflowService {
*/
RemoteStartProcessReturn startWorkFlow(RemoteStartProcess startProcess);
/**
* 批量启动流程
*
* @param startProcess 参数
* @return 结果
*/
Boolean startWorkFlowBatch(List<RemoteStartProcess> startProcess);
/**
* 办理任务
*
@ -118,4 +128,6 @@ public interface RemoteWorkflowService {
*/
List<RemoteUserVo> currentTaskAllUser(Long taskId);
FlowDepartVo getFlowDepart(Long deptId);
}

22
dk-api/api-workflow/src/main/java/org/dromara/workflow/api/domain/FlowDepartVo.java

@ -0,0 +1,22 @@
package org.dromara.workflow.api.domain;
import lombok.Data;
@Data
public class FlowDepartVo {
private Long id;
/**
* 流程类型
*/
private String flowType;
/**
* 流程编码
*/
private String flowCode;
}

3
dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java

@ -39,4 +39,7 @@ public class BusinessAlertController extends BaseController {
public TableDataInfo<BusinessAlert> pageBusinessAlert(BusinessAlertBo bo, PageQuery pageQuery,@PathVariable String alertCode) {
return businessAlertService.getInfo(bo,pageQuery,alertCode);
}
}

74
dk-modules/business/src/main/java/org/dromara/business/controller/FixController.java

@ -0,0 +1,74 @@
package org.dromara.business.controller;
import cn.hutool.core.collection.ListUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.business.domain.BusinessAlert;
import org.dromara.business.mapper.BusinessAlertMapper;
import org.dromara.business.service.IBusinessAlertService;
import org.dromara.business.utils.BatchProcessorUtil;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.web.core.BaseController;
import org.dromara.system.api.domain.vo.RemoteAiLabelPostVo;
import org.dromara.workflow.api.RemoteWorkflowService;
import org.dromara.workflow.api.domain.RemoteStartProcess;
import org.dromara.workflow.api.domain.RemoteStartProcessReturn;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@RequiredArgsConstructor
@RestController
@RequestMapping("/fix")
@Tag(name = "fix")
public class FixController extends BaseController {
@DubboReference(timeout = 30000)
RemoteWorkflowService remoteWorkflowService;
private final BusinessAlertMapper baseMapper;
@Operation(summary ="生成流程",description = "生成流程")
@GetMapping("startFlow")
public R<Void> startFlow(@RequestParam String flowCode) {
LambdaQueryWrapper<BusinessAlert> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(BusinessAlert::getHandleType,"verify");
wrapper.in(BusinessAlert::getLabelEn,"plough","towns");
List<BusinessAlert> businessAlerts = baseMapper.selectList(wrapper);
List<BusinessAlert> alertList = ListUtil.sub(businessAlerts, 0, 10);
List<RemoteStartProcess> flowList = alertList.stream()
.map(alert -> {
RemoteStartProcess remoteStartProcess = new RemoteStartProcess();
remoteStartProcess.setFlowCode(flowCode);
remoteStartProcess.setBusinessId(alert.getId());
return remoteStartProcess;
})
.collect(Collectors.toList());
// 分批处理
int startIndex = 0; // 从第 0 条开始
int batchSize = 5; // 每批处理 5 条
boolean flag = BatchProcessorUtil.processBatches(flowList, batchSize, startIndex, batch -> {
//批量新增部门区域数据
remoteWorkflowService.startWorkFlowBatch(batch);
});
return toAjax(flag);
}
}

1
dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java

@ -175,6 +175,7 @@ public class BusinessAlert extends BaseEntity {
* 指派人员名称
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "assignUserId")
@TableField(exist = false)
private String assignUserName;

23
dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java

@ -144,10 +144,6 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
public TableDataInfo<BusinessAlert> pageBusinessAlertAll(BusinessAlertBo bo, PageQuery pageQuery) {
QueryWrapper<BusinessAlert> wrapper = buildQueryWrapper(bo);
if (ObjectUtil.isEmpty(wrapper)){
return new TableDataInfo<>();
}
Page<BusinessAlert> page = this.baseMapper.pageBusinessAlert(pageQuery.build(), wrapper);
return TableDataInfo.build(page);
@ -164,10 +160,6 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
bo.setHandleType(BusinessStatusEnum.INVALID.getStatus());
QueryWrapper<BusinessAlert> wrapper = buildQueryWrapper(bo);
if (ObjectUtil.isEmpty(wrapper)){
return new TableDataInfo<>();
}
wrapper.in("t.flowStatus", BusinessStatusEnum.INVALID.getStatus());
Page<BusinessAlert> page = this.baseMapper.pageBusinessAlertCancel(pageQuery.build(), wrapper);
@ -186,10 +178,6 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
public TableDataInfo<BusinessAlert> pageBusinessAlertFinish(BusinessAlertBo bo, PageQuery pageQuery) {
QueryWrapper<BusinessAlert> wrapper = buildQueryWrapper(bo);
if (ObjectUtil.isEmpty(wrapper)){
return new TableDataInfo<>();
}
wrapper.apply(" EXISTS(select * from dk_workflow.flow_his_task ht where ht.approver ='" + LoginHelper.getUserId() + "' and ht.instance_id = t.instanceId)");
Page<BusinessAlert> page = this.baseMapper.pageAlertFinish(pageQuery.build(), wrapper);
@ -208,10 +196,6 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
public TableDataInfo<BusinessAlert> pageBusinessAlertTodo(BusinessAlertBo bo, PageQuery pageQuery) {
QueryWrapper<BusinessAlert> wrapper = buildQueryWrapper(bo);
if (ObjectUtil.isEmpty(wrapper)){
return new TableDataInfo<>();
}
wrapper.eq("t.node_type", 1);
wrapper.in("t.approver", remoteWorkflowService.getPermissions());
wrapper.in("t.flow_status", BusinessStatusEnum.WAITING.getStatus());
@ -246,11 +230,10 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
//根据当前用户职能获取识别类型
List<RemoteAiLabelPostVo> postVoList = remoteLablePostService.selectLabelByList(bo.getPostCode(), LoginHelper.getDeptId());
if (ObjectUtil.isEmpty(postVoList)) {
return null;
}
wrapper.in("t.label_en",StreamUtils.toList(postVoList, RemoteAiLabelPostVo::getLabelEn));
if (ObjectUtil.isNotEmpty(postVoList)) {
wrapper.in("t.label_en",StreamUtils.toList(postVoList, RemoteAiLabelPostVo::getLabelEn));
}
//排除状态为验证状态预警
wrapper.ne("t.handle_type", BusinessStatusEnum.VERIFY.getStatus());

2
dk-modules/system/src/main/java/org/dromara/system/controller/system/SysDepartBoundaryController.java

@ -5,6 +5,7 @@ import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.domain.SysDepartBoundary ;
import org.dromara.common.core.domain.R;
import org.dromara.common.mybatis.core.page.PageQuery;
@ -35,6 +36,7 @@ public class SysDepartBoundaryController extends BaseController {
@Operation(summary ="查询部门的地理位置",description = "查询部门的地理位置")
@GetMapping(value = "/listJson")
public R<String> listJson(SysDepartBoundary departBoundary) {
departBoundary.setDeptId(String.valueOf(LoginHelper.getDeptId()));
String listJson = departBoundaryService.listJson(departBoundary);
return R.ok("查询成功!",listJson);
}

7
dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteLabelPostServicelmpl.java

@ -34,10 +34,13 @@ public class RemoteLabelPostServicelmpl implements RemoteLabelPostService {
@Override
public List<RemoteAiLabelPostVo> selectLabelByList(String postCode, Long deptId) {
//获取岗位只能Id
SysPostVo sysPostVo = sysPostService.selectLableByList(postCode, deptId);
if(sysPostVo != null){
List<AiLabelPost> aiLablePostVos = aiLabelPostService.queryListByLabel(sysPostVo.getPostId());
List<AiLabel> aiLabelList = aiLabelService.queryListByLabel(StreamUtils.toList(aiLablePostVos,AiLabelPost::getLabelId));
//根据岗位职能Id获取标签id
List<AiLabelPost> aiLabelPostVos = aiLabelPostService.queryListByLabel(sysPostVo.getPostId());
//根据标签id获取标签
List<AiLabel> aiLabelList = aiLabelService.queryListByLabel(StreamUtils.toList(aiLabelPostVos,AiLabelPost::getLabelId));
return aiLabelList.stream()
.map(aiLabel -> {
RemoteAiLabelPostVo remoteAiLabelPostVo = new RemoteAiLabelPostVo();

17
dk-modules/workflow/src/main/java/org/dromara/workflow/dubbo/RemoteWorkflowServiceImpl.java

@ -1,9 +1,11 @@
package org.dromara.workflow.dubbo;
import cn.dev33.satoken.stp.StpUtil;
import lombok.RequiredArgsConstructor;
import org.apache.dubbo.config.annotation.DubboService;
import org.dromara.system.api.domain.vo.RemoteUserVo;
import org.dromara.workflow.api.RemoteWorkflowService;
import org.dromara.workflow.api.domain.FlowDepartVo;
import org.dromara.workflow.api.domain.RemoteCompleteTask;
import org.dromara.workflow.api.domain.RemoteStartProcess;
import org.dromara.workflow.api.domain.RemoteStartProcessReturn;
@ -13,6 +15,9 @@ import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* RemoteWorkflowServiceImpl
@ -29,6 +34,8 @@ public class RemoteWorkflowServiceImpl implements RemoteWorkflowService {
private final IFlwTaskService flwTaskService;
private static final ExecutorService executor = Executors.newFixedThreadPool(10);
@Override
public boolean deleteInstance(List<Long> businessIds) {
return workflowService.deleteInstance(businessIds);
@ -69,6 +76,11 @@ public class RemoteWorkflowServiceImpl implements RemoteWorkflowService {
return workflowService.startWorkFlow(startProcess);
}
@Override
public Boolean startWorkFlowBatch(List<RemoteStartProcess> startProcess) {
return workflowService.startWorkFlowBatch(startProcess);
}
@Override
public Map<Long, List<RemoteUserVo>> currentTaskAllUser(List<Long> taskIds) {
return flwTaskService.currentTaskAllUser(taskIds);
@ -89,6 +101,11 @@ public class RemoteWorkflowServiceImpl implements RemoteWorkflowService {
return workflowService.currentTaskAllUser(taskId);
}
@Override
public FlowDepartVo getFlowDepart(Long deptId) {
return flwTaskService.getFlowDepart(deptId);
}
@Override
public boolean completeTask(RemoteCompleteTask completeTask) {
return workflowService.completeTask(completeTask);

8
dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwDepartMapper.java

@ -1,7 +1,15 @@
package org.dromara.workflow.mapper;
import jakarta.validation.constraints.NotNull;
import org.apache.ibatis.annotations.Param;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.workflow.domain.FlowDepart;
import java.util.List;
import java.util.Map;
public interface FlwDepartMapper extends BaseMapperPlus<FlowDepart, FlowDepart> {
FlowDepart getFlowDepart(@Param("deptId") Long deptId);
Integer checkFlowDepart(@Param("deptIds") List<Long> departIds);
}

2
dk-modules/workflow/src/main/java/org/dromara/workflow/service/FlwDepartService.java

@ -6,4 +6,6 @@ public interface FlwDepartService {
FlowDepart getInfo(String flowCode);
FlowDepart bindDepart(FlowDepart flowDepart);
FlowDepart getFlowDepart(Long deptId);
}

7
dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java

@ -10,6 +10,7 @@ import org.dromara.warm.flow.core.service.impl.TaskServiceImpl;
import org.dromara.warm.flow.orm.entity.FlowHisTask;
import org.dromara.warm.flow.orm.entity.FlowNode;
import org.dromara.warm.flow.orm.entity.FlowTask;
import org.dromara.workflow.api.domain.FlowDepartVo;
import org.dromara.workflow.api.domain.RemoteStartProcessReturn;
import org.dromara.workflow.domain.bo.*;
import org.dromara.workflow.domain.vo.FlowHisTaskVo;
@ -211,4 +212,10 @@ public interface IFlwTaskService {
*/
List<Node> getByNodeCodes(String nodeCode,Long definitionId);
/**
* 根据部门获取流程
* @param deptId
* @return
*/
FlowDepartVo getFlowDepart(Long deptId);
}

7
dk-modules/workflow/src/main/java/org/dromara/workflow/service/WorkflowService.java

@ -94,4 +94,11 @@ public interface WorkflowService {
List<RemoteUserVo> currentTaskAllUser(Long taskId);
/**
* 批量启动流程
*
* @param startProcess 参数
* @return 结果
*/
Boolean startWorkFlowBatch(List<RemoteStartProcess> startProcess);
}

13
dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwDepartServiceImpl.java

@ -3,12 +3,15 @@ package org.dromara.workflow.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.workflow.domain.FlowDepart;
import org.dromara.workflow.mapper.FlwDepartMapper;
import org.dromara.workflow.service.FlwDepartService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Map;
@Service
@RequiredArgsConstructor
public class FlwDepartServiceImpl extends ServiceImpl<FlwDepartMapper, FlowDepart> implements FlwDepartService {
@ -29,8 +32,18 @@ public class FlwDepartServiceImpl extends ServiceImpl<FlwDepartMapper, FlowDepar
updateWrapper.eq(FlowDepart::getFlowCode, flowDepart.getFlowCode());
this.baseMapper.delete(updateWrapper);
//查询部门是否还存在别的流程
if (this.baseMapper.checkFlowDepart(flowDepart.getDepartIds()) > 0){
throw new ServiceException("所选的部门中,已存在在其他流程中,请检查后在提交!");
}
this.baseMapper.insert(flowDepart);
return flowDepart;
}
@Override
public FlowDepart getFlowDepart(Long deptId) {
return this.baseMapper.getFlowDepart(deptId);
}
}

14
dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java

@ -40,11 +40,13 @@ import org.dromara.warm.flow.orm.entity.*;
import org.dromara.warm.flow.orm.mapper.FlowHisTaskMapper;
import org.dromara.warm.flow.orm.mapper.FlowInstanceMapper;
import org.dromara.warm.flow.orm.mapper.FlowTaskMapper;
import org.dromara.workflow.api.domain.FlowDepartVo;
import org.dromara.workflow.api.domain.RemoteStartProcessReturn;
import org.dromara.workflow.common.ConditionalOnEnable;
import org.dromara.workflow.common.enums.MessageTypeEnum;
import org.dromara.workflow.common.enums.TaskAssigneeType;
import org.dromara.workflow.common.enums.TaskStatusEnum;
import org.dromara.workflow.domain.FlowDepart;
import org.dromara.workflow.domain.bo.*;
import org.dromara.workflow.domain.vo.FlowHisTaskVo;
import org.dromara.workflow.domain.vo.FlowTaskVo;
@ -52,8 +54,10 @@ import org.dromara.workflow.handler.FlowProcessEventHandler;
import org.dromara.workflow.handler.WorkflowPermissionHandler;
import org.dromara.workflow.mapper.FlwCategoryMapper;
import org.dromara.workflow.mapper.FlwTaskMapper;
import org.dromara.workflow.service.FlwDepartService;
import org.dromara.workflow.service.IFlwTaskService;
import org.dromara.workflow.utils.WorkflowUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
@ -90,7 +94,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
private final FlowProcessEventHandler flowProcessEventHandler;
private final FlwTaskMapper flwTaskMapper;
private final FlwCategoryMapper flwCategoryMapper;
private final FlwDepartService flwDepartService;
@DubboReference
private RemoteUserService remoteUserService;
@ -324,6 +328,14 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
return nodeService.getByNodeCodes(Collections.singletonList(nodeCode), definitionId);
}
@Override
public FlowDepartVo getFlowDepart(Long deptId) {
FlowDepart flowDepart = flwDepartService.getFlowDepart(deptId);
FlowDepartVo flowDepartVo = new FlowDepartVo();
BeanUtils.copyProperties(flowDepart, flowDepartVo);
return flowDepartVo;
}
/**
* 查询当前用户的已办任务
*

15
dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java

@ -3,6 +3,7 @@ package org.dromara.workflow.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.system.api.domain.vo.RemoteUserVo;
import org.dromara.warm.flow.core.entity.Node;
@ -18,6 +19,7 @@ import org.dromara.workflow.service.IFlwDefinitionService;
import org.dromara.workflow.service.IFlwInstanceService;
import org.dromara.workflow.service.IFlwTaskService;
import org.dromara.workflow.service.WorkflowService;
import org.dromara.workflow.utils.BatchProcessorUtil;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
@ -34,6 +36,7 @@ import java.util.stream.Collectors;
@ConditionalOnEnable
@RequiredArgsConstructor
@Service
@Slf4j
public class WorkflowServiceImpl implements WorkflowService {
private final IFlwInstanceService flwInstanceService;
@ -152,4 +155,16 @@ public class WorkflowServiceImpl implements WorkflowService {
public List<RemoteUserVo> currentTaskAllUser(Long taskId) {
return flwTaskService.currentTaskAllUser(taskId);
}
@Override
public Boolean startWorkFlowBatch(List<RemoteStartProcess> startProcess) {
try {
startProcess.forEach(startProcessBo -> {
flwTaskService.startWorkFlow(BeanUtil.toBean(startProcessBo, StartProcessBo.class));
});
} catch (Exception e) {
return false;
}
return true;
}
}

39
dk-modules/workflow/src/main/java/org/dromara/workflow/utils/BatchProcessorUtil.java

@ -0,0 +1,39 @@
package org.dromara.workflow.utils;
import java.util.List;
import java.util.function.Consumer;
/**
* 分批处理工具类
*/
public class BatchProcessorUtil {
/**
* 分批处理数据
*
* @param dataList 数据集合
* @param batchSize 每批处理的数据量
* @param startIndex 起始位置
* @param batchHandler 每批数据的处理逻辑
* @return 下一次的起始位置
*/
public static <T> boolean processBatches(List<T> dataList, int batchSize, int startIndex, Consumer<List<T>> batchHandler) {
if (dataList == null || dataList.isEmpty()) {
return true; // 数据为空,直接返回当前起始位置
}
int totalSize = dataList.size();
while (startIndex < totalSize) {
int endIndex = Math.min(startIndex + batchSize, totalSize);
List<T> batch = dataList.subList(startIndex, endIndex);
// 处理当前批次的数据
batchHandler.accept(batch);
// 更新起始位置
startIndex = endIndex;
}
return startIndex >= totalSize; // 返回下一次的起始位置
}
}

14
dk-modules/workflow/src/main/resources/mapper/workflow/FlwDepartMapper.xml

@ -4,5 +4,19 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.workflow.mapper.FlwDepartMapper">
<select id="getFlowDepart" resultType="org.dromara.workflow.domain.FlowDepart">
select fd.* from flow_depart fd where JSON_CONTAINS(fd.dept_ids, #{deptId})
</select>
<select id="checkFlowDepart" resultType="java.lang.Integer">
SELECT
count(1)
FROM flow_depart fd
where
<foreach collection="deptIds" item="item" open="(" separator=" OR " close=")">
JSON_CONTAINS(fd.dept_ids, CONCAT('"', #{item}, '"'))
</foreach>
</select>
</mapper>

Loading…
Cancel
Save