add 新增添加租户同步默认流程定义
This commit is contained in:
parent
e71a5aa934
commit
07bc56baf7
@ -47,4 +47,11 @@ public interface WorkflowService {
|
|||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
Long getInstanceIdByBusinessId(String businessId);
|
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.SystemConstants;
|
||||||
import org.dromara.common.core.constant.TenantConstants;
|
import org.dromara.common.core.constant.TenantConstants;
|
||||||
import org.dromara.common.core.exception.ServiceException;
|
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.MapstructUtils;
|
||||||
import org.dromara.common.core.utils.SpringUtils;
|
import org.dromara.common.core.utils.SpringUtils;
|
||||||
import org.dromara.common.core.utils.StreamUtils;
|
import org.dromara.common.core.utils.StreamUtils;
|
||||||
@ -56,6 +57,7 @@ public class SysTenantServiceImpl implements ISysTenantService {
|
|||||||
private final SysDictTypeMapper dictTypeMapper;
|
private final SysDictTypeMapper dictTypeMapper;
|
||||||
private final SysDictDataMapper dictDataMapper;
|
private final SysDictDataMapper dictDataMapper;
|
||||||
private final SysConfigMapper configMapper;
|
private final SysConfigMapper configMapper;
|
||||||
|
private final WorkflowService workflowService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询租户
|
* 查询租户
|
||||||
@ -121,7 +123,9 @@ public class SysTenantServiceImpl implements ISysTenantService {
|
|||||||
|
|
||||||
// 获取所有租户编号
|
// 获取所有租户编号
|
||||||
List<String> tenantIds = baseMapper.selectObjs(
|
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);
|
String tenantId = generateTenantId(tenantIds);
|
||||||
add.setTenantId(tenantId);
|
add.setTenantId(tenantId);
|
||||||
boolean flag = baseMapper.insert(add) > 0;
|
boolean flag = baseMapper.insert(add) > 0;
|
||||||
@ -191,6 +195,8 @@ public class SysTenantServiceImpl implements ISysTenantService {
|
|||||||
config.setTenantId(tenantId);
|
config.setTenantId(tenantId);
|
||||||
}
|
}
|
||||||
configMapper.insertBatch(sysConfigList);
|
configMapper.insertBatch(sysConfigList);
|
||||||
|
//新增租户流程定义
|
||||||
|
workflowService.syncDef(tenantId);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -399,7 +405,9 @@ public class SysTenantServiceImpl implements ISysTenantService {
|
|||||||
// 获取所有租户编号
|
// 获取所有租户编号
|
||||||
List<String> tenantIds = baseMapper.selectObjs(
|
List<String> tenantIds = baseMapper.selectObjs(
|
||||||
new LambdaQueryWrapper<SysTenant>().select(SysTenant::getTenantId)
|
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<SysDictType> saveTypeList = new ArrayList<>();
|
||||||
List<SysDictData> saveDataList = new ArrayList<>();
|
List<SysDictData> saveDataList = new ArrayList<>();
|
||||||
Set<String> set = new HashSet<>();
|
Set<String> set = new HashSet<>();
|
||||||
|
@ -104,7 +104,7 @@ public class FlwDefinitionController extends BaseController {
|
|||||||
@RepeatSubmit()
|
@RepeatSubmit()
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public R<Boolean> publish(@PathVariable Long id) {
|
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)
|
@Log(title = "流程定义", businessType = BusinessType.IMPORT)
|
||||||
@PostMapping("/importDef")
|
@PostMapping("/importDef")
|
||||||
|
@ -35,6 +35,15 @@ public interface IFlwDefinitionService {
|
|||||||
*/
|
*/
|
||||||
TableDataInfo<FlowDefinitionVo> unPublishList(FlowDefinition flowDefinition, PageQuery pageQuery);
|
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 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
boolean importXml(MultipartFile file, String category);
|
boolean importXml(MultipartFile file, String category);
|
||||||
@ -59,4 +69,11 @@ public interface IFlwDefinitionService {
|
|||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
boolean removeDef(List<Long> ids);
|
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.common.mybatis.core.page.TableDataInfo;
|
||||||
import org.dromara.warm.flow.core.dto.FlowCombine;
|
import org.dromara.warm.flow.core.dto.FlowCombine;
|
||||||
import org.dromara.warm.flow.core.entity.Definition;
|
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.enums.PublishStatus;
|
||||||
import org.dromara.warm.flow.core.service.DefService;
|
import org.dromara.warm.flow.core.service.DefService;
|
||||||
import org.dromara.warm.flow.orm.entity.FlowDefinition;
|
import org.dromara.warm.flow.orm.entity.FlowDefinition;
|
||||||
import org.dromara.warm.flow.orm.entity.FlowHisTask;
|
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.FlowDefinitionMapper;
|
||||||
import org.dromara.warm.flow.orm.mapper.FlowHisTaskMapper;
|
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.domain.vo.FlowDefinitionVo;
|
||||||
import org.dromara.workflow.mapper.FlwCategoryMapper;
|
import org.dromara.workflow.mapper.FlwCategoryMapper;
|
||||||
import org.dromara.workflow.service.IFlwDefinitionService;
|
import org.dromara.workflow.service.IFlwDefinitionService;
|
||||||
|
import org.dromara.workflow.utils.WorkflowUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
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 FlowHisTaskMapper flowHisTaskMapper;
|
||||||
private final FlwCategoryMapper flwCategoryMapper;
|
private final FlwCategoryMapper flwCategoryMapper;
|
||||||
|
|
||||||
|
private final FlowNodeMapper flowNodeMapper;
|
||||||
|
private final FlowSkipMapper flowSkipMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询流程定义列表
|
* 查询流程定义列表
|
||||||
*
|
*
|
||||||
@ -99,6 +111,29 @@ public class FlwDefinitionServiceImpl implements IFlwDefinitionService {
|
|||||||
return wrapper;
|
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;
|
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.service.WorkflowService;
|
||||||
import org.dromara.common.core.utils.StringUtils;
|
import org.dromara.common.core.utils.StringUtils;
|
||||||
import org.dromara.warm.flow.orm.entity.FlowInstance;
|
import org.dromara.warm.flow.orm.entity.FlowInstance;
|
||||||
|
import org.dromara.workflow.service.IFlwDefinitionService;
|
||||||
import org.dromara.workflow.service.IFlwInstanceService;
|
import org.dromara.workflow.service.IFlwInstanceService;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
@ -21,6 +22,7 @@ import java.util.Map;
|
|||||||
public class WorkflowServiceImpl implements WorkflowService {
|
public class WorkflowServiceImpl implements WorkflowService {
|
||||||
|
|
||||||
private final IFlwInstanceService flwInstanceService;
|
private final IFlwInstanceService flwInstanceService;
|
||||||
|
private final IFlwDefinitionService flwDefinitionService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除流程实例
|
* 删除流程实例
|
||||||
@ -77,4 +79,14 @@ public class WorkflowServiceImpl implements WorkflowService {
|
|||||||
FlowInstance flowInstance = flwInstanceService.selectInstByBusinessId(businessId);
|
FlowInstance flowInstance = flwInstanceService.selectInstByBusinessId(businessId);
|
||||||
return ObjectUtil.isNotNull(flowInstance) ? flowInstance.getId() : null;
|
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