diff --git a/dk-api/api-workflow/src/main/java/org/dromara/workflow/api/RemoteWorkflowService.java b/dk-api/api-workflow/src/main/java/org/dromara/workflow/api/RemoteWorkflowService.java index 955611b..f83753a 100644 --- a/dk-api/api-workflow/src/main/java/org/dromara/workflow/api/RemoteWorkflowService.java +++ b/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 startProcess); + /** * 办理任务 * @@ -118,4 +128,6 @@ public interface RemoteWorkflowService { */ List currentTaskAllUser(Long taskId); + FlowDepartVo getFlowDepart(Long deptId); + } diff --git a/dk-api/api-workflow/src/main/java/org/dromara/workflow/api/domain/FlowDepartVo.java b/dk-api/api-workflow/src/main/java/org/dromara/workflow/api/domain/FlowDepartVo.java new file mode 100644 index 0000000..84dc82b --- /dev/null +++ b/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; + + +} diff --git a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java index 75ea4cb..b9860f2 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java +++ b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java @@ -39,4 +39,7 @@ public class BusinessAlertController extends BaseController { public TableDataInfo pageBusinessAlert(BusinessAlertBo bo, PageQuery pageQuery,@PathVariable String alertCode) { return businessAlertService.getInfo(bo,pageQuery,alertCode); } + + + } diff --git a/dk-modules/business/src/main/java/org/dromara/business/controller/FixController.java b/dk-modules/business/src/main/java/org/dromara/business/controller/FixController.java new file mode 100644 index 0000000..f84c3ef --- /dev/null +++ b/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 startFlow(@RequestParam String flowCode) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(BusinessAlert::getHandleType,"verify"); + wrapper.in(BusinessAlert::getLabelEn,"plough","towns"); + List businessAlerts = baseMapper.selectList(wrapper); + + List alertList = ListUtil.sub(businessAlerts, 0, 10); + + List 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); + } + +} diff --git a/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java b/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java index 11e5ace..33a382f 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java +++ b/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; diff --git a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java index fae5fbe..b22effd 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java +++ b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java @@ -144,10 +144,6 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { public TableDataInfo pageBusinessAlertAll(BusinessAlertBo bo, PageQuery pageQuery) { QueryWrapper wrapper = buildQueryWrapper(bo); - if (ObjectUtil.isEmpty(wrapper)){ - return new TableDataInfo<>(); - } - Page 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 wrapper = buildQueryWrapper(bo); - if (ObjectUtil.isEmpty(wrapper)){ - return new TableDataInfo<>(); - } - wrapper.in("t.flowStatus", BusinessStatusEnum.INVALID.getStatus()); Page page = this.baseMapper.pageBusinessAlertCancel(pageQuery.build(), wrapper); @@ -186,10 +178,6 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { public TableDataInfo pageBusinessAlertFinish(BusinessAlertBo bo, PageQuery pageQuery) { QueryWrapper 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 page = this.baseMapper.pageAlertFinish(pageQuery.build(), wrapper); @@ -208,10 +196,6 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { public TableDataInfo pageBusinessAlertTodo(BusinessAlertBo bo, PageQuery pageQuery) { QueryWrapper 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 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()); diff --git a/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysDepartBoundaryController.java b/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysDepartBoundaryController.java index 53ba22a..1e0d558 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysDepartBoundaryController.java +++ b/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 listJson(SysDepartBoundary departBoundary) { + departBoundary.setDeptId(String.valueOf(LoginHelper.getDeptId())); String listJson = departBoundaryService.listJson(departBoundary); return R.ok("查询成功!",listJson); } diff --git a/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteLabelPostServicelmpl.java b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteLabelPostServicelmpl.java index 783530c..ee494ad 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteLabelPostServicelmpl.java +++ b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteLabelPostServicelmpl.java @@ -34,10 +34,13 @@ public class RemoteLabelPostServicelmpl implements RemoteLabelPostService { @Override public List selectLabelByList(String postCode, Long deptId) { + //获取岗位只能Id SysPostVo sysPostVo = sysPostService.selectLableByList(postCode, deptId); if(sysPostVo != null){ - List aiLablePostVos = aiLabelPostService.queryListByLabel(sysPostVo.getPostId()); - List aiLabelList = aiLabelService.queryListByLabel(StreamUtils.toList(aiLablePostVos,AiLabelPost::getLabelId)); + //根据岗位职能Id获取标签id + List aiLabelPostVos = aiLabelPostService.queryListByLabel(sysPostVo.getPostId()); + //根据标签id获取标签 + List aiLabelList = aiLabelService.queryListByLabel(StreamUtils.toList(aiLabelPostVos,AiLabelPost::getLabelId)); return aiLabelList.stream() .map(aiLabel -> { RemoteAiLabelPostVo remoteAiLabelPostVo = new RemoteAiLabelPostVo(); diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/dubbo/RemoteWorkflowServiceImpl.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/dubbo/RemoteWorkflowServiceImpl.java index 137d1ab..c5e2d02 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/dubbo/RemoteWorkflowServiceImpl.java +++ b/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 businessIds) { return workflowService.deleteInstance(businessIds); @@ -69,6 +76,11 @@ public class RemoteWorkflowServiceImpl implements RemoteWorkflowService { return workflowService.startWorkFlow(startProcess); } + @Override + public Boolean startWorkFlowBatch(List startProcess) { + return workflowService.startWorkFlowBatch(startProcess); + } + @Override public Map> currentTaskAllUser(List 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); diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwDepartMapper.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwDepartMapper.java index 34d6364..56e6de2 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwDepartMapper.java +++ b/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 getFlowDepart(@Param("deptId") Long deptId); + + Integer checkFlowDepart(@Param("deptIds") List departIds); } diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/FlwDepartService.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/FlwDepartService.java index e6b5937..c8c478a 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/FlwDepartService.java +++ b/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); } diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java index 7d896e1..e21c6c8 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java +++ b/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 getByNodeCodes(String nodeCode,Long definitionId); + /** + * 根据部门获取流程 + * @param deptId + * @return + */ + FlowDepartVo getFlowDepart(Long deptId); } diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/WorkflowService.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/WorkflowService.java index c611d1a..e970236 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/WorkflowService.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/WorkflowService.java @@ -94,4 +94,11 @@ public interface WorkflowService { List currentTaskAllUser(Long taskId); + /** + * 批量启动流程 + * + * @param startProcess 参数 + * @return 结果 + */ + Boolean startWorkFlowBatch(List startProcess); } diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwDepartServiceImpl.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwDepartServiceImpl.java index de6e64a..5cfb40c 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwDepartServiceImpl.java +++ b/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 implements FlwDepartService { @@ -29,8 +32,18 @@ public class FlwDepartServiceImpl extends ServiceImpl 0){ + throw new ServiceException("所选的部门中,已存在在其他流程中,请检查后在提交!"); + } + this.baseMapper.insert(flowDepart); return flowDepart; } + + @Override + public FlowDepart getFlowDepart(Long deptId) { + return this.baseMapper.getFlowDepart(deptId); + } } diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java index 6f3a21c..e149a0d 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java +++ b/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; + } + /** * 查询当前用户的已办任务 * diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java index 494fe0d..d113438 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java +++ b/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 currentTaskAllUser(Long taskId) { return flwTaskService.currentTaskAllUser(taskId); } + + @Override + public Boolean startWorkFlowBatch(List startProcess) { + try { + startProcess.forEach(startProcessBo -> { + flwTaskService.startWorkFlow(BeanUtil.toBean(startProcessBo, StartProcessBo.class)); + }); + } catch (Exception e) { + return false; + } + return true; + } } diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/utils/BatchProcessorUtil.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/utils/BatchProcessorUtil.java new file mode 100644 index 0000000..34f68ab --- /dev/null +++ b/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 boolean processBatches(List dataList, int batchSize, int startIndex, Consumer> batchHandler) { + if (dataList == null || dataList.isEmpty()) { + return true; // 数据为空,直接返回当前起始位置 + } + + int totalSize = dataList.size(); + while (startIndex < totalSize) { + int endIndex = Math.min(startIndex + batchSize, totalSize); + List batch = dataList.subList(startIndex, endIndex); + + // 处理当前批次的数据 + batchHandler.accept(batch); + + // 更新起始位置 + startIndex = endIndex; + } + + return startIndex >= totalSize; // 返回下一次的起始位置 + } +} diff --git a/dk-modules/workflow/src/main/resources/mapper/workflow/FlwDepartMapper.xml b/dk-modules/workflow/src/main/resources/mapper/workflow/FlwDepartMapper.xml index 782aa3b..e8d2908 100644 --- a/dk-modules/workflow/src/main/resources/mapper/workflow/FlwDepartMapper.xml +++ b/dk-modules/workflow/src/main/resources/mapper/workflow/FlwDepartMapper.xml @@ -4,5 +4,19 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + + +