j-roadflow-2.0.7更新日志

1、修改了流程任务抄送后要判断整个流程是否完成。

    修改文件:src/main/java/cn/tzsoft/roadflow/service/FlowTaskService.java

    增加了两个方法:

    image.png

     /**
     * 判断一组流程实例是否全部都完成(如果全部完成要转移到已完成表)
     *
     * @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

    image.png

    //判断整个流程是否完成,以及获取要转移到已完成的组id(如果没有获取到要转移的组id,则表示流程未完成)。
    resultModel.setTransferGroupIds(flowTaskService.getTransferGroupIds(currentTaskModel, flowTaskService.getGroupList(currentTaskModel.getGroupId())));
    resultModel.setFlowAllCompleted(resultModel.getTransferGroupIds().size() > 0);

2、修改了获取移动端表单问题。

    修改文件:src/roadflow/service/FlowService.java

    image.png

3、修改了表单设计附件控件宽度设置无效的问题。

    修改文件:src/web/roadui/src/roadui-pages/form/plugins/files.vue

    image.png

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

    image.png

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

    image.png

4、修改了组织架构工作组指定范围时无法加载工作组人员的问题。

    修改文件:src/main/java/cn/tzsoft/roadflow/service/WorkgroupService.java

    image.png

    修改文件:src/main/java/cn/tzsoft/roadflow/service/UserService.java

    增加方法:

    image.png

 /**
 * 判断一个组织架构字符串里是否包含人员
 * @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

    image.png

5、修改了组织架构选择控件只显示工作组时没有初始化值标题的问题。

    修改文件:src/web/roadui/src/roadui-components/a-select-org.vue

    image.png

    image.png

6、修改了流程安装时是否默认发送到退回步骤默认为0。

    修改文件:src/main/java/cn/tzsoft/roadflow/service/FlowService.java

    image.png

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