add 新增添加租户同步默认流程定义
This commit is contained in:
parent
e71a5aa934
commit
07bc56baf7
@ -47,4 +47,11 @@ public interface WorkflowService {
|
||||
* @return 结果
|
||||
*/
|
||||
Long getInstanceIdByBusinessId(String businessId);
|
||||
|
||||
/**
|
||||
* 新增租户流程定义
|
||||
*
|
||||
* @param tenantId 租户id
|
||||
*/
|
||||
void syncDef(String tenantId);
|
||||
}
|
||||
|
@ -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<>();
|
||||
|
@ -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")
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user