1、修改了流程任务抄送后要判断整个流程是否完成。
修改文件:src/main/java/cn/tzsoft/roadflow/service/FlowTaskService.java
增加了两个方法:

/**
* 判断一组流程实例是否全部都完成(如果全部完成要转移到已完成表)
*
* @param currentTaskModel 当前任务实体(判断除当前任务外的其他任务是否都完成)
* @param groupTasks 实例组任务
* @return true:全部完成 false:未完成
*/
public boolean taskIsAllCompleted(FlowTaskModel currentTaskModel, List<FlowTaskModel> groupTasks) {
boolean flowIsAllCompleted = true;
//如果没有传groupTasks则根据当前任务groupId去获取。
if (groupTasks == null || groupTasks.size() == 0) {
groupTasks = getGroupList(currentTaskModel.getGroupId());
}
//如果当前任务组中有除当前任务外的未完成任务,则直接返回false。
if (groupTasks.stream().anyMatch(s -> s.getStatus() < 1 && s.getId() != currentTaskModel.getId())) {
flowIsAllCompleted = false;
}
//如果流程有子流程还要判断子流程是否完成。
if (flowIsAllCompleted) {
List<FlowTaskModel> subflowTaskList = groupTasks.stream().filter(s -> StringUtils.isNotBlank(s.getSubflowGroupId())).collect(Collectors.toList());
for (FlowTaskModel subflowTaskModel : subflowTaskList) {
if (!flowIsAllCompleted) {
break;
}
for (String subflowGroupIdString : StringUtils.split(subflowTaskModel.getSubflowGroupId(), ",")) {
long subflowGroupId = StringUtils.toLong(subflowGroupIdString);
if (subflowGroupId > IdGenerator.MIN_VALUE && getIsAllCompleted(subflowGroupId)) {
flowIsAllCompleted = false;
break;
}
}
}
}
//如果是子流程任务,要判断主流程以及同级子流程是否都完成。
if (flowIsAllCompleted) {
//判断主流程是否完成
FlowTaskModel hasMainTaskModel = groupTasks.stream().filter(s -> s.getMainTaskId() > IdGenerator.MIN_VALUE).findFirst().orElse(null);
if (hasMainTaskModel != null) {
FlowTaskModel mainTaskModel = get(hasMainTaskModel.getMainTaskId());
if (mainTaskModel != null && getIsAllCompleted(mainTaskModel.getGroupId())) {
flowIsAllCompleted = false;
}
if (flowIsAllCompleted) {
//判断子流程同级子流程任务是否完成
if (StringUtils.isNotBlank(mainTaskModel.getSubflowGroupId())) {
for (String subflowGroupIdString : StringUtils.split(mainTaskModel.getSubflowGroupId(), ",")) {
long subflowGroupId = StringUtils.toLong(subflowGroupIdString);
if (subflowGroupId == currentTaskModel.getGroupId()) {
//当前实例组不判断
continue;
}
if (subflowGroupId > IdGenerator.MIN_VALUE && getIsAllCompleted(subflowGroupId)) {
flowIsAllCompleted = false;
break;
}
}
}
}
}
}
return flowIsAllCompleted;
}
/**
* 得到流程实例完成进要转移到已完成表的组id列表
*
* @param currentTaskModel 当前任务
* @param groupTasks 当前任务实例组
* @return List<Long>,如果返回size==0表示实例组没有完成。
*/
public List<Long> getTransferGroupIds(FlowTaskModel currentTaskModel, List<FlowTaskModel> groupTasks) {
List<Long> transferGroupIds = new ArrayList<>();//记录要转移到已完成表的组id。
//如果没有传groupTasks则根据当前任务groupId去获取。
if (groupTasks == null || groupTasks.size() == 0) {
groupTasks = getGroupList(currentTaskModel.getGroupId());
}
//如果流程实例组任务没有完成,则直接返回。
if (!taskIsAllCompleted(currentTaskModel, groupTasks)) {
return transferGroupIds;
}
transferGroupIds.add(currentTaskModel.getGroupId());
//获取子流程组id
List<FlowTaskModel> subflowTaskList = groupTasks.stream().filter(s -> StringUtils.isNotBlank(s.getSubflowGroupId())).collect(Collectors.toList());
for (FlowTaskModel subflowTaskModel : subflowTaskList) {
for (String subflowGroupIdString : StringUtils.split(subflowTaskModel.getSubflowGroupId(), ",")) {
long subflowGroupId = StringUtils.toLong(subflowGroupIdString);
if (subflowGroupId > IdGenerator.MIN_VALUE) {
transferGroupIds.add(subflowGroupId);
}
}
}
//如果是子流程,要获取主流程对应的组id
FlowTaskModel hasMainTaskModel = groupTasks.stream().filter(s -> s.getMainTaskId() > IdGenerator.MIN_VALUE).findFirst().orElse(null);
if (hasMainTaskModel != null) {
FlowTaskModel mainTaskModel = get(hasMainTaskModel.getMainTaskId());
if (mainTaskModel != null) {
transferGroupIds.add(mainTaskModel.getGroupId());
}
}
return transferGroupIds;
}修改文件:src/main/java/cn/tzsoft/roadflow/service/FlowRunService.java

