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 重庆天知软件技术有限公司 版权所有
|