From 05c95285495fcb5de1c064cd5dbf8a8f4f92a7aa Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Wed, 27 Aug 2025 11:10:03 +0000 Subject: [PATCH] =?UTF-8?q?!752=20update=20=E4=BC=98=E5=8C=96=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E5=AE=9E=E4=BE=8B=E4=B8=9A=E5=8A=A1=E6=89=A9=E5=B1=95?= =?UTF-8?q?=E7=9A=84=E4=BF=9D=E5=AD=98=E5=92=8C=E5=88=A0=E9=99=A4=E9=80=BB?= =?UTF-8?q?=E8=BE=91=EF=BC=8C=E5=A2=9E=E5=BC=BA=E4=BB=A3=E7=A0=81=E5=8F=AF?= =?UTF-8?q?=E8=AF=BB=E6=80=A7=20*=20update=20=E4=BC=98=E5=8C=96=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E5=AE=9E=E4=BE=8B=E4=B8=9A=E5=8A=A1=E6=89=A9=E5=B1=95?= =?UTF-8?q?=E7=9A=84=E4=BF=9D=E5=AD=98=E5=92=8C=E5=88=A0=E9=99=A4=E9=80=BB?= =?UTF-8?q?=E8=BE=91=EF=BC=8C=E5=A2=9E=E5=BC=BA=E4=BB=A3=E7=A0=81=E5=8F=AF?= =?UTF-8?q?=E8=AF=BB=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/bo/FlowInstanceBizExtBo.java | 46 ----------- .../workflow/domain/bo/StartProcessBo.java | 11 ++- .../domain/vo/FlowInstanceBizExtVo.java | 58 -------------- .../mapper/FlwInstanceBizExtMapper.java | 50 +++++++++++- .../service/IFlwInstanceBizExtService.java | 30 ------- .../impl/FlwInstanceBizExtServiceImpl.java | 57 ------------- .../service/impl/FlwTaskServiceImpl.java | 80 +++++++++++-------- 7 files changed, 104 insertions(+), 228 deletions(-) delete mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/FlowInstanceBizExtBo.java delete mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowInstanceBizExtVo.java delete mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwInstanceBizExtService.java delete mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceBizExtServiceImpl.java diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/FlowInstanceBizExtBo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/FlowInstanceBizExtBo.java deleted file mode 100644 index 5173953a8..000000000 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/FlowInstanceBizExtBo.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.dromara.workflow.domain.bo; - -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import org.dromara.workflow.domain.FlowInstanceBizExt; - -/** - * 流程实例业务扩展业务对象 flow_instance_biz_ext - * - * @author may - * @date 2025-08-05 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@AutoMapper(target = FlowInstanceBizExt.class, reverseConvertGenerate = false) -public class FlowInstanceBizExtBo extends BaseEntity { - - /** - * 主键 - */ - private Long id; - - /** - * 流程实例ID - */ - private Long instanceId; - - /** - * 业务ID - */ - private String businessId; - - /** - * 业务编码 - */ - private String businessCode; - - /** - * 业务标题 - */ - private String businessTitle; - - -} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/StartProcessBo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/StartProcessBo.java index d6ab45185..b31f4fa14 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/StartProcessBo.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/StartProcessBo.java @@ -1,9 +1,11 @@ package org.dromara.workflow.domain.bo; +import cn.hutool.core.util.ObjectUtil; import jakarta.validation.constraints.NotBlank; import lombok.Data; import org.dromara.common.core.validate.AddGroup; +import org.dromara.workflow.domain.FlowInstanceBizExt; import java.io.Serial; import java.io.Serializable; @@ -47,7 +49,7 @@ public class StartProcessBo implements Serializable { /** * 流程业务扩展信息 */ - private FlowInstanceBizExtBo flowInstanceBizExtBo; + private FlowInstanceBizExt bizExt; public Map getVariables() { if (variables == null) { @@ -56,4 +58,11 @@ public class StartProcessBo implements Serializable { variables.entrySet().removeIf(entry -> Objects.isNull(entry.getValue())); return variables; } + + public FlowInstanceBizExt getBizExt() { + if (ObjectUtil.isNull(bizExt)) { + bizExt = new FlowInstanceBizExt(); + } + return bizExt; + } } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowInstanceBizExtVo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowInstanceBizExtVo.java deleted file mode 100644 index e0988b4fc..000000000 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowInstanceBizExtVo.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.dromara.workflow.domain.vo; - -import cn.idev.excel.annotation.ExcelIgnoreUnannotated; -import cn.idev.excel.annotation.ExcelProperty; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import org.dromara.workflow.domain.FlowInstanceBizExt; - -import java.io.Serial; -import java.io.Serializable; - - -/** - * 流程实例业务扩展视图对象 flow_instance_biz_ext - * - * @author may - * @date 2025-08-05 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = FlowInstanceBizExt.class) -public class FlowInstanceBizExtVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键 - */ - @ExcelProperty(value = "主键") - private Long id; - - /** - * 流程实例ID - */ - @ExcelProperty(value = "流程实例ID") - private Long instanceId; - - /** - * 业务ID - */ - @ExcelProperty(value = "业务ID") - private String businessId; - - /** - * 业务编码 - */ - @ExcelProperty(value = "业务编码") - private String businessCode; - - /** - * 业务标题 - */ - @ExcelProperty(value = "业务标题") - private String businessTitle; - - -} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/FlwInstanceBizExtMapper.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/FlwInstanceBizExtMapper.java index bd9f032a4..d803c60e1 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/FlwInstanceBizExtMapper.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/FlwInstanceBizExtMapper.java @@ -1,8 +1,11 @@ package org.dromara.workflow.mapper; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.workflow.domain.FlowInstanceBizExt; -import org.dromara.workflow.domain.vo.FlowInstanceBizExtVo; + +import java.util.List; /** * 流程实例业务扩展Mapper接口 @@ -10,6 +13,49 @@ import org.dromara.workflow.domain.vo.FlowInstanceBizExtVo; * @author may * @date 2025-08-05 */ -public interface FlwInstanceBizExtMapper extends BaseMapperPlus { +public interface FlwInstanceBizExtMapper extends BaseMapperPlus { + + /** + * 根据 instanceId 保存或更新流程实例业务扩展 + * + * @param entity 流程实例业务扩展实体 + * @return 操作是否成功 + */ + default int saveOrUpdateByInstanceId(FlowInstanceBizExt entity) { + // 查询是否存在 + FlowInstanceBizExt exist = this.selectOne(new LambdaQueryWrapper() + .eq(FlowInstanceBizExt::getInstanceId, entity.getInstanceId())); + + if (ObjectUtil.isNotNull(entity)) { + // 存在就带上主键更新 + entity.setId(exist.getId()); + return updateById(entity); + } else { + // 不存在就插入 + return insert(entity); + } + } + + /** + * 按照流程实例ID删除单个流程实例业务扩展 + * + * @param instanceId 流程实例ID + * @return 删除的行数 + */ + default int deleteByInstId(Long instanceId) { + return this.delete(new LambdaQueryWrapper() + .eq(FlowInstanceBizExt::getInstanceId, instanceId)); + } + + /** + * 按照流程实例ID批量删除流程实例业务扩展 + * + * @param instanceIds 流程实例ID列表 + * @return 删除的行数 + */ + default int deleteByInstIds(List instanceIds) { + return this.delete(new LambdaQueryWrapper() + .in(FlowInstanceBizExt::getInstanceId, instanceIds)); + } } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwInstanceBizExtService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwInstanceBizExtService.java deleted file mode 100644 index adfe5794f..000000000 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwInstanceBizExtService.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.dromara.workflow.service; - -import org.dromara.workflow.domain.bo.FlowInstanceBizExtBo; - -import java.util.List; - -/** - * 流程实例业务扩展Service接口 - * - * @author may - * @date 2025-08-05 - */ -public interface IFlwInstanceBizExtService { - - /** - * 新增/修改流程实例业务扩展 - * - * @param bo 流程实例业务扩展 - * @return 是否新增成功 - */ - Boolean saveOrUpdate(FlowInstanceBizExtBo bo); - - /** - * 按照流程实例ID批量删除 - * - * @param instanceIds 流程实例ID - * @return 是否删除成功 - */ - Boolean deleteByInstIds(List instanceIds); -} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceBizExtServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceBizExtServiceImpl.java deleted file mode 100644 index 29772780b..000000000 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceBizExtServiceImpl.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.dromara.workflow.service.impl; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.workflow.domain.FlowInstanceBizExt; -import org.dromara.workflow.domain.bo.FlowInstanceBizExtBo; -import org.dromara.workflow.mapper.FlwInstanceBizExtMapper; -import org.dromara.workflow.service.IFlwInstanceBizExtService; -import org.springframework.stereotype.Service; - -import java.util.List; - -/** - * 流程实例业务扩展Service业务层处理 - * - * @author may - * @date 2025-08-05 - */ -@Slf4j -@RequiredArgsConstructor -@Service -public class FlwInstanceBizExtServiceImpl implements IFlwInstanceBizExtService { - - private final FlwInstanceBizExtMapper baseMapper; - - - /** - * 新增/修改流程实例业务扩展 - * - * @param bo 流程实例业务扩展 - * @return 是否新增成功 - */ - @Override - public Boolean saveOrUpdate(FlowInstanceBizExtBo bo) { - FlowInstanceBizExt convert = MapstructUtils.convert(bo, FlowInstanceBizExt.class); - FlowInstanceBizExt flowInstanceBizExt = baseMapper.selectOne(new LambdaQueryWrapper() - .eq(FlowInstanceBizExt::getInstanceId, bo.getInstanceId())); - if (flowInstanceBizExt != null) { - flowInstanceBizExt.setBusinessTitle(convert.getBusinessTitle()); - return baseMapper.insertOrUpdate(flowInstanceBizExt); - } - return baseMapper.insertOrUpdate(convert); - } - - /** - * 按照流程实例ID批量删除 - * - * @param instanceIds 流程实例ID - * @return 是否删除成功 - */ - @Override - public Boolean deleteByInstIds(List instanceIds) { - return baseMapper.delete(new LambdaQueryWrapper().in(FlowInstanceBizExt::getInstanceId, instanceIds)) > 0; - } -} 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 b209b3be5..22b78680f 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.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; @@ -37,17 +36,25 @@ import org.dromara.warm.flow.core.service.*; import org.dromara.warm.flow.core.utils.ExpressionUtil; import org.dromara.warm.flow.core.utils.MapUtil; import org.dromara.warm.flow.orm.entity.*; -import org.dromara.warm.flow.orm.mapper.*; +import org.dromara.warm.flow.orm.mapper.FlowHisTaskMapper; +import org.dromara.warm.flow.orm.mapper.FlowInstanceMapper; +import org.dromara.warm.flow.orm.mapper.FlowNodeMapper; +import org.dromara.warm.flow.orm.mapper.FlowTaskMapper; import org.dromara.workflow.common.ConditionalOnEnable; import org.dromara.workflow.common.constant.FlowConstant; import org.dromara.workflow.common.enums.TaskAssigneeType; import org.dromara.workflow.common.enums.TaskStatusEnum; +import org.dromara.workflow.domain.FlowInstanceBizExt; import org.dromara.workflow.domain.bo.*; import org.dromara.workflow.domain.vo.FlowHisTaskVo; import org.dromara.workflow.domain.vo.FlowTaskVo; import org.dromara.workflow.mapper.FlwCategoryMapper; +import org.dromara.workflow.mapper.FlwInstanceBizExtMapper; import org.dromara.workflow.mapper.FlwTaskMapper; -import org.dromara.workflow.service.*; +import org.dromara.workflow.service.IFlwCommonService; +import org.dromara.workflow.service.IFlwNodeExtService; +import org.dromara.workflow.service.IFlwTaskAssigneeService; +import org.dromara.workflow.service.IFlwTaskService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -83,7 +90,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { private final IFlwTaskAssigneeService flwTaskAssigneeService; private final IFlwCommonService flwCommonService; private final IFlwNodeExtService flwNodeExtService; - private final IFlwInstanceBizExtService flowInstanceBizExtService; + private final FlwInstanceBizExtMapper flwInstanceBizExtMapper; /** * 启动任务 @@ -97,6 +104,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { if (StringUtils.isBlank(businessId)) { throw new ServiceException("启动工作流时必须包含业务ID"); } + // 启动流程实例(提交申请) Map variables = startProcessBo.getVariables(); // 流程发起人 @@ -105,14 +113,14 @@ public class FlwTaskServiceImpl implements IFlwTaskService { variables.put(INITIATOR_DEPT_ID, LoginHelper.getDeptId()); // 业务id variables.put(BUSINESS_ID, businessId); + FlowInstanceBizExt bizExt = startProcessBo.getBizExt(); + + // 获取已有流程实例 FlowInstance flowInstance = flowInstanceMapper.selectOne(new LambdaQueryWrapper<>(FlowInstance.class) .eq(FlowInstance::getBusinessId, businessId)); - FlowInstanceBizExtBo extBo = startProcessBo.getFlowInstanceBizExtBo(); - if (ObjectUtil.isEmpty(extBo)) { - extBo = new FlowInstanceBizExtBo(); - startProcessBo.setFlowInstanceBizExtBo(extBo); - } + if (ObjectUtil.isNotNull(flowInstance)) { + // 已存在流程 BusinessStatusEnum.checkStartStatus(flowInstance.getFlowStatus()); List taskList = taskService.list(new FlowTask().setInstanceId(flowInstance.getId())); taskService.mergeVariable(flowInstance, variables); @@ -121,24 +129,16 @@ public class FlwTaskServiceImpl implements IFlwTaskService { dto.setProcessInstanceId(taskList.get(0).getInstanceId()); dto.setTaskId(taskList.get(0).getId()); // 保存流程实例业务信息 - buildFlowInstanceBizExt(flowInstance, startProcessBo.getFlowInstanceBizExtBo()); + this.buildFlowInstanceBizExt(flowInstance, bizExt); return dto; } - String businessCode; - // 生成业务编号 - if (StringUtils.isBlank(extBo.getBusinessCode())) { - //todo 按照自己业务自行修改 - businessCode = System.currentTimeMillis()+ StrUtil.EMPTY; - extBo.setBusinessCode(businessCode); - } else { - businessCode = extBo.getBusinessCode(); - } + // 将流程定义内的扩展参数设置到变量中 Definition definition = FlowEngine.defService().getPublishByFlowCode(startProcessBo.getFlowCode()); Dict dict = JsonUtils.parseMap(definition.getExt()); boolean autoPass = !ObjectUtil.isNull(dict) && dict.getBool(FlowConstant.AUTO_PASS); variables.put(FlowConstant.AUTO_PASS, autoPass); - variables.put(FlowConstant.BUSINESS_CODE, businessCode); + variables.put(FlowConstant.BUSINESS_CODE, this.generateBusinessCode(bizExt)); FlowParams flowParams = FlowParams.build() .handler(startProcessBo.getHandler()) .flowCode(startProcessBo.getFlowCode()) @@ -151,7 +151,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { throw new ServiceException(e.getMessage()); } // 保存流程实例业务信息 - buildFlowInstanceBizExt(instance, startProcessBo.getFlowInstanceBizExtBo()); + this.buildFlowInstanceBizExt(instance, bizExt); // 申请人执行流程 List taskList = taskService.list(new FlowTask().setInstanceId(instance.getId())); if (taskList.size() > 1) { @@ -163,17 +163,29 @@ public class FlwTaskServiceImpl implements IFlwTaskService { return dto; } + /** + * 生成业务编号,如果已有则直接返回已有值 + */ + private String generateBusinessCode(FlowInstanceBizExt bizExt) { + if (StringUtils.isBlank(bizExt.getBusinessCode())) { + // TODO: 按照自己业务规则生成编号 + String businessCode = Convert.toStr(System.currentTimeMillis()); + bizExt.setBusinessCode(businessCode); + return businessCode; + } + return bizExt.getBusinessCode(); + } + /** * 构建流程实例业务信息 * - * @param instance 流程实例 - * @param flowInstanceBizExtBo 业务扩展信息 + * @param instance 流程实例 + * @param bizExt 流程业务扩展信息 */ - private void buildFlowInstanceBizExt(Instance instance, FlowInstanceBizExtBo flowInstanceBizExtBo) { - flowInstanceBizExtBo.setInstanceId(instance.getId()); - flowInstanceBizExtBo.setBusinessId(instance.getBusinessId()); - flowInstanceBizExtBo.setBusinessCode(flowInstanceBizExtBo.getBusinessCode()); - flowInstanceBizExtService.saveOrUpdate(flowInstanceBizExtBo); + private void buildFlowInstanceBizExt(Instance instance, FlowInstanceBizExt bizExt) { + bizExt.setInstanceId(instance.getId()); + bizExt.setBusinessId(instance.getBusinessId()); + flwInstanceBizExtMapper.saveOrUpdateByInstanceId(bizExt); } /** @@ -235,10 +247,10 @@ public class FlwTaskServiceImpl implements IFlwTaskService { /** * 流程办理 * - * @param taskId 任务ID - * @param flowParams 参数 - * @param instanceId 实例ID - * @param autoPass 自动审批 + * @param taskId 任务ID + * @param flowParams 参数 + * @param instanceId 实例ID + * @param autoPass 自动审批 */ private void skipTask(Long taskId, FlowParams flowParams, Long instanceId, Boolean autoPass) { // 执行任务跳转,并根据返回的处理人设置下一步处理人 @@ -494,8 +506,8 @@ public class FlwTaskServiceImpl implements IFlwTaskService { /** * 获取可驳回的前置节点 * - * @param taskId 任务id - * @param nowNodeCode 当前节点 + * @param taskId 任务id + * @param nowNodeCode 当前节点 */ @Override public List getBackTaskNode(Long taskId, String nowNodeCode) {