//判断整个流程是否完成,以及获取要转移到已完成的组id(如果没有获取到要转移的组id,则表示流程未完成)。 resultModel.setTransferGroupIds(flowTaskService.getTransferGroupIds(currentTaskModel, flowTaskService.getGroupList(currentTaskModel.getGroupId()))); resultModel.setFlowAllCompleted(resultModel.getTransferGroupIds().size() > 0);
2、修改了获取移动端表单问题。
修改文件:src/roadflow/service/FlowService.java

3、修改了表单设计附件控件宽度设置无效的问题。
修改文件:src/web/roadui/src/roadui-pages/form/plugins/files.vue

修改文件:src/web/roadui/public/roadui-assets/ckeditor/plugins/rf_files/plugin.js

修改文件:src/web/roadui/src/roadui-pages/form/form-design.js

4、修改了组织架构工作组指定范围时无法加载工作组人员的问题。
修改文件:src/main/java/cn/tzsoft/roadflow/service/WorkgroupService.java

修改文件:src/main/java/cn/tzsoft/roadflow/service/UserService.java
增加方法:

/**
* 判断一个组织架构字符串里是否包含人员
* @param organizeIdString 组织架构字符串(组织id,u_人员id,r_兼任人员id,w_工作组id)
* @return true:包含 false:不包含
*/
public boolean hasUser(String organizeIdString){
if(StringUtils.isBlank(organizeIdString)){
return false;
}
String[] idArray = StringUtils.split(organizeIdString, ',');
for(String id : idArray){
if(StringUtils.isBlank(id)){
continue;
}
//如果是组织架构id
if(StringUtils.isLong(id) && getUsersByOrganizeId(StringUtils.toLong(id)).size() > 0){
return true;
}
//如果是用户id
if(StringUtils.startsWith(id, OrganizeService.ID_PREFIX_USER) && get(StringUtils.toLong(StringUtils.trimStart(id, OrganizeService.ID_PREFIX_USER))) != null){
return true;
}
//如果是用户与组织关系id
if(StringUtils.startsWith(id, OrganizeService.ID_PREFIX_ORGANIZE_USER)){
OrganizeUserModel organizeUserModel = organizeUserService.get(StringUtils.toLong(StringUtils.trimStart(id, OrganizeService.ID_PREFIX_ORGANIZE_USER)));
if(organizeUserModel != null && get(organizeUserModel.getUserId()) != null){
return true;
}
}
//如果是工作组id
if(StringUtils.startsWith(id, OrganizeService.ID_PREFIX_WORKGROUP)){
WorkgroupModel workgroupModel = workgroupService.get(StringUtils.trimStart(id, OrganizeService.ID_PREFIX_WORKGROUP));
return hasUser(workgroupModel.getMembers());
}
}
return false;
}修改文件:src/web/roadui/src/roadui-components/a-select-org.vue

5、修改了组织架构选择控件只显示工作组时没有初始化值标题的问题。
修改文件:src/web/roadui/src/roadui-components/a-select-org.vue


6、修改了流程安装时是否默认发送到退回步骤默认为0。
修改文件:src/main/java/cn/tzsoft/roadflow/service/FlowService.java

|
联系QQ:493501010电话:136 0832 5512(微信同号)邮箱:road@roadflow.net
Copyright 2014 - 2025 重庆天知软件技术有限公司 版权所有
|