Commit 05162a12 by 赵剑炜

完善flowable

parent b4e4f016
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/jyzb-process/jyzb-process.iml" filepath="$PROJECT_DIR$/jyzb-process/jyzb-process.iml" />
</modules>
</component>
</project>
\ No newline at end of file
......@@ -68,7 +68,7 @@ mybatis-plus:
db-config:
id-type: assign_id
table-underline: true
mapper-locations: classpath*:/mapper/**/*Mapper.xml
mapper-locations: classpath*:com/junmp/junmpProcess/mapper/**/xml/*Mapper.xml
flowable:
......
......@@ -68,7 +68,7 @@ mybatis-plus:
db-config:
id-type: assign_id
table-underline: true
mapper-locations: classpath*:/mapper/**/*Mapper.xml
mapper-locations: classpath*:com/junmp/junmpProcess/mapper/**/xml/*Mapper.xml
flowable:
......
<?xml version="1.0" encoding="UTF-8"?>
<module version="4">
<component name="FacetManager">
<facet type="Spring" name="Spring">
<configuration />
</facet>
</component>
</module>
\ No newline at end of file
......@@ -229,6 +229,12 @@
<version>3.0.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.junmp.v2</groupId>
<artifactId>system-api</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
<!-- <dependency>-->
<!-- <groupId>io.springfox</groupId>-->
<!-- <artifactId>springfox-swagger-ui</artifactId>-->
......
......@@ -24,6 +24,7 @@ import com.junmp.junmpProcess.utils.BpmnConvert;
import com.junmp.junmpProcess.vo.HistoryProcessInstanceVO;
import com.junmp.junmpProcess.vo.ProcessVO;
import com.junmp.junmpProcess.vo.TaskVO;
import com.junmp.junmpProcess.vo.UpdateProcessVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.SneakyThrows;
......@@ -58,19 +59,27 @@ import static com.junmp.junmpProcess.common.CommonConstants.*;
@Api(tags = "流程表单方法")
public class BpmnController implements BpmnDoc {
@Resource
private RepositoryService repositoryService;
@Autowired
private ProcessTemplateService processTemplateService;
@Autowired
private WorkProcessService WorkProcessService;
@Override
@ApiOperation("创建流程和表单")
@PostMapping(value = "create")
public Result<String> create(@RequestBody ProcessVO processVO) throws JsonProcessingException {
return WorkProcessService.createBpmn(processVO);
}
/**
* 编辑表单
*/
@ApiOperation("修改表单")
@PutMapping("updateForm")
public Object updateForm(@RequestBody UpdateProcessVO process) throws JsonProcessingException {
return WorkProcessService.updateForm(process);
}
@ApiOperation("通过流程定义id启动流程")
@PostMapping("start")
public Result<Object> start(@RequestBody StartProcessInstanceDTO startProcessInstanceDTO) {
......@@ -103,6 +112,7 @@ public class BpmnController implements BpmnDoc {
* @param templateId 模板id
* @return 模板详情数据
*/
@ApiOperation("根据ID获取表单信息")
@PostMapping(value = "getFormTemplateById")
public Object getFormTemplateById(String templateId) {
ProcessTemplates processTemplates = processTemplateService.getById(templateId);
......@@ -110,7 +120,16 @@ public class BpmnController implements BpmnDoc {
return R.ok(processTemplates);
}
/**
* 查询表单模板数据
*
* @return 模板详情数据
*/
@ApiOperation("获取全部可用的表单和审核流")
@PostMapping(value = "getFormList")
public Object getFormList( ) {
return WorkProcessService.getFormList();
}
/**
* 查询表单模板数据
......@@ -118,19 +137,10 @@ public class BpmnController implements BpmnDoc {
* @param templateId 模板id
* @return 模板详情数据
*/
@ApiOperation("通过模板id查看流程信息 会附带流程定义id")
@GetMapping("detail")
public Result<ProcessTemplates> detail(@RequestParam("templateId") String templateId){
ProcessTemplates processTemplates = processTemplateService.getById(templateId);
processTemplates.setLogo(processTemplates.getIcon());
processTemplates.setFormId(processTemplates.getTemplateId());
processTemplates.setFormName(processTemplates.getTemplateName());
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey("process"+templateId).latestVersion().singleResult();
if(processDefinition==null){
throw new WorkFlowException("该流程暂未接入Flowable,请重试");
}
processTemplates.setProcessDefinitionId(processDefinition.getId());
return Result.OK(processTemplates);
@ApiOperation("通过模板id查看流程信息")
@GetMapping("getFormDetail")
public Result<ProcessTemplates> getFormDetail(@RequestParam("templateId") String templateId){
return WorkProcessService.getFormDetail(templateId);
}
......
package com.junmp.junmpProcess.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
public class UserListDTO implements Serializable {
@ApiModelProperty(value = "用户ID")
private String userID;
@ApiModelProperty
private String realName;
@ApiModelProperty
private String roleName;
@ApiModelProperty
private String roleID;
}
......@@ -33,12 +33,8 @@ public class ProcessTemplates implements Serializable {
private String templateId;
@TableField(exist = false)
private String formId;
@TableField(exist = false)
private String formName;
/**
* 摸板名称
*/
private String templateName;
private Integer groupId;
/**
......
......@@ -25,7 +25,7 @@ public class TemplateGroupBo {
private String templateId;
private String templateName;
private String formName;
private String icon;
......
......@@ -4,14 +4,21 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapUtil;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.junmp.junmpProcess.dto.UserListDTO;
import com.junmp.junmpProcess.dto.json.*;
import com.junmp.junmpProcess.exception.WorkFlowException;
import com.junmp.junmpProcess.mapper.OrgUserMapper;
import com.junmp.junmpProcess.service.Repository.ProcessTemplateService;
import com.junmp.v2.sys.api.UserServiceApi;
import com.junmp.v2.sys.api.bean.user.dto.RoleUserDto;
import com.junmp.v2.sys.api.bean.user.vo.QueryUserInfoVo;
import org.flowable.bpmn.model.Process;
import org.flowable.bpmn.model.UserTask;
import org.flowable.engine.RepositoryService;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.ExecutionListener;
import com.junmp.junmpProcess.enums.AssigneeTypeEnums;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
......@@ -31,7 +38,8 @@ import static com.junmp.junmpProcess.utils.BpmnModelUtils.getChildNode;
public class CounterSignListener implements ExecutionListener {
@Resource
private RepositoryService repositoryService;
@Resource
private OrgUserMapper orgUserMapper;
@Override
public void notify(DelegateExecution execution) {
String currentActivityId = execution.getCurrentActivityId();
......@@ -68,90 +76,16 @@ public class CounterSignListener implements ExecutionListener {
List<String> Roles=group.getApproverIds();
for (String role :Roles
) {
// assigneeList.add(role.getId());
List<UserListDTO> userList=orgUserMapper.QueryUserByRoleId(role);
for (UserListDTO userId :userList)
{
assigneeList.add(userId.getUserID());
}
}
}
else if (Type.equals("3"))//指定组织机构中的角色
{}
// Properties props = currentNode.getProps();
// String assignedType = props.getAssignedType();
Map<String, Object> nobody = new HashMap<>();
// if (AssigneeTypeEnums.ASSIGN_USER.getTypeName().equals(assignedType)) {
// List<UserInfo> assignedUser = props.getAssignedUser();
// for (UserInfo userInfo : assignedUser) {
// assigneeList.add(userInfo.getId());
// }
// } else if (AssigneeTypeEnums.SELF_SELECT.getTypeName().equals(assignedType)) {
//
// } else if (AssigneeTypeEnums.LEADER_TOP.getTypeName().equals(assignedType)) {
// throw new WorkFlowException("暂不做这个功能,等发版!");
// } else if (AssigneeTypeEnums.LEADER.getTypeName().equals(assignedType)) {
// /*
// 这里代码应该怎么写??? 你想想
// 应该是 通过leader 的code 查出来leader里面的人 然后添加到
// assigneeList.addAll() 既可
// 不过本项目没有添加leader的CRUD页面 所以 先这样,
// 怎么实现就是上述实现手段
// 下面角色也一样, 希望我们<布尔什维克>的
// 同志们
// 可以举一反三 一通百通
// */
//// throw new WorkFlowException("当前只是简单的系统 没有RBAC功能,各位可以自己实现!");
// } else if (AssigneeTypeEnums.ROLE.getTypeName().equals(assignedType)) {
//
//// throw new WorkFlowException("当前只是简单的系统 没有RBAC功能,各位可以自己实现!");
// } else if (AssigneeTypeEnums.SELF.getTypeName().equals(assignedType)) {
// String startUserJson = execution.getVariable(START_USER_INFO, String.class);
// UserInfo userInfo = JSONObject.parseObject(startUserJson, new TypeReference<UserInfo>() {
// });
// assigneeList.add(userInfo.getId());
// } else if (AssigneeTypeEnums.FORM_USER.getTypeName().equals(assignedType)) {
// String formUser = props.getFormUser();
// List<JSONObject> assigneeUsers = execution.getVariable(formUser, List.class);
// if (assigneeUsers != null) {
// for (JSONObject assigneeUser : assigneeUsers) {
// assigneeList.add(assigneeUser.getString("id"));
// }
// }
//
// }
// if (CollUtil.isEmpty(assigneeList)) {
// String handler = MapUtil.getStr(nobody, "handler");
// if ("TO_PASS".equals(handler)) {
// assigneeList.add("100000");
// execution.setVariable(variable, assigneeList);
// } else if ("TO_REFUSE".equals(handler)) {
// execution.setVariable("autoRefuse", Boolean.TRUE);
// assigneeList.add("100000");
// execution.setVariable(variable, assigneeList);
// } else if ("TO_ADMIN".equals(handler)) {
// assigneeList.add("381496");
// execution.setVariable(variable, assigneeList);
// } else if ("TO_USER".equals(handler)) {
// Object assignedUserObj = nobody.get("assignedUser");
// if (assignedUserObj != null) {
// List<JSONObject> assignedUser = (List<JSONObject>) assignedUserObj;
// if (assignedUser.size() > 0) {
// for (JSONObject object : assignedUser) {
// assigneeList.add(object.getString("id"));
// }
// execution.setVariable(variable, assigneeList);
// } else {
// assigneeList.add("100000");
// execution.setVariable(variable, assigneeList);
// }
//
// }
//
// } else {
// throw new WorkFlowException("找不到审批人,请检查配置!!!");
// }
// } else {
// execution.setVariable(variable, assigneeList);
// }
if (assigneeList.size()!=0)
{execution.setVariable(variable, assigneeList);}
......
package com.junmp.junmpProcess.mapper;
import com.junmp.junmpProcess.dto.UserListDTO;
import com.junmp.junmpProcess.entity.TemplateGroupBo;
import com.junmp.v2.sys.api.UserServiceApi;
import com.junmp.v2.sys.api.bean.user.dto.RoleUserDto;
import com.junmp.v2.sys.api.bean.user.vo.QueryUserInfoVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface OrgUserMapper {
/**
* 查询所有表单及组
*
* @return
*/
public List<UserListDTO> QueryUserByRoleId(String roleId);
// @Override
// public RoleUserDto queryUserByRoleId(Long roleId) {
// return null;
// }
//
// @Override
// public List<QueryUserInfoVo> queryUserByRoleAndOrg(Long roleId, Long orgId) {
// return null;
// }
}
......@@ -21,8 +21,7 @@ public interface TemplateGroupMapper extends BaseMapper<TemplateGroup> {
*
* @return
*/
@Select("SELECT fg.group_id, tg.id, fg.group_name, pt.template_id, pt.remark, pt.is_stop, pt.updated, pt.template_name, " +
"pt.icon, pt.background FROM process_templates pt LEFT JOIN template_group tg ON pt.template_id = tg.template_id\n" +
"RIGHT JOIN form_groups fg ON tg.group_id = fg.group_id ORDER BY fg.sort_num ASC, tg.sort_num ASC")
@Select("SELECT pt.template_id, pt.remark, pt.is_stop, pt.updated, pt.form_name, \n" +
" pt.icon, pt.background FROM process_templates pt ORDER BY updated desc")
List<TemplateGroupBo> getAllFormAndGroups();
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.junmp.junmpProcess.mapper.OrgUserMapper">
<resultMap id="UserListDTO" type="com.junmp.junmpProcess.dto.UserListDTO">
<!--@mbg.generated-->
<!--@Table base_cabinet-->
<result column="user_id" jdbcType="VARCHAR" property="userID" />
<result column="real_name" jdbcType="VARCHAR" property="realName" />
<result column="role_name" jdbcType="VARCHAR" property="roleName" />
<result column="role_id" jdbcType="VARCHAR" property="roleID" />
</resultMap>
<select id="QueryUserByRoleId" resultMap="UserListDTO">
SELECT su.user_id,su.real_name,sr.role_name,sr.role_id FROM `sys_role` sr left join sys_user_role sur on sr.role_id=sur.role_id LEFT JOIN sys_user su on sur.user_id=su.user_id
where sr.role_id=#{roleId}
</select>
</mapper>
\ No newline at end of file
......@@ -23,13 +23,29 @@ public interface WorkProcessService {
* @return
*/
Result<String> createBpmn(ProcessVO processVO) throws JsonProcessingException;
/**
* 编辑表单
*
* @return
*/
Object updateForm(UpdateProcessVO process) throws JsonProcessingException;
/**
* @Author: Zhaojw
* @Description:
* @DateTime: 2023/6/26 13:05
* @Params:
* @Return
*/
Result<ProcessTemplates> getFormDetail(String templateId);
/**
* 获取用户可见表单
*
* @return
*/
Object getFormGroups(String name);
Object getFormList();
/**
* 通过模板id查看流程信息 会附带流程定义id
......
package com.junmp.junmpProcess.service.Bussiness.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.junmp.v2.sys.api.UserServiceApi;
import com.junmp.v2.sys.api.bean.user.OnlineUserDto;
import com.junmp.v2.sys.api.bean.user.SysUserDto;
import com.junmp.v2.sys.api.bean.user.UserLoginInfoDto;
import com.junmp.v2.sys.api.bean.user.dto.RoleUserDto;
import com.junmp.v2.sys.api.bean.user.req.OnlineUserReq;
import com.junmp.v2.sys.api.bean.user.req.SysUserReq;
import com.junmp.v2.sys.api.bean.user.vo.QueryUserInfoVo;
import java.util.Date;
import java.util.List;
import java.util.Set;
public class OrgUserServicelmpl implements UserServiceApi {
@Override
public UserLoginInfoDto getUserLoginInfo(String account) {
return null;
}
@Override
public void updateUserLoginInfo(Long userId, Date date, String ip) {
}
@Override
public Boolean userExist(Long userId) {
return null;
}
@Override
public List<Long> getUserRoleIdList(Long userId) {
return null;
}
@Override
public void deleteUserDataScopeListByOrgIdList(Set<Long> organizationIds) {
}
@Override
public void deleteUserRoleListByRoleId(Long roleId) {
}
@Override
public List<Long> getUserBindDataScope(Long userId) {
return null;
}
@Override
public List<OnlineUserDto> onlineUserList(OnlineUserReq req) {
return null;
}
@Override
public SysUserDto getUserInfoByUserId(Long userId) {
return null;
}
@Override
public List<Long> queryAllUserIdList(SysUserReq req) {
return null;
}
@Override
public List<String> queryAppByUserId(Long userId) {
return null;
}
@Override
public RoleUserDto queryUserByRoleId(Long roleId) {
return null;
}
@Override
public List<QueryUserInfoVo> queryUserByRoleAndOrg(Long roleId, Long orgId) {
return null;
}
}
package com.junmp.junmpProcess.service.Bussiness.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.Lists;
import com.junmp.junmpProcess.common.R;
import com.junmp.junmpProcess.dto.*;
import com.junmp.junmpProcess.dto.json.*;
import com.junmp.junmpProcess.entity.TemplateGroupBo;
import com.junmp.junmpProcess.exception.WorkFlowException;
import com.junmp.junmpProcess.mapper.TemplateGroupMapper;
import com.junmp.junmpProcess.service.Bussiness.WorkProcessService;
import com.junmp.junmpProcess.service.Repository.ProcessTemplateService;
import com.junmp.junmpProcess.utils.IdWorker;
import com.junmp.junmpProcess.utils.SpringContextHolder;
import com.junmp.junmpProcess.vo.*;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.flowable.bpmn.BpmnAutoLayout;
import org.flowable.bpmn.converter.BpmnXMLConverter;
import org.flowable.bpmn.model.*;
......@@ -46,6 +56,8 @@ import com.junmp.junmpProcess.dto.json.flowJson.Inout;
import com.junmp.junmpProcess.entity.ProcessTemplates;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.junmp.junmpProcess.utils.BpmnConvert;
import javax.annotation.Resource;
import java.util.*;
......@@ -53,6 +65,7 @@ import java.util.stream.Collectors;
import static com.junmp.junmpProcess.common.CommonConstants.*;
import static com.junmp.junmpProcess.common.WorkFlowConstants.PROCESS_PREFIX;
import static com.junmp.junmpProcess.utils.BpmnConvert.toBpmn;
import static com.junmp.junmpProcess.utils.BpmnModelUtils.*;
......@@ -70,22 +83,128 @@ public class WorkProcessServiceImpl implements WorkProcessService {
private HistoryService historyService;
@Resource
private TaskService taskService;
@Resource
private IdWorker idWorker;
public Object getFormList()
{
TemplateGroupMapper templateGroupMapper = SpringContextHolder.getBean(TemplateGroupMapper.class);
List<TemplateGroupBo> allformAndGroups = templateGroupMapper.getAllFormAndGroups();
Map<Integer, List<TemplateGroupBo>> coverMap = new LinkedHashMap<>();
allformAndGroups.forEach(fg -> {
List<TemplateGroupBo> bos = coverMap.get(fg.getGroupId());
if (CollectionUtil.isEmpty(bos)) {
List<TemplateGroupBo> list = new ArrayList<>();
list.add(fg);
coverMap.put(fg.getGroupId(), list);
} else {
bos.add(fg);
}
});
List<TemplateGroupVo> results = new ArrayList<>();
coverMap.forEach((key, val) -> {
List<TemplateGroupVo.Template> templates = new ArrayList<>();
val.forEach(v -> {
if (ObjectUtil.isNotNull(v.getTemplateId())) {
String defId="";
ProcessDefinition ProDef=repositoryService.createProcessDefinitionQuery()
.processDefinitionKey("Process_"+v.getTemplateId())
.latestVersion()
.singleResult();
if(ProDef!=null)
{
defId=ProDef.getId();
}
templates.add(TemplateGroupVo.Template.builder()
.formId(v.getTemplateId())
.tgId(v.getId())
.remark(v.getRemark())
.formName(v.getFormName())
.isStop(v.getIsStop())
.updated(DateFormatUtils.format(v.getUpdated(),"yyyy年MM月dd日 HH时:mm分:ss秒"))
.templateId(v.getTemplateId())
.processDefinitionId(defId)
.build());
}
});
results.add(TemplateGroupVo.builder().id(key).name(val.get(0).getGroupName()).items(templates).build());
});
return R.ok(results);
}
public Result<String> createBpmn(ProcessVO processVO) throws JsonProcessingException {
//流程定义
ObjectMapper objectMapper = new ObjectMapper();
JsonNode processJsonNode = objectMapper.readTree(processVO.getProcessJson());
JsonNode formJsonNode = objectMapper.readTree(processVO.getFormJson());
String formName=processVO.getFormName().toString();
ProcessTemplates processTemplates = ProcessTemplates.builder().build();
String templateId = idWorker.nextId()+"";
processTemplates.setTemplateId(templateId);
processTemplates.setFormJson(formJsonNode.toString());
processTemplates.setProcessJson(processJsonNode.toString());
processTemplates.setFormName(processVO.getFormName());
processTemplates.setIsStop(false);
Date date= new Date();
processTemplates.setCreated(date);
processTemplates.setUpdated(date);
processTemplateService.save(processTemplates);
//将json转换为bpmn
BpmnModel bpmnModel = processTemplateService.toBpmn(processJsonNode,formJsonNode,formName);
BpmnModel bpmnModel = toBpmn(processJsonNode,formJsonNode,formName,templateId);
Deployment deploy = repositoryService.createDeployment()
.addBpmnModel(bpmnModel.getProcesses().get(0).getId()+".bpmn20.xml", bpmnModel)
.addBpmnModel(processVO.getFormName()+".bpmn20.xml", bpmnModel)
.name(processVO.getFormName())
.deploy();
return Result.OK(deploy.getId());
}
/**
* 编辑表单详情
*
* @return 修改结果
*/
@Transactional
public Object updateForm(UpdateProcessVO process) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
JsonNode processJsonNode = objectMapper.readTree(process.getProcessJson());
JsonNode formJsonNode = objectMapper.readTree(process.getFormJson());
String formName=process.getFormName().toString();
String templateId = idWorker.nextId()+"";
ProcessTemplates processTemplates = processTemplateService.getById(process.getFormId());
processTemplates.setFormName(process.getFormName());
processTemplates.setFormJson(process.getFormJson());
processTemplates.setProcessJson(process.getProcessJson());
processTemplates.setUpdated(new Date());
processTemplateService.updateById(processTemplates);//更新表单明细表信息
BpmnModel bpmnModel = toBpmn(processJsonNode,formJsonNode,formName,templateId);
Deployment deploy = repositoryService.createDeployment()
.addBpmnModel(process.getFormName()+".bpmn20.xml", bpmnModel)
.name(process.getFormName())
.deploy();
return R.ok("发布更新后的表单成功");
}
@Override
public Result<ProcessTemplates> getFormDetail(String templateId) {
ProcessTemplates processTemplates = processTemplateService.getById(templateId);
processTemplates.setLogo(processTemplates.getIcon());
processTemplates.setFormId(processTemplates.getTemplateId());
processTemplates.setFormName(processTemplates.getFormName());
Object aa= repositoryService.createProcessDefinitionQuery();
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey("Process_"+templateId).latestVersion().singleResult();
if(processDefinition==null){
throw new WorkFlowException("该流程暂未接入Flowable,请重试");
}
processTemplates.setProcessDefinitionId(processDefinition.getId());
return Result.OK(processTemplates);
}
/**
* 绘制节点
*
......@@ -316,20 +435,7 @@ public class WorkProcessServiceImpl implements WorkProcessService {
}
@Override
public Object getFormGroups(String templateId) {
ProcessTemplates processTemplates = processTemplateService.getById(templateId);
processTemplates.setFormId(processTemplates.getTemplateId());
processTemplates.setFormName(processTemplates.getFormName());
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey(PROCESS_PREFIX + templateId).latestVersion().singleResult();
if (processDefinition == null) {
throw new WorkFlowException("该流程暂未接入Flowable,请重试");
}
// processTemplates.setProcessDefinitionId(processDefinition.getId());
return processTemplates;
// return null;
}
/**
* 通过模板id查看流程信息 会附带流程定义id
......@@ -1114,50 +1220,6 @@ public class WorkProcessServiceImpl implements WorkProcessService {
return Result.OK(handleDataVO);
}
// @Override
// public Result<AttachmentVO> upLoadFile(MultipartFile file, HttpServletRequest request) {
// MinioUploadUtil minioUploadUtil = SpringContextHolder.getBean(MinioUploadUtil.class);
// MinioClient minioClient = SpringContextHolder.getBean(MinioClient.class);
// AttachmentVO attachmentVO= new AttachmentVO();
// attachmentVO.setName(file.getOriginalFilename());
// minioUploadUtil.uploadFile(file, "java", file.getOriginalFilename());
// try {
// String url = minioClient.getPresignedObjectUrl(
// GetPresignedObjectUrlArgs.builder()
// .bucket("java")
// .object(file.getOriginalFilename())
// .expiry(7, TimeUnit.DAYS) // 设置5秒的超时时间。
// .method(Method.GET)
// .build());
// attachmentVO.setUrl(url);
// } catch (ErrorResponseException e) {
// e.printStackTrace();
// } catch (InsufficientDataException e) {
// e.printStackTrace();
// } catch (InternalException e) {
// e.printStackTrace();
// } catch (InvalidKeyException e) {
// e.printStackTrace();
// } catch (InvalidResponseException e) {
// e.printStackTrace();
// } catch (IOException e) {
// e.printStackTrace();
// } catch (NoSuchAlgorithmException e) {
// e.printStackTrace();
// } catch (XmlParserException e) {
// e.printStackTrace();
// } catch (ServerException e) {
// e.printStackTrace();
// }
// return Result.OK(attachmentVO);
// }
//
// @Override
// public void downLoadFile(String name) {
// MinioUploadUtil minioUploadUtil = SpringContextHolder.getBean(MinioUploadUtil.class);
// minioUploadUtil.downFile(name,"java",name);
// }
private void collectUserTaskInfo(List<Comment> processInstanceComments,
List<Attachment> processInstanceAttachments,
HistoricActivityInstance historicActivityInstance,
......
......@@ -11,10 +11,4 @@ import org.flowable.bpmn.model.BpmnModel;
*/
public interface ProcessTemplateService extends IService<ProcessTemplates> {
/**
* 获取用户可见表单
*
* @return
*/
public BpmnModel toBpmn(JsonNode processNode, JsonNode formNode,String formName);
}
......@@ -39,306 +39,5 @@ import static org.flowable.bpmn.model.ImplementationType.IMPLEMENTATION_TYPE_DEL
public class ProcessTemplateServiceImpl extends ServiceImpl<ProcessTemplatesMapper, ProcessTemplates> implements
ProcessTemplateService {
@Resource
private IdWorker idWorker;
@Autowired
private ProcessTemplateService processTemplateService;
public BpmnModel toBpmn(JsonNode processNode, JsonNode formNode,String formName) {
//表单存储
String formItems = formNode.toString();
String templateId = idWorker.nextId()+"";
ProcessTemplates processTemplates = ProcessTemplates.builder().build();
processTemplates.setTemplateId(templateId);
processTemplates.setFormJson(formItems);
processTemplates.setProcessJson(processNode.toString());
processTemplates.setIsStop(false);
Date date= new Date();
processTemplates.setCreated(date);
processTemplates.setUpdated(date);
processTemplateService.save(processTemplates);
JSONObject jsonObject=new JSONObject();
jsonObject.put("processJson", processNode.toString());
jsonObject.put("formJson", formItems);
// 一.准备工作
BpmnModel bpmnModel = new BpmnModel();
String id=""+ UUID.randomUUID();
bpmnModel.setTargetNamespace(id+"");
ExtensionAttribute extensionAttribute=new ExtensionAttribute();
extensionAttribute.setName("Junmp");
extensionAttribute.setNamespace("http://flowable.org/bpmn");
extensionAttribute.setValue(jsonObject.toJSONString());
Process process = new Process(); // 相当于图纸
process.setName(formName);
process.setId("Process_"+templateId);
process.setExecutable(true);
process.addAttribute(extensionAttribute);
bpmnModel.addProcess(process);
// 二.开始结束节点
// 二.开始结束节点
StartEvent startEvent = new StartEvent();// 新建开始节点
startEvent.setId("_start");
startEvent.setInitiator("initiator");
process.addFlowElement(startEvent);// 绘制到图纸
EndEvent endEvent = new EndEvent(); // 新建结束节点
endEvent.setId("_end");// 绘制到图纸
process.addFlowElement(endEvent);
// 三.递归绘制节点
drawNode("root",process, processNode,formNode, "_start", "_end", null);
// 四.自动布局
new BpmnAutoLayout(bpmnModel).execute();
// 五.转xml
return bpmnModel;
}
/**
* 绘制节点
* @param process bpmn process 图纸
* @param node json的节点
* @param preId 上一节点id
* @param endId 结束节点
* @param preExpression 上一节点表达式
*/
public void drawNode(String typeNode,Process process, JsonNode node,JsonNode formJson, String preId, String endId, String preExpression) {
// 根据type绘制不同种类的节点
Inout inout = drawNodeByType(process, node,formJson,typeNode);
// 绘制前一根线
process.addFlowElement(createSequenceFlow(preId, inout.getIn(), preExpression));
if (node.get("childNode").toString().equals("null")) {
// 没有下一步, 绘制指向结束的线
process.addFlowElement(createSequenceFlow(inout.getOut(), endId, null));
} else {
// 有下一步, 递归绘制下一个节点
drawNode("",process, node.get("childNode"),formJson, inout.getOut(), endId, null);
}
}
/**
* 绘制不同种类节点
* @param process
* @param node
* @return Inout
*/
private Inout drawNodeByType(Process process, JsonNode node,JsonNode formJson,String typeNode) {
if (node.get("type").toString().equals("0")) { //标准节点
return drawBzNode(process, node,formJson,typeNode);
} else if (node.get("type").toString().equals("1")) {//审核节点
return drawAuditNode(process, node);
} else if (node.get("type").toString().equals("4")) {//路由
return drawExclusiveNode(process, node);
}
else {
throw new IllegalArgumentException();
}
}
/**
* 绘制标准节点
* @param process
* @param node
* @return Inout
*/
private Inout drawBzNode(Process process, JsonNode node,JsonNode formJson,String typeNode) {
// String id= "Node_"+UUID.randomUUID();
String id="Node_"+ node.get("id").asText();
//创建发起人结点
UserTask task = new UserTask();
//设置结点ID
task.setId(id);
//设置结点名称
task.setName(node.get("name").asText());
//通过将 ${initiator} 作为指派人的值,可以将用户任务分配给流程的发起人。当流程实例启动时,${initiator} 会被替换为实际的发起人信息。
//需要注意的是,在使用表达式时,需要确保流程引擎的配置中启用了表达式语言(例如使用 Flowable 的默认配置,会启用表达式语言)。
task.setAssignee("${initiator}");
List<FormProperty> formProperties = formJsonToFormProperty(formJson);
task.setFormProperties(formProperties);
//添加连线
process.addFlowElement(task);
return new Inout(id, id);
}
private List<FormProperty> formJsonToFormProperty(JsonNode formJson){
List<FormProperty> formList=new ArrayList<>();
for (JsonNode listInfo : formJson.get("list")) {
FormProperty form=new FormProperty();
JsonNode key=listInfo.get("key");
form.setId(key.asText());
form.setName(key.asText());
formList.add(form);
}
return formList;
}
/**
* 绘制审核节点
* @param process
* @param node
* @return Inout
*/
private Inout drawAuditNode(Process process, JsonNode node) {
// 绘制节点
// String id = "Node_"+UUID.randomUUID();
String id ="Node_"+ node.get("id").asText();
UserTask userTask = new UserTask();
userTask.setId(id);
//写入节点名称
userTask.setName(node.get("name").asText());
ObjectMapper objectMapper = new ObjectMapper();
JsonNode[] approverGroups = objectMapper.convertValue(node.get("approverGroups"), JsonNode[].class);
userTask.setExecutionListeners(getTaskListeners());//角色监听
MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics = new MultiInstanceLoopCharacteristics();
// 审批人集合参数
multiInstanceLoopCharacteristics.setInputDataItem(userTask.getId()+"assigneeList");
// 迭代集合
multiInstanceLoopCharacteristics.setElementVariable("assigneeName");
// 并行
multiInstanceLoopCharacteristics.setSequential(false);
userTask.setAssignee("${assigneeName}");
// 设置多实例属性
userTask.setLoopCharacteristics(multiInstanceLoopCharacteristics);
// for (int i = 0; i < approverGroups.length; i++) {
// JsonNode element = approverGroups[i];
// JsonNode approverType = element.get("approverType");
// JsonNode[] approverIds = objectMapper.convertValue(element.get("approverIds"), JsonNode[].class);
// if (approverType != null) {
// //指定人员
// if(approverType.asText().equals("1")){
// for(int j=0;j<approverIds.length;j++){
// userTask.setAssignee(approverIds[j].asText());
// }
// }
// else
// {
//
//// if("1".equals(examineMode)){
//// multiInstanceLoopCharacteristics.setSequential(true);
//// }
//// else if("3".equals(examineMode)){
//// multiInstanceLoopCharacteristics.setCompletionCondition("${nrOfCompletedInstances/nrOfInstances > 0}");
//// }
//
// }
// //指定角色
//// if(approverType.asText().equals("2")){
////
//// userTask.setAssignee(""); //去掉指点人员
//// for(int j=0;j<approverIds.length;j++){
//// //设置后选角色
//// userTask.getCandidateGroups().add(approverIds[j].asText());
////
//// }
////
//// }
//// //指定本组织机构中的某个角色
//// if(approverType.asText().equals("3")){
//// userTask.setAssignee(""); //去掉指点人员
//// for(int j=0;j<approverIds.length;j++){
//// //设置后选角色
//// userTask.getCandidateGroups().add(approverIds[j].asText());
//// }
////
//// }
//
//
//
// }
//
// }
process.addFlowElement(userTask);
return new Inout(id, id);
}
/**
* 监听任务启动后角色分配事件
*
* @return 监听节点列表
*/
private List<FlowableListener> getTaskListeners() {
ArrayList<FlowableListener> taskListeners = new ArrayList<>();
//监听器开始class
FlowableListener listener = new FlowableListener();
listener.setEvent(ExecutionListener.EVENTNAME_START);//监听任务启动
listener.setImplementationType(IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);
listener.setImplementation("${counterSignListener}");//启动角色分配监听事件
taskListeners.add(listener);
return taskListeners;
}
/**
* 绘制分支节点
* @param process 绘图对象
* @param node 当前节点信息
* @return Inout
*/
private Inout drawExclusiveNode(Process process, JsonNode node) {
// 开始网关
// String startId = "Exclusive_"+UUID.randomUUID();
String startId = "Exclusive_"+UUID.randomUUID();
ExclusiveGateway startGateway = new ExclusiveGateway();
startGateway.setId(startId);
process.addFlowElement(startGateway);
// 结束网关
String endId = "Exclusive_"+UUID.randomUUID();
ExclusiveGateway endGateway = new ExclusiveGateway();
endGateway.setId(endId);
process.addFlowElement(endGateway);
// 绘制分支
JsonNode branches = node.get("conditionNodes");
for (JsonNode branch : branches) {
if (branch.get("childNode").toString().equals("null")) {
// 没有子流程,直接绘制结束 内容为EL表达式
//解释JSON数据,转换为EL表达式
JsonNode conditionGroup=branch.get("conditionGroup");
String condition = JsonToELConverter.convertToEL(conditionGroup);
//条件线路 根前端数据对接 内容为EL表达式
process.addFlowElement(createSequenceFlow(startId, endId, condition));
} else {
// 有子流程,递归绘制子流程
//解释JSON数据,转换为EL表达式
JsonNode conditionGroup=branch.get("conditionGroup");
//把JSOn转换为EL表达式
String condition = JsonToELConverter.convertToEL(conditionGroup);
//条件线路 根前端数据对接 内容为EL表达式
drawNode("",process, branch.get("childNode"),null, startId, endId, condition);
}
}
// int和out不一样
return new Inout(startId, endId);
}
/**
* 创建连线
* @param from 起点
* @param to 终点
* @return SequenceFlow
*/
public SequenceFlow createSequenceFlow(String from, String to, String conditionExpression) {
SequenceFlow flow = new SequenceFlow();
flow.setId("Node_"+UUID.randomUUID());
flow.setSourceRef(from);
flow.setTargetRef(to);
if (conditionExpression != null) {
flow.setConditionExpression(conditionExpression);
}
return flow;
}
}
......@@ -4,67 +4,68 @@ import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.junmp.junmpProcess.dto.json.flowJson.Inout;
import com.junmp.junmpProcess.entity.ProcessTemplates;
import com.junmp.junmpProcess.service.Repository.ProcessTemplateService;
import org.flowable.bpmn.BpmnAutoLayout;
import org.flowable.bpmn.converter.BpmnXMLConverter;
import org.flowable.bpmn.model.*;
import org.flowable.bpmn.model.Process;
import org.flowable.engine.delegate.ExecutionListener;
import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.Resource;
import java.util.*;
import static org.flowable.bpmn.model.ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION;
public class BpmnConvert {
public BpmnModel toBpmn(JsonNode node,JsonNode formNode) {
@Resource
private IdWorker idWorker;
public static BpmnModel toBpmn(JsonNode processNode, JsonNode formNode,String formName,String templateId) {
//表单存储
// String remark = flowEngineDTO.getRemark();
// String formItems = flowEngineDTO.getFormItems();
// String formName = flowEngineDTO.getFormName();
// String logo = flowEngineDTO.getLogo();
// Integer groupId = flowEngineDTO.getGroupId();
// String templateId = idWorker.nextId()+"";
// ProcessTemplates processTemplates = ProcessTemplates.builder().build();
// processTemplates.setTemplateId(templateId);
// processTemplates.setTemplateName(formName);
// processTemplates.setGroupId(groupId);
// processTemplates.setFormItems(formItems);
// processTemplates.setProcess(processJson);
// processTemplates.setIcon(logo);
// processTemplates.setBackground(logo);
// processTemplates.setNotify(settingsInfo.getNotify().toJSONString());
// String adminInfo = JSONObject.toJSONString(settingsInfo.getAdmin());
// processTemplates.setSettings(settingsJson);
// processTemplates.setWhoCommit(adminInfo);
// processTemplates.setWhoEdit(adminInfo);
// processTemplates.setWhoExport(adminInfo);
// processTemplates.setRemark(flowEngineDTO.getRemark());
// processTemplates.setIsStop(false);
// Date date= new Date();
// processTemplates.setCreated(date);
// processTemplates.setUpdated(date);
// processTemplateService.save(processTemplates);
JSONObject jsonObject=new JSONObject();
jsonObject.put("processJson", processNode.toString());
jsonObject.put("formJson", formNode.toString());
// 一.准备工作
BpmnModel bpmnModel = new BpmnModel();
String id=""+UUID.randomUUID();
String id=""+ UUID.randomUUID();
bpmnModel.setTargetNamespace(id+"");
ExtensionAttribute extensionAttribute=new ExtensionAttribute();
extensionAttribute.setName("Junmp");
extensionAttribute.setNamespace("http://flowable.org/bpmn");
extensionAttribute.setValue(jsonObject.toJSONString());
Process process = new Process(); // 相当于图纸
bpmnModel.addProcess(process);
process.setId("Process_"+ id);
process.setName(formName);
process.setId("Process_"+templateId);
process.setExecutable(true);
process.addAttribute(extensionAttribute);
bpmnModel.addProcess(process);
// 二.开始结束节点
// 二.开始结束节点
StartEvent startEvent = new StartEvent();// 新建开始节点
startEvent.setId("_start");
startEvent.setInitiator("initiator");
process.addFlowElement(startEvent);// 绘制到图纸
EndEvent endEvent = new EndEvent(); // 新建结束节点
endEvent.setId("_end");// 绘制到图纸
process.addFlowElement(endEvent);
// 三.递归绘制节点
drawNode(process, node,formNode, "_start", "_end", null);
drawNode("root",process, processNode,formNode, "_start", "_end", null);
// 四.自动布局
new BpmnAutoLayout(bpmnModel).execute();
// 五.转xml
// BpmnXMLConverter bpmnXMLConverter=new BpmnXMLConverter();
// byte[] convertToXML = bpmnXMLConverter.convertToXML(bpmnModel);
// String xml=new String(convertToXML);
// xml = xml.replaceAll("&lt;","<").replaceAll("&gt;",">");
return bpmnModel;
}
......@@ -76,9 +77,10 @@ public class BpmnConvert {
* @param endId 结束节点
* @param preExpression 上一节点表达式
*/
public void drawNode(Process process, JsonNode node,JsonNode formJson, String preId, String endId, String preExpression) {
public static void drawNode(String typeNode,Process process, JsonNode node,JsonNode formJson, String preId, String endId, String preExpression) {
// 根据type绘制不同种类的节点
Inout inout = drawNodeByType(process, node,formJson);
Inout inout = drawNodeByType(process, node,formJson,typeNode);
// 绘制前一根线
process.addFlowElement(createSequenceFlow(preId, inout.getIn(), preExpression));
if (node.get("childNode").toString().equals("null")) {
......@@ -86,7 +88,7 @@ public class BpmnConvert {
process.addFlowElement(createSequenceFlow(inout.getOut(), endId, null));
} else {
// 有下一步, 递归绘制下一个节点
drawNode(process, node.get("childNode"),formJson, inout.getOut(), endId, null);
drawNode("",process, node.get("childNode"),formJson, inout.getOut(), endId, null);
}
}
......@@ -96,9 +98,9 @@ public class BpmnConvert {
* @param node
* @return Inout
*/
private Inout drawNodeByType(Process process, JsonNode node,JsonNode formJson) {
private static Inout drawNodeByType(Process process, JsonNode node,JsonNode formJson,String typeNode) {
if (node.get("type").toString().equals("0")) { //标准节点
return drawBzNode(process, node,formJson);
return drawBzNode(process, node,formJson,typeNode);
} else if (node.get("type").toString().equals("1")) {//审核节点
return drawAuditNode(process, node);
} else if (node.get("type").toString().equals("4")) {//路由
......@@ -115,36 +117,34 @@ public class BpmnConvert {
* @param node
* @return Inout
*/
private Inout drawBzNode(Process process, JsonNode node,JsonNode formJson) {
// 绘制节点 创建自动执行任务节点
String id = "Node_"+UUID.randomUUID();
private static Inout drawBzNode(Process process, JsonNode node,JsonNode formJson,String typeNode) {
// String id= "Node_"+UUID.randomUUID();
String id="Node_"+ node.get("id").asText();
//创建发起人结点
UserTask task = new UserTask();
//设置结点ID
task.setId(id);
//设置结点名称
task.setName(node.get("name").toString());
task.setName(node.get("name").asText());
//通过将 ${initiator} 作为指派人的值,可以将用户任务分配给流程的发起人。当流程实例启动时,${initiator} 会被替换为实际的发起人信息。
//需要注意的是,在使用表达式时,需要确保流程引擎的配置中启用了表达式语言(例如使用 Flowable 的默认配置,会启用表达式语言)。
task.setAssignee("${initiator}");
List<FormProperty> formProperties = formJsonToFormProperty(formJson);
task.setFormProperties(formProperties);
//添加连线
process.addFlowElement(task);
return new Inout(id, id);
}
private List<FormProperty> formJsonToFormProperty(JsonNode formJson){
private static List<FormProperty> formJsonToFormProperty(JsonNode formJson){
List<FormProperty> formList=new ArrayList<>();
for (JsonNode listInfo : formJson.get("list")) {
FormProperty form=new FormProperty();
form.setName(listInfo.get("key").toString());
JsonNode key=listInfo.get("key");
form.setId(key.asText());
form.setName(key.asText());
formList.add(form);
}
......@@ -158,63 +158,44 @@ public class BpmnConvert {
* @param node
* @return Inout
*/
private Inout drawAuditNode(Process process, JsonNode node) {
private static Inout drawAuditNode(Process process, JsonNode node) {
// 绘制节点
String id = "Node_"+UUID.randomUUID();
// String id = "Node_"+UUID.randomUUID();
String id ="Node_"+ node.get("id").asText();
UserTask userTask = new UserTask();
userTask.setId(id);
//写入节点名称
userTask.setName(node.get("name").toString());
userTask.setName(node.get("name").asText());
ObjectMapper objectMapper = new ObjectMapper();
JsonNode[] approverGroups = objectMapper.convertValue(node.get("approverGroups"), JsonNode[].class);
for (int i = 0; i < approverGroups.length; i++) {
JsonNode element = approverGroups[i];
JsonNode approverType = element.get("approverType");
JsonNode[] approverIds = objectMapper.convertValue(element.get("approverIds"), JsonNode[].class);
if (approverType != null) {
//指定人员
if(approverType.asText().equals("1")){
for(int j=0;j<approverIds.length;j++){
userTask.setAssignee(approverIds[j].asText());
}
}
//指定角色
if(approverType.asText().equals("2")){
userTask.setAssignee(""); //去掉指点人员
for(int j=0;j<approverIds.length;j++){
//设置后选角色
userTask.getCandidateGroups().add(approverIds[j].asText());
}
}
//指定本部门中的某个角色
if(approverType.asText().equals("3")){
userTask.setAssignee(""); //去掉指点人员
for(int j=0;j<approverIds.length;j++){
//设置后选角色
userTask.getCandidateGroups().add(approverIds[j].asText());
}
// 设置任务监听器 获取本部门的角色才可进行审批
userTask.setTaskListeners(getTaskListeners());
}
}
}
userTask.setExecutionListeners(getTaskListeners());//角色监听
MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics = new MultiInstanceLoopCharacteristics();
// 审批人集合参数
multiInstanceLoopCharacteristics.setInputDataItem(userTask.getId()+"assigneeList");
// 迭代集合
multiInstanceLoopCharacteristics.setElementVariable("assigneeName");
// 并行
multiInstanceLoopCharacteristics.setSequential(false);
multiInstanceLoopCharacteristics.setCompletionCondition("${nrOfCompletedInstances/nrOfInstances > 0}");
userTask.setAssignee("${assigneeName}");
// 设置多实例属性
userTask.setLoopCharacteristics(multiInstanceLoopCharacteristics);
process.addFlowElement(userTask);
return new Inout(id, id);
}
/**
* 获取用户任务监听节点
* 监听任务启动后角色分配事件
*
* @return 监听节点列表
*/
private List<FlowableListener> getTaskListeners() {
List<FlowableListener> taskListeners = new ArrayList<>();
private static List<FlowableListener> getTaskListeners() {
ArrayList<FlowableListener> taskListeners = new ArrayList<>();
//监听器开始class
FlowableListener listener = new FlowableListener();
listener.setEvent("all");
listener.setImplementationType("class");
listener.setImplementation("org.example.MultiInstanceTaskListener");
listener.setEvent(ExecutionListener.EVENTNAME_START);//监听任务启动
listener.setImplementationType(IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);
listener.setImplementation("${counterSignListener}");//启动角色分配监听事件
taskListeners.add(listener);
return taskListeners;
}
......@@ -225,7 +206,7 @@ public class BpmnConvert {
* @param node 当前节点信息
* @return Inout
*/
private Inout drawExclusiveNode(Process process, JsonNode node) {
private static Inout drawExclusiveNode(Process process, JsonNode node) {
// 开始网关
String startId = "Exclusive_"+UUID.randomUUID();
ExclusiveGateway startGateway = new ExclusiveGateway();
......@@ -253,7 +234,7 @@ public class BpmnConvert {
//把JSOn转换为EL表达式
String condition = JsonToELConverter.convertToEL(conditionGroup);
//条件线路 根前端数据对接 内容为EL表达式
drawNode(process, branch.get("childNode"),null, startId, endId, condition);
drawNode("",process, branch.get("childNode"),null, startId, endId, condition);
}
}
// int和out不一样
......@@ -266,7 +247,7 @@ public class BpmnConvert {
* @param to 终点
* @return SequenceFlow
*/
public SequenceFlow createSequenceFlow(String from, String to, String conditionExpression) {
public static SequenceFlow createSequenceFlow(String from, String to, String conditionExpression) {
SequenceFlow flow = new SequenceFlow();
flow.setId("Node_"+UUID.randomUUID());
flow.setSourceRef(from);
......
......@@ -31,7 +31,7 @@ public class TemplateGroupVo {
public static class Template {
private String formId;
private String processDefinitionId;
private Integer tgId;
private String formName;
......
package com.junmp.junmpProcess.vo;
import lombok.Data;
@Data
public class UpdateProcessVO {
private String formId;
private String formJson;
private String formName;
private String processJson;
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.junmp.junmpProcess.mapper.OrgUserMapper">
<resultMap id="UserListDTO" type="com.junmp.junmpProcess.dto.UserListDTO">
<!--@mbg.generated-->
<!--@Table base_cabinet-->
<result column="user_id" jdbcType="VARCHAR" property="userID" />
<result column="real_name" jdbcType="VARCHAR" property="realName" />
<result column="role_name" jdbcType="VARCHAR" property="roleName" />
<result column="role_id" jdbcType="VARCHAR" property="roleID" />
</resultMap>
<select id="QueryUserByRoleId" resultMap="UserListDTO">
SELECT su.user_id,su.real_name,sr.role_name,sr.role_id FROM `sys_role` sr left join sys_user_role sur on sr.role_id=sur.role_id LEFT JOIN sys_user su on sur.user_id=su.user_id
where sr.role_id=#{roleId}
</select>
</mapper>
\ No newline at end of file
com\junmp\junmpProcess\dto\PageDTO.class
com\junmp\junmpProcess\controller\WorkspaceProcessController$15.class
com\junmp\junmpProcess\entity\Process.class
com\junmp\junmpProcess\dto\json\flowJson\FlowConditionNodes.class
com\junmp\junmpProcess\dto\json\FormItemProps.class
......@@ -12,9 +11,7 @@ com\junmp\junmpProcess\utils\BpmnModelUtils.class
com\junmp\junmpProcess\utils\BpmnModelUtils$FlowType.class
com\junmp\junmpProcess\listener\ServiceListener.class
com\junmp\junmpProcess\dto\json\EmailInfo.class
com\junmp\junmpProcess\controller\WorkspaceProcessController$7.class
com\junmp\junmpProcess\mapper\UsersMapper.class
com\junmp\junmpProcess\controller\WorkspaceProcessController$4.class
com\junmp\junmpProcess\controller\MainProcessController.class
com\junmp\junmpProcess\dto\AttachmentDTO.class
com\junmp\junmpProcess\listener\CounterSignListener.class
......@@ -25,15 +22,12 @@ com\junmp\junmpProcess\utils\ExUtils$1.class
com\junmp\junmpProcess\dto\json\NotifyType.class
com\junmp\junmpProcess\service\Bussiness\impl\WorkProcessServiceImpl$2.class
com\junmp\junmpProcess\service\Repository\impl\TemplateGroupServiceImpl.class
com\junmp\junmpProcess\controller\WorkspaceProcessController$1.class
com\junmp\junmpProcess\dto\json\FormOperates.class
com\junmp\junmpProcess\mapper\TemplateGroupMapper.class
com\junmp\junmpProcess\mapper\FormGroupsMapper.class
com\junmp\junmpProcess\service\Repository\WorkspaceProcessService.class
com\junmp\junmpProcess\controller\WorkspaceProcessController.class
com\junmp\junmpProcess\service\Bussiness\impl\WorkProcessServiceImpl$13.class
com\junmp\junmpProcess\entity\Process$ProcessBuilder.class
com\junmp\junmpProcess\controller\WorkspaceProcessController$12.class
com\junmp\junmpProcess\service\Bussiness\impl\WorkProcessServiceImpl$5.class
com\junmp\junmpProcess\controller\BpmnController.class
com\junmp\junmpProcess\dto\HandleDataDTO.class
......@@ -49,14 +43,12 @@ com\junmp\junmpProcess\entity\FormGroups$FormGroupsBuilder.class
com\junmp\junmpProcess\entity\TemplateGroupBo.class
springfox\documentation\spring\web\WebMvcRequestHandler.class
com\junmp\junmpProcess\common\CommonConstants.class
com\junmp\junmpProcess\controller\WorkspaceProcessController$13.class
com\junmp\junmpProcess\dto\json\LogoInfo.class
com\junmp\junmpProcess\vo\TemplateGroupVo$Template$TemplateBuilder.class
com\junmp\junmpProcess\dto\json\UserInfo.class
com\junmp\junmpProcess\utils\DateUtils$6.class
com\junmp\junmpProcess\vo\TemplateGroupVo.class
com\junmp\junmpProcess\dto\json\flowJson\Inout.class
com\junmp\junmpProcess\listener\CounterSignListener$3.class
com\junmp\junmpProcess\entity\TemplateGroup.class
com\junmp\junmpProcess\config\IdWorkerConfig.class
com\junmp\junmpProcess\service\Bussiness\impl\WorkProcessServiceImpl$10.class
......@@ -67,12 +59,10 @@ com\junmp\junmpProcess\vo\MultiVO.class
com\junmp\junmpProcess\service\Repository\impl\UserServiceImpl.class
com\junmp\junmpProcess\dto\json\flowJson\FlowNode.class
com\junmp\junmpProcess\utils\DateUtils$5.class
com\junmp\junmpProcess\controller\WorkspaceProcessController$14.class
com\junmp\junmpProcess\service\Bussiness\impl\WorkProcessServiceImpl$7.class
com\junmp\junmpProcess\entity\FormGroups.class
com\junmp\junmpProcess\listener\ProcessListener.class
com\junmp\junmpProcess\dto\json\FormItem.class
com\junmp\junmpProcess\controller\WorkspaceProcessController$6.class
com\junmp\junmpProcess\dto\FlowDTO.class
com\junmp\junmpProcess\dto\json\flowJson\FlowApproverGroups.class
com\junmp\junmpProcess\dto\json\GroupsInfo.class
......@@ -89,7 +79,6 @@ com\junmp\junmpProcess\service\Bussiness\OrgUserAndDeptService.class
com\junmp\junmpProcess\utils\DateUtils$1.class
com\junmp\junmpProcess\entity\Departments.class
com\junmp\junmpProcess\utils\DateUtils$7.class
com\junmp\junmpProcess\controller\WorkspaceProcessController$11.class
com\junmp\junmpProcess\service\Bussiness\impl\WorkProcessServiceImpl$6.class
com\junmp\junmpProcess\service\Bussiness\impl\WorkProcessServiceImpl$9.class
com\junmp\junmpProcess\service\Repository\FormGroupService.class
......@@ -102,20 +91,15 @@ com\junmp\junmpProcess\vo\CommentVO.class
com\junmp\junmpProcess\utils\DateUtils.class
com\junmp\junmpProcess\config\ActivitiConfig.class
com\junmp\junmpProcess\controller\OrgUserAndDeptController.class
com\junmp\junmpProcess\controller\WorkspaceProcessController$5.class
com\junmp\junmpProcess\mapper\ProcessTemplatesMapper.class
com\junmp\junmpProcess\vo\AttachmentVO.class
com\junmp\junmpProcess\vo\ProcessVO.class
com\junmp\junmpProcess\common\Result.class
com\junmp\junmpProcess\vo\OrgTreeVo$OrgTreeVoBuilder.class
com\junmp\junmpProcess\controller\WorkspaceProcessController$8.class
com\junmp\junmpProcess\dto\TaskDTO.class
com\junmp\junmpProcess\utils\BpmnModelUtils$Type.class
com\junmp\junmpProcess\controller\WorkspaceProcessController$10.class
com\junmp\junmpProcess\dto\json\flowJson\FlowChildNode.class
com\junmp\junmpProcess\controller\WorkspaceProcessController$2.class
com\junmp\junmpProcess\entity\ProcessTemplates.class
com\junmp\junmpProcess\controller\WorkspaceProcessController$9.class
com\junmp\junmpProcess\dto\json\SettingsInfo.class
com\junmp\junmpProcess\utils\DateUtils$2.class
com\junmp\junmpProcess\service\Repository\impl\ProcessTemplateServiceImpl.class
......@@ -126,7 +110,6 @@ com\junmp\junmpProcess\service\Bussiness\impl\OrgUserAndDeptServiceImpl.class
com\junmp\junmpProcess\service\Repository\UserService.class
com\junmp\junmpProcess\listener\CounterSignListener$2.class
com\junmp\junmpProcess\service\Bussiness\impl\WorkProcessServiceImpl$4.class
com\junmp\junmpProcess\controller\WorkspaceProcessController$3.class
com\junmp\junmpProcess\dto\json\HttpInfo.class
com\junmp\junmpProcess\vo\HistoryProcessInstanceVO.class
com\junmp\junmpProcess\common\WorkFlowConstants.class
......
......@@ -99,11 +99,11 @@
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.slf4j</groupId>-->
<!-- <artifactId>log4j-over-slf4j</artifactId>-->
<!-- <version>${slf4j.version}</version>-->
<!-- </dependency>-->
<dependency>
<groupId>mysql</groupId>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论