Merge branch 'refs/heads/test'

This commit is contained in:
chenbowen
2026-01-07 08:49:32 +08:00
11 changed files with 170 additions and 3 deletions

View File

@@ -56,6 +56,10 @@ public class BpmModelMetaInfoVO {
@NotNull(message = "是否可见不能为空") @NotNull(message = "是否可见不能为空")
private Boolean visible; private Boolean visible;
@Schema(description = "是否允许重新发起", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
@NotNull(message = "是否允许重新发起不能为空")
private Boolean restart;
@Schema(description = "可发起用户编号数组", example = "[1,2,3]") @Schema(description = "可发起用户编号数组", example = "[1,2,3]")
private List<Long> startUserIds; private List<Long> startUserIds;

View File

@@ -5,6 +5,7 @@ import com.zt.plat.module.bpm.controller.admin.base.user.UserSimpleBaseVO;
import com.zt.plat.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO; import com.zt.plat.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO;
import com.zt.plat.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO; import com.zt.plat.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import java.time.LocalDateTime; import java.time.LocalDateTime;

View File

@@ -4,6 +4,7 @@ import com.zt.plat.module.bpm.controller.admin.definition.vo.model.simple.BpmSim
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
@Schema(description = "管理后台 - 流程模型的保存 Request VO") @Schema(description = "管理后台 - 流程模型的保存 Request VO")

View File

@@ -1,5 +1,6 @@
package com.zt.plat.module.bpm.controller.admin.task; package com.zt.plat.module.bpm.controller.admin.task;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.zt.plat.framework.business.core.util.DeptUtil; import com.zt.plat.framework.business.core.util.DeptUtil;
@@ -11,8 +12,10 @@ import com.zt.plat.module.bpm.controller.admin.task.vo.instance.*;
import com.zt.plat.module.bpm.convert.task.BpmProcessInstanceConvert; import com.zt.plat.module.bpm.convert.task.BpmProcessInstanceConvert;
import com.zt.plat.module.bpm.dal.dataobject.definition.BpmCategoryDO; import com.zt.plat.module.bpm.dal.dataobject.definition.BpmCategoryDO;
import com.zt.plat.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO; import com.zt.plat.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO;
import com.zt.plat.module.bpm.dal.dataobject.task.BpmProcessInstanceCopyDO;
import com.zt.plat.module.bpm.service.definition.BpmCategoryService; import com.zt.plat.module.bpm.service.definition.BpmCategoryService;
import com.zt.plat.module.bpm.service.definition.BpmProcessDefinitionService; import com.zt.plat.module.bpm.service.definition.BpmProcessDefinitionService;
import com.zt.plat.module.bpm.service.task.BpmProcessInstanceCopyService;
import com.zt.plat.module.bpm.service.task.BpmProcessInstanceService; import com.zt.plat.module.bpm.service.task.BpmProcessInstanceService;
import com.zt.plat.module.bpm.service.task.BpmTaskService; import com.zt.plat.module.bpm.service.task.BpmTaskService;
import com.zt.plat.module.system.api.dept.DeptApi; import com.zt.plat.module.system.api.dept.DeptApi;
@@ -24,6 +27,8 @@ import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.list.SetUniqueList;
import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.repository.ProcessDefinition; import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.task.api.Task; import org.flowable.task.api.Task;
@@ -31,6 +36,8 @@ import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@@ -53,6 +60,8 @@ public class BpmProcessInstanceController {
private BpmProcessDefinitionService processDefinitionService; private BpmProcessDefinitionService processDefinitionService;
@Resource @Resource
private BpmCategoryService categoryService; private BpmCategoryService categoryService;
@Resource
private BpmProcessInstanceCopyService processInstanceCopyService;
@Resource @Resource
private AdminUserApi adminUserApi; private AdminUserApi adminUserApi;
@@ -181,6 +190,32 @@ public class BpmProcessInstanceController {
return success(processInstanceService.getApprovalDetail(getLoginUserId(), reqVO)); return success(processInstanceService.getApprovalDetail(getLoginUserId(), reqVO));
} }
@GetMapping("/copy-list-by-process-instance-id")
@Operation(summary = "根据流程实例编号获取抄送列表")
@Parameter(name = "id", description = "流程实例的编号", required = true)
@PreAuthorize("@ss.hasPermission('bpm:process-instance:query')")
public CommonResult<List<BpmProcessInstanceCopyVO>> getCopyListByProcessInstanceId(@RequestParam("processInstanceId") String processInstanceId) {
List<BpmProcessInstanceCopyDO> copyDOList = processInstanceCopyService.getByProcessInstanceId(processInstanceId);
if (CollectionUtils.isEmpty(copyDOList)) {
return success(new ArrayList<>(0));
}
List<BpmProcessInstanceCopyVO> copyVOList = new ArrayList<>(copyDOList.size());
SetUniqueList<Long> userIdList = SetUniqueList.setUniqueList(new ArrayList<>());
for (BpmProcessInstanceCopyDO copyDO : copyDOList) {
BpmProcessInstanceCopyVO copyVO = new BpmProcessInstanceCopyVO();
BeanUtil.copyProperties(copyDO, copyVO);
copyVOList.add(copyVO);
userIdList.add(copyDO.getStartUserId());
userIdList.add(copyDO.getUserId());
}
Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(userIdList);
for (BpmProcessInstanceCopyVO copyVO : copyVOList) {
copyVO.setStartUserName(userMap.get(copyVO.getStartUserId()).getNickname());
copyVO.setUserName(userMap.get(copyVO.getUserId()).getNickname());
}
return success(copyVOList);
}
@GetMapping("/get-next-approval-nodes") @GetMapping("/get-next-approval-nodes")
@Operation(summary = "获取下一个执行的流程节点") @Operation(summary = "获取下一个执行的流程节点")
@PreAuthorize("@ss.hasPermission('bpm:process-instance:query')") @PreAuthorize("@ss.hasPermission('bpm:process-instance:query')")

View File

@@ -0,0 +1,88 @@
package com.zt.plat.module.bpm.controller.admin.task.vo.instance;
import com.zt.plat.framework.mybatis.core.dataobject.BaseDO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 流程抄送 VO
*
* @author kr
* @since 2025-12-31
*/
@Data
@NoArgsConstructor
public class BpmProcessInstanceCopyVO extends BaseDO {
/**
* 编号
*/
private Long id;
/**
* 发起人 Id
*/
@Schema(description ="发起人 Id")
private Long startUserId;
/**
* 发起人 姓名
*/
@Schema(description ="发起人 姓名")
private String startUserName;
/**
* 流程名
*/
@Schema(description ="流程名")
private String processInstanceName;
/**
* 流程实例的编号
*/
@Schema(description ="流程实例的编号")
private String processInstanceId;
/**
* 流程实例的流程定义编号
*/
@Schema(description ="流程实例的流程定义编号")
private String processDefinitionId;
/**
* 流程分类
*/
@Schema(description ="流程分类")
private String category;
/**
* 流程活动的编号
*/
@Schema(description ="流程活动的编号")
private String activityId;
/**
* 流程活动的名字
*/
@Schema(description ="流程活动的名字")
private String activityName;
/**
* 流程活动的编号
*/
@Schema(description ="流程活动的编号")
private String taskId;
/**
* 用户编号(被抄送的用户编号)
*/
@Schema(description ="用户编号(被抄送的用户编号)")
private Long userId;
/**
* 用户姓名(被抄送的用户姓名)
*/
@Schema(description ="用户姓名(被抄送的用户姓名)")
private String userName;
/**
* 抄送意见
*/
@Schema(description ="抄送意见")
private String reason;
}

View File

@@ -87,9 +87,16 @@ public interface BpmProcessInstanceConvert {
}); });
} }
} }
BpmProcessDefinitionInfoDO processDefinitionInfo = processDefinitionInfoMap.get(respVO.getProcessDefinitionId());
if (processDefinitionInfo != null) {
// 摘要 // 摘要
respVO.setSummary(FlowableUtils.getSummary(processDefinitionInfoMap.get(respVO.getProcessDefinitionId()), respVO.setSummary(FlowableUtils.getSummary(processDefinitionInfo,
pageResult.getList().get(i).getProcessVariables())); pageResult.getList().get(i).getProcessVariables()));
// 是否可见
respVO.getProcessDefinition().setVisible(processDefinitionInfo.getVisible());
// 是否可以重新发起流程
respVO.getProcessDefinition().setRestart(processDefinitionInfo.getRestart());
}
// 表单 // 表单
respVO.setFormVariables(pageResult.getList().get(i).getProcessVariables()); respVO.setFormVariables(pageResult.getList().get(i).getProcessVariables());
} }

View File

@@ -129,6 +129,13 @@ public class BpmProcessDefinitionInfoDO extends BaseDO {
* 目的:如果 false 不可见,则不展示在“发起流程”的列表里 * 目的:如果 false 不可见,则不展示在“发起流程”的列表里
*/ */
private Boolean visible; private Boolean visible;
/**
* 是否允许重新发起
*
* 目的:如果 false 则不可以重新发起流程
*/
private Boolean restart;
/** /**
* 排序值 * 排序值
*/ */

View File

@@ -7,6 +7,8 @@ import com.zt.plat.module.bpm.controller.admin.task.vo.instance.BpmProcessInstan
import com.zt.plat.module.bpm.dal.dataobject.task.BpmProcessInstanceCopyDO; import com.zt.plat.module.bpm.dal.dataobject.task.BpmProcessInstanceCopyDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper @Mapper
public interface BpmProcessInstanceCopyMapper extends BaseMapperX<BpmProcessInstanceCopyDO> { public interface BpmProcessInstanceCopyMapper extends BaseMapperX<BpmProcessInstanceCopyDO> {
@@ -22,4 +24,8 @@ public interface BpmProcessInstanceCopyMapper extends BaseMapperX<BpmProcessInst
delete(BpmProcessInstanceCopyDO::getProcessInstanceId, processInstanceId); delete(BpmProcessInstanceCopyDO::getProcessInstanceId, processInstanceId);
} }
default List<BpmProcessInstanceCopyDO> getByProcessInstanceId(String processInstanceId) {
return selectList(BpmProcessInstanceCopyDO::getProcessInstanceId, processInstanceId);
}
} }

View File

@@ -7,6 +7,7 @@ import jakarta.validation.constraints.NotEmpty;
import org.flowable.bpmn.model.FlowNode; import org.flowable.bpmn.model.FlowNode;
import java.util.Collection; import java.util.Collection;
import java.util.List;
/** /**
* 流程抄送 Service 接口 * 流程抄送 Service 接口
@@ -57,4 +58,12 @@ public interface BpmProcessInstanceCopyService {
*/ */
void deleteProcessInstanceCopy(String processInstanceId); void deleteProcessInstanceCopy(String processInstanceId);
/**
* 获得流程的抄送列表
*
* @param processInstanceId 流程实例 ID
* @return 抄送流程列表
*/
List<BpmProcessInstanceCopyDO> getByProcessInstanceId(String processInstanceId);
} }

View File

@@ -93,4 +93,9 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy
processInstanceCopyMapper.deleteByProcessInstanceId(processInstanceId); processInstanceCopyMapper.deleteByProcessInstanceId(processInstanceId);
} }
@Override
public List<BpmProcessInstanceCopyDO> getByProcessInstanceId(String processInstanceId) {
return processInstanceCopyMapper.getByProcessInstanceId(processInstanceId);
}
} }

View File

@@ -73,4 +73,8 @@
</root> </root>
</springProfile> </springProfile>
<logger name="com.zt.plat.module.bpm.dal" level="DEBUG" additivity="false">
<appender-ref ref="STDOUT"/>
</logger>
</configuration> </configuration>