add 新增添加租户同步默认流程定义

This commit is contained in:
gssong 2025-01-05 11:30:31 +08:00
parent e71a5aa934
commit 07bc56baf7
6 changed files with 141 additions and 5 deletions

View File

@ -47,4 +47,11 @@ public interface WorkflowService {
* @return 结果
*/
Long getInstanceIdByBusinessId(String businessId);
/**
* 新增租户流程定义
*
* @param tenantId 租户id
*/
void syncDef(String tenantId);
}

View File

@ -15,6 +15,7 @@ import org.dromara.common.core.constant.Constants;
import org.dromara.common.core.constant.SystemConstants;
import org.dromara.common.core.constant.TenantConstants;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.service.WorkflowService;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StreamUtils;
@ -56,6 +57,7 @@ public class SysTenantServiceImpl implements ISysTenantService {
private final SysDictTypeMapper dictTypeMapper;
private final SysDictDataMapper dictDataMapper;
private final SysConfigMapper configMapper;
private final WorkflowService workflowService;
/**
* 查询租户
@ -121,7 +123,9 @@ public class SysTenantServiceImpl implements ISysTenantService {
// 获取所有租户编号
List<String> tenantIds = baseMapper.selectObjs(
new LambdaQueryWrapper<SysTenant>().select(SysTenant::getTenantId), x -> {return Convert.toStr(x);});
new LambdaQueryWrapper<SysTenant>().select(SysTenant::getTenantId), x -> {
return Convert.toStr(x);
});
String tenantId = generateTenantId(tenantIds);
add.setTenantId(tenantId);
boolean flag = baseMapper.insert(add) > 0;
@ -191,6 +195,8 @@ public class SysTenantServiceImpl implements ISysTenantService {
config.setTenantId(tenantId);
}
configMapper.insertBatch(sysConfigList);
//新增租户流程定义
workflowService.syncDef(tenantId);
return true;
}
@ -399,7 +405,9 @@ public class SysTenantServiceImpl implements ISysTenantService {
// 获取所有租户编号
List<String> tenantIds = baseMapper.selectObjs(
new LambdaQueryWrapper<SysTenant>().select(SysTenant::getTenantId)
.eq(SysTenant::getStatus, SystemConstants.NORMAL), x -> {return Convert.toStr(x);});
.eq(SysTenant::getStatus, SystemConstants.NORMAL), x -> {
return Convert.toStr(x);
});
List<SysDictType> saveTypeList = new ArrayList<>();
List<SysDictData> saveDataList = new ArrayList<>();
Set<String> set = new HashSet<>();

View File

@ -104,7 +104,7 @@ public class FlwDefinitionController extends BaseController {
@RepeatSubmit()
@Transactional(rollbackFor = Exception.class)
public R<Boolean> publish(@PathVariable Long id) {
return R.ok(defService.publish(id));
return R.ok(flwDefinitionService.publish(id));
}
/**
@ -146,7 +146,8 @@ public class FlwDefinitionController extends BaseController {
/**
* 导入流程定义
*
* @param file 文件
* @param file 文件
* @param category 分类
*/
@Log(title = "流程定义", businessType = BusinessType.IMPORT)
@PostMapping("/importDef")

View File

@ -35,6 +35,15 @@ public interface IFlwDefinitionService {
*/
TableDataInfo<FlowDefinitionVo> unPublishList(FlowDefinition flowDefinition, PageQuery pageQuery);
/**
* 发布流程定义
*
* @param id 流程定义id
* @return 结果
*/
boolean publish(Long id);
/**
* 导出流程定义
*
@ -47,7 +56,8 @@ public interface IFlwDefinitionService {
/**
* 导入流程定义
*
* @param file 文件
* @param file 文件
* @param category 分类
* @return 结果
*/
boolean importXml(MultipartFile file, String category);
@ -59,4 +69,11 @@ public interface IFlwDefinitionService {
* @return 结果
*/
boolean removeDef(List<Long> ids);
/**
* 新增租户流程定义
*
* @param tenantId 租户id
*/
void syncDef(String tenantId);
}

View File

@ -19,23 +19,32 @@ import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.warm.flow.core.dto.FlowCombine;
import org.dromara.warm.flow.core.entity.Definition;
import org.dromara.warm.flow.core.enums.NodeType;
import org.dromara.warm.flow.core.enums.PublishStatus;
import org.dromara.warm.flow.core.service.DefService;
import org.dromara.warm.flow.orm.entity.FlowDefinition;
import org.dromara.warm.flow.orm.entity.FlowHisTask;
import org.dromara.warm.flow.orm.entity.FlowNode;
import org.dromara.warm.flow.orm.entity.FlowSkip;
import org.dromara.warm.flow.orm.mapper.FlowDefinitionMapper;
import org.dromara.warm.flow.orm.mapper.FlowHisTaskMapper;
import org.dromara.warm.flow.orm.mapper.FlowNodeMapper;
import org.dromara.warm.flow.orm.mapper.FlowSkipMapper;
import org.dromara.workflow.domain.vo.FlowDefinitionVo;
import org.dromara.workflow.mapper.FlwCategoryMapper;
import org.dromara.workflow.service.IFlwDefinitionService;
import org.dromara.workflow.utils.WorkflowUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static org.dromara.common.core.constant.TenantConstants.DEFAULT_TENANT_ID;
/**
* 流程定义 服务层实现
*
@ -51,6 +60,9 @@ public class FlwDefinitionServiceImpl implements IFlwDefinitionService {
private final FlowHisTaskMapper flowHisTaskMapper;
private final FlwCategoryMapper flwCategoryMapper;
private final FlowNodeMapper flowNodeMapper;
private final FlowSkipMapper flowSkipMapper;
/**
* 查询流程定义列表
*
@ -99,6 +111,29 @@ public class FlwDefinitionServiceImpl implements IFlwDefinitionService {
return wrapper;
}
/**
* 发布流程定义
*
* @param id 流程定义id
*/
@Override
public boolean publish(Long id) {
List<FlowNode> flowNodes = flowNodeMapper.selectList(new LambdaQueryWrapper<FlowNode>().eq(FlowNode::getDefinitionId, id));
List<String> errorMsg = new ArrayList<>();
if (CollUtil.isNotEmpty(flowNodes)) {
for (FlowNode flowNode : flowNodes) {
String applyNodeCode = WorkflowUtils.applyNodeCode(id);
if (StringUtils.isBlank(flowNode.getPermissionFlag()) && !applyNodeCode.equals(flowNode.getNodeCode()) && NodeType.BETWEEN.getKey().equals(flowNode.getNodeType())) {
errorMsg.add(flowNode.getNodeName());
}
}
if (CollUtil.isNotEmpty(errorMsg)) {
throw new ServiceException("节点【" + StringUtils.join(errorMsg, ",") + "】未配置办理人!");
}
}
return defService.publish(id);
}
/**
* 导入流程定义
*
@ -175,4 +210,60 @@ public class FlwDefinitionServiceImpl implements IFlwDefinitionService {
}
return true;
}
/**
* 新增租户流程定义
*
* @param tenantId 租户id
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void syncDef(String tenantId) {
List<FlowDefinition> flowDefinitions = flowDefinitionMapper.selectList(new LambdaQueryWrapper<FlowDefinition>().eq(FlowDefinition::getTenantId, DEFAULT_TENANT_ID));
if (CollUtil.isEmpty(flowDefinitions)) {
return;
}
List<Long> defIds = StreamUtils.toList(flowDefinitions, FlowDefinition::getId);
List<FlowNode> flowNodes = flowNodeMapper.selectList(new LambdaQueryWrapper<FlowNode>().in(FlowNode::getDefinitionId, defIds));
List<FlowSkip> flowSkips = flowSkipMapper.selectList(new LambdaQueryWrapper<FlowSkip>().in(FlowSkip::getDefinitionId, defIds));
for (FlowDefinition definition : flowDefinitions) {
FlowDefinition flowDefinition = BeanUtil.toBean(definition, FlowDefinition.class);
flowDefinition.setId(null);
flowDefinition.setTenantId(tenantId);
flowDefinition.setIsPublish(0);
flowDefinition.setCategory(null);
int insert = flowDefinitionMapper.insert(flowDefinition);
if (insert <= 0) {
log.info("同步流程定义【{}】失败!", definition.getFlowCode());
continue;
}
log.info("同步流程定义【{}】成功!", definition.getFlowCode());
Long definitionId = flowDefinition.getId();
if (CollUtil.isNotEmpty(flowNodes)) {
List<FlowNode> nodes = StreamUtils.filter(flowNodes, node -> node.getDefinitionId().equals(definition.getId()));
if (CollUtil.isNotEmpty(nodes)) {
List<FlowNode> flowNodeList = BeanUtil.copyToList(nodes, FlowNode.class);
flowNodeList.forEach(e -> {
e.setId(null);
e.setDefinitionId(definitionId);
e.setTenantId(tenantId);
e.setPermissionFlag(null);
});
flowNodeMapper.insertOrUpdate(flowNodeList);
}
}
if (CollUtil.isNotEmpty(flowSkips)) {
List<FlowSkip> skips = StreamUtils.filter(flowSkips, skip -> skip.getDefinitionId().equals(definition.getId()));
if (CollUtil.isNotEmpty(skips)) {
List<FlowSkip> flowSkipList = BeanUtil.copyToList(skips, FlowSkip.class);
flowSkipList.forEach(e -> {
e.setId(null);
e.setDefinitionId(definitionId);
e.setTenantId(tenantId);
});
flowSkipMapper.insertOrUpdate(flowSkipList);
}
}
}
}
}

View File

@ -5,6 +5,7 @@ import lombok.RequiredArgsConstructor;
import org.dromara.common.core.service.WorkflowService;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.warm.flow.orm.entity.FlowInstance;
import org.dromara.workflow.service.IFlwDefinitionService;
import org.dromara.workflow.service.IFlwInstanceService;
import org.springframework.stereotype.Service;
@ -21,6 +22,7 @@ import java.util.Map;
public class WorkflowServiceImpl implements WorkflowService {
private final IFlwInstanceService flwInstanceService;
private final IFlwDefinitionService flwDefinitionService;
/**
* 删除流程实例
@ -77,4 +79,14 @@ public class WorkflowServiceImpl implements WorkflowService {
FlowInstance flowInstance = flwInstanceService.selectInstByBusinessId(businessId);
return ObjectUtil.isNotNull(flowInstance) ? flowInstance.getId() : null;
}
/**
* 新增租户流程定义
*
* @param tenantId 租户id
*/
@Override
public void syncDef(String tenantId) {
flwDefinitionService.syncDef(tenantId);
}
